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 <algorithm> | 5 #include <algorithm> |
6 #include <map> | 6 #include <map> |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 | 214 |
215 virtual void OnVersionNegotiationPacket( | 215 virtual void OnVersionNegotiationPacket( |
216 const QuicVersionNegotiationPacket& packet) OVERRIDE { | 216 const QuicVersionNegotiationPacket& packet) OVERRIDE { |
217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
218 } | 218 } |
219 | 219 |
220 virtual void OnRevivedPacket() OVERRIDE { | 220 virtual void OnRevivedPacket() OVERRIDE { |
221 revived_packets_++; | 221 revived_packets_++; |
222 } | 222 } |
223 | 223 |
224 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { | 224 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE { |
225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; | 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; |
226 version_mismatch_++; | 226 version_mismatch_++; |
227 return true; | 227 return true; |
228 } | 228 } |
229 | 229 |
230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { | 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { |
231 packet_count_++; | 231 packet_count_++; |
232 header_.reset(new QuicPacketHeader(header)); | 232 header_.reset(new QuicPacketHeader(header)); |
233 return accept_packet_; | 233 return accept_packet_; |
234 } | 234 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 vector<QuicStreamFrame*> stream_frames_; | 298 vector<QuicStreamFrame*> stream_frames_; |
299 vector<QuicAckFrame*> ack_frames_; | 299 vector<QuicAckFrame*> ack_frames_; |
300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; | 300 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; |
301 vector<QuicFecData*> fec_data_; | 301 vector<QuicFecData*> fec_data_; |
302 string fec_protected_payload_; | 302 string fec_protected_payload_; |
303 QuicRstStreamFrame rst_stream_frame_; | 303 QuicRstStreamFrame rst_stream_frame_; |
304 QuicConnectionCloseFrame connection_close_frame_; | 304 QuicConnectionCloseFrame connection_close_frame_; |
305 QuicGoAwayFrame goaway_frame_; | 305 QuicGoAwayFrame goaway_frame_; |
306 }; | 306 }; |
307 | 307 |
308 class QuicFramerTest : public ::testing::Test { | 308 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { |
309 public: | 309 public: |
310 QuicFramerTest() | 310 QuicFramerTest() |
311 : encrypter_(new test::TestEncrypter()), | 311 : encrypter_(new test::TestEncrypter()), |
312 decrypter_(new test::TestDecrypter()), | 312 decrypter_(new test::TestDecrypter()), |
313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 313 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
314 framer_(kQuicVersion1, start_, true) { | 314 framer_(QuicVersionMax(), start_, true) { |
315 framer_.SetDecrypter(decrypter_); | 315 framer_.SetDecrypter(decrypter_); |
316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); | 316 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); |
317 framer_.set_visitor(&visitor_); | 317 framer_.set_visitor(&visitor_); |
318 framer_.set_entropy_calculator(&entropy_calculator_); | 318 framer_.set_entropy_calculator(&entropy_calculator_); |
| 319 |
| 320 QuicVersion version = GetParam(); |
| 321 framer_.set_version(version); |
319 } | 322 } |
320 | 323 |
321 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, | 324 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, |
322 QuicPacket* packet) { | 325 QuicPacket* packet) { |
323 if (sequence_number != encrypter_->sequence_number_) { | 326 if (sequence_number != encrypter_->sequence_number_) { |
324 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " | 327 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " |
325 << sequence_number << " actual: " | 328 << sequence_number << " actual: " |
326 << encrypter_->sequence_number_; | 329 << encrypter_->sequence_number_; |
327 return false; | 330 return false; |
328 } | 331 } |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 } | 411 } |
409 | 412 |
410 test::TestEncrypter* encrypter_; | 413 test::TestEncrypter* encrypter_; |
411 test::TestDecrypter* decrypter_; | 414 test::TestDecrypter* decrypter_; |
412 QuicTime start_; | 415 QuicTime start_; |
413 QuicFramer framer_; | 416 QuicFramer framer_; |
414 test::TestQuicVisitor visitor_; | 417 test::TestQuicVisitor visitor_; |
415 test::TestEntropyCalculator entropy_calculator_; | 418 test::TestEntropyCalculator entropy_calculator_; |
416 }; | 419 }; |
417 | 420 |
418 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { | 421 // Run all framer tests with QUIC version 6. |
| 422 INSTANTIATE_TEST_CASE_P(QuicFramerTests, |
| 423 QuicFramerTest, |
| 424 ::testing::Values(QUIC_VERSION_6)); |
| 425 |
| 426 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { |
419 // A few quick manual sanity checks | 427 // A few quick manual sanity checks |
420 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); | 428 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); |
421 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); | 429 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); |
422 CheckCalculatePacketSequenceNumber(kEpoch, kMask); | 430 CheckCalculatePacketSequenceNumber(kEpoch, kMask); |
423 | 431 |
424 // Cases where the last number was close to the start of the range | 432 // Cases where the last number was close to the start of the range |
425 for (uint64 last = 0; last < 10; last++) { | 433 for (uint64 last = 0; last < 10; last++) { |
426 // Small numbers should not wrap (even if they're out of order). | 434 // Small numbers should not wrap (even if they're out of order). |
427 for (uint64 j = 0; j < 10; j++) { | 435 for (uint64 j = 0; j < 10; j++) { |
428 CheckCalculatePacketSequenceNumber(j, last); | 436 CheckCalculatePacketSequenceNumber(j, last); |
429 } | 437 } |
430 | 438 |
431 // Large numbers should not wrap either (because we're near 0 already). | 439 // Large numbers should not wrap either (because we're near 0 already). |
432 for (uint64 j = 0; j < 10; j++) { | 440 for (uint64 j = 0; j < 10; j++) { |
433 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); | 441 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); |
434 } | 442 } |
435 } | 443 } |
436 } | 444 } |
437 | 445 |
438 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) { | 446 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochEnd) { |
439 // Cases where the last number was close to the end of the range | 447 // Cases where the last number was close to the end of the range |
440 for (uint64 i = 0; i < 10; i++) { | 448 for (uint64 i = 0; i < 10; i++) { |
441 QuicPacketSequenceNumber last = kEpoch - i; | 449 QuicPacketSequenceNumber last = kEpoch - i; |
442 | 450 |
443 // Small numbers should wrap. | 451 // Small numbers should wrap. |
444 for (uint64 j = 0; j < 10; j++) { | 452 for (uint64 j = 0; j < 10; j++) { |
445 CheckCalculatePacketSequenceNumber(kEpoch + j, last); | 453 CheckCalculatePacketSequenceNumber(kEpoch + j, last); |
446 } | 454 } |
447 | 455 |
448 // Large numbers should not (even if they're out of order). | 456 // Large numbers should not (even if they're out of order). |
449 for (uint64 j = 0; j < 10; j++) { | 457 for (uint64 j = 0; j < 10; j++) { |
450 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); | 458 CheckCalculatePacketSequenceNumber(kEpoch - 1 - j, last); |
451 } | 459 } |
452 } | 460 } |
453 } | 461 } |
454 | 462 |
455 // Next check where we're in a non-zero epoch to verify we handle | 463 // Next check where we're in a non-zero epoch to verify we handle |
456 // reverse wrapping, too. | 464 // reverse wrapping, too. |
457 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) { | 465 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearPrevEpoch) { |
458 const uint64 prev_epoch = 1 * kEpoch; | 466 const uint64 prev_epoch = 1 * kEpoch; |
459 const uint64 cur_epoch = 2 * kEpoch; | 467 const uint64 cur_epoch = 2 * kEpoch; |
460 // Cases where the last number was close to the start of the range | 468 // Cases where the last number was close to the start of the range |
461 for (uint64 i = 0; i < 10; i++) { | 469 for (uint64 i = 0; i < 10; i++) { |
462 uint64 last = cur_epoch + i; | 470 uint64 last = cur_epoch + i; |
463 // Small number should not wrap (even if they're out of order). | 471 // Small number should not wrap (even if they're out of order). |
464 for (uint64 j = 0; j < 10; j++) { | 472 for (uint64 j = 0; j < 10; j++) { |
465 CheckCalculatePacketSequenceNumber(cur_epoch + j, last); | 473 CheckCalculatePacketSequenceNumber(cur_epoch + j, last); |
466 } | 474 } |
467 | 475 |
468 // But large numbers should reverse wrap. | 476 // But large numbers should reverse wrap. |
469 for (uint64 j = 0; j < 10; j++) { | 477 for (uint64 j = 0; j < 10; j++) { |
470 uint64 num = kEpoch - 1 - j; | 478 uint64 num = kEpoch - 1 - j; |
471 CheckCalculatePacketSequenceNumber(prev_epoch + num, last); | 479 CheckCalculatePacketSequenceNumber(prev_epoch + num, last); |
472 } | 480 } |
473 } | 481 } |
474 } | 482 } |
475 | 483 |
476 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) { | 484 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextEpoch) { |
477 const uint64 cur_epoch = 2 * kEpoch; | 485 const uint64 cur_epoch = 2 * kEpoch; |
478 const uint64 next_epoch = 3 * kEpoch; | 486 const uint64 next_epoch = 3 * kEpoch; |
479 // Cases where the last number was close to the end of the range | 487 // Cases where the last number was close to the end of the range |
480 for (uint64 i = 0; i < 10; i++) { | 488 for (uint64 i = 0; i < 10; i++) { |
481 QuicPacketSequenceNumber last = next_epoch - 1 - i; | 489 QuicPacketSequenceNumber last = next_epoch - 1 - i; |
482 | 490 |
483 // Small numbers should wrap. | 491 // Small numbers should wrap. |
484 for (uint64 j = 0; j < 10; j++) { | 492 for (uint64 j = 0; j < 10; j++) { |
485 CheckCalculatePacketSequenceNumber(next_epoch + j, last); | 493 CheckCalculatePacketSequenceNumber(next_epoch + j, last); |
486 } | 494 } |
487 | 495 |
488 // but large numbers should not (even if they're out of order). | 496 // but large numbers should not (even if they're out of order). |
489 for (uint64 j = 0; j < 10; j++) { | 497 for (uint64 j = 0; j < 10; j++) { |
490 uint64 num = kEpoch - 1 - j; | 498 uint64 num = kEpoch - 1 - j; |
491 CheckCalculatePacketSequenceNumber(cur_epoch + num, last); | 499 CheckCalculatePacketSequenceNumber(cur_epoch + num, last); |
492 } | 500 } |
493 } | 501 } |
494 } | 502 } |
495 | 503 |
496 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { | 504 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { |
497 const uint64 max_number = numeric_limits<uint64>::max(); | 505 const uint64 max_number = numeric_limits<uint64>::max(); |
498 const uint64 max_epoch = max_number & ~kMask; | 506 const uint64 max_epoch = max_number & ~kMask; |
499 | 507 |
500 // Cases where the last number was close to the end of the range | 508 // Cases where the last number was close to the end of the range |
501 for (uint64 i = 0; i < 10; i++) { | 509 for (uint64 i = 0; i < 10; i++) { |
502 // Subtract 1, because the expected next sequence number is 1 more than the | 510 // Subtract 1, because the expected next sequence number is 1 more than the |
503 // last sequence number. | 511 // last sequence number. |
504 QuicPacketSequenceNumber last = max_number - i - 1; | 512 QuicPacketSequenceNumber last = max_number - i - 1; |
505 | 513 |
506 // Small numbers should not wrap, because they have nowhere to go. | 514 // Small numbers should not wrap, because they have nowhere to go. |
507 for (uint64 j = 0; j < 10; j++) { | 515 for (uint64 j = 0; j < 10; j++) { |
508 CheckCalculatePacketSequenceNumber(max_epoch + j, last); | 516 CheckCalculatePacketSequenceNumber(max_epoch + j, last); |
509 } | 517 } |
510 | 518 |
511 // Large numbers should not wrap either. | 519 // Large numbers should not wrap either. |
512 for (uint64 j = 0; j < 10; j++) { | 520 for (uint64 j = 0; j < 10; j++) { |
513 uint64 num = kEpoch - 1 - j; | 521 uint64 num = kEpoch - 1 - j; |
514 CheckCalculatePacketSequenceNumber(max_epoch + num, last); | 522 CheckCalculatePacketSequenceNumber(max_epoch + num, last); |
515 } | 523 } |
516 } | 524 } |
517 } | 525 } |
518 | 526 |
519 TEST_F(QuicFramerTest, EmptyPacket) { | 527 TEST_P(QuicFramerTest, EmptyPacket) { |
520 char packet[] = { 0x00 }; | 528 char packet[] = { 0x00 }; |
521 QuicEncryptedPacket encrypted(packet, 0, false); | 529 QuicEncryptedPacket encrypted(packet, 0, false); |
522 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 530 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
523 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 531 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
524 } | 532 } |
525 | 533 |
526 TEST_F(QuicFramerTest, LargePacket) { | 534 TEST_P(QuicFramerTest, LargePacket) { |
527 unsigned char packet[kMaxPacketSize + 1] = { | 535 unsigned char packet[kMaxPacketSize + 1] = { |
528 // public flags (8 byte guid) | 536 // public flags (8 byte guid) |
529 0x3C, | 537 0x3C, |
530 // guid | 538 // guid |
531 0x10, 0x32, 0x54, 0x76, | 539 0x10, 0x32, 0x54, 0x76, |
532 0x98, 0xBA, 0xDC, 0xFE, | 540 0x98, 0xBA, 0xDC, 0xFE, |
533 // packet sequence number | 541 // packet sequence number |
534 0xBC, 0x9A, 0x78, 0x56, | 542 0xBC, 0x9A, 0x78, 0x56, |
535 0x34, 0x12, | 543 0x34, 0x12, |
536 // private flags | 544 // private flags |
(...skipping 11 matching lines...) Expand all Loading... |
548 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 556 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
549 | 557 |
550 ASSERT_TRUE(visitor_.header_.get()); | 558 ASSERT_TRUE(visitor_.header_.get()); |
551 // Make sure we've parsed the packet header, so we can send an error. | 559 // Make sure we've parsed the packet header, so we can send an error. |
552 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 560 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
553 visitor_.header_->public_header.guid); | 561 visitor_.header_->public_header.guid); |
554 // Make sure the correct error is propagated. | 562 // Make sure the correct error is propagated. |
555 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 563 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
556 } | 564 } |
557 | 565 |
558 TEST_F(QuicFramerTest, PacketHeader) { | 566 TEST_P(QuicFramerTest, PacketHeader) { |
559 unsigned char packet[] = { | 567 unsigned char packet[] = { |
560 // public flags (8 byte guid) | 568 // public flags (8 byte guid) |
561 0x3C, | 569 0x3C, |
562 // guid | 570 // guid |
563 0x10, 0x32, 0x54, 0x76, | 571 0x10, 0x32, 0x54, 0x76, |
564 0x98, 0xBA, 0xDC, 0xFE, | 572 0x98, 0xBA, 0xDC, 0xFE, |
565 // packet sequence number | 573 // packet sequence number |
566 0xBC, 0x9A, 0x78, 0x56, | 574 0xBC, 0x9A, 0x78, 0x56, |
567 0x34, 0x12, | 575 0x34, 0x12, |
568 // private flags | 576 // private flags |
(...skipping 30 matching lines...) Expand all Loading... |
599 expected_error = "Unable to read sequence number."; | 607 expected_error = "Unable to read sequence number."; |
600 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 608 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
601 expected_error = "Unable to read private flags."; | 609 expected_error = "Unable to read private flags."; |
602 } else { | 610 } else { |
603 expected_error = "Unable to read first fec protected packet offset."; | 611 expected_error = "Unable to read first fec protected packet offset."; |
604 } | 612 } |
605 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 613 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
606 } | 614 } |
607 } | 615 } |
608 | 616 |
609 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { | 617 TEST_P(QuicFramerTest, PacketHeaderWith4ByteGuid) { |
610 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 618 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
611 GG_UINT64_C(0xFEDCBA9876543210)); | 619 GG_UINT64_C(0xFEDCBA9876543210)); |
612 | 620 |
613 unsigned char packet[] = { | 621 unsigned char packet[] = { |
614 // public flags (4 byte guid) | 622 // public flags (4 byte guid) |
615 0x38, | 623 0x38, |
616 // guid | 624 // guid |
617 0x10, 0x32, 0x54, 0x76, | 625 0x10, 0x32, 0x54, 0x76, |
618 // packet sequence number | 626 // packet sequence number |
619 0xBC, 0x9A, 0x78, 0x56, | 627 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 expected_error = "Unable to read sequence number."; | 662 expected_error = "Unable to read sequence number."; |
655 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { | 663 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { |
656 expected_error = "Unable to read private flags."; | 664 expected_error = "Unable to read private flags."; |
657 } else { | 665 } else { |
658 expected_error = "Unable to read first fec protected packet offset."; | 666 expected_error = "Unable to read first fec protected packet offset."; |
659 } | 667 } |
660 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 668 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
661 } | 669 } |
662 } | 670 } |
663 | 671 |
664 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { | 672 TEST_P(QuicFramerTest, PacketHeader1ByteGuid) { |
665 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 673 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
666 GG_UINT64_C(0xFEDCBA9876543210)); | 674 GG_UINT64_C(0xFEDCBA9876543210)); |
667 | 675 |
668 unsigned char packet[] = { | 676 unsigned char packet[] = { |
669 // public flags (1 byte guid) | 677 // public flags (1 byte guid) |
670 0x34, | 678 0x34, |
671 // guid | 679 // guid |
672 0x10, | 680 0x10, |
673 // packet sequence number | 681 // packet sequence number |
674 0xBC, 0x9A, 0x78, 0x56, | 682 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 expected_error = "Unable to read sequence number."; | 716 expected_error = "Unable to read sequence number."; |
709 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 717 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { |
710 expected_error = "Unable to read private flags."; | 718 expected_error = "Unable to read private flags."; |
711 } else { | 719 } else { |
712 expected_error = "Unable to read first fec protected packet offset."; | 720 expected_error = "Unable to read first fec protected packet offset."; |
713 } | 721 } |
714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 722 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
715 } | 723 } |
716 } | 724 } |
717 | 725 |
718 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { | 726 TEST_P(QuicFramerTest, PacketHeaderWith0ByteGuid) { |
719 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 727 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
720 GG_UINT64_C(0xFEDCBA9876543210)); | 728 GG_UINT64_C(0xFEDCBA9876543210)); |
721 | 729 |
722 unsigned char packet[] = { | 730 unsigned char packet[] = { |
723 // public flags (0 byte guid) | 731 // public flags (0 byte guid) |
724 0x30, | 732 0x30, |
725 // guid | 733 // guid |
726 // packet sequence number | 734 // packet sequence number |
727 0xBC, 0x9A, 0x78, 0x56, | 735 0xBC, 0x9A, 0x78, 0x56, |
728 0x34, 0x12, | 736 0x34, 0x12, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 expected_error = "Unable to read sequence number."; | 769 expected_error = "Unable to read sequence number."; |
762 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 770 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { |
763 expected_error = "Unable to read private flags."; | 771 expected_error = "Unable to read private flags."; |
764 } else { | 772 } else { |
765 expected_error = "Unable to read first fec protected packet offset."; | 773 expected_error = "Unable to read first fec protected packet offset."; |
766 } | 774 } |
767 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 775 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
768 } | 776 } |
769 } | 777 } |
770 | 778 |
771 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { | 779 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
| 780 // Set a specific version. |
| 781 framer_.set_version(QUIC_VERSION_6); |
| 782 |
772 unsigned char packet[] = { | 783 unsigned char packet[] = { |
773 // public flags (version) | 784 // public flags (version) |
774 0x3D, | 785 0x3D, |
775 // guid | 786 // guid |
776 0x10, 0x32, 0x54, 0x76, | 787 0x10, 0x32, 0x54, 0x76, |
777 0x98, 0xBA, 0xDC, 0xFE, | 788 0x98, 0xBA, 0xDC, 0xFE, |
778 // version tag | 789 // version tag |
779 'Q', '0', '0', '6', | 790 'Q', '0', '0', '6', |
780 // packet sequence number | 791 // packet sequence number |
781 0xBC, 0x9A, 0x78, 0x56, | 792 0xBC, 0x9A, 0x78, 0x56, |
782 0x34, 0x12, | 793 0x34, 0x12, |
783 // private flags | 794 // private flags |
784 0x00, | 795 0x00, |
785 }; | 796 }; |
786 | 797 |
787 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 798 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
788 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 799 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
789 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 800 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
790 ASSERT_TRUE(visitor_.header_.get()); | 801 ASSERT_TRUE(visitor_.header_.get()); |
791 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 802 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
792 visitor_.header_->public_header.guid); | 803 visitor_.header_->public_header.guid); |
793 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 804 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
794 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 805 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
795 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); | 806 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_->public_header.versions[0]); |
796 EXPECT_FALSE(visitor_.header_->fec_flag); | 807 EXPECT_FALSE(visitor_.header_->fec_flag); |
797 EXPECT_FALSE(visitor_.header_->entropy_flag); | 808 EXPECT_FALSE(visitor_.header_->entropy_flag); |
798 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 809 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
799 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 810 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
800 visitor_.header_->packet_sequence_number); | 811 visitor_.header_->packet_sequence_number); |
801 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 812 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
802 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 813 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
803 | 814 |
804 // Now test framing boundaries | 815 // Now test framing boundaries |
805 for (size_t i = 0; | 816 for (size_t i = 0; |
(...skipping 11 matching lines...) Expand all Loading... |
817 expected_error = "Unable to read sequence number."; | 828 expected_error = "Unable to read sequence number."; |
818 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 829 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
819 expected_error = "Unable to read private flags."; | 830 expected_error = "Unable to read private flags."; |
820 } else { | 831 } else { |
821 expected_error = "Unable to read first fec protected packet offset."; | 832 expected_error = "Unable to read first fec protected packet offset."; |
822 } | 833 } |
823 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 834 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
824 } | 835 } |
825 } | 836 } |
826 | 837 |
827 TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { | 838 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { |
828 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 839 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
829 GG_UINT64_C(0x123456789ABA)); | 840 GG_UINT64_C(0x123456789ABA)); |
830 | 841 |
831 unsigned char packet[] = { | 842 unsigned char packet[] = { |
832 // public flags (8 byte guid and 4 byte sequence number) | 843 // public flags (8 byte guid and 4 byte sequence number) |
833 0x2C, | 844 0x2C, |
834 // guid | 845 // guid |
835 0x10, 0x32, 0x54, 0x76, | 846 0x10, 0x32, 0x54, 0x76, |
836 0x98, 0xBA, 0xDC, 0xFE, | 847 0x98, 0xBA, 0xDC, 0xFE, |
837 // packet sequence number | 848 // packet sequence number |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 883 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
873 PACKET_4BYTE_SEQUENCE_NUMBER)) { | 884 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
874 expected_error = "Unable to read private flags."; | 885 expected_error = "Unable to read private flags."; |
875 } else { | 886 } else { |
876 expected_error = "Unable to read first fec protected packet offset."; | 887 expected_error = "Unable to read first fec protected packet offset."; |
877 } | 888 } |
878 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 889 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
879 } | 890 } |
880 } | 891 } |
881 | 892 |
882 TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { | 893 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { |
883 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 894 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
884 GG_UINT64_C(0x123456789ABA)); | 895 GG_UINT64_C(0x123456789ABA)); |
885 | 896 |
886 unsigned char packet[] = { | 897 unsigned char packet[] = { |
887 // public flags (8 byte guid and 2 byte sequence number) | 898 // public flags (8 byte guid and 2 byte sequence number) |
888 0x1C, | 899 0x1C, |
889 // guid | 900 // guid |
890 0x10, 0x32, 0x54, 0x76, | 901 0x10, 0x32, 0x54, 0x76, |
891 0x98, 0xBA, 0xDC, 0xFE, | 902 0x98, 0xBA, 0xDC, 0xFE, |
892 // packet sequence number | 903 // packet sequence number |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
927 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 938 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
928 PACKET_2BYTE_SEQUENCE_NUMBER)) { | 939 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
929 expected_error = "Unable to read private flags."; | 940 expected_error = "Unable to read private flags."; |
930 } else { | 941 } else { |
931 expected_error = "Unable to read first fec protected packet offset."; | 942 expected_error = "Unable to read first fec protected packet offset."; |
932 } | 943 } |
933 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 944 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
934 } | 945 } |
935 } | 946 } |
936 | 947 |
937 TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { | 948 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { |
938 QuicFramerPeer::SetLastSequenceNumber(&framer_, | 949 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
939 GG_UINT64_C(0x123456789ABA)); | 950 GG_UINT64_C(0x123456789ABA)); |
940 | 951 |
941 unsigned char packet[] = { | 952 unsigned char packet[] = { |
942 // public flags (8 byte guid and 1 byte sequence number) | 953 // public flags (8 byte guid and 1 byte sequence number) |
943 0x0C, | 954 0x0C, |
944 // guid | 955 // guid |
945 0x10, 0x32, 0x54, 0x76, | 956 0x10, 0x32, 0x54, 0x76, |
946 0x98, 0xBA, 0xDC, 0xFE, | 957 0x98, 0xBA, 0xDC, 0xFE, |
947 // packet sequence number | 958 // packet sequence number |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
982 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 993 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
983 PACKET_1BYTE_SEQUENCE_NUMBER)) { | 994 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
984 expected_error = "Unable to read private flags."; | 995 expected_error = "Unable to read private flags."; |
985 } else { | 996 } else { |
986 expected_error = "Unable to read first fec protected packet offset."; | 997 expected_error = "Unable to read first fec protected packet offset."; |
987 } | 998 } |
988 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 999 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
989 } | 1000 } |
990 } | 1001 } |
991 | 1002 |
992 TEST_F(QuicFramerTest, InvalidPublicFlag) { | 1003 TEST_P(QuicFramerTest, InvalidPublicFlag) { |
993 unsigned char packet[] = { | 1004 unsigned char packet[] = { |
994 // public flags | 1005 // public flags, unknown flag at bit 6 |
995 0x40, | 1006 0x40, |
996 // guid | 1007 // guid |
997 0x10, 0x32, 0x54, 0x76, | 1008 0x10, 0x32, 0x54, 0x76, |
998 0x98, 0xBA, 0xDC, 0xFE, | 1009 0x98, 0xBA, 0xDC, 0xFE, |
999 // packet sequence number | 1010 // packet sequence number |
1000 0xBC, 0x9A, 0x78, 0x56, | 1011 0xBC, 0x9A, 0x78, 0x56, |
1001 0x34, 0x12, | 1012 0x34, 0x12, |
1002 // private flags | 1013 // private flags |
1003 0x00, | 1014 0x00, |
1004 | 1015 |
(...skipping 14 matching lines...) Expand all Loading... |
1019 'h', 'e', 'l', 'l', | 1030 'h', 'e', 'l', 'l', |
1020 'o', ' ', 'w', 'o', | 1031 'o', ' ', 'w', 'o', |
1021 'r', 'l', 'd', '!', | 1032 'r', 'l', 'd', '!', |
1022 }; | 1033 }; |
1023 CheckProcessingFails(packet, | 1034 CheckProcessingFails(packet, |
1024 arraysize(packet), | 1035 arraysize(packet), |
1025 "Illegal public flags value.", | 1036 "Illegal public flags value.", |
1026 QUIC_INVALID_PACKET_HEADER); | 1037 QUIC_INVALID_PACKET_HEADER); |
1027 }; | 1038 }; |
1028 | 1039 |
1029 TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { | 1040 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { |
| 1041 // Set a specific version. |
| 1042 framer_.set_version(QUIC_VERSION_6); |
| 1043 |
1030 unsigned char packet[] = { | 1044 unsigned char packet[] = { |
1031 // public flags (8 byte guid and version flag and an unknown flag) | 1045 // public flags (8 byte guid and version flag and an unknown flag) |
1032 0x4D, | 1046 0x4D, |
1033 // guid | 1047 // guid |
1034 0x10, 0x32, 0x54, 0x76, | 1048 0x10, 0x32, 0x54, 0x76, |
1035 0x98, 0xBA, 0xDC, 0xFE, | 1049 0x98, 0xBA, 0xDC, 0xFE, |
1036 // version tag | 1050 // version tag |
1037 'Q', '0', '0', '6', | 1051 'Q', '0', '0', '6', |
1038 // packet sequence number | 1052 // packet sequence number |
1039 0xBC, 0x9A, 0x78, 0x56, | 1053 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 18 matching lines...) Expand all Loading... |
1058 'h', 'e', 'l', 'l', | 1072 'h', 'e', 'l', 'l', |
1059 'o', ' ', 'w', 'o', | 1073 'o', ' ', 'w', 'o', |
1060 'r', 'l', 'd', '!', | 1074 'r', 'l', 'd', '!', |
1061 }; | 1075 }; |
1062 CheckProcessingFails(packet, | 1076 CheckProcessingFails(packet, |
1063 arraysize(packet), | 1077 arraysize(packet), |
1064 "Illegal public flags value.", | 1078 "Illegal public flags value.", |
1065 QUIC_INVALID_PACKET_HEADER); | 1079 QUIC_INVALID_PACKET_HEADER); |
1066 }; | 1080 }; |
1067 | 1081 |
1068 TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { | 1082 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
1069 unsigned char packet[] = { | 1083 unsigned char packet[] = { |
1070 // public flags (8 byte guid, version flag and an unknown flag) | 1084 // public flags (8 byte guid, version flag and an unknown flag) |
1071 0x7D, | 1085 0x7D, |
1072 // guid | 1086 // guid |
1073 0x10, 0x32, 0x54, 0x76, | 1087 0x10, 0x32, 0x54, 0x76, |
1074 0x98, 0xBA, 0xDC, 0xFE, | 1088 0x98, 0xBA, 0xDC, 0xFE, |
1075 // version tag | 1089 // version tag |
1076 'Q', '0', '0', '0', | 1090 'Q', '0', '0', '0', |
1077 // packet sequence number | 1091 // packet sequence number |
1078 0xBC, 0x9A, 0x78, 0x56, | 1092 0xBC, 0x9A, 0x78, 0x56, |
1079 0x34, 0x12, | 1093 0x34, 0x12, |
1080 // private flags | 1094 // private flags |
1081 0x00, | 1095 0x00, |
1082 | 1096 |
1083 // frame type (padding frame) | 1097 // frame type (padding frame) |
1084 0x00, | 1098 0x00, |
1085 }; | 1099 }; |
1086 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1087 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1101 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1088 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1102 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1089 ASSERT_TRUE(visitor_.header_.get()); | 1103 ASSERT_TRUE(visitor_.header_.get()); |
1090 EXPECT_EQ(0, visitor_.frame_count_); | 1104 EXPECT_EQ(0, visitor_.frame_count_); |
1091 EXPECT_EQ(1, visitor_.version_mismatch_); | 1105 EXPECT_EQ(1, visitor_.version_mismatch_); |
1092 }; | 1106 }; |
1093 | 1107 |
1094 TEST_F(QuicFramerTest, InvalidPrivateFlag) { | 1108 TEST_P(QuicFramerTest, InvalidPrivateFlag) { |
1095 unsigned char packet[] = { | 1109 unsigned char packet[] = { |
1096 // public flags (8 byte guid) | 1110 // public flags (8 byte guid) |
1097 0x3C, | 1111 0x3C, |
1098 // guid | 1112 // guid |
1099 0x10, 0x32, 0x54, 0x76, | 1113 0x10, 0x32, 0x54, 0x76, |
1100 0x98, 0xBA, 0xDC, 0xFE, | 1114 0x98, 0xBA, 0xDC, 0xFE, |
1101 // packet sequence number | 1115 // packet sequence number |
1102 0xBC, 0x9A, 0x78, 0x56, | 1116 0xBC, 0x9A, 0x78, 0x56, |
1103 0x34, 0x12, | 1117 0x34, 0x12, |
1104 // private flags | 1118 // private flags |
(...skipping 16 matching lines...) Expand all Loading... |
1121 'h', 'e', 'l', 'l', | 1135 'h', 'e', 'l', 'l', |
1122 'o', ' ', 'w', 'o', | 1136 'o', ' ', 'w', 'o', |
1123 'r', 'l', 'd', '!', | 1137 'r', 'l', 'd', '!', |
1124 }; | 1138 }; |
1125 CheckProcessingFails(packet, | 1139 CheckProcessingFails(packet, |
1126 arraysize(packet), | 1140 arraysize(packet), |
1127 "Illegal private flags value.", | 1141 "Illegal private flags value.", |
1128 QUIC_INVALID_PACKET_HEADER); | 1142 QUIC_INVALID_PACKET_HEADER); |
1129 }; | 1143 }; |
1130 | 1144 |
1131 TEST_F(QuicFramerTest, PaddingFrame) { | 1145 TEST_P(QuicFramerTest, PaddingFrame) { |
1132 unsigned char packet[] = { | 1146 unsigned char packet[] = { |
1133 // public flags (8 byte guid) | 1147 // public flags (8 byte guid) |
1134 0x3C, | 1148 0x3C, |
1135 // guid | 1149 // guid |
1136 0x10, 0x32, 0x54, 0x76, | 1150 0x10, 0x32, 0x54, 0x76, |
1137 0x98, 0xBA, 0xDC, 0xFE, | 1151 0x98, 0xBA, 0xDC, 0xFE, |
1138 // packet sequence number | 1152 // packet sequence number |
1139 0xBC, 0x9A, 0x78, 0x56, | 1153 0xBC, 0x9A, 0x78, 0x56, |
1140 0x34, 0x12, | 1154 0x34, 0x12, |
1141 // private flags | 1155 // private flags |
(...skipping 22 matching lines...) Expand all Loading... |
1164 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1178 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1165 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1179 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1166 // A packet with no frames is not acceptable. | 1180 // A packet with no frames is not acceptable. |
1167 CheckProcessingFails( | 1181 CheckProcessingFails( |
1168 packet, | 1182 packet, |
1169 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1183 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1170 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1184 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1171 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); | 1185 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); |
1172 } | 1186 } |
1173 | 1187 |
1174 TEST_F(QuicFramerTest, StreamFrame) { | 1188 TEST_P(QuicFramerTest, StreamFrame) { |
1175 unsigned char packet[] = { | 1189 unsigned char packet[] = { |
1176 // public flags (8 byte guid) | 1190 // public flags (8 byte guid) |
1177 0x3C, | 1191 0x3C, |
1178 // guid | 1192 // guid |
1179 0x10, 0x32, 0x54, 0x76, | 1193 0x10, 0x32, 0x54, 0x76, |
1180 0x98, 0xBA, 0xDC, 0xFE, | 1194 0x98, 0xBA, 0xDC, 0xFE, |
1181 // packet sequence number | 1195 // packet sequence number |
1182 0xBC, 0x9A, 0x78, 0x56, | 1196 0xBC, 0x9A, 0x78, 0x56, |
1183 0x34, 0x12, | 1197 0x34, 0x12, |
1184 // private flags | 1198 // private flags |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 expected_error = "Unable to read frame data."; | 1248 expected_error = "Unable to read frame data."; |
1235 } | 1249 } |
1236 CheckProcessingFails( | 1250 CheckProcessingFails( |
1237 packet, | 1251 packet, |
1238 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1252 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1239 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1253 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1240 expected_error, QUIC_INVALID_FRAME_DATA); | 1254 expected_error, QUIC_INVALID_FRAME_DATA); |
1241 } | 1255 } |
1242 } | 1256 } |
1243 | 1257 |
1244 TEST_F(QuicFramerTest, StreamFrameWithVersion) { | 1258 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
| 1259 // Set a specific version. |
| 1260 framer_.set_version(QUIC_VERSION_6); |
| 1261 |
1245 unsigned char packet[] = { | 1262 unsigned char packet[] = { |
1246 // public flags (version, 8 byte guid) | 1263 // public flags (version, 8 byte guid) |
1247 0x3D, | 1264 0x3D, |
1248 // guid | 1265 // guid |
1249 0x10, 0x32, 0x54, 0x76, | 1266 0x10, 0x32, 0x54, 0x76, |
1250 0x98, 0xBA, 0xDC, 0xFE, | 1267 0x98, 0xBA, 0xDC, 0xFE, |
1251 // version tag | 1268 // version tag |
1252 'Q', '0', '0', '6', | 1269 'Q', '0', '0', '6', |
1253 // packet sequence number | 1270 // packet sequence number |
1254 0xBC, 0x9A, 0x78, 0x56, | 1271 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 17 matching lines...) Expand all Loading... |
1272 'o', ' ', 'w', 'o', | 1289 'o', ' ', 'w', 'o', |
1273 'r', 'l', 'd', '!', | 1290 'r', 'l', 'd', '!', |
1274 }; | 1291 }; |
1275 | 1292 |
1276 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1293 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1277 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1294 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1278 | 1295 |
1279 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1296 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1280 ASSERT_TRUE(visitor_.header_.get()); | 1297 ASSERT_TRUE(visitor_.header_.get()); |
1281 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); | 1298 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); |
1282 EXPECT_EQ(kQuicVersion1, visitor_.header_.get()->public_header.versions[0]); | 1299 EXPECT_EQ(QUIC_VERSION_6, visitor_.header_.get()->public_header.versions[0]); |
1283 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1300 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); |
1284 | 1301 |
1285 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1302 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1286 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1303 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1287 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1304 EXPECT_EQ(static_cast<uint64>(0x01020304), |
1288 visitor_.stream_frames_[0]->stream_id); | 1305 visitor_.stream_frames_[0]->stream_id); |
1289 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1306 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1290 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1307 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1291 visitor_.stream_frames_[0]->offset); | 1308 visitor_.stream_frames_[0]->offset); |
1292 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1309 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
(...skipping 15 matching lines...) Expand all Loading... |
1308 expected_error = "Unable to read frame data."; | 1325 expected_error = "Unable to read frame data."; |
1309 } | 1326 } |
1310 CheckProcessingFails( | 1327 CheckProcessingFails( |
1311 packet, | 1328 packet, |
1312 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, | 1329 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, |
1313 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1330 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1314 expected_error, QUIC_INVALID_FRAME_DATA); | 1331 expected_error, QUIC_INVALID_FRAME_DATA); |
1315 } | 1332 } |
1316 } | 1333 } |
1317 | 1334 |
1318 TEST_F(QuicFramerTest, RejectPacket) { | 1335 TEST_P(QuicFramerTest, RejectPacket) { |
1319 visitor_.accept_packet_ = false; | 1336 visitor_.accept_packet_ = false; |
1320 | 1337 |
1321 unsigned char packet[] = { | 1338 unsigned char packet[] = { |
1322 // public flags (8 byte guid) | 1339 // public flags (8 byte guid) |
1323 0x3C, | 1340 0x3C, |
1324 // guid | 1341 // guid |
1325 0x10, 0x32, 0x54, 0x76, | 1342 0x10, 0x32, 0x54, 0x76, |
1326 0x98, 0xBA, 0xDC, 0xFE, | 1343 0x98, 0xBA, 0xDC, 0xFE, |
1327 // packet sequence number | 1344 // packet sequence number |
1328 0xBC, 0x9A, 0x78, 0x56, | 1345 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 22 matching lines...) Expand all Loading... |
1351 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1368 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1352 | 1369 |
1353 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1370 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1354 ASSERT_TRUE(visitor_.header_.get()); | 1371 ASSERT_TRUE(visitor_.header_.get()); |
1355 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1372 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1356 | 1373 |
1357 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1374 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1358 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1375 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1359 } | 1376 } |
1360 | 1377 |
1361 TEST_F(QuicFramerTest, RevivedStreamFrame) { | 1378 TEST_P(QuicFramerTest, RevivedStreamFrame) { |
1362 unsigned char payload[] = { | 1379 unsigned char payload[] = { |
1363 // frame type (stream frame) | 1380 // frame type (stream frame) |
1364 0x01, | 1381 0x01, |
1365 // stream id | 1382 // stream id |
1366 0x04, 0x03, 0x02, 0x01, | 1383 0x04, 0x03, 0x02, 0x01, |
1367 // fin | 1384 // fin |
1368 0x01, | 1385 0x01, |
1369 // offset | 1386 // offset |
1370 0x54, 0x76, 0x10, 0x32, | 1387 0x54, 0x76, 0x10, 0x32, |
1371 0xDC, 0xFE, 0x98, 0xBA, | 1388 0xDC, 0xFE, 0x98, 0xBA, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1409 | 1426 |
1410 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1427 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1411 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1428 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1412 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1429 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1413 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1430 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1414 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1431 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1415 visitor_.stream_frames_[0]->offset); | 1432 visitor_.stream_frames_[0]->offset); |
1416 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1433 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
1417 } | 1434 } |
1418 | 1435 |
1419 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { | 1436 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
1420 unsigned char packet[] = { | 1437 unsigned char packet[] = { |
1421 // public flags (8 byte guid) | 1438 // public flags (8 byte guid) |
1422 0x3C, | 1439 0x3C, |
1423 // guid | 1440 // guid |
1424 0x10, 0x32, 0x54, 0x76, | 1441 0x10, 0x32, 0x54, 0x76, |
1425 0x98, 0xBA, 0xDC, 0xFE, | 1442 0x98, 0xBA, 0xDC, 0xFE, |
1426 // packet sequence number | 1443 // packet sequence number |
1427 0xBC, 0x9A, 0x78, 0x56, | 1444 0xBC, 0x9A, 0x78, 0x56, |
1428 0x12, 0x34, | 1445 0x12, 0x34, |
1429 // private flags (fec group) | 1446 // private flags (fec group) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 | 1482 |
1466 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1483 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1467 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1484 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1468 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1485 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1469 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1486 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1470 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1487 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1471 visitor_.stream_frames_[0]->offset); | 1488 visitor_.stream_frames_[0]->offset); |
1472 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1489 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
1473 } | 1490 } |
1474 | 1491 |
1475 TEST_F(QuicFramerTest, AckFrame) { | 1492 TEST_P(QuicFramerTest, AckFrame) { |
1476 unsigned char packet[] = { | 1493 unsigned char packet[] = { |
1477 // public flags (8 byte guid) | 1494 // public flags (8 byte guid) |
1478 0x3C, | 1495 0x3C, |
1479 // guid | 1496 // guid |
1480 0x10, 0x32, 0x54, 0x76, | 1497 0x10, 0x32, 0x54, 0x76, |
1481 0x98, 0xBA, 0xDC, 0xFE, | 1498 0x98, 0xBA, 0xDC, 0xFE, |
1482 // packet sequence number | 1499 // packet sequence number |
1483 0xBC, 0x9A, 0x78, 0x56, | 1500 0xBC, 0x9A, 0x78, 0x56, |
1484 0x34, 0x12, | 1501 0x34, 0x12, |
1485 // private flags | 1502 // private flags |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1560 expected_error = "Unable to read sequence number in missing packets."; | 1577 expected_error = "Unable to read sequence number in missing packets."; |
1561 } | 1578 } |
1562 CheckProcessingFails( | 1579 CheckProcessingFails( |
1563 packet, | 1580 packet, |
1564 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1581 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1565 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1582 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1566 expected_error, QUIC_INVALID_FRAME_DATA); | 1583 expected_error, QUIC_INVALID_FRAME_DATA); |
1567 } | 1584 } |
1568 } | 1585 } |
1569 | 1586 |
1570 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { | 1587 TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) { |
1571 unsigned char packet[] = { | 1588 unsigned char packet[] = { |
1572 // public flags (8 byte guid) | 1589 // public flags (8 byte guid) |
1573 0x3C, | 1590 0x3C, |
1574 // guid | 1591 // guid |
1575 0x10, 0x32, 0x54, 0x76, | 1592 0x10, 0x32, 0x54, 0x76, |
1576 0x98, 0xBA, 0xDC, 0xFE, | 1593 0x98, 0xBA, 0xDC, 0xFE, |
1577 // packet sequence number | 1594 // packet sequence number |
1578 0xBC, 0x9A, 0x78, 0x56, | 1595 0xBC, 0x9A, 0x78, 0x56, |
1579 0x34, 0x12, | 1596 0x34, 0x12, |
1580 // private flags | 1597 // private flags |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 expected_error = "Unable to read receive window."; | 1636 expected_error = "Unable to read receive window."; |
1620 } | 1637 } |
1621 CheckProcessingFails( | 1638 CheckProcessingFails( |
1622 packet, | 1639 packet, |
1623 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1640 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1624 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1641 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1625 expected_error, QUIC_INVALID_FRAME_DATA); | 1642 expected_error, QUIC_INVALID_FRAME_DATA); |
1626 } | 1643 } |
1627 } | 1644 } |
1628 | 1645 |
1629 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { | 1646 TEST_P(QuicFramerTest, CongestionFeedbackFrameInterArrival) { |
1630 unsigned char packet[] = { | 1647 unsigned char packet[] = { |
1631 // public flags (8 byte guid) | 1648 // public flags (8 byte guid) |
1632 0x3C, | 1649 0x3C, |
1633 // guid | 1650 // guid |
1634 0x10, 0x32, 0x54, 0x76, | 1651 0x10, 0x32, 0x54, 0x76, |
1635 0x98, 0xBA, 0xDC, 0xFE, | 1652 0x98, 0xBA, 0xDC, 0xFE, |
1636 // packet sequence number | 1653 // packet sequence number |
1637 0xBC, 0x9A, 0x78, 0x56, | 1654 0xBC, 0x9A, 0x78, 0x56, |
1638 0x34, 0x12, | 1655 0x34, 0x12, |
1639 // private flags | 1656 // private flags |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1717 expected_error = "Unable to read time delta in received packets."; | 1734 expected_error = "Unable to read time delta in received packets."; |
1718 } | 1735 } |
1719 CheckProcessingFails( | 1736 CheckProcessingFails( |
1720 packet, | 1737 packet, |
1721 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1738 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1722 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1739 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1723 expected_error, QUIC_INVALID_FRAME_DATA); | 1740 expected_error, QUIC_INVALID_FRAME_DATA); |
1724 } | 1741 } |
1725 } | 1742 } |
1726 | 1743 |
1727 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { | 1744 TEST_P(QuicFramerTest, CongestionFeedbackFrameFixRate) { |
1728 unsigned char packet[] = { | 1745 unsigned char packet[] = { |
1729 // public flags (8 byte guid) | 1746 // public flags (8 byte guid) |
1730 0x3C, | 1747 0x3C, |
1731 // guid | 1748 // guid |
1732 0x10, 0x32, 0x54, 0x76, | 1749 0x10, 0x32, 0x54, 0x76, |
1733 0x98, 0xBA, 0xDC, 0xFE, | 1750 0x98, 0xBA, 0xDC, 0xFE, |
1734 // packet sequence number | 1751 // packet sequence number |
1735 0xBC, 0x9A, 0x78, 0x56, | 1752 0xBC, 0x9A, 0x78, 0x56, |
1736 0x34, 0x12, | 1753 0x34, 0x12, |
1737 // private flags | 1754 // private flags |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1772 } | 1789 } |
1773 CheckProcessingFails( | 1790 CheckProcessingFails( |
1774 packet, | 1791 packet, |
1775 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1792 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1776 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1793 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1777 expected_error, QUIC_INVALID_FRAME_DATA); | 1794 expected_error, QUIC_INVALID_FRAME_DATA); |
1778 } | 1795 } |
1779 } | 1796 } |
1780 | 1797 |
1781 | 1798 |
1782 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { | 1799 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { |
1783 unsigned char packet[] = { | 1800 unsigned char packet[] = { |
1784 // public flags (8 byte guid) | 1801 // public flags (8 byte guid) |
1785 0x3C, | 1802 0x3C, |
1786 // guid | 1803 // guid |
1787 0x10, 0x32, 0x54, 0x76, | 1804 0x10, 0x32, 0x54, 0x76, |
1788 0x98, 0xBA, 0xDC, 0xFE, | 1805 0x98, 0xBA, 0xDC, 0xFE, |
1789 // packet sequence number | 1806 // packet sequence number |
1790 0xBC, 0x9A, 0x78, 0x56, | 1807 0xBC, 0x9A, 0x78, 0x56, |
1791 0x34, 0x12, | 1808 0x34, 0x12, |
1792 // private flags | 1809 // private flags |
1793 0x00, | 1810 0x00, |
1794 | 1811 |
1795 // frame type (congestion feedback frame) | 1812 // frame type (congestion feedback frame) |
1796 0x03, | 1813 0x03, |
1797 // congestion feedback type (invalid) | 1814 // congestion feedback type (invalid) |
1798 0x03, | 1815 0x03, |
1799 }; | 1816 }; |
1800 | 1817 |
1801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1818 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1802 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1819 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1803 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1820 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1804 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 1821 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
1805 } | 1822 } |
1806 | 1823 |
1807 TEST_F(QuicFramerTest, RstStreamFrame) { | 1824 TEST_P(QuicFramerTest, RstStreamFrame) { |
1808 unsigned char packet[] = { | 1825 unsigned char packet[] = { |
1809 // public flags (8 byte guid) | 1826 // public flags (8 byte guid) |
1810 0x3C, | 1827 0x3C, |
1811 // guid | 1828 // guid |
1812 0x10, 0x32, 0x54, 0x76, | 1829 0x10, 0x32, 0x54, 0x76, |
1813 0x98, 0xBA, 0xDC, 0xFE, | 1830 0x98, 0xBA, 0xDC, 0xFE, |
1814 // packet sequence number | 1831 // packet sequence number |
1815 0xBC, 0x9A, 0x78, 0x56, | 1832 0xBC, 0x9A, 0x78, 0x56, |
1816 0x34, 0x12, | 1833 0x34, 0x12, |
1817 // private flags | 1834 // private flags |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1856 expected_error = "Unable to read rst stream error details."; | 1873 expected_error = "Unable to read rst stream error details."; |
1857 } | 1874 } |
1858 CheckProcessingFails( | 1875 CheckProcessingFails( |
1859 packet, | 1876 packet, |
1860 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1877 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1861 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1878 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1862 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 1879 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
1863 } | 1880 } |
1864 } | 1881 } |
1865 | 1882 |
1866 TEST_F(QuicFramerTest, ConnectionCloseFrame) { | 1883 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
1867 unsigned char packet[] = { | 1884 unsigned char packet[] = { |
1868 // public flags (8 byte guid) | 1885 // public flags (8 byte guid) |
1869 0x3C, | 1886 0x3C, |
1870 // guid | 1887 // guid |
1871 0x10, 0x32, 0x54, 0x76, | 1888 0x10, 0x32, 0x54, 0x76, |
1872 0x98, 0xBA, 0xDC, 0xFE, | 1889 0x98, 0xBA, 0xDC, 0xFE, |
1873 // packet sequence number | 1890 // packet sequence number |
1874 0xBC, 0x9A, 0x78, 0x56, | 1891 0xBC, 0x9A, 0x78, 0x56, |
1875 0x34, 0x12, | 1892 0x34, 0x12, |
1876 // private flags | 1893 // private flags |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1943 expected_error = "Unable to read connection close error details."; | 1960 expected_error = "Unable to read connection close error details."; |
1944 } | 1961 } |
1945 CheckProcessingFails( | 1962 CheckProcessingFails( |
1946 packet, | 1963 packet, |
1947 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 1964 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1948 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 1965 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1949 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 1966 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
1950 } | 1967 } |
1951 } | 1968 } |
1952 | 1969 |
1953 TEST_F(QuicFramerTest, GoAwayFrame) { | 1970 TEST_P(QuicFramerTest, GoAwayFrame) { |
1954 unsigned char packet[] = { | 1971 unsigned char packet[] = { |
1955 // public flags (8 byte guid) | 1972 // public flags (8 byte guid) |
1956 0x3C, | 1973 0x3C, |
1957 // guid | 1974 // guid |
1958 0x10, 0x32, 0x54, 0x76, | 1975 0x10, 0x32, 0x54, 0x76, |
1959 0x98, 0xBA, 0xDC, 0xFE, | 1976 0x98, 0xBA, 0xDC, 0xFE, |
1960 // packet sequence number | 1977 // packet sequence number |
1961 0xBC, 0x9A, 0x78, 0x56, | 1978 0xBC, 0x9A, 0x78, 0x56, |
1962 0x34, 0x12, | 1979 0x34, 0x12, |
1963 // private flags | 1980 // private flags |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2004 expected_error = "Unable to read goaway reason."; | 2021 expected_error = "Unable to read goaway reason."; |
2005 } | 2022 } |
2006 CheckProcessingFails( | 2023 CheckProcessingFails( |
2007 packet, | 2024 packet, |
2008 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2025 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
2009 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), | 2026 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
2010 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2027 expected_error, QUIC_INVALID_GOAWAY_DATA); |
2011 } | 2028 } |
2012 } | 2029 } |
2013 | 2030 |
2014 TEST_F(QuicFramerTest, PublicResetPacket) { | 2031 TEST_P(QuicFramerTest, PublicResetPacket) { |
2015 unsigned char packet[] = { | 2032 unsigned char packet[] = { |
2016 // public flags (public reset, 8 byte guid) | 2033 // public flags (public reset, 8 byte guid) |
2017 0x3E, | 2034 0x3E, |
2018 // guid | 2035 // guid |
2019 0x10, 0x32, 0x54, 0x76, | 2036 0x10, 0x32, 0x54, 0x76, |
2020 0x98, 0xBA, 0xDC, 0xFE, | 2037 0x98, 0xBA, 0xDC, 0xFE, |
2021 // nonce proof | 2038 // nonce proof |
2022 0x89, 0x67, 0x45, 0x23, | 2039 0x89, 0x67, 0x45, 0x23, |
2023 0x01, 0xEF, 0xCD, 0xAB, | 2040 0x01, 0xEF, 0xCD, 0xAB, |
2024 // rejected sequence number | 2041 // rejected sequence number |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2056 CheckProcessingFails(packet, i, expected_error, | 2073 CheckProcessingFails(packet, i, expected_error, |
2057 QUIC_INVALID_PUBLIC_RST_PACKET); | 2074 QUIC_INVALID_PUBLIC_RST_PACKET); |
2058 } else { | 2075 } else { |
2059 expected_error = "Unable to read rejected sequence number."; | 2076 expected_error = "Unable to read rejected sequence number."; |
2060 CheckProcessingFails(packet, i, expected_error, | 2077 CheckProcessingFails(packet, i, expected_error, |
2061 QUIC_INVALID_PUBLIC_RST_PACKET); | 2078 QUIC_INVALID_PUBLIC_RST_PACKET); |
2062 } | 2079 } |
2063 } | 2080 } |
2064 } | 2081 } |
2065 | 2082 |
2066 TEST_F(QuicFramerTest, VersionNegotiationPacket) { | 2083 TEST_P(QuicFramerTest, VersionNegotiationPacket) { |
| 2084 // Set a specific version. |
| 2085 framer_.set_version(QUIC_VERSION_6); |
| 2086 |
2067 unsigned char packet[] = { | 2087 unsigned char packet[] = { |
2068 // public flags (version, 8 byte guid) | 2088 // public flags (version, 8 byte guid) |
2069 0x3D, | 2089 0x3D, |
2070 // guid | 2090 // guid |
2071 0x10, 0x32, 0x54, 0x76, | 2091 0x10, 0x32, 0x54, 0x76, |
2072 0x98, 0xBA, 0xDC, 0xFE, | 2092 0x98, 0xBA, 0xDC, 0xFE, |
2073 // version tag | 2093 // version tag |
2074 'Q', '0', '0', '6', | 2094 'Q', '0', '0', '6', |
2075 'Q', '2', '.', '0', | 2095 'Q', '2', '.', '0', |
2076 }; | 2096 }; |
2077 | 2097 |
2078 QuicFramerPeer::SetIsServer(&framer_, false); | 2098 QuicFramerPeer::SetIsServer(&framer_, false); |
2079 | 2099 |
2080 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2100 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2081 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2101 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2082 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2102 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
2083 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 2103 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
2084 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 2104 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
2085 EXPECT_EQ(kQuicVersion1, | 2105 EXPECT_EQ(QUIC_VERSION_6, |
2086 visitor_.version_negotiation_packet_->versions[0]); | 2106 visitor_.version_negotiation_packet_->versions[0]); |
2087 | 2107 |
2088 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { | 2108 for (size_t i = 0; i <= kPublicFlagsSize + PACKET_8BYTE_GUID; ++i) { |
2089 string expected_error; | 2109 string expected_error; |
2090 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; | 2110 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER; |
2091 if (i < kGuidOffset) { | 2111 if (i < kGuidOffset) { |
2092 expected_error = "Unable to read public flags."; | 2112 expected_error = "Unable to read public flags."; |
2093 } else if (i < kVersionOffset) { | 2113 } else if (i < kVersionOffset) { |
2094 expected_error = "Unable to read GUID."; | 2114 expected_error = "Unable to read GUID."; |
2095 } else { | 2115 } else { |
2096 expected_error = "Unable to read supported version in negotiation."; | 2116 expected_error = "Unable to read supported version in negotiation."; |
2097 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 2117 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
2098 } | 2118 } |
2099 CheckProcessingFails(packet, i, expected_error, error_code); | 2119 CheckProcessingFails(packet, i, expected_error, error_code); |
2100 } | 2120 } |
2101 } | 2121 } |
2102 | 2122 |
2103 TEST_F(QuicFramerTest, FecPacket) { | 2123 TEST_P(QuicFramerTest, FecPacket) { |
2104 unsigned char packet[] = { | 2124 unsigned char packet[] = { |
2105 // public flags (8 byte guid) | 2125 // public flags (8 byte guid) |
2106 0x3C, | 2126 0x3C, |
2107 // guid | 2127 // guid |
2108 0x10, 0x32, 0x54, 0x76, | 2128 0x10, 0x32, 0x54, 0x76, |
2109 0x98, 0xBA, 0xDC, 0xFE, | 2129 0x98, 0xBA, 0xDC, 0xFE, |
2110 // packet sequence number | 2130 // packet sequence number |
2111 0xBC, 0x9A, 0x78, 0x56, | 2131 0xBC, 0x9A, 0x78, 0x56, |
2112 0x34, 0x12, | 2132 0x34, 0x12, |
2113 // private flags (fec group & FEC) | 2133 // private flags (fec group & FEC) |
(...skipping 16 matching lines...) Expand all Loading... |
2130 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2150 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
2131 | 2151 |
2132 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2152 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
2133 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 2153 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
2134 ASSERT_EQ(1, visitor_.fec_count_); | 2154 ASSERT_EQ(1, visitor_.fec_count_); |
2135 const QuicFecData& fec_data = *visitor_.fec_data_[0]; | 2155 const QuicFecData& fec_data = *visitor_.fec_data_[0]; |
2136 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); | 2156 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); |
2137 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); | 2157 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); |
2138 } | 2158 } |
2139 | 2159 |
2140 TEST_F(QuicFramerTest, ConstructPaddingFramePacket) { | 2160 TEST_P(QuicFramerTest, ConstructPaddingFramePacket) { |
2141 QuicPacketHeader header; | 2161 QuicPacketHeader header; |
2142 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2162 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2143 header.public_header.reset_flag = false; | 2163 header.public_header.reset_flag = false; |
2144 header.public_header.version_flag = false; | 2164 header.public_header.version_flag = false; |
2145 header.fec_flag = false; | 2165 header.fec_flag = false; |
2146 header.entropy_flag = false; | 2166 header.entropy_flag = false; |
2147 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2167 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2148 header.fec_group = 0; | 2168 header.fec_group = 0; |
2149 | 2169 |
2150 QuicPaddingFrame padding_frame; | 2170 QuicPaddingFrame padding_frame; |
(...skipping 24 matching lines...) Expand all Loading... |
2175 | 2195 |
2176 scoped_ptr<QuicPacket> data( | 2196 scoped_ptr<QuicPacket> data( |
2177 framer_.ConstructFrameDataPacket(header, frames).packet); | 2197 framer_.ConstructFrameDataPacket(header, frames).packet); |
2178 ASSERT_TRUE(data != NULL); | 2198 ASSERT_TRUE(data != NULL); |
2179 | 2199 |
2180 test::CompareCharArraysWithHexError("constructed packet", | 2200 test::CompareCharArraysWithHexError("constructed packet", |
2181 data->data(), data->length(), | 2201 data->data(), data->length(), |
2182 AsChars(packet), arraysize(packet)); | 2202 AsChars(packet), arraysize(packet)); |
2183 } | 2203 } |
2184 | 2204 |
2185 TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { | 2205 TEST_P(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { |
2186 QuicPacketHeader header; | 2206 QuicPacketHeader header; |
2187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2207 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2188 header.public_header.reset_flag = false; | 2208 header.public_header.reset_flag = false; |
2189 header.public_header.version_flag = false; | 2209 header.public_header.version_flag = false; |
2190 header.fec_flag = false; | 2210 header.fec_flag = false; |
2191 header.entropy_flag = false; | 2211 header.entropy_flag = false; |
2192 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; | 2212 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; |
2193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2213 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2194 header.fec_group = 0; | 2214 header.fec_group = 0; |
2195 | 2215 |
(...skipping 24 matching lines...) Expand all Loading... |
2220 | 2240 |
2221 scoped_ptr<QuicPacket> data( | 2241 scoped_ptr<QuicPacket> data( |
2222 framer_.ConstructFrameDataPacket(header, frames).packet); | 2242 framer_.ConstructFrameDataPacket(header, frames).packet); |
2223 ASSERT_TRUE(data != NULL); | 2243 ASSERT_TRUE(data != NULL); |
2224 | 2244 |
2225 test::CompareCharArraysWithHexError("constructed packet", | 2245 test::CompareCharArraysWithHexError("constructed packet", |
2226 data->data(), data->length(), | 2246 data->data(), data->length(), |
2227 AsChars(packet), arraysize(packet)); | 2247 AsChars(packet), arraysize(packet)); |
2228 } | 2248 } |
2229 | 2249 |
2230 TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { | 2250 TEST_P(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { |
2231 QuicPacketHeader header; | 2251 QuicPacketHeader header; |
2232 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2252 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2233 header.public_header.reset_flag = false; | 2253 header.public_header.reset_flag = false; |
2234 header.public_header.version_flag = false; | 2254 header.public_header.version_flag = false; |
2235 header.fec_flag = false; | 2255 header.fec_flag = false; |
2236 header.entropy_flag = false; | 2256 header.entropy_flag = false; |
2237 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; | 2257 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; |
2238 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2258 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2239 header.fec_group = 0; | 2259 header.fec_group = 0; |
2240 | 2260 |
(...skipping 24 matching lines...) Expand all Loading... |
2265 | 2285 |
2266 scoped_ptr<QuicPacket> data( | 2286 scoped_ptr<QuicPacket> data( |
2267 framer_.ConstructFrameDataPacket(header, frames).packet); | 2287 framer_.ConstructFrameDataPacket(header, frames).packet); |
2268 ASSERT_TRUE(data != NULL); | 2288 ASSERT_TRUE(data != NULL); |
2269 | 2289 |
2270 test::CompareCharArraysWithHexError("constructed packet", | 2290 test::CompareCharArraysWithHexError("constructed packet", |
2271 data->data(), data->length(), | 2291 data->data(), data->length(), |
2272 AsChars(packet), arraysize(packet)); | 2292 AsChars(packet), arraysize(packet)); |
2273 } | 2293 } |
2274 | 2294 |
2275 TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { | 2295 TEST_P(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { |
2276 QuicPacketHeader header; | 2296 QuicPacketHeader header; |
2277 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2297 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2278 header.public_header.reset_flag = false; | 2298 header.public_header.reset_flag = false; |
2279 header.public_header.version_flag = false; | 2299 header.public_header.version_flag = false; |
2280 header.fec_flag = false; | 2300 header.fec_flag = false; |
2281 header.entropy_flag = false; | 2301 header.entropy_flag = false; |
2282 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; | 2302 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
2283 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2303 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2284 header.fec_group = 0; | 2304 header.fec_group = 0; |
2285 | 2305 |
(...skipping 24 matching lines...) Expand all Loading... |
2310 | 2330 |
2311 scoped_ptr<QuicPacket> data( | 2331 scoped_ptr<QuicPacket> data( |
2312 framer_.ConstructFrameDataPacket(header, frames).packet); | 2332 framer_.ConstructFrameDataPacket(header, frames).packet); |
2313 ASSERT_TRUE(data != NULL); | 2333 ASSERT_TRUE(data != NULL); |
2314 | 2334 |
2315 test::CompareCharArraysWithHexError("constructed packet", | 2335 test::CompareCharArraysWithHexError("constructed packet", |
2316 data->data(), data->length(), | 2336 data->data(), data->length(), |
2317 AsChars(packet), arraysize(packet)); | 2337 AsChars(packet), arraysize(packet)); |
2318 } | 2338 } |
2319 | 2339 |
2320 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { | 2340 TEST_P(QuicFramerTest, ConstructStreamFramePacket) { |
2321 QuicPacketHeader header; | 2341 QuicPacketHeader header; |
2322 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2342 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2323 header.public_header.reset_flag = false; | 2343 header.public_header.reset_flag = false; |
2324 header.public_header.version_flag = false; | 2344 header.public_header.version_flag = false; |
2325 header.fec_flag = false; | 2345 header.fec_flag = false; |
2326 header.entropy_flag = true; | 2346 header.entropy_flag = true; |
2327 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 2347 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
2328 header.fec_group = 0; | 2348 header.fec_group = 0; |
2329 | 2349 |
2330 QuicStreamFrame stream_frame; | 2350 QuicStreamFrame stream_frame; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2367 | 2387 |
2368 scoped_ptr<QuicPacket> data( | 2388 scoped_ptr<QuicPacket> data( |
2369 framer_.ConstructFrameDataPacket(header, frames).packet); | 2389 framer_.ConstructFrameDataPacket(header, frames).packet); |
2370 ASSERT_TRUE(data != NULL); | 2390 ASSERT_TRUE(data != NULL); |
2371 | 2391 |
2372 test::CompareCharArraysWithHexError("constructed packet", | 2392 test::CompareCharArraysWithHexError("constructed packet", |
2373 data->data(), data->length(), | 2393 data->data(), data->length(), |
2374 AsChars(packet), arraysize(packet)); | 2394 AsChars(packet), arraysize(packet)); |
2375 } | 2395 } |
2376 | 2396 |
2377 TEST_F(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) { | 2397 TEST_P(QuicFramerTest, ConstructStreamFramePacketWithVersionFlag) { |
2378 QuicPacketHeader header; | 2398 QuicPacketHeader header; |
2379 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2399 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2380 header.public_header.reset_flag = false; | 2400 header.public_header.reset_flag = false; |
2381 header.public_header.version_flag = true; | 2401 header.public_header.version_flag = true; |
2382 header.fec_flag = false; | 2402 header.fec_flag = false; |
2383 header.entropy_flag = true; | 2403 header.entropy_flag = true; |
2384 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 2404 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
2385 header.fec_group = 0; | 2405 header.fec_group = 0; |
2386 | 2406 |
2387 QuicStreamFrame stream_frame; | 2407 QuicStreamFrame stream_frame; |
2388 stream_frame.stream_id = 0x01020304; | 2408 stream_frame.stream_id = 0x01020304; |
2389 stream_frame.fin = true; | 2409 stream_frame.fin = true; |
2390 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 2410 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
2391 stream_frame.data = "hello world!"; | 2411 stream_frame.data = "hello world!"; |
2392 | 2412 |
2393 QuicFrames frames; | 2413 QuicFrames frames; |
2394 frames.push_back(QuicFrame(&stream_frame)); | 2414 frames.push_back(QuicFrame(&stream_frame)); |
2395 | 2415 |
| 2416 // Set a specific version. |
| 2417 framer_.set_version(QUIC_VERSION_6); |
2396 unsigned char packet[] = { | 2418 unsigned char packet[] = { |
2397 // public flags (version, 8 byte guid) | 2419 // public flags (version, 8 byte guid) |
2398 0x3D, | 2420 0x3D, |
2399 // guid | 2421 // guid |
2400 0x10, 0x32, 0x54, 0x76, | 2422 0x10, 0x32, 0x54, 0x76, |
2401 0x98, 0xBA, 0xDC, 0xFE, | 2423 0x98, 0xBA, 0xDC, 0xFE, |
2402 // version tag | 2424 // version tag |
2403 'Q', '0', '0', '6', | 2425 'Q', '0', '0', '6', |
2404 // packet sequence number | 2426 // packet sequence number |
2405 0xBC, 0x9A, 0x78, 0x56, | 2427 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 21 matching lines...) Expand all Loading... |
2427 QuicFramerPeer::SetIsServer(&framer_, false); | 2449 QuicFramerPeer::SetIsServer(&framer_, false); |
2428 scoped_ptr<QuicPacket> data( | 2450 scoped_ptr<QuicPacket> data( |
2429 framer_.ConstructFrameDataPacket(header, frames).packet); | 2451 framer_.ConstructFrameDataPacket(header, frames).packet); |
2430 ASSERT_TRUE(data != NULL); | 2452 ASSERT_TRUE(data != NULL); |
2431 | 2453 |
2432 test::CompareCharArraysWithHexError("constructed packet", | 2454 test::CompareCharArraysWithHexError("constructed packet", |
2433 data->data(), data->length(), | 2455 data->data(), data->length(), |
2434 AsChars(packet), arraysize(packet)); | 2456 AsChars(packet), arraysize(packet)); |
2435 } | 2457 } |
2436 | 2458 |
2437 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { | 2459 TEST_P(QuicFramerTest, ConstructVersionNegotiationPacket) { |
2438 QuicPacketPublicHeader header; | 2460 QuicPacketPublicHeader header; |
2439 header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2461 header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2440 header.reset_flag = false; | 2462 header.reset_flag = false; |
2441 header.version_flag = true; | 2463 header.version_flag = true; |
2442 | 2464 |
2443 unsigned char packet[] = { | 2465 unsigned char packet[] = { |
2444 // public flags (version, 8 byte guid) | 2466 // public flags (version, 8 byte guid) |
2445 0x3D, | 2467 0x3D, |
2446 // guid | 2468 // guid |
2447 0x10, 0x32, 0x54, 0x76, | 2469 0x10, 0x32, 0x54, 0x76, |
2448 0x98, 0xBA, 0xDC, 0xFE, | 2470 0x98, 0xBA, 0xDC, 0xFE, |
2449 // version tag | 2471 // version tag |
2450 'Q', '0', '0', '6', | 2472 'Q', '0', '0', '6', |
2451 'Q', '2', '.', '0', | 2473 // 'Q', '0', '0', '7', |
2452 }; | 2474 }; |
2453 | 2475 |
2454 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); | 2476 QuicVersionVector versions; |
2455 QuicTagVector versions; | 2477 versions.push_back(QUIC_VERSION_6); |
2456 versions.push_back(kQuicVersion1); | 2478 // versions.push_back(QUIC_VERSION_7); |
2457 versions.push_back(kQuicVersion2); | |
2458 scoped_ptr<QuicEncryptedPacket> data( | 2479 scoped_ptr<QuicEncryptedPacket> data( |
2459 framer_.ConstructVersionNegotiationPacket(header, versions)); | 2480 framer_.ConstructVersionNegotiationPacket(header, versions)); |
2460 | 2481 |
2461 test::CompareCharArraysWithHexError("constructed packet", | 2482 test::CompareCharArraysWithHexError("constructed packet", |
2462 data->data(), data->length(), | 2483 data->data(), data->length(), |
2463 AsChars(packet), arraysize(packet)); | 2484 AsChars(packet), arraysize(packet)); |
2464 } | 2485 } |
2465 | 2486 |
2466 TEST_F(QuicFramerTest, ConstructAckFramePacket) { | 2487 TEST_P(QuicFramerTest, ConstructAckFramePacket) { |
2467 QuicPacketHeader header; | 2488 QuicPacketHeader header; |
2468 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2489 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2469 header.public_header.reset_flag = false; | 2490 header.public_header.reset_flag = false; |
2470 header.public_header.version_flag = false; | 2491 header.public_header.version_flag = false; |
2471 header.fec_flag = false; | 2492 header.fec_flag = false; |
2472 header.entropy_flag = true; | 2493 header.entropy_flag = true; |
2473 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2494 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2474 header.fec_group = 0; | 2495 header.fec_group = 0; |
2475 | 2496 |
2476 QuicAckFrame ack_frame; | 2497 QuicAckFrame ack_frame; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2520 | 2541 |
2521 scoped_ptr<QuicPacket> data( | 2542 scoped_ptr<QuicPacket> data( |
2522 framer_.ConstructFrameDataPacket(header, frames).packet); | 2543 framer_.ConstructFrameDataPacket(header, frames).packet); |
2523 ASSERT_TRUE(data != NULL); | 2544 ASSERT_TRUE(data != NULL); |
2524 | 2545 |
2525 test::CompareCharArraysWithHexError("constructed packet", | 2546 test::CompareCharArraysWithHexError("constructed packet", |
2526 data->data(), data->length(), | 2547 data->data(), data->length(), |
2527 AsChars(packet), arraysize(packet)); | 2548 AsChars(packet), arraysize(packet)); |
2528 } | 2549 } |
2529 | 2550 |
2530 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) { | 2551 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketTCP) { |
2531 QuicPacketHeader header; | 2552 QuicPacketHeader header; |
2532 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2553 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2533 header.public_header.reset_flag = false; | 2554 header.public_header.reset_flag = false; |
2534 header.public_header.version_flag = false; | 2555 header.public_header.version_flag = false; |
2535 header.fec_flag = false; | 2556 header.fec_flag = false; |
2536 header.entropy_flag = false; | 2557 header.entropy_flag = false; |
2537 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2558 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2538 header.fec_group = 0; | 2559 header.fec_group = 0; |
2539 | 2560 |
2540 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2561 QuicCongestionFeedbackFrame congestion_feedback_frame; |
(...skipping 28 matching lines...) Expand all Loading... |
2569 | 2590 |
2570 scoped_ptr<QuicPacket> data( | 2591 scoped_ptr<QuicPacket> data( |
2571 framer_.ConstructFrameDataPacket(header, frames).packet); | 2592 framer_.ConstructFrameDataPacket(header, frames).packet); |
2572 ASSERT_TRUE(data != NULL); | 2593 ASSERT_TRUE(data != NULL); |
2573 | 2594 |
2574 test::CompareCharArraysWithHexError("constructed packet", | 2595 test::CompareCharArraysWithHexError("constructed packet", |
2575 data->data(), data->length(), | 2596 data->data(), data->length(), |
2576 AsChars(packet), arraysize(packet)); | 2597 AsChars(packet), arraysize(packet)); |
2577 } | 2598 } |
2578 | 2599 |
2579 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) { | 2600 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInterArrival) { |
2580 QuicPacketHeader header; | 2601 QuicPacketHeader header; |
2581 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2602 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2582 header.public_header.reset_flag = false; | 2603 header.public_header.reset_flag = false; |
2583 header.public_header.version_flag = false; | 2604 header.public_header.version_flag = false; |
2584 header.fec_flag = false; | 2605 header.fec_flag = false; |
2585 header.entropy_flag = false; | 2606 header.entropy_flag = false; |
2586 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2607 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2587 header.fec_group = 0; | 2608 header.fec_group = 0; |
2588 | 2609 |
2589 QuicCongestionFeedbackFrame frame; | 2610 QuicCongestionFeedbackFrame frame; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2642 | 2663 |
2643 scoped_ptr<QuicPacket> data( | 2664 scoped_ptr<QuicPacket> data( |
2644 framer_.ConstructFrameDataPacket(header, frames).packet); | 2665 framer_.ConstructFrameDataPacket(header, frames).packet); |
2645 ASSERT_TRUE(data != NULL); | 2666 ASSERT_TRUE(data != NULL); |
2646 | 2667 |
2647 test::CompareCharArraysWithHexError("constructed packet", | 2668 test::CompareCharArraysWithHexError("constructed packet", |
2648 data->data(), data->length(), | 2669 data->data(), data->length(), |
2649 AsChars(packet), arraysize(packet)); | 2670 AsChars(packet), arraysize(packet)); |
2650 } | 2671 } |
2651 | 2672 |
2652 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) { | 2673 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketFixRate) { |
2653 QuicPacketHeader header; | 2674 QuicPacketHeader header; |
2654 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2675 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2655 header.public_header.reset_flag = false; | 2676 header.public_header.reset_flag = false; |
2656 header.public_header.version_flag = false; | 2677 header.public_header.version_flag = false; |
2657 header.fec_flag = false; | 2678 header.fec_flag = false; |
2658 header.entropy_flag = false; | 2679 header.entropy_flag = false; |
2659 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2680 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2660 header.fec_group = 0; | 2681 header.fec_group = 0; |
2661 | 2682 |
2662 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2683 QuicCongestionFeedbackFrame congestion_feedback_frame; |
(...skipping 26 matching lines...) Expand all Loading... |
2689 | 2710 |
2690 scoped_ptr<QuicPacket> data( | 2711 scoped_ptr<QuicPacket> data( |
2691 framer_.ConstructFrameDataPacket(header, frames).packet); | 2712 framer_.ConstructFrameDataPacket(header, frames).packet); |
2692 ASSERT_TRUE(data != NULL); | 2713 ASSERT_TRUE(data != NULL); |
2693 | 2714 |
2694 test::CompareCharArraysWithHexError("constructed packet", | 2715 test::CompareCharArraysWithHexError("constructed packet", |
2695 data->data(), data->length(), | 2716 data->data(), data->length(), |
2696 AsChars(packet), arraysize(packet)); | 2717 AsChars(packet), arraysize(packet)); |
2697 } | 2718 } |
2698 | 2719 |
2699 TEST_F(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) { | 2720 TEST_P(QuicFramerTest, ConstructCongestionFeedbackFramePacketInvalidFeedback) { |
2700 QuicPacketHeader header; | 2721 QuicPacketHeader header; |
2701 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2722 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2702 header.public_header.reset_flag = false; | 2723 header.public_header.reset_flag = false; |
2703 header.public_header.version_flag = false; | 2724 header.public_header.version_flag = false; |
2704 header.fec_flag = false; | 2725 header.fec_flag = false; |
2705 header.entropy_flag = false; | 2726 header.entropy_flag = false; |
2706 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2727 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2707 header.fec_group = 0; | 2728 header.fec_group = 0; |
2708 | 2729 |
2709 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2730 QuicCongestionFeedbackFrame congestion_feedback_frame; |
2710 congestion_feedback_frame.type = | 2731 congestion_feedback_frame.type = |
2711 static_cast<CongestionFeedbackType>(kFixRate + 1); | 2732 static_cast<CongestionFeedbackType>(kFixRate + 1); |
2712 | 2733 |
2713 QuicFrames frames; | 2734 QuicFrames frames; |
2714 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 2735 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
2715 | 2736 |
2716 scoped_ptr<QuicPacket> data( | 2737 scoped_ptr<QuicPacket> data( |
2717 framer_.ConstructFrameDataPacket(header, frames).packet); | 2738 framer_.ConstructFrameDataPacket(header, frames).packet); |
2718 ASSERT_TRUE(data == NULL); | 2739 ASSERT_TRUE(data == NULL); |
2719 } | 2740 } |
2720 | 2741 |
2721 TEST_F(QuicFramerTest, ConstructRstFramePacket) { | 2742 TEST_P(QuicFramerTest, ConstructRstFramePacket) { |
2722 QuicPacketHeader header; | 2743 QuicPacketHeader header; |
2723 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2744 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2724 header.public_header.reset_flag = false; | 2745 header.public_header.reset_flag = false; |
2725 header.public_header.version_flag = false; | 2746 header.public_header.version_flag = false; |
2726 header.fec_flag = false; | 2747 header.fec_flag = false; |
2727 header.entropy_flag = false; | 2748 header.entropy_flag = false; |
2728 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2749 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2729 header.fec_group = 0; | 2750 header.fec_group = 0; |
2730 | 2751 |
2731 QuicRstStreamFrame rst_frame; | 2752 QuicRstStreamFrame rst_frame; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2765 | 2786 |
2766 scoped_ptr<QuicPacket> data( | 2787 scoped_ptr<QuicPacket> data( |
2767 framer_.ConstructFrameDataPacket(header, frames).packet); | 2788 framer_.ConstructFrameDataPacket(header, frames).packet); |
2768 ASSERT_TRUE(data != NULL); | 2789 ASSERT_TRUE(data != NULL); |
2769 | 2790 |
2770 test::CompareCharArraysWithHexError("constructed packet", | 2791 test::CompareCharArraysWithHexError("constructed packet", |
2771 data->data(), data->length(), | 2792 data->data(), data->length(), |
2772 AsChars(packet), arraysize(packet)); | 2793 AsChars(packet), arraysize(packet)); |
2773 } | 2794 } |
2774 | 2795 |
2775 TEST_F(QuicFramerTest, ConstructCloseFramePacket) { | 2796 TEST_P(QuicFramerTest, ConstructCloseFramePacket) { |
2776 QuicPacketHeader header; | 2797 QuicPacketHeader header; |
2777 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2798 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2778 header.public_header.reset_flag = false; | 2799 header.public_header.reset_flag = false; |
2779 header.public_header.version_flag = false; | 2800 header.public_header.version_flag = false; |
2780 header.fec_flag = false; | 2801 header.fec_flag = false; |
2781 header.entropy_flag = true; | 2802 header.entropy_flag = true; |
2782 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2803 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2783 header.fec_group = 0; | 2804 header.fec_group = 0; |
2784 | 2805 |
2785 QuicConnectionCloseFrame close_frame; | 2806 QuicConnectionCloseFrame close_frame; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2842 | 2863 |
2843 scoped_ptr<QuicPacket> data( | 2864 scoped_ptr<QuicPacket> data( |
2844 framer_.ConstructFrameDataPacket(header, frames).packet); | 2865 framer_.ConstructFrameDataPacket(header, frames).packet); |
2845 ASSERT_TRUE(data != NULL); | 2866 ASSERT_TRUE(data != NULL); |
2846 | 2867 |
2847 test::CompareCharArraysWithHexError("constructed packet", | 2868 test::CompareCharArraysWithHexError("constructed packet", |
2848 data->data(), data->length(), | 2869 data->data(), data->length(), |
2849 AsChars(packet), arraysize(packet)); | 2870 AsChars(packet), arraysize(packet)); |
2850 } | 2871 } |
2851 | 2872 |
2852 TEST_F(QuicFramerTest, ConstructGoAwayPacket) { | 2873 TEST_P(QuicFramerTest, ConstructGoAwayPacket) { |
2853 QuicPacketHeader header; | 2874 QuicPacketHeader header; |
2854 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2875 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2855 header.public_header.reset_flag = false; | 2876 header.public_header.reset_flag = false; |
2856 header.public_header.version_flag = false; | 2877 header.public_header.version_flag = false; |
2857 header.fec_flag = false; | 2878 header.fec_flag = false; |
2858 header.entropy_flag = true; | 2879 header.entropy_flag = true; |
2859 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2880 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2860 header.fec_group = 0; | 2881 header.fec_group = 0; |
2861 | 2882 |
2862 QuicGoAwayFrame goaway_frame; | 2883 QuicGoAwayFrame goaway_frame; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2896 | 2917 |
2897 scoped_ptr<QuicPacket> data( | 2918 scoped_ptr<QuicPacket> data( |
2898 framer_.ConstructFrameDataPacket(header, frames).packet); | 2919 framer_.ConstructFrameDataPacket(header, frames).packet); |
2899 ASSERT_TRUE(data != NULL); | 2920 ASSERT_TRUE(data != NULL); |
2900 | 2921 |
2901 test::CompareCharArraysWithHexError("constructed packet", | 2922 test::CompareCharArraysWithHexError("constructed packet", |
2902 data->data(), data->length(), | 2923 data->data(), data->length(), |
2903 AsChars(packet), arraysize(packet)); | 2924 AsChars(packet), arraysize(packet)); |
2904 } | 2925 } |
2905 | 2926 |
2906 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { | 2927 TEST_P(QuicFramerTest, ConstructPublicResetPacket) { |
2907 QuicPublicResetPacket reset_packet; | 2928 QuicPublicResetPacket reset_packet; |
2908 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2929 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2909 reset_packet.public_header.reset_flag = true; | 2930 reset_packet.public_header.reset_flag = true; |
2910 reset_packet.public_header.version_flag = false; | 2931 reset_packet.public_header.version_flag = false; |
2911 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 2932 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); |
2912 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 2933 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); |
2913 | 2934 |
2914 unsigned char packet[] = { | 2935 unsigned char packet[] = { |
2915 // public flags (public reset, 8 byte GUID) | 2936 // public flags (public reset, 8 byte GUID) |
2916 0x3E, | 2937 0x3E, |
(...skipping 10 matching lines...) Expand all Loading... |
2927 | 2948 |
2928 scoped_ptr<QuicEncryptedPacket> data( | 2949 scoped_ptr<QuicEncryptedPacket> data( |
2929 framer_.ConstructPublicResetPacket(reset_packet)); | 2950 framer_.ConstructPublicResetPacket(reset_packet)); |
2930 ASSERT_TRUE(data != NULL); | 2951 ASSERT_TRUE(data != NULL); |
2931 | 2952 |
2932 test::CompareCharArraysWithHexError("constructed packet", | 2953 test::CompareCharArraysWithHexError("constructed packet", |
2933 data->data(), data->length(), | 2954 data->data(), data->length(), |
2934 AsChars(packet), arraysize(packet)); | 2955 AsChars(packet), arraysize(packet)); |
2935 } | 2956 } |
2936 | 2957 |
2937 TEST_F(QuicFramerTest, ConstructFecPacket) { | 2958 TEST_P(QuicFramerTest, ConstructFecPacket) { |
2938 QuicPacketHeader header; | 2959 QuicPacketHeader header; |
2939 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2960 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2940 header.public_header.reset_flag = false; | 2961 header.public_header.reset_flag = false; |
2941 header.public_header.version_flag = false; | 2962 header.public_header.version_flag = false; |
2942 header.fec_flag = true; | 2963 header.fec_flag = true; |
2943 header.entropy_flag = true; | 2964 header.entropy_flag = true; |
2944 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); | 2965 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); |
2945 header.is_in_fec_group = IN_FEC_GROUP; | 2966 header.is_in_fec_group = IN_FEC_GROUP; |
2946 header.fec_group = GG_UINT64_C(0x123456789ABB);; | 2967 header.fec_group = GG_UINT64_C(0x123456789ABB);; |
2947 | 2968 |
(...skipping 24 matching lines...) Expand all Loading... |
2972 | 2993 |
2973 scoped_ptr<QuicPacket> data( | 2994 scoped_ptr<QuicPacket> data( |
2974 framer_.ConstructFecPacket(header, fec_data).packet); | 2995 framer_.ConstructFecPacket(header, fec_data).packet); |
2975 ASSERT_TRUE(data != NULL); | 2996 ASSERT_TRUE(data != NULL); |
2976 | 2997 |
2977 test::CompareCharArraysWithHexError("constructed packet", | 2998 test::CompareCharArraysWithHexError("constructed packet", |
2978 data->data(), data->length(), | 2999 data->data(), data->length(), |
2979 AsChars(packet), arraysize(packet)); | 3000 AsChars(packet), arraysize(packet)); |
2980 } | 3001 } |
2981 | 3002 |
2982 TEST_F(QuicFramerTest, EncryptPacket) { | 3003 TEST_P(QuicFramerTest, EncryptPacket) { |
2983 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3004 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
2984 unsigned char packet[] = { | 3005 unsigned char packet[] = { |
2985 // public flags (8 byte guid) | 3006 // public flags (8 byte guid) |
2986 0x3C, | 3007 0x3C, |
2987 // guid | 3008 // guid |
2988 0x10, 0x32, 0x54, 0x76, | 3009 0x10, 0x32, 0x54, 0x76, |
2989 0x98, 0xBA, 0xDC, 0xFE, | 3010 0x98, 0xBA, 0xDC, 0xFE, |
2990 // packet sequence number | 3011 // packet sequence number |
2991 0xBC, 0x9A, 0x78, 0x56, | 3012 0xBC, 0x9A, 0x78, 0x56, |
2992 0x34, 0x12, | 3013 0x34, 0x12, |
(...skipping 13 matching lines...) Expand all Loading... |
3006 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3027 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
3007 PACKET_8BYTE_GUID, !kIncludeVersion, | 3028 PACKET_8BYTE_GUID, !kIncludeVersion, |
3008 PACKET_6BYTE_SEQUENCE_NUMBER)); | 3029 PACKET_6BYTE_SEQUENCE_NUMBER)); |
3009 scoped_ptr<QuicEncryptedPacket> encrypted( | 3030 scoped_ptr<QuicEncryptedPacket> encrypted( |
3010 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3031 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
3011 | 3032 |
3012 ASSERT_TRUE(encrypted.get() != NULL); | 3033 ASSERT_TRUE(encrypted.get() != NULL); |
3013 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3034 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
3014 } | 3035 } |
3015 | 3036 |
3016 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { | 3037 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
3017 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3038 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
3018 unsigned char packet[] = { | 3039 unsigned char packet[] = { |
3019 // public flags (version, 8 byte guid) | 3040 // public flags (version, 8 byte guid) |
3020 0x3D, | 3041 0x3D, |
3021 // guid | 3042 // guid |
3022 0x10, 0x32, 0x54, 0x76, | 3043 0x10, 0x32, 0x54, 0x76, |
3023 0x98, 0xBA, 0xDC, 0xFE, | 3044 0x98, 0xBA, 0xDC, 0xFE, |
3024 // version tag | 3045 // version tag |
3025 'Q', '.', '1', '0', | 3046 'Q', '.', '1', '0', |
3026 // packet sequence number | 3047 // packet sequence number |
(...skipping 18 matching lines...) Expand all Loading... |
3045 scoped_ptr<QuicEncryptedPacket> encrypted( | 3066 scoped_ptr<QuicEncryptedPacket> encrypted( |
3046 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3067 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
3047 | 3068 |
3048 ASSERT_TRUE(encrypted.get() != NULL); | 3069 ASSERT_TRUE(encrypted.get() != NULL); |
3049 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3070 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
3050 } | 3071 } |
3051 | 3072 |
3052 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ | 3073 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ |
3053 // lands. Currently this is causing valgrind problems, but it should be | 3074 // lands. Currently this is causing valgrind problems, but it should be |
3054 // fixed in the followup CL. | 3075 // fixed in the followup CL. |
3055 TEST_F(QuicFramerTest, DISABLED_CalculateLargestReceived) { | 3076 TEST_P(QuicFramerTest, DISABLED_CalculateLargestReceived) { |
3056 SequenceNumberSet missing; | 3077 SequenceNumberSet missing; |
3057 missing.insert(1); | 3078 missing.insert(1); |
3058 missing.insert(5); | 3079 missing.insert(5); |
3059 missing.insert(7); | 3080 missing.insert(7); |
3060 | 3081 |
3061 // These two we just walk to the next gap, and return the largest seen. | 3082 // These two we just walk to the next gap, and return the largest seen. |
3062 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); | 3083 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); |
3063 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5))); | 3084 EXPECT_EQ(6u, QuicFramer::CalculateLargestObserved(missing, missing.find(5))); |
3064 | 3085 |
3065 missing.insert(2); | 3086 missing.insert(2); |
3066 // For 1, we can't go forward as 2 would be implicitly acked so we return the | 3087 // For 1, we can't go forward as 2 would be implicitly acked so we return the |
3067 // largest missing packet. | 3088 // largest missing packet. |
3068 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); | 3089 EXPECT_EQ(1u, QuicFramer::CalculateLargestObserved(missing, missing.find(1))); |
3069 // For 2, we've seen 3 and 4, so can admit to a largest observed. | 3090 // For 2, we've seen 3 and 4, so can admit to a largest observed. |
3070 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2))); | 3091 EXPECT_EQ(4u, QuicFramer::CalculateLargestObserved(missing, missing.find(2))); |
3071 } | 3092 } |
3072 | 3093 |
3073 // TODO(rch) enable after landing the revised truncation CL. | 3094 // TODO(rch) enable after landing the revised truncation CL. |
3074 TEST_F(QuicFramerTest, DISABLED_Truncation) { | 3095 TEST_P(QuicFramerTest, DISABLED_Truncation) { |
3075 QuicPacketHeader header; | 3096 QuicPacketHeader header; |
3076 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3097 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
3077 header.public_header.reset_flag = false; | 3098 header.public_header.reset_flag = false; |
3078 header.public_header.version_flag = false; | 3099 header.public_header.version_flag = false; |
3079 header.fec_flag = false; | 3100 header.fec_flag = false; |
3080 header.entropy_flag = false; | 3101 header.entropy_flag = false; |
3081 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3102 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3082 header.fec_group = 0; | 3103 header.fec_group = 0; |
3083 | 3104 |
3084 QuicConnectionCloseFrame close_frame; | 3105 QuicConnectionCloseFrame close_frame; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3120 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 3141 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
3121 *raw_close_packet)); | 3142 *raw_close_packet)); |
3122 | 3143 |
3123 // Now make sure we can turn our ack packet back into an ack frame | 3144 // Now make sure we can turn our ack packet back into an ack frame |
3124 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 3145 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
3125 | 3146 |
3126 // And do the same for the close frame. | 3147 // And do the same for the close frame. |
3127 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); | 3148 ASSERT_TRUE(framer_.ProcessPacket(*close_packet)); |
3128 } | 3149 } |
3129 | 3150 |
3130 TEST_F(QuicFramerTest, CleanTruncation) { | 3151 TEST_P(QuicFramerTest, CleanTruncation) { |
3131 QuicPacketHeader header; | 3152 QuicPacketHeader header; |
3132 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3153 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
3133 header.public_header.reset_flag = false; | 3154 header.public_header.reset_flag = false; |
3134 header.public_header.version_flag = false; | 3155 header.public_header.version_flag = false; |
3135 header.fec_flag = false; | 3156 header.fec_flag = false; |
3136 header.entropy_flag = true; | 3157 header.entropy_flag = true; |
3137 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3158 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3138 header.fec_group = 0; | 3159 header.fec_group = 0; |
3139 | 3160 |
3140 QuicConnectionCloseFrame close_frame; | 3161 QuicConnectionCloseFrame close_frame; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3200 frame.connection_close_frame = &visitor_.connection_close_frame_; | 3221 frame.connection_close_frame = &visitor_.connection_close_frame_; |
3201 frames.push_back(frame); | 3222 frames.push_back(frame); |
3202 | 3223 |
3203 original_raw_length = raw_close_packet->length(); | 3224 original_raw_length = raw_close_packet->length(); |
3204 raw_close_packet.reset( | 3225 raw_close_packet.reset( |
3205 framer_.ConstructFrameDataPacket(header, frames).packet); | 3226 framer_.ConstructFrameDataPacket(header, frames).packet); |
3206 ASSERT_TRUE(raw_ack_packet != NULL); | 3227 ASSERT_TRUE(raw_ack_packet != NULL); |
3207 EXPECT_EQ(original_raw_length, raw_close_packet->length()); | 3228 EXPECT_EQ(original_raw_length, raw_close_packet->length()); |
3208 } | 3229 } |
3209 | 3230 |
3210 TEST_F(QuicFramerTest, EntropyFlagTest) { | 3231 TEST_P(QuicFramerTest, EntropyFlagTest) { |
3211 unsigned char packet[] = { | 3232 unsigned char packet[] = { |
3212 // public flags (8 byte guid) | 3233 // public flags (8 byte guid) |
3213 0x3C, | 3234 0x3C, |
3214 // guid | 3235 // guid |
3215 0x10, 0x32, 0x54, 0x76, | 3236 0x10, 0x32, 0x54, 0x76, |
3216 0x98, 0xBA, 0xDC, 0xFE, | 3237 0x98, 0xBA, 0xDC, 0xFE, |
3217 // packet sequence number | 3238 // packet sequence number |
3218 0xBC, 0x9A, 0x78, 0x56, | 3239 0xBC, 0x9A, 0x78, 0x56, |
3219 0x34, 0x12, | 3240 0x34, 0x12, |
3220 // private flags (Entropy) | 3241 // private flags (Entropy) |
(...skipping 18 matching lines...) Expand all Loading... |
3239 | 3260 |
3240 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3261 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3241 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3262 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3263 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3243 ASSERT_TRUE(visitor_.header_.get()); | 3264 ASSERT_TRUE(visitor_.header_.get()); |
3244 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3265 EXPECT_TRUE(visitor_.header_->entropy_flag); |
3245 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3266 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
3246 EXPECT_FALSE(visitor_.header_->fec_flag); | 3267 EXPECT_FALSE(visitor_.header_->fec_flag); |
3247 }; | 3268 }; |
3248 | 3269 |
3249 TEST_F(QuicFramerTest, FecEntropyTest) { | 3270 TEST_P(QuicFramerTest, FecEntropyTest) { |
3250 unsigned char packet[] = { | 3271 unsigned char packet[] = { |
3251 // public flags (8 byte guid) | 3272 // public flags (8 byte guid) |
3252 0x3C, | 3273 0x3C, |
3253 // guid | 3274 // guid |
3254 0x10, 0x32, 0x54, 0x76, | 3275 0x10, 0x32, 0x54, 0x76, |
3255 0x98, 0xBA, 0xDC, 0xFE, | 3276 0x98, 0xBA, 0xDC, 0xFE, |
3256 // packet sequence number | 3277 // packet sequence number |
3257 0xBC, 0x9A, 0x78, 0x56, | 3278 0xBC, 0x9A, 0x78, 0x56, |
3258 0x34, 0x12, | 3279 0x34, 0x12, |
3259 // private flags (Entropy & fec group & FEC) | 3280 // private flags (Entropy & fec group & FEC) |
(...skipping 20 matching lines...) Expand all Loading... |
3280 | 3301 |
3281 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3302 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3282 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3303 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3283 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3304 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3284 ASSERT_TRUE(visitor_.header_.get()); | 3305 ASSERT_TRUE(visitor_.header_.get()); |
3285 EXPECT_TRUE(visitor_.header_->fec_flag); | 3306 EXPECT_TRUE(visitor_.header_->fec_flag); |
3286 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3307 EXPECT_TRUE(visitor_.header_->entropy_flag); |
3287 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3308 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
3288 }; | 3309 }; |
3289 | 3310 |
3290 TEST_F(QuicFramerTest, StopPacketProcessing) { | 3311 TEST_P(QuicFramerTest, StopPacketProcessing) { |
3291 unsigned char packet[] = { | 3312 unsigned char packet[] = { |
3292 // public flags (8 byte guid) | 3313 // public flags (8 byte guid) |
3293 0x3C, | 3314 0x3C, |
3294 // guid | 3315 // guid |
3295 0x10, 0x32, 0x54, 0x76, | 3316 0x10, 0x32, 0x54, 0x76, |
3296 0x98, 0xBA, 0xDC, 0xFE, | 3317 0x98, 0xBA, 0xDC, 0xFE, |
3297 // packet sequence number | 3318 // packet sequence number |
3298 0xBC, 0x9A, 0x78, 0x56, | 3319 0xBC, 0x9A, 0x78, 0x56, |
3299 0x34, 0x12, | 3320 0x34, 0x12, |
3300 // Entropy | 3321 // Entropy |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3341 EXPECT_CALL(visitor, OnPacketHeader(_)); | 3362 EXPECT_CALL(visitor, OnPacketHeader(_)); |
3342 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); | 3363 EXPECT_CALL(visitor, OnStreamFrame(_)).WillOnce(Return(false)); |
3343 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 3364 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
3344 EXPECT_CALL(visitor, OnPacketComplete()); | 3365 EXPECT_CALL(visitor, OnPacketComplete()); |
3345 | 3366 |
3346 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3367 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3347 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3368 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3369 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3349 } | 3370 } |
3350 | 3371 |
3351 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { | 3372 TEST_P(QuicFramerTest, ConnectionCloseWithInvalidAck) { |
3352 unsigned char packet[] = { | 3373 unsigned char packet[] = { |
3353 // public flags (8 byte guid) | 3374 // public flags (8 byte guid) |
3354 0x3C, | 3375 0x3C, |
3355 // guid | 3376 // guid |
3356 0x10, 0x32, 0x54, 0x76, | 3377 0x10, 0x32, 0x54, 0x76, |
3357 0x98, 0xBA, 0xDC, 0xFE, | 3378 0x98, 0xBA, 0xDC, 0xFE, |
3358 // packet sequence number | 3379 // packet sequence number |
3359 0xBC, 0x9A, 0x78, 0x56, | 3380 0xBC, 0x9A, 0x78, 0x56, |
3360 0x34, 0x12, | 3381 0x34, 0x12, |
3361 // private flags | 3382 // private flags |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3401 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); | 3422 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); |
3402 EXPECT_CALL(visitor, OnPacketComplete()); | 3423 EXPECT_CALL(visitor, OnPacketComplete()); |
3403 | 3424 |
3404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3426 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3427 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3407 } | 3428 } |
3408 | 3429 |
3409 } // namespace test | 3430 } // namespace test |
3410 } // namespace net | 3431 } // namespace net |
OLD | NEW |