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 |