| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/core/quic_protocol.h" | 5 #include "net/quic/core/quic_protocol.h" |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/core/quic_flags.h" | 10 #include "net/quic/core/quic_flags.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 | 75 |
| 76 // TODO(rtenneti): Enable checking of Log(ERROR) messages. | 76 // TODO(rtenneti): Enable checking of Log(ERROR) messages. |
| 77 #if 0 | 77 #if 0 |
| 78 // Any logs would indicate an unsupported version which we don't expect. | 78 // Any logs would indicate an unsupported version which we don't expect. |
| 79 ScopedMockLog log(kDoNotCaptureLogsYet); | 79 ScopedMockLog log(kDoNotCaptureLogsYet); |
| 80 EXPECT_CALL(log, Log(_, _, _)).Times(0); | 80 EXPECT_CALL(log, Log(_, _, _)).Times(0); |
| 81 log.StartCapturingLogs(); | 81 log.StartCapturingLogs(); |
| 82 #endif | 82 #endif |
| 83 | 83 |
| 84 // Explicitly test a specific version. | 84 // Explicitly test a specific version. |
| 85 EXPECT_EQ(MakeQuicTag('Q', '0', '3', '0'), | 85 EXPECT_EQ(MakeQuicTag('Q', '0', '3', '2'), |
| 86 QuicVersionToQuicTag(QUIC_VERSION_30)); | 86 QuicVersionToQuicTag(QUIC_VERSION_32)); |
| 87 | 87 |
| 88 // Loop over all supported versions and make sure that we never hit the | 88 // Loop over all supported versions and make sure that we never hit the |
| 89 // default case (i.e. all supported versions should be successfully converted | 89 // default case (i.e. all supported versions should be successfully converted |
| 90 // to valid QuicTags). | 90 // to valid QuicTags). |
| 91 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 91 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
| 92 QuicVersion version = kSupportedQuicVersions[i]; | 92 QuicVersion version = kSupportedQuicVersions[i]; |
| 93 EXPECT_LT(0u, QuicVersionToQuicTag(version)); | 93 EXPECT_LT(0u, QuicVersionToQuicTag(version)); |
| 94 } | 94 } |
| 95 } | 95 } |
| 96 | 96 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 115 | 115 |
| 116 // TODO(rtenneti): Enable checking of Log(ERROR) messages. | 116 // TODO(rtenneti): Enable checking of Log(ERROR) messages. |
| 117 #if 0 | 117 #if 0 |
| 118 // Any logs would indicate an unsupported version which we don't expect. | 118 // Any logs would indicate an unsupported version which we don't expect. |
| 119 ScopedMockLog log(kDoNotCaptureLogsYet); | 119 ScopedMockLog log(kDoNotCaptureLogsYet); |
| 120 EXPECT_CALL(log, Log(_, _, _)).Times(0); | 120 EXPECT_CALL(log, Log(_, _, _)).Times(0); |
| 121 log.StartCapturingLogs(); | 121 log.StartCapturingLogs(); |
| 122 #endif | 122 #endif |
| 123 | 123 |
| 124 // Explicitly test specific versions. | 124 // Explicitly test specific versions. |
| 125 EXPECT_EQ(QUIC_VERSION_30, | 125 EXPECT_EQ(QUIC_VERSION_32, |
| 126 QuicTagToQuicVersion(MakeQuicTag('Q', '0', '3', '0'))); | 126 QuicTagToQuicVersion(MakeQuicTag('Q', '0', '3', '2'))); |
| 127 | 127 |
| 128 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 128 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
| 129 QuicVersion version = kSupportedQuicVersions[i]; | 129 QuicVersion version = kSupportedQuicVersions[i]; |
| 130 | 130 |
| 131 // Get the tag from the version (we can loop over QuicVersions easily). | 131 // Get the tag from the version (we can loop over QuicVersions easily). |
| 132 QuicTag tag = QuicVersionToQuicTag(version); | 132 QuicTag tag = QuicVersionToQuicTag(version); |
| 133 EXPECT_LT(0u, tag); | 133 EXPECT_LT(0u, tag); |
| 134 | 134 |
| 135 // Now try converting back. | 135 // Now try converting back. |
| 136 QuicVersion tag_to_quic_version = QuicTagToQuicVersion(tag); | 136 QuicVersion tag_to_quic_version = QuicTagToQuicVersion(tag); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 149 .Times(1); | 149 .Times(1); |
| 150 #endif | 150 #endif |
| 151 log.StartCapturingLogs(); | 151 log.StartCapturingLogs(); |
| 152 #endif | 152 #endif |
| 153 | 153 |
| 154 EXPECT_EQ(QUIC_VERSION_UNSUPPORTED, | 154 EXPECT_EQ(QUIC_VERSION_UNSUPPORTED, |
| 155 QuicTagToQuicVersion(MakeQuicTag('F', 'A', 'K', 'E'))); | 155 QuicTagToQuicVersion(MakeQuicTag('F', 'A', 'K', 'E'))); |
| 156 } | 156 } |
| 157 | 157 |
| 158 TEST(QuicProtocolTest, QuicVersionToString) { | 158 TEST(QuicProtocolTest, QuicVersionToString) { |
| 159 EXPECT_EQ("QUIC_VERSION_30", QuicVersionToString(QUIC_VERSION_30)); | 159 EXPECT_EQ("QUIC_VERSION_32", QuicVersionToString(QUIC_VERSION_32)); |
| 160 EXPECT_EQ("QUIC_VERSION_UNSUPPORTED", | 160 EXPECT_EQ("QUIC_VERSION_UNSUPPORTED", |
| 161 QuicVersionToString(QUIC_VERSION_UNSUPPORTED)); | 161 QuicVersionToString(QUIC_VERSION_UNSUPPORTED)); |
| 162 | 162 |
| 163 QuicVersion single_version[] = {QUIC_VERSION_30}; | 163 QuicVersion single_version[] = {QUIC_VERSION_32}; |
| 164 QuicVersionVector versions_vector; | 164 QuicVersionVector versions_vector; |
| 165 for (size_t i = 0; i < arraysize(single_version); ++i) { | 165 for (size_t i = 0; i < arraysize(single_version); ++i) { |
| 166 versions_vector.push_back(single_version[i]); | 166 versions_vector.push_back(single_version[i]); |
| 167 } | 167 } |
| 168 EXPECT_EQ("QUIC_VERSION_30", QuicVersionVectorToString(versions_vector)); | 168 EXPECT_EQ("QUIC_VERSION_32", QuicVersionVectorToString(versions_vector)); |
| 169 | 169 |
| 170 QuicVersion multiple_versions[] = {QUIC_VERSION_UNSUPPORTED, QUIC_VERSION_30}; | 170 QuicVersion multiple_versions[] = {QUIC_VERSION_UNSUPPORTED, QUIC_VERSION_32}; |
| 171 versions_vector.clear(); | 171 versions_vector.clear(); |
| 172 for (size_t i = 0; i < arraysize(multiple_versions); ++i) { | 172 for (size_t i = 0; i < arraysize(multiple_versions); ++i) { |
| 173 versions_vector.push_back(multiple_versions[i]); | 173 versions_vector.push_back(multiple_versions[i]); |
| 174 } | 174 } |
| 175 EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_30", | 175 EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_32", |
| 176 QuicVersionVectorToString(versions_vector)); | 176 QuicVersionVectorToString(versions_vector)); |
| 177 | 177 |
| 178 // Make sure that all supported versions are present in QuicVersionToString. | 178 // Make sure that all supported versions are present in QuicVersionToString. |
| 179 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 179 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
| 180 QuicVersion version = kSupportedQuicVersions[i]; | 180 QuicVersion version = kSupportedQuicVersions[i]; |
| 181 EXPECT_NE("QUIC_VERSION_UNSUPPORTED", QuicVersionToString(version)); | 181 EXPECT_NE("QUIC_VERSION_UNSUPPORTED", QuicVersionToString(version)); |
| 182 } | 182 } |
| 183 } | 183 } |
| 184 | 184 |
| 185 TEST(QuicProtocolTest, AckFrameToString) { | 185 TEST(QuicProtocolTest, AckFrameToString) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 TEST(QuicProtocolTest, PathCloseFrameToString) { | 279 TEST(QuicProtocolTest, PathCloseFrameToString) { |
| 280 QuicPathCloseFrame frame; | 280 QuicPathCloseFrame frame; |
| 281 frame.path_id = 1; | 281 frame.path_id = 1; |
| 282 std::ostringstream stream; | 282 std::ostringstream stream; |
| 283 stream << frame; | 283 stream << frame; |
| 284 EXPECT_EQ("{ path_id: 1 }\n", stream.str()); | 284 EXPECT_EQ("{ path_id: 1 }\n", stream.str()); |
| 285 } | 285 } |
| 286 | 286 |
| 287 TEST(QuicProtocolTest, FilterSupportedVersions) { | 287 TEST(QuicProtocolTest, FilterSupportedVersions) { |
| 288 QuicFlagSaver flags; | 288 QuicFlagSaver flags; |
| 289 QuicVersionVector all_versions = { | 289 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 290 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 290 QUIC_VERSION_34, QUIC_VERSION_35, |
| 291 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 291 QUIC_VERSION_36}; |
| 292 | 292 |
| 293 FLAGS_quic_disable_pre_32 = true; | |
| 294 FLAGS_quic_disable_pre_34 = true; | 293 FLAGS_quic_disable_pre_34 = true; |
| 295 FLAGS_quic_enable_version_35 = false; | 294 FLAGS_quic_enable_version_35 = false; |
| 296 FLAGS_quic_enable_version_36_v2 = false; | 295 FLAGS_quic_enable_version_36_v2 = false; |
| 297 | 296 |
| 298 QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions); | 297 QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions); |
| 299 ASSERT_EQ(1u, filtered_versions.size()); | 298 ASSERT_EQ(1u, filtered_versions.size()); |
| 300 EXPECT_EQ(QUIC_VERSION_34, filtered_versions[0]); | 299 EXPECT_EQ(QUIC_VERSION_34, filtered_versions[0]); |
| 301 } | 300 } |
| 302 | 301 |
| 303 TEST(QuicProtocolTest, FilterSupportedVersionsAllVersions) { | 302 TEST(QuicProtocolTest, FilterSupportedVersionsAllVersions) { |
| 304 QuicFlagSaver flags; | 303 QuicFlagSaver flags; |
| 305 QuicVersionVector all_versions = { | 304 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 306 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 305 QUIC_VERSION_34, QUIC_VERSION_35, |
| 307 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 306 QUIC_VERSION_36}; |
| 308 | 307 |
| 309 FLAGS_quic_disable_pre_32 = false; | |
| 310 FLAGS_quic_disable_pre_34 = false; | 308 FLAGS_quic_disable_pre_34 = false; |
| 311 FLAGS_quic_enable_version_35 = true; | 309 FLAGS_quic_enable_version_35 = true; |
| 312 FLAGS_quic_enable_version_36_v2 = true; | 310 FLAGS_quic_enable_version_36_v2 = true; |
| 313 | 311 |
| 314 QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions); | 312 QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions); |
| 315 ASSERT_EQ(all_versions, filtered_versions); | 313 ASSERT_EQ(all_versions, filtered_versions); |
| 316 } | 314 } |
| 317 | 315 |
| 318 TEST(QuicProtocolTest, FilterSupportedVersionsNo36) { | 316 TEST(QuicProtocolTest, FilterSupportedVersionsNo36) { |
| 319 QuicFlagSaver flags; | 317 QuicFlagSaver flags; |
| 320 QuicVersionVector all_versions = { | 318 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 321 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 319 QUIC_VERSION_34, QUIC_VERSION_35, |
| 322 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 320 QUIC_VERSION_36}; |
| 323 | 321 |
| 324 FLAGS_quic_disable_pre_32 = false; | |
| 325 FLAGS_quic_disable_pre_34 = false; | 322 FLAGS_quic_disable_pre_34 = false; |
| 326 FLAGS_quic_enable_version_35 = true; | 323 FLAGS_quic_enable_version_35 = true; |
| 327 FLAGS_quic_enable_version_36_v2 = false; | 324 FLAGS_quic_enable_version_36_v2 = false; |
| 328 | 325 |
| 329 all_versions.pop_back(); // Remove 36 | 326 all_versions.pop_back(); // Remove 36 |
| 330 | 327 |
| 331 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); | 328 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); |
| 332 } | 329 } |
| 333 | 330 |
| 334 TEST(QuicProtocolTest, FilterSupportedVersionsNo35) { | 331 TEST(QuicProtocolTest, FilterSupportedVersionsNo35) { |
| 335 QuicFlagSaver flags; | 332 QuicFlagSaver flags; |
| 336 QuicVersionVector all_versions = { | 333 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 337 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 334 QUIC_VERSION_34, QUIC_VERSION_35, |
| 338 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 335 QUIC_VERSION_36}; |
| 339 | 336 |
| 340 FLAGS_quic_disable_pre_32 = false; | |
| 341 FLAGS_quic_disable_pre_34 = false; | 337 FLAGS_quic_disable_pre_34 = false; |
| 342 FLAGS_quic_enable_version_35 = true; | 338 FLAGS_quic_enable_version_35 = true; |
| 343 FLAGS_quic_enable_version_36_v2 = true; | 339 FLAGS_quic_enable_version_36_v2 = true; |
| 344 | 340 |
| 345 all_versions.pop_back(); // Remove 36 | 341 all_versions.pop_back(); // Remove 36 |
| 346 all_versions.pop_back(); // Remove 35 | 342 all_versions.pop_back(); // Remove 35 |
| 347 | 343 |
| 348 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); | 344 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); |
| 349 } | 345 } |
| 350 | 346 |
| 351 TEST(QuicProtocolTest, FilterSupportedVersionsNoPre32) { | |
| 352 QuicFlagSaver flags; | |
| 353 QuicVersionVector all_versions = { | |
| 354 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | |
| 355 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | |
| 356 | |
| 357 FLAGS_quic_disable_pre_32 = true; | |
| 358 FLAGS_quic_disable_pre_34 = false; | |
| 359 FLAGS_quic_enable_version_35 = true; | |
| 360 FLAGS_quic_enable_version_36_v2 = true; | |
| 361 | |
| 362 all_versions.erase(all_versions.begin()); // Remove 30 | |
| 363 all_versions.erase(all_versions.begin()); // Remove 31 | |
| 364 | |
| 365 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); | |
| 366 } | |
| 367 | |
| 368 TEST(QuicProtocolTest, FilterSupportedVersionsNoPre34) { | 347 TEST(QuicProtocolTest, FilterSupportedVersionsNoPre34) { |
| 369 QuicFlagSaver flags; | 348 QuicFlagSaver flags; |
| 370 QuicVersionVector all_versions = { | 349 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 371 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 350 QUIC_VERSION_34, QUIC_VERSION_35, |
| 372 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 351 QUIC_VERSION_36}; |
| 373 | 352 |
| 374 FLAGS_quic_disable_pre_32 = false; | |
| 375 FLAGS_quic_disable_pre_34 = true; | 353 FLAGS_quic_disable_pre_34 = true; |
| 376 FLAGS_quic_enable_version_35 = true; | 354 FLAGS_quic_enable_version_35 = true; |
| 377 FLAGS_quic_enable_version_36_v2 = true; | 355 FLAGS_quic_enable_version_36_v2 = true; |
| 378 | 356 |
| 379 all_versions.erase(all_versions.begin()); // Remove 30 | |
| 380 all_versions.erase(all_versions.begin()); // Remove 31 | |
| 381 all_versions.erase(all_versions.begin()); // Remove 32 | 357 all_versions.erase(all_versions.begin()); // Remove 32 |
| 382 all_versions.erase(all_versions.begin()); // Remove 33 | 358 all_versions.erase(all_versions.begin()); // Remove 33 |
| 383 | 359 |
| 384 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); | 360 ASSERT_EQ(all_versions, FilterSupportedVersions(all_versions)); |
| 385 } | 361 } |
| 386 | 362 |
| 387 TEST(QuicProtocolTest, QuicVersionManager) { | 363 TEST(QuicProtocolTest, QuicVersionManager) { |
| 388 QuicFlagSaver flags; | 364 QuicFlagSaver flags; |
| 389 FLAGS_quic_enable_version_35 = false; | 365 FLAGS_quic_enable_version_35 = false; |
| 390 FLAGS_quic_enable_version_36_v2 = false; | 366 FLAGS_quic_enable_version_36_v2 = false; |
| 391 QuicVersionManager manager(AllSupportedVersions()); | 367 QuicVersionManager manager(AllSupportedVersions()); |
| 392 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), | 368 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), |
| 393 manager.GetSupportedVersions()); | 369 manager.GetSupportedVersions()); |
| 394 FLAGS_quic_enable_version_35 = true; | 370 FLAGS_quic_enable_version_35 = true; |
| 395 FLAGS_quic_enable_version_36_v2 = true; | 371 FLAGS_quic_enable_version_36_v2 = true; |
| 396 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), | 372 EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()), |
| 397 manager.GetSupportedVersions()); | 373 manager.GetSupportedVersions()); |
| 398 EXPECT_EQ(QUIC_VERSION_36, manager.GetSupportedVersions()[0]); | 374 EXPECT_EQ(QUIC_VERSION_36, manager.GetSupportedVersions()[0]); |
| 399 EXPECT_EQ(QUIC_VERSION_35, manager.GetSupportedVersions()[1]); | 375 EXPECT_EQ(QUIC_VERSION_35, manager.GetSupportedVersions()[1]); |
| 400 } | 376 } |
| 401 | 377 |
| 402 TEST(QuicProtocolTest, LookUpVersionByIndex) { | 378 TEST(QuicProtocolTest, LookUpVersionByIndex) { |
| 403 QuicVersionVector all_versions = { | 379 QuicVersionVector all_versions = {QUIC_VERSION_32, QUIC_VERSION_33, |
| 404 QUIC_VERSION_30, QUIC_VERSION_31, QUIC_VERSION_32, QUIC_VERSION_33, | 380 QUIC_VERSION_34, QUIC_VERSION_35, |
| 405 QUIC_VERSION_34, QUIC_VERSION_35, QUIC_VERSION_36}; | 381 QUIC_VERSION_36}; |
| 406 int version_count = all_versions.size(); | 382 int version_count = all_versions.size(); |
| 407 for (int i = -5; i <= version_count + 1; ++i) { | 383 for (int i = -5; i <= version_count + 1; ++i) { |
| 408 if (i >= 0 && i < version_count) { | 384 if (i >= 0 && i < version_count) { |
| 409 EXPECT_EQ(all_versions[i], VersionOfIndex(all_versions, i)[0]); | 385 EXPECT_EQ(all_versions[i], VersionOfIndex(all_versions, i)[0]); |
| 410 } else { | 386 } else { |
| 411 EXPECT_EQ(QUIC_VERSION_UNSUPPORTED, VersionOfIndex(all_versions, i)[0]); | 387 EXPECT_EQ(QUIC_VERSION_UNSUPPORTED, VersionOfIndex(all_versions, i)[0]); |
| 412 } | 388 } |
| 413 } | 389 } |
| 414 } | 390 } |
| 415 | 391 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 EXPECT_EQ(2u, queue.NumIntervals()); | 520 EXPECT_EQ(2u, queue.NumIntervals()); |
| 545 EXPECT_TRUE(queue.Contains(10)); | 521 EXPECT_TRUE(queue.Contains(10)); |
| 546 EXPECT_TRUE(queue.Contains(11)); | 522 EXPECT_TRUE(queue.Contains(11)); |
| 547 EXPECT_TRUE(queue.Contains(20)); | 523 EXPECT_TRUE(queue.Contains(20)); |
| 548 EXPECT_TRUE(queue.Contains(21)); | 524 EXPECT_TRUE(queue.Contains(21)); |
| 549 } | 525 } |
| 550 | 526 |
| 551 } // namespace | 527 } // namespace |
| 552 } // namespace test | 528 } // namespace test |
| 553 } // namespace net | 529 } // namespace net |
| OLD | NEW |