Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: net/quic/quic_framer_test.cc

Issue 1841863002: Update monet. (Closed) Base URL: https://github.com/domokit/monet.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_http_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <stdint.h>
8
7 #include <algorithm> 9 #include <algorithm>
8 #include <map> 10 #include <map>
9 #include <string> 11 #include <string>
10 #include <vector> 12 #include <vector>
11 13
12 #include "base/containers/hash_tables.h" 14 #include "base/containers/hash_tables.h"
13 #include "base/logging.h" 15 #include "base/logging.h"
14 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
15 #include "base/port.h"
16 #include "base/stl_util.h" 17 #include "base/stl_util.h"
17 #include "net/quic/crypto/quic_decrypter.h" 18 #include "net/quic/crypto/quic_decrypter.h"
18 #include "net/quic/crypto/quic_encrypter.h" 19 #include "net/quic/crypto/quic_encrypter.h"
19 #include "net/quic/quic_protocol.h" 20 #include "net/quic/quic_protocol.h"
20 #include "net/quic/quic_utils.h" 21 #include "net/quic/quic_utils.h"
21 #include "net/quic/test_tools/quic_framer_peer.h" 22 #include "net/quic/test_tools/quic_framer_peer.h"
22 #include "net/quic/test_tools/quic_test_utils.h" 23 #include "net/quic/test_tools/quic_test_utils.h"
23 #include "net/test/gtest_util.h" 24 #include "net/test/gtest_util.h"
24 25
25 using base::hash_set; 26 using base::hash_set;
26 using base::StringPiece; 27 using base::StringPiece;
27 using std::make_pair; 28 using std::make_pair;
28 using std::map; 29 using std::map;
29 using std::numeric_limits; 30 using std::numeric_limits;
30 using std::pair; 31 using std::pair;
31 using std::string; 32 using std::string;
32 using std::vector; 33 using std::vector;
33 using testing::Return; 34 using testing::Return;
34 using testing::_; 35 using testing::_;
35 36
36 namespace net { 37 namespace net {
37 namespace test { 38 namespace test {
38 39
39 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; 40 const QuicPacketSequenceNumber kEpoch = UINT64_C(1) << 48;
40 const QuicPacketSequenceNumber kMask = kEpoch - 1; 41 const QuicPacketSequenceNumber kMask = kEpoch - 1;
41 42
42 // Index into the connection_id offset in the header. 43 // Index into the connection_id offset in the header.
43 const size_t kConnectionIdOffset = kPublicFlagsSize; 44 const size_t kConnectionIdOffset = kPublicFlagsSize;
44 // Index into the version string in the header. (if present). 45 // Index into the version string in the header. (if present).
45 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; 46 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID;
46 47
47 // Size in bytes of the stream frame fields for an arbitrary StreamID and 48 // Size in bytes of the stream frame fields for an arbitrary StreamID and
48 // offset and the last frame in a packet. 49 // offset and the last frame in a packet.
49 size_t GetMinStreamFrameSize() { 50 size_t GetMinStreamFrameSize() {
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 test::TestEntropyCalculator entropy_calculator_; 495 test::TestEntropyCalculator entropy_calculator_;
495 }; 496 };
496 497
497 // Run all framer tests with all supported versions of QUIC. 498 // Run all framer tests with all supported versions of QUIC.
498 INSTANTIATE_TEST_CASE_P(QuicFramerTests, 499 INSTANTIATE_TEST_CASE_P(QuicFramerTests,
499 QuicFramerTest, 500 QuicFramerTest,
500 ::testing::ValuesIn(kSupportedQuicVersions)); 501 ::testing::ValuesIn(kSupportedQuicVersions));
501 502
502 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) { 503 TEST_P(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearEpochStart) {
503 // A few quick manual sanity checks 504 // A few quick manual sanity checks
504 CheckCalculatePacketSequenceNumber(GG_UINT64_C(1), GG_UINT64_C(0)); 505 CheckCalculatePacketSequenceNumber(UINT64_C(1), UINT64_C(0));
505 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask); 506 CheckCalculatePacketSequenceNumber(kEpoch + 1, kMask);
506 CheckCalculatePacketSequenceNumber(kEpoch, kMask); 507 CheckCalculatePacketSequenceNumber(kEpoch, kMask);
507 508
508 // Cases where the last number was close to the start of the range 509 // Cases where the last number was close to the start of the range
509 for (uint64 last = 0; last < 10; last++) { 510 for (uint64 last = 0; last < 10; last++) {
510 // Small numbers should not wrap (even if they're out of order). 511 // Small numbers should not wrap (even if they're out of order).
511 for (uint64 j = 0; j < 10; j++) { 512 for (uint64 j = 0; j < 10; j++) {
512 CheckCalculatePacketSequenceNumber(j, last); 513 CheckCalculatePacketSequenceNumber(j, last);
513 } 514 }
514 515
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, 637 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0,
637 kMaxPacketSize - GetPacketHeaderSize( 638 kMaxPacketSize - GetPacketHeaderSize(
638 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 639 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
639 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); 640 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1);
640 641
641 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 642 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
642 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 643 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
643 644
644 ASSERT_TRUE(visitor_.header_.get()); 645 ASSERT_TRUE(visitor_.header_.get());
645 // Make sure we've parsed the packet header, so we can send an error. 646 // Make sure we've parsed the packet header, so we can send an error.
646 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 647 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
647 visitor_.header_->public_header.connection_id); 648 visitor_.header_->public_header.connection_id);
648 // Make sure the correct error is propagated. 649 // Make sure the correct error is propagated.
649 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); 650 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error());
650 } 651 }
651 652
652 TEST_P(QuicFramerTest, PacketHeader) { 653 TEST_P(QuicFramerTest, PacketHeader) {
653 unsigned char packet[] = { 654 unsigned char packet[] = {
654 // public flags (8 byte connection_id) 655 // public flags (8 byte connection_id)
655 0x3C, 656 0x3C,
656 // connection_id 657 // connection_id
657 0x10, 0x32, 0x54, 0x76, 658 0x10, 0x32, 0x54, 0x76,
658 0x98, 0xBA, 0xDC, 0xFE, 659 0x98, 0xBA, 0xDC, 0xFE,
659 // packet sequence number 660 // packet sequence number
660 0xBC, 0x9A, 0x78, 0x56, 661 0xBC, 0x9A, 0x78, 0x56,
661 0x34, 0x12, 662 0x34, 0x12,
662 // private flags 663 // private flags
663 0x00, 664 0x00,
664 }; 665 };
665 666
666 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 667 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
667 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 668 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
668 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 669 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
669 ASSERT_TRUE(visitor_.header_.get()); 670 ASSERT_TRUE(visitor_.header_.get());
670 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 671 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
671 visitor_.header_->public_header.connection_id); 672 visitor_.header_->public_header.connection_id);
672 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 673 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
673 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 674 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
674 EXPECT_FALSE(visitor_.header_->fec_flag); 675 EXPECT_FALSE(visitor_.header_->fec_flag);
675 EXPECT_FALSE(visitor_.header_->entropy_flag); 676 EXPECT_FALSE(visitor_.header_->entropy_flag);
676 EXPECT_EQ(0, visitor_.header_->entropy_hash); 677 EXPECT_EQ(0, visitor_.header_->entropy_hash);
677 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 678 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
678 visitor_.header_->packet_sequence_number);
679 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 679 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
680 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 680 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
681 681
682 // Now test framing boundaries. 682 // Now test framing boundaries.
683 for (size_t i = 0; 683 for (size_t i = 0;
684 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 684 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
685 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 685 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
686 ++i) { 686 ++i) {
687 string expected_error; 687 string expected_error;
688 if (i < kConnectionIdOffset) { 688 if (i < kConnectionIdOffset) {
689 expected_error = "Unable to read public flags."; 689 expected_error = "Unable to read public flags.";
690 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { 690 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
691 expected_error = "Unable to read ConnectionId."; 691 expected_error = "Unable to read ConnectionId.";
692 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { 692 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) {
693 expected_error = "Unable to read sequence number."; 693 expected_error = "Unable to read sequence number.";
694 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { 694 } else if (i < GetFecGroupOffset(!kIncludeVersion)) {
695 expected_error = "Unable to read private flags."; 695 expected_error = "Unable to read private flags.";
696 } else { 696 } else {
697 expected_error = "Unable to read first fec protected packet offset."; 697 expected_error = "Unable to read first fec protected packet offset.";
698 } 698 }
699 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 699 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
700 } 700 }
701 } 701 }
702 702
703 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { 703 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) {
704 QuicFramerPeer::SetLastSerializedConnectionId( 704 QuicFramerPeer::SetLastSerializedConnectionId(&framer_,
705 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); 705 UINT64_C(0xFEDCBA9876543210));
706 706
707 unsigned char packet[] = { 707 unsigned char packet[] = {
708 // public flags (4 byte connection_id) 708 // public flags (4 byte connection_id)
709 0x38, 709 0x38,
710 // connection_id 710 // connection_id
711 0x10, 0x32, 0x54, 0x76, 711 0x10, 0x32, 0x54, 0x76,
712 // packet sequence number 712 // packet sequence number
713 0xBC, 0x9A, 0x78, 0x56, 713 0xBC, 0x9A, 0x78, 0x56,
714 0x34, 0x12, 714 0x34, 0x12,
715 // private flags 715 // private flags
716 0x00, 716 0x00,
717 }; 717 };
718 718
719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 719 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
720 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 720 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
721 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 721 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
722 ASSERT_TRUE(visitor_.header_.get()); 722 ASSERT_TRUE(visitor_.header_.get());
723 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 723 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
724 visitor_.header_->public_header.connection_id); 724 visitor_.header_->public_header.connection_id);
725 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 725 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
726 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 726 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
727 EXPECT_FALSE(visitor_.header_->fec_flag); 727 EXPECT_FALSE(visitor_.header_->fec_flag);
728 EXPECT_FALSE(visitor_.header_->entropy_flag); 728 EXPECT_FALSE(visitor_.header_->entropy_flag);
729 EXPECT_EQ(0, visitor_.header_->entropy_hash); 729 EXPECT_EQ(0, visitor_.header_->entropy_hash);
730 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 730 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
731 visitor_.header_->packet_sequence_number);
732 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 731 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
733 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 732 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
734 733
735 // Now test framing boundaries. 734 // Now test framing boundaries.
736 for (size_t i = 0; 735 for (size_t i = 0;
737 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, 736 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion,
738 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 737 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
739 ++i) { 738 ++i) {
740 string expected_error; 739 string expected_error;
741 if (i < kConnectionIdOffset) { 740 if (i < kConnectionIdOffset) {
742 expected_error = "Unable to read public flags."; 741 expected_error = "Unable to read public flags.";
743 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_CONNECTION_ID, 742 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_CONNECTION_ID,
744 !kIncludeVersion)) { 743 !kIncludeVersion)) {
745 expected_error = "Unable to read ConnectionId."; 744 expected_error = "Unable to read ConnectionId.";
746 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, 745 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID,
747 !kIncludeVersion)) { 746 !kIncludeVersion)) {
748 expected_error = "Unable to read sequence number."; 747 expected_error = "Unable to read sequence number.";
749 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, 748 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID,
750 !kIncludeVersion)) { 749 !kIncludeVersion)) {
751 expected_error = "Unable to read private flags."; 750 expected_error = "Unable to read private flags.";
752 } else { 751 } else {
753 expected_error = "Unable to read first fec protected packet offset."; 752 expected_error = "Unable to read first fec protected packet offset.";
754 } 753 }
755 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 754 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
756 } 755 }
757 } 756 }
758 757
759 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { 758 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) {
760 QuicFramerPeer::SetLastSerializedConnectionId( 759 QuicFramerPeer::SetLastSerializedConnectionId(&framer_,
761 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); 760 UINT64_C(0xFEDCBA9876543210));
762 761
763 unsigned char packet[] = { 762 unsigned char packet[] = {
764 // public flags (1 byte connection_id) 763 // public flags (1 byte connection_id)
765 0x34, 764 0x34,
766 // connection_id 765 // connection_id
767 0x10, 766 0x10,
768 // packet sequence number 767 // packet sequence number
769 0xBC, 0x9A, 0x78, 0x56, 768 0xBC, 0x9A, 0x78, 0x56,
770 0x34, 0x12, 769 0x34, 0x12,
771 // private flags 770 // private flags
772 0x00, 771 0x00,
773 }; 772 };
774 773
775 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 774 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
776 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 775 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
777 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 776 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
778 ASSERT_TRUE(visitor_.header_.get()); 777 ASSERT_TRUE(visitor_.header_.get());
779 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 778 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
780 visitor_.header_->public_header.connection_id); 779 visitor_.header_->public_header.connection_id);
781 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 780 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
782 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 781 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
783 EXPECT_FALSE(visitor_.header_->fec_flag); 782 EXPECT_FALSE(visitor_.header_->fec_flag);
784 EXPECT_FALSE(visitor_.header_->entropy_flag); 783 EXPECT_FALSE(visitor_.header_->entropy_flag);
785 EXPECT_EQ(0, visitor_.header_->entropy_hash); 784 EXPECT_EQ(0, visitor_.header_->entropy_hash);
786 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 785 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
787 visitor_.header_->packet_sequence_number);
788 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 786 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
789 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 787 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
790 788
791 // Now test framing boundaries. 789 // Now test framing boundaries.
792 for (size_t i = 0; 790 for (size_t i = 0;
793 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, 791 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion,
794 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 792 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
795 ++i) { 793 ++i) {
796 string expected_error; 794 string expected_error;
797 if (i < kConnectionIdOffset) { 795 if (i < kConnectionIdOffset) {
798 expected_error = "Unable to read public flags."; 796 expected_error = "Unable to read public flags.";
799 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_CONNECTION_ID, 797 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_CONNECTION_ID,
800 !kIncludeVersion)) { 798 !kIncludeVersion)) {
801 expected_error = "Unable to read ConnectionId."; 799 expected_error = "Unable to read ConnectionId.";
802 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, 800 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID,
803 !kIncludeVersion)) { 801 !kIncludeVersion)) {
804 expected_error = "Unable to read sequence number."; 802 expected_error = "Unable to read sequence number.";
805 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, 803 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID,
806 !kIncludeVersion)) { 804 !kIncludeVersion)) {
807 expected_error = "Unable to read private flags."; 805 expected_error = "Unable to read private flags.";
808 } else { 806 } else {
809 expected_error = "Unable to read first fec protected packet offset."; 807 expected_error = "Unable to read first fec protected packet offset.";
810 } 808 }
811 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 809 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
812 } 810 }
813 } 811 }
814 812
815 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { 813 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) {
816 QuicFramerPeer::SetLastSerializedConnectionId( 814 QuicFramerPeer::SetLastSerializedConnectionId(&framer_,
817 &framer_, GG_UINT64_C(0xFEDCBA9876543210)); 815 UINT64_C(0xFEDCBA9876543210));
818 816
819 unsigned char packet[] = { 817 unsigned char packet[] = {
820 // public flags (0 byte connection_id) 818 // public flags (0 byte connection_id)
821 0x30, 819 0x30,
822 // connection_id 820 // connection_id
823 // packet sequence number 821 // packet sequence number
824 0xBC, 0x9A, 0x78, 0x56, 822 0xBC, 0x9A, 0x78, 0x56,
825 0x34, 0x12, 823 0x34, 0x12,
826 // private flags 824 // private flags
827 0x00, 825 0x00,
828 }; 826 };
829 827
830 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 828 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
831 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 829 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
832 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 830 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
833 ASSERT_TRUE(visitor_.header_.get()); 831 ASSERT_TRUE(visitor_.header_.get());
834 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 832 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
835 visitor_.header_->public_header.connection_id); 833 visitor_.header_->public_header.connection_id);
836 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 834 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
837 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 835 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
838 EXPECT_FALSE(visitor_.header_->fec_flag); 836 EXPECT_FALSE(visitor_.header_->fec_flag);
839 EXPECT_FALSE(visitor_.header_->entropy_flag); 837 EXPECT_FALSE(visitor_.header_->entropy_flag);
840 EXPECT_EQ(0, visitor_.header_->entropy_hash); 838 EXPECT_EQ(0, visitor_.header_->entropy_hash);
841 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 839 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
842 visitor_.header_->packet_sequence_number);
843 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 840 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
844 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 841 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
845 842
846 // Now test framing boundaries. 843 // Now test framing boundaries.
847 for (size_t i = 0; 844 for (size_t i = 0;
848 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, 845 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion,
849 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 846 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
850 ++i) { 847 ++i) {
851 string expected_error; 848 string expected_error;
852 if (i < kConnectionIdOffset) { 849 if (i < kConnectionIdOffset) {
(...skipping 27 matching lines...) Expand all
880 0xBC, 0x9A, 0x78, 0x56, 877 0xBC, 0x9A, 0x78, 0x56,
881 0x34, 0x12, 878 0x34, 0x12,
882 // private flags 879 // private flags
883 0x00, 880 0x00,
884 }; 881 };
885 882
886 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 883 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
887 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 884 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
888 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 885 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
889 ASSERT_TRUE(visitor_.header_.get()); 886 ASSERT_TRUE(visitor_.header_.get());
890 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 887 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
891 visitor_.header_->public_header.connection_id); 888 visitor_.header_->public_header.connection_id);
892 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 889 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
893 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 890 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
894 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); 891 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
895 EXPECT_FALSE(visitor_.header_->fec_flag); 892 EXPECT_FALSE(visitor_.header_->fec_flag);
896 EXPECT_FALSE(visitor_.header_->entropy_flag); 893 EXPECT_FALSE(visitor_.header_->entropy_flag);
897 EXPECT_EQ(0, visitor_.header_->entropy_hash); 894 EXPECT_EQ(0, visitor_.header_->entropy_hash);
898 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 895 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
899 visitor_.header_->packet_sequence_number);
900 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 896 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
901 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 897 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
902 898
903 // Now test framing boundaries. 899 // Now test framing boundaries.
904 for (size_t i = 0; 900 for (size_t i = 0;
905 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, 901 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
906 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 902 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
907 ++i) { 903 ++i) {
908 string expected_error; 904 string expected_error;
909 if (i < kConnectionIdOffset) { 905 if (i < kConnectionIdOffset) {
910 expected_error = "Unable to read public flags."; 906 expected_error = "Unable to read public flags.";
911 } else if (i < kVersionOffset) { 907 } else if (i < kVersionOffset) {
912 expected_error = "Unable to read ConnectionId."; 908 expected_error = "Unable to read ConnectionId.";
913 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { 909 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) {
914 expected_error = "Unable to read protocol version."; 910 expected_error = "Unable to read protocol version.";
915 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { 911 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) {
916 expected_error = "Unable to read sequence number."; 912 expected_error = "Unable to read sequence number.";
917 } else if (i < GetFecGroupOffset(kIncludeVersion)) { 913 } else if (i < GetFecGroupOffset(kIncludeVersion)) {
918 expected_error = "Unable to read private flags."; 914 expected_error = "Unable to read private flags.";
919 } else { 915 } else {
920 expected_error = "Unable to read first fec protected packet offset."; 916 expected_error = "Unable to read first fec protected packet offset.";
921 } 917 }
922 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 918 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
923 } 919 }
924 } 920 }
925 921
926 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { 922 TEST_P(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) {
927 QuicFramerPeer::SetLastSequenceNumber(&framer_, 923 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA));
928 GG_UINT64_C(0x123456789ABA));
929 924
930 unsigned char packet[] = { 925 unsigned char packet[] = {
931 // public flags (8 byte connection_id and 4 byte sequence number) 926 // public flags (8 byte connection_id and 4 byte sequence number)
932 0x2C, 927 0x2C,
933 // connection_id 928 // connection_id
934 0x10, 0x32, 0x54, 0x76, 929 0x10, 0x32, 0x54, 0x76,
935 0x98, 0xBA, 0xDC, 0xFE, 930 0x98, 0xBA, 0xDC, 0xFE,
936 // packet sequence number 931 // packet sequence number
937 0xBC, 0x9A, 0x78, 0x56, 932 0xBC, 0x9A, 0x78, 0x56,
938 // private flags 933 // private flags
939 0x00, 934 0x00,
940 }; 935 };
941 936
942 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 937 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
943 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 938 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
944 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 939 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
945 ASSERT_TRUE(visitor_.header_.get()); 940 ASSERT_TRUE(visitor_.header_.get());
946 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 941 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
947 visitor_.header_->public_header.connection_id); 942 visitor_.header_->public_header.connection_id);
948 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 943 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
949 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 944 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
950 EXPECT_FALSE(visitor_.header_->fec_flag); 945 EXPECT_FALSE(visitor_.header_->fec_flag);
951 EXPECT_FALSE(visitor_.header_->entropy_flag); 946 EXPECT_FALSE(visitor_.header_->entropy_flag);
952 EXPECT_EQ(0, visitor_.header_->entropy_hash); 947 EXPECT_EQ(0, visitor_.header_->entropy_hash);
953 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 948 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
954 visitor_.header_->packet_sequence_number);
955 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 949 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
956 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 950 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
957 951
958 // Now test framing boundaries. 952 // Now test framing boundaries.
959 for (size_t i = 0; 953 for (size_t i = 0;
960 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 954 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
961 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 955 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
962 ++i) { 956 ++i) {
963 string expected_error; 957 string expected_error;
964 if (i < kConnectionIdOffset) { 958 if (i < kConnectionIdOffset) {
965 expected_error = "Unable to read public flags."; 959 expected_error = "Unable to read public flags.";
966 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { 960 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
967 expected_error = "Unable to read ConnectionId."; 961 expected_error = "Unable to read ConnectionId.";
968 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, 962 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
969 PACKET_4BYTE_SEQUENCE_NUMBER)) { 963 PACKET_4BYTE_SEQUENCE_NUMBER)) {
970 expected_error = "Unable to read sequence number."; 964 expected_error = "Unable to read sequence number.";
971 } else if (i < GetFecGroupOffset(!kIncludeVersion, 965 } else if (i < GetFecGroupOffset(!kIncludeVersion,
972 PACKET_4BYTE_SEQUENCE_NUMBER)) { 966 PACKET_4BYTE_SEQUENCE_NUMBER)) {
973 expected_error = "Unable to read private flags."; 967 expected_error = "Unable to read private flags.";
974 } else { 968 } else {
975 expected_error = "Unable to read first fec protected packet offset."; 969 expected_error = "Unable to read first fec protected packet offset.";
976 } 970 }
977 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 971 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
978 } 972 }
979 } 973 }
980 974
981 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { 975 TEST_P(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) {
982 QuicFramerPeer::SetLastSequenceNumber(&framer_, 976 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA));
983 GG_UINT64_C(0x123456789ABA));
984 977
985 unsigned char packet[] = { 978 unsigned char packet[] = {
986 // public flags (8 byte connection_id and 2 byte sequence number) 979 // public flags (8 byte connection_id and 2 byte sequence number)
987 0x1C, 980 0x1C,
988 // connection_id 981 // connection_id
989 0x10, 0x32, 0x54, 0x76, 982 0x10, 0x32, 0x54, 0x76,
990 0x98, 0xBA, 0xDC, 0xFE, 983 0x98, 0xBA, 0xDC, 0xFE,
991 // packet sequence number 984 // packet sequence number
992 0xBC, 0x9A, 985 0xBC, 0x9A,
993 // private flags 986 // private flags
994 0x00, 987 0x00,
995 }; 988 };
996 989
997 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 990 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
998 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 991 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
999 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 992 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1000 ASSERT_TRUE(visitor_.header_.get()); 993 ASSERT_TRUE(visitor_.header_.get());
1001 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 994 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
1002 visitor_.header_->public_header.connection_id); 995 visitor_.header_->public_header.connection_id);
1003 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 996 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1004 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 997 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1005 EXPECT_FALSE(visitor_.header_->fec_flag); 998 EXPECT_FALSE(visitor_.header_->fec_flag);
1006 EXPECT_FALSE(visitor_.header_->entropy_flag); 999 EXPECT_FALSE(visitor_.header_->entropy_flag);
1007 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1000 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1008 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 1001 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
1009 visitor_.header_->packet_sequence_number);
1010 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 1002 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
1011 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 1003 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
1012 1004
1013 // Now test framing boundaries. 1005 // Now test framing boundaries.
1014 for (size_t i = 0; 1006 for (size_t i = 0;
1015 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 1007 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
1016 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 1008 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
1017 ++i) { 1009 ++i) {
1018 string expected_error; 1010 string expected_error;
1019 if (i < kConnectionIdOffset) { 1011 if (i < kConnectionIdOffset) {
1020 expected_error = "Unable to read public flags."; 1012 expected_error = "Unable to read public flags.";
1021 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { 1013 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) {
1022 expected_error = "Unable to read ConnectionId."; 1014 expected_error = "Unable to read ConnectionId.";
1023 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, 1015 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion,
1024 PACKET_2BYTE_SEQUENCE_NUMBER)) { 1016 PACKET_2BYTE_SEQUENCE_NUMBER)) {
1025 expected_error = "Unable to read sequence number."; 1017 expected_error = "Unable to read sequence number.";
1026 } else if (i < GetFecGroupOffset(!kIncludeVersion, 1018 } else if (i < GetFecGroupOffset(!kIncludeVersion,
1027 PACKET_2BYTE_SEQUENCE_NUMBER)) { 1019 PACKET_2BYTE_SEQUENCE_NUMBER)) {
1028 expected_error = "Unable to read private flags."; 1020 expected_error = "Unable to read private flags.";
1029 } else { 1021 } else {
1030 expected_error = "Unable to read first fec protected packet offset."; 1022 expected_error = "Unable to read first fec protected packet offset.";
1031 } 1023 }
1032 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 1024 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
1033 } 1025 }
1034 } 1026 }
1035 1027
1036 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { 1028 TEST_P(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) {
1037 QuicFramerPeer::SetLastSequenceNumber(&framer_, 1029 QuicFramerPeer::SetLastSequenceNumber(&framer_, UINT64_C(0x123456789ABA));
1038 GG_UINT64_C(0x123456789ABA));
1039 1030
1040 unsigned char packet[] = { 1031 unsigned char packet[] = {
1041 // public flags (8 byte connection_id and 1 byte sequence number) 1032 // public flags (8 byte connection_id and 1 byte sequence number)
1042 0x0C, 1033 0x0C,
1043 // connection_id 1034 // connection_id
1044 0x10, 0x32, 0x54, 0x76, 1035 0x10, 0x32, 0x54, 0x76,
1045 0x98, 0xBA, 0xDC, 0xFE, 1036 0x98, 0xBA, 0xDC, 0xFE,
1046 // packet sequence number 1037 // packet sequence number
1047 0xBC, 1038 0xBC,
1048 // private flags 1039 // private flags
1049 0x00, 1040 0x00,
1050 }; 1041 };
1051 1042
1052 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1043 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1053 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1044 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1054 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1045 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1055 ASSERT_TRUE(visitor_.header_.get()); 1046 ASSERT_TRUE(visitor_.header_.get());
1056 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 1047 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
1057 visitor_.header_->public_header.connection_id); 1048 visitor_.header_->public_header.connection_id);
1058 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1049 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1059 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1050 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1060 EXPECT_FALSE(visitor_.header_->fec_flag); 1051 EXPECT_FALSE(visitor_.header_->fec_flag);
1061 EXPECT_FALSE(visitor_.header_->entropy_flag); 1052 EXPECT_FALSE(visitor_.header_->entropy_flag);
1062 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1053 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1063 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 1054 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
1064 visitor_.header_->packet_sequence_number);
1065 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 1055 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
1066 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 1056 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
1067 1057
1068 // Now test framing boundaries. 1058 // Now test framing boundaries.
1069 for (size_t i = 0; 1059 for (size_t i = 0;
1070 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 1060 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
1071 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 1061 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
1072 ++i) { 1062 ++i) {
1073 string expected_error; 1063 string expected_error;
1074 if (i < kConnectionIdOffset) { 1064 if (i < kConnectionIdOffset) {
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 1283
1294 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1284 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1295 ASSERT_TRUE(visitor_.header_.get()); 1285 ASSERT_TRUE(visitor_.header_.get());
1296 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1286 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1297 1287
1298 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1288 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1299 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1289 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1300 EXPECT_EQ(static_cast<uint64>(0x01020304), 1290 EXPECT_EQ(static_cast<uint64>(0x01020304),
1301 visitor_.stream_frames_[0]->stream_id); 1291 visitor_.stream_frames_[0]->stream_id);
1302 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1292 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1303 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1293 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1304 visitor_.stream_frames_[0]->offset);
1305 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1294 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1306 1295
1307 // Now test framing boundaries. 1296 // Now test framing boundaries.
1308 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); 1297 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion);
1309 } 1298 }
1310 1299
1311 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { 1300 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) {
1312 unsigned char packet[] = { 1301 unsigned char packet[] = {
1313 // public flags (8 byte connection_id) 1302 // public flags (8 byte connection_id)
1314 0x3C, 1303 0x3C,
(...skipping 23 matching lines...) Expand all
1338 1327
1339 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1328 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1340 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1329 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1341 1330
1342 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1331 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1343 ASSERT_TRUE(visitor_.header_.get()); 1332 ASSERT_TRUE(visitor_.header_.get());
1344 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1333 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1345 1334
1346 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1335 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1347 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1336 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1348 EXPECT_EQ(GG_UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id); 1337 EXPECT_EQ(UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id);
1349 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1338 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1350 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1339 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1351 visitor_.stream_frames_[0]->offset);
1352 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1340 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1353 1341
1354 // Now test framing boundaries. 1342 // Now test framing boundaries.
1355 const size_t stream_id_size = 3; 1343 const size_t stream_id_size = 3;
1356 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); 1344 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion);
1357 } 1345 }
1358 1346
1359 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { 1347 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
1360 unsigned char packet[] = { 1348 unsigned char packet[] = {
1361 // public flags (8 byte connection_id) 1349 // public flags (8 byte connection_id)
(...skipping 27 matching lines...) Expand all
1389 1377
1390 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1378 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1391 ASSERT_TRUE(visitor_.header_.get()); 1379 ASSERT_TRUE(visitor_.header_.get());
1392 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1380 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1393 1381
1394 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1382 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1395 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1383 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1396 EXPECT_EQ(static_cast<uint64>(0x00000304), 1384 EXPECT_EQ(static_cast<uint64>(0x00000304),
1397 visitor_.stream_frames_[0]->stream_id); 1385 visitor_.stream_frames_[0]->stream_id);
1398 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1386 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1399 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1387 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1400 visitor_.stream_frames_[0]->offset);
1401 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1388 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1402 1389
1403 // Now test framing boundaries. 1390 // Now test framing boundaries.
1404 const size_t stream_id_size = 2; 1391 const size_t stream_id_size = 2;
1405 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); 1392 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion);
1406 } 1393 }
1407 1394
1408 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { 1395 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) {
1409 unsigned char packet[] = { 1396 unsigned char packet[] = {
1410 // public flags (8 byte connection_id) 1397 // public flags (8 byte connection_id)
(...skipping 27 matching lines...) Expand all
1438 1425
1439 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1426 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1440 ASSERT_TRUE(visitor_.header_.get()); 1427 ASSERT_TRUE(visitor_.header_.get());
1441 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1428 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1442 1429
1443 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1430 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1444 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1431 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1445 EXPECT_EQ(static_cast<uint64>(0x00000004), 1432 EXPECT_EQ(static_cast<uint64>(0x00000004),
1446 visitor_.stream_frames_[0]->stream_id); 1433 visitor_.stream_frames_[0]->stream_id);
1447 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1434 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1448 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1435 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1449 visitor_.stream_frames_[0]->offset);
1450 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1436 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1451 1437
1452 // Now test framing boundaries. 1438 // Now test framing boundaries.
1453 const size_t stream_id_size = 1; 1439 const size_t stream_id_size = 1;
1454 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); 1440 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion);
1455 } 1441 }
1456 1442
1457 TEST_P(QuicFramerTest, StreamFrameWithVersion) { 1443 TEST_P(QuicFramerTest, StreamFrameWithVersion) {
1458 unsigned char packet[] = { 1444 unsigned char packet[] = {
1459 // public flags (version, 8 byte connection_id) 1445 // public flags (version, 8 byte connection_id)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 ASSERT_TRUE(visitor_.header_.get()); 1477 ASSERT_TRUE(visitor_.header_.get());
1492 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 1478 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
1493 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); 1479 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
1494 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); 1480 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion));
1495 1481
1496 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1482 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1497 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1483 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1498 EXPECT_EQ(static_cast<uint64>(0x01020304), 1484 EXPECT_EQ(static_cast<uint64>(0x01020304),
1499 visitor_.stream_frames_[0]->stream_id); 1485 visitor_.stream_frames_[0]->stream_id);
1500 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1486 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1501 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1487 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1502 visitor_.stream_frames_[0]->offset);
1503 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1488 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1504 1489
1505 // Now test framing boundaries. 1490 // Now test framing boundaries.
1506 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); 1491 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion);
1507 } 1492 }
1508 1493
1509 TEST_P(QuicFramerTest, RejectPacket) { 1494 TEST_P(QuicFramerTest, RejectPacket) {
1510 visitor_.accept_packet_ = false; 1495 visitor_.accept_packet_ = false;
1511 1496
1512 unsigned char packet[] = { 1497 unsigned char packet[] = {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 0xDC, 0xFE, 0x98, 0xBA, 1562 0xDC, 0xFE, 0x98, 0xBA,
1578 // data length 1563 // data length
1579 0x0c, 0x00, 1564 0x0c, 0x00,
1580 // data 1565 // data
1581 'h', 'e', 'l', 'l', 1566 'h', 'e', 'l', 'l',
1582 'o', ' ', 'w', 'o', 1567 'o', ' ', 'w', 'o',
1583 'r', 'l', 'd', '!', 1568 'r', 'l', 'd', '!',
1584 }; 1569 };
1585 1570
1586 QuicPacketHeader header; 1571 QuicPacketHeader header;
1587 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 1572 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
1588 header.public_header.reset_flag = false; 1573 header.public_header.reset_flag = false;
1589 header.public_header.version_flag = false; 1574 header.public_header.version_flag = false;
1590 header.fec_flag = true; 1575 header.fec_flag = true;
1591 header.entropy_flag = true; 1576 header.entropy_flag = true;
1592 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1577 header.packet_sequence_number = UINT64_C(0x123456789ABC);
1593 header.fec_group = 0; 1578 header.fec_group = 0;
1594 1579
1595 // Do not encrypt the payload because the revived payload is post-encryption. 1580 // Do not encrypt the payload because the revived payload is post-encryption.
1596 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, 1581 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header,
1597 StringPiece(AsChars(payload), 1582 StringPiece(AsChars(payload),
1598 arraysize(payload)))); 1583 arraysize(payload))));
1599 1584
1600 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1585 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1601 ASSERT_EQ(1, visitor_.revived_packets_); 1586 ASSERT_EQ(1, visitor_.revived_packets_);
1602 ASSERT_TRUE(visitor_.header_.get()); 1587 ASSERT_TRUE(visitor_.header_.get());
1603 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 1588 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
1604 visitor_.header_->public_header.connection_id); 1589 visitor_.header_->public_header.connection_id);
1605 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1590 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1606 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1591 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1607 EXPECT_TRUE(visitor_.header_->fec_flag); 1592 EXPECT_TRUE(visitor_.header_->fec_flag);
1608 EXPECT_TRUE(visitor_.header_->entropy_flag); 1593 EXPECT_TRUE(visitor_.header_->entropy_flag);
1609 EXPECT_EQ(1 << (header.packet_sequence_number % 8), 1594 EXPECT_EQ(1 << (header.packet_sequence_number % 8),
1610 visitor_.header_->entropy_hash); 1595 visitor_.header_->entropy_hash);
1611 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 1596 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_sequence_number);
1612 visitor_.header_->packet_sequence_number);
1613 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 1597 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
1614 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 1598 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
1615 1599
1616 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1600 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1617 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1601 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1618 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1602 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1619 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1603 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1620 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1604 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1621 visitor_.stream_frames_[0]->offset);
1622 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1605 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1623 } 1606 }
1624 1607
1625 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { 1608 TEST_P(QuicFramerTest, StreamFrameInFecGroup) {
1626 unsigned char packet[] = { 1609 unsigned char packet[] = {
1627 // public flags (8 byte connection_id) 1610 // public flags (8 byte connection_id)
1628 0x3C, 1611 0x3C,
1629 // connection_id 1612 // connection_id
1630 0x10, 0x32, 0x54, 0x76, 1613 0x10, 0x32, 0x54, 0x76,
1631 0x98, 0xBA, 0xDC, 0xFE, 1614 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 20 matching lines...) Expand all
1652 'r', 'l', 'd', '!', 1635 'r', 'l', 'd', '!',
1653 }; 1636 };
1654 1637
1655 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1638 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1656 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1639 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1657 1640
1658 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1641 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1659 ASSERT_TRUE(visitor_.header_.get()); 1642 ASSERT_TRUE(visitor_.header_.get());
1660 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1643 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1661 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); 1644 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group);
1662 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), 1645 EXPECT_EQ(UINT64_C(0x341256789ABA), visitor_.header_->fec_group);
1663 visitor_.header_->fec_group);
1664 const size_t fec_offset = 1646 const size_t fec_offset =
1665 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, 1647 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID,
1666 !kIncludeVersion, 1648 !kIncludeVersion,
1667 PACKET_6BYTE_SEQUENCE_NUMBER); 1649 PACKET_6BYTE_SEQUENCE_NUMBER);
1668 EXPECT_EQ( 1650 EXPECT_EQ(
1669 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), 1651 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset),
1670 visitor_.fec_protected_payload_); 1652 visitor_.fec_protected_payload_);
1671 1653
1672 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1654 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1673 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1655 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1674 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); 1656 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id);
1675 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1657 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1676 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1658 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset);
1677 visitor_.stream_frames_[0]->offset);
1678 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1659 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1679 } 1660 }
1680 1661
1681 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { 1662 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) {
1682 unsigned char packet[] = { 1663 unsigned char packet[] = {
1683 // public flags (8 byte connection_id) 1664 // public flags (8 byte connection_id)
1684 0x3C, 1665 0x3C,
1685 // connection_id 1666 // connection_id
1686 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 1667 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
1687 // packet sequence number 1668 // packet sequence number
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1703 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1723 1704
1724 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1705 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1725 ASSERT_TRUE(visitor_.header_.get()); 1706 ASSERT_TRUE(visitor_.header_.get());
1726 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1707 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1727 1708
1728 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1709 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1729 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1710 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1730 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1711 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1731 EXPECT_EQ(0xBA, frame.entropy_hash); 1712 EXPECT_EQ(0xBA, frame.entropy_hash);
1732 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); 1713 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed);
1733 ASSERT_EQ(1u, frame.missing_packets.size()); 1714 ASSERT_EQ(1u, frame.missing_packets.size());
1734 ASSERT_EQ(2u, frame.received_packet_times.size()); 1715 ASSERT_EQ(2u, frame.received_packet_times.size());
1735 SequenceNumberSet::const_iterator missing_iter = 1716 SequenceNumberSet::const_iterator missing_iter =
1736 frame.missing_packets.begin(); 1717 frame.missing_packets.begin();
1737 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1718 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter);
1738 1719
1739 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1720 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1740 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1721 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1741 kQuicEntropyHashSize; 1722 kQuicEntropyHashSize;
1742 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1723 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1743 PACKET_6BYTE_SEQUENCE_NUMBER; 1724 PACKET_6BYTE_SEQUENCE_NUMBER;
1744 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 1725 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset +
1745 kQuicDeltaTimeLargestObservedSize; 1726 kQuicDeltaTimeLargestObservedSize;
1746 const size_t kTimestampDeltaLargestObserved1 = kNumTimestampsOffset + 1727 const size_t kTimestampDeltaLargestObserved1 = kNumTimestampsOffset +
1747 kQuicNumTimestampsSize; 1728 kQuicNumTimestampsSize;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1820 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1840 1821
1841 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1822 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1842 ASSERT_TRUE(visitor_.header_.get()); 1823 ASSERT_TRUE(visitor_.header_.get());
1843 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1824 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1844 1825
1845 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1826 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1846 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1827 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1847 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1828 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1848 EXPECT_EQ(0xBA, frame.entropy_hash); 1829 EXPECT_EQ(0xBA, frame.entropy_hash);
1849 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); 1830 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed);
1850 ASSERT_EQ(1u, frame.missing_packets.size()); 1831 ASSERT_EQ(1u, frame.missing_packets.size());
1851 ASSERT_EQ(1u, frame.received_packet_times.size()); 1832 ASSERT_EQ(1u, frame.received_packet_times.size());
1852 SequenceNumberSet::const_iterator missing_iter = 1833 SequenceNumberSet::const_iterator missing_iter =
1853 frame.missing_packets.begin(); 1834 frame.missing_packets.begin();
1854 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1835 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter);
1855 1836
1856 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1837 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1857 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1838 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1858 kQuicEntropyHashSize; 1839 kQuicEntropyHashSize;
1859 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1840 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1860 PACKET_6BYTE_SEQUENCE_NUMBER; 1841 PACKET_6BYTE_SEQUENCE_NUMBER;
1861 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 1842 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset +
1862 kQuicDeltaTimeLargestObservedSize; 1843 kQuicDeltaTimeLargestObservedSize;
1863 const size_t kTimestampDeltaLargestObserved = kNumTimestampsOffset + 1844 const size_t kTimestampDeltaLargestObserved = kNumTimestampsOffset +
1864 kQuicNumTimestampsSize; 1845 kQuicNumTimestampsSize;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1942 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1923 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1943 1924
1944 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1925 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1945 ASSERT_TRUE(visitor_.header_.get()); 1926 ASSERT_TRUE(visitor_.header_.get());
1946 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1927 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1947 1928
1948 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 1929 EXPECT_EQ(0u, visitor_.stream_frames_.size());
1949 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 1930 ASSERT_EQ(1u, visitor_.ack_frames_.size());
1950 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 1931 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
1951 EXPECT_EQ(0xBA, frame.entropy_hash); 1932 EXPECT_EQ(0xBA, frame.entropy_hash);
1952 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); 1933 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed);
1953 ASSERT_EQ(1u, frame.missing_packets.size()); 1934 ASSERT_EQ(1u, frame.missing_packets.size());
1954 SequenceNumberSet::const_iterator missing_iter = 1935 SequenceNumberSet::const_iterator missing_iter =
1955 frame.missing_packets.begin(); 1936 frame.missing_packets.begin();
1956 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 1937 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter);
1957 1938
1958 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 1939 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
1959 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 1940 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
1960 kQuicEntropyHashSize; 1941 kQuicEntropyHashSize;
1961 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 1942 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
1962 PACKET_6BYTE_SEQUENCE_NUMBER; 1943 PACKET_6BYTE_SEQUENCE_NUMBER;
1963 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 1944 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset +
1964 kQuicDeltaTimeLargestObservedSize; 1945 kQuicDeltaTimeLargestObservedSize;
1965 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + 1946 const size_t kNumMissingPacketOffset = kNumTimestampsOffset +
1966 kQuicNumTimestampsSize; 1947 kQuicNumTimestampsSize;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2021 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2041 2022
2042 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2023 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2043 ASSERT_TRUE(visitor_.header_.get()); 2024 ASSERT_TRUE(visitor_.header_.get());
2044 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2025 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2045 2026
2046 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2027 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2047 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2028 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2048 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 2029 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2049 EXPECT_EQ(0xBA, frame.entropy_hash); 2030 EXPECT_EQ(0xBA, frame.entropy_hash);
2050 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed); 2031 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed);
2051 ASSERT_EQ(1u, frame.missing_packets.size()); 2032 ASSERT_EQ(1u, frame.missing_packets.size());
2052 SequenceNumberSet::const_iterator missing_iter = 2033 SequenceNumberSet::const_iterator missing_iter =
2053 frame.missing_packets.begin(); 2034 frame.missing_packets.begin();
2054 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); 2035 EXPECT_EQ(UINT64_C(0x0123456789ABE), *missing_iter);
2055 2036
2056 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 2037 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
2057 const size_t kLargestObservedOffset = kReceivedEntropyOffset + 2038 const size_t kLargestObservedOffset = kReceivedEntropyOffset +
2058 kQuicEntropyHashSize; 2039 kQuicEntropyHashSize;
2059 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + 2040 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
2060 PACKET_6BYTE_SEQUENCE_NUMBER; 2041 PACKET_6BYTE_SEQUENCE_NUMBER;
2061 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + 2042 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset +
2062 kQuicDeltaTimeLargestObservedSize; 2043 kQuicDeltaTimeLargestObservedSize;
2063 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + 2044 const size_t kNumMissingPacketOffset = kNumTimestampsOffset +
2064 kQuicNumTimestampsSize; 2045 kQuicNumTimestampsSize;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2132 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2113 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2133 2114
2134 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2115 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2135 ASSERT_TRUE(visitor_.header_.get()); 2116 ASSERT_TRUE(visitor_.header_.get());
2136 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2117 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2137 2118
2138 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2119 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2139 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2120 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2140 QuicAckFrame* frame = visitor_.ack_frames_[0]; 2121 QuicAckFrame* frame = visitor_.ack_frames_[0];
2141 EXPECT_EQ(0xBA, frame->entropy_hash); 2122 EXPECT_EQ(0xBA, frame->entropy_hash);
2142 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); 2123 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed);
2143 ASSERT_EQ(0u, frame->missing_packets.size()); 2124 ASSERT_EQ(0u, frame->missing_packets.size());
2144 2125
2145 // Verify that the packet re-serializes identically. 2126 // Verify that the packet re-serializes identically.
2146 QuicFrames frames; 2127 QuicFrames frames;
2147 frames.push_back(QuicFrame(frame)); 2128 frames.push_back(QuicFrame(frame));
2148 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 2129 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2149 ASSERT_TRUE(data != nullptr); 2130 ASSERT_TRUE(data != nullptr);
2150 2131
2151 test::CompareCharArraysWithHexError("constructed packet", data->data(), 2132 test::CompareCharArraysWithHexError("constructed packet", data->data(),
2152 data->length(), AsChars(packet), 2133 data->length(), AsChars(packet),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2195 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2176 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2196 2177
2197 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2178 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2198 ASSERT_TRUE(visitor_.header_.get()); 2179 ASSERT_TRUE(visitor_.header_.get());
2199 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2180 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2200 2181
2201 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2182 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2202 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2183 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2203 QuicAckFrame* frame = visitor_.ack_frames_[0]; 2184 QuicAckFrame* frame = visitor_.ack_frames_[0];
2204 EXPECT_EQ(0xBA, frame->entropy_hash); 2185 EXPECT_EQ(0xBA, frame->entropy_hash);
2205 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed); 2186 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed);
2206 EXPECT_EQ(0u, frame->revived_packets.size()); 2187 EXPECT_EQ(0u, frame->revived_packets.size());
2207 ASSERT_EQ(500u, frame->missing_packets.size()); 2188 ASSERT_EQ(500u, frame->missing_packets.size());
2208 SequenceNumberSet::const_iterator first_missing_iter = 2189 SequenceNumberSet::const_iterator first_missing_iter =
2209 frame->missing_packets.begin(); 2190 frame->missing_packets.begin();
2210 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter); 2191 EXPECT_EQ(UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
2211 SequenceNumberSet::const_reverse_iterator last_missing_iter = 2192 SequenceNumberSet::const_reverse_iterator last_missing_iter =
2212 frame->missing_packets.rbegin(); 2193 frame->missing_packets.rbegin();
2213 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter); 2194 EXPECT_EQ(UINT64_C(0x0123456789ABE), *last_missing_iter);
2214 2195
2215 // Verify that the packet re-serializes identically. 2196 // Verify that the packet re-serializes identically.
2216 QuicFrames frames; 2197 QuicFrames frames;
2217 frames.push_back(QuicFrame(frame)); 2198 frames.push_back(QuicFrame(frame));
2218 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 2199 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
2219 ASSERT_TRUE(data != nullptr); 2200 ASSERT_TRUE(data != nullptr);
2220 2201
2221 test::CompareCharArraysWithHexError("constructed packet", 2202 test::CompareCharArraysWithHexError("constructed packet",
2222 data->data(), data->length(), 2203 data->data(), data->length(),
2223 AsChars(packet), arraysize(packet)); 2204 AsChars(packet), arraysize(packet));
(...skipping 26 matching lines...) Expand all
2250 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2231 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2251 2232
2252 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2233 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2253 ASSERT_TRUE(visitor_.header_.get()); 2234 ASSERT_TRUE(visitor_.header_.get());
2254 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2235 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2255 2236
2256 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2237 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2257 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); 2238 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size());
2258 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; 2239 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0];
2259 EXPECT_EQ(0xAB, frame.entropy_hash); 2240 EXPECT_EQ(0xAB, frame.entropy_hash);
2260 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.least_unacked); 2241 EXPECT_EQ(UINT64_C(0x0123456789AA0), frame.least_unacked);
2261 2242
2262 const size_t kSentEntropyOffset = kQuicFrameTypeSize; 2243 const size_t kSentEntropyOffset = kQuicFrameTypeSize;
2263 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; 2244 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize;
2264 const size_t frame_size = 7; 2245 const size_t frame_size = 7;
2265 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { 2246 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) {
2266 string expected_error; 2247 string expected_error;
2267 if (i < kLeastUnackedOffset) { 2248 if (i < kLeastUnackedOffset) {
2268 expected_error = "Unable to read entropy hash for sent packets."; 2249 expected_error = "Unable to read entropy hash for sent packets.";
2269 } else { 2250 } else {
2270 expected_error = "Unable to read least unacked delta."; 2251 expected_error = "Unable to read least unacked delta.";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2316 'n', 2297 'n',
2317 }; 2298 };
2318 2299
2319 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2300 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2320 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2301 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2321 2302
2322 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2303 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2323 ASSERT_TRUE(visitor_.header_.get()); 2304 ASSERT_TRUE(visitor_.header_.get());
2324 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2305 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2325 2306
2326 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); 2307 EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id);
2327 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); 2308 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code);
2328 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details); 2309 EXPECT_EQ("because I can", visitor_.rst_stream_frame_.error_details);
2329 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), 2310 EXPECT_EQ(UINT64_C(0x0807060504030201),
2330 visitor_.rst_stream_frame_.byte_offset); 2311 visitor_.rst_stream_frame_.byte_offset);
2331 2312
2332 // Now test framing boundaries. 2313 // Now test framing boundaries.
2333 for (size_t i = kQuicFrameTypeSize; 2314 for (size_t i = kQuicFrameTypeSize;
2334 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) { 2315 i < QuicFramer::GetMinRstStreamFrameSize(); ++i) {
2335 string expected_error; 2316 string expected_error;
2336 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { 2317 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) {
2337 expected_error = "Unable to read stream_id."; 2318 expected_error = "Unable to read stream_id.";
2338 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + 2319 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize +
2339 kQuicMaxStreamOffsetSize) { 2320 kQuicMaxStreamOffsetSize) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2385 }; 2366 };
2386 // clang-format on 2367 // clang-format on
2387 2368
2388 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2369 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2389 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2370 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2390 2371
2391 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2372 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2392 ASSERT_TRUE(visitor_.header_.get()); 2373 ASSERT_TRUE(visitor_.header_.get());
2393 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2374 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2394 2375
2395 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); 2376 EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id);
2396 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); 2377 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code);
2397 EXPECT_EQ(GG_UINT64_C(0x0807060504030201), 2378 EXPECT_EQ(UINT64_C(0x0807060504030201),
2398 visitor_.rst_stream_frame_.byte_offset); 2379 visitor_.rst_stream_frame_.byte_offset);
2399 2380
2400 // Now test framing boundaries. 2381 // Now test framing boundaries.
2401 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); 2382 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize();
2402 ++i) { 2383 ++i) {
2403 string expected_error; 2384 string expected_error;
2404 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { 2385 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) {
2405 expected_error = "Unable to read stream_id."; 2386 expected_error = "Unable to read stream_id.";
2406 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + 2387 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize +
2407 kQuicMaxStreamOffsetSize) { 2388 kQuicMaxStreamOffsetSize) {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
2504 'n', 2485 'n',
2505 }; 2486 };
2506 2487
2507 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2488 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2508 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2489 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2509 2490
2510 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2491 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2511 ASSERT_TRUE(visitor_.header_.get()); 2492 ASSERT_TRUE(visitor_.header_.get());
2512 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2493 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2513 2494
2514 EXPECT_EQ(GG_UINT64_C(0x01020304), 2495 EXPECT_EQ(UINT64_C(0x01020304), visitor_.goaway_frame_.last_good_stream_id);
2515 visitor_.goaway_frame_.last_good_stream_id);
2516 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); 2496 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code);
2517 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); 2497 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase);
2518 2498
2519 const size_t reason_size = arraysize("because I can") - 1; 2499 const size_t reason_size = arraysize("because I can") - 1;
2520 // Now test framing boundaries. 2500 // Now test framing boundaries.
2521 for (size_t i = kQuicFrameTypeSize; 2501 for (size_t i = kQuicFrameTypeSize;
2522 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { 2502 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) {
2523 string expected_error; 2503 string expected_error;
2524 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { 2504 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) {
2525 expected_error = "Unable to read go away error code."; 2505 expected_error = "Unable to read go away error code.";
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2560 }; 2540 };
2561 2541
2562 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2542 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2563 2543
2564 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2544 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2565 2545
2566 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2546 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2567 ASSERT_TRUE(visitor_.header_.get()); 2547 ASSERT_TRUE(visitor_.header_.get());
2568 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2548 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2569 2549
2570 EXPECT_EQ(GG_UINT64_C(0x01020304), 2550 EXPECT_EQ(UINT64_C(0x01020304), visitor_.window_update_frame_.stream_id);
2571 visitor_.window_update_frame_.stream_id); 2551 EXPECT_EQ(UINT64_C(0x0c0b0a0908070605),
2572 EXPECT_EQ(GG_UINT64_C(0x0c0b0a0908070605),
2573 visitor_.window_update_frame_.byte_offset); 2552 visitor_.window_update_frame_.byte_offset);
2574 2553
2575 // Now test framing boundaries. 2554 // Now test framing boundaries.
2576 for (size_t i = kQuicFrameTypeSize; 2555 for (size_t i = kQuicFrameTypeSize;
2577 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { 2556 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) {
2578 string expected_error; 2557 string expected_error;
2579 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { 2558 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) {
2580 expected_error = "Unable to read stream_id."; 2559 expected_error = "Unable to read stream_id.";
2581 } else { 2560 } else {
2582 expected_error = "Unable to read window byte_offset."; 2561 expected_error = "Unable to read window byte_offset.";
(...skipping 26 matching lines...) Expand all
2609 }; 2588 };
2610 2589
2611 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2590 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2612 2591
2613 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2592 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2614 2593
2615 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2594 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2616 ASSERT_TRUE(visitor_.header_.get()); 2595 ASSERT_TRUE(visitor_.header_.get());
2617 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2596 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2618 2597
2619 EXPECT_EQ(GG_UINT64_C(0x01020304), 2598 EXPECT_EQ(UINT64_C(0x01020304), visitor_.blocked_frame_.stream_id);
2620 visitor_.blocked_frame_.stream_id);
2621 2599
2622 // Now test framing boundaries. 2600 // Now test framing boundaries.
2623 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); 2601 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize();
2624 ++i) { 2602 ++i) {
2625 string expected_error = "Unable to read stream_id."; 2603 string expected_error = "Unable to read stream_id.";
2626 CheckProcessingFails( 2604 CheckProcessingFails(
2627 packet, 2605 packet,
2628 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2606 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2629 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2607 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2630 expected_error, QUIC_INVALID_BLOCKED_DATA); 2608 expected_error, QUIC_INVALID_BLOCKED_DATA);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2684 0x01, 0xEF, 0xCD, 0xAB, 2662 0x01, 0xEF, 0xCD, 0xAB,
2685 // rejected sequence number 2663 // rejected sequence number
2686 0xBC, 0x9A, 0x78, 0x56, 2664 0xBC, 0x9A, 0x78, 0x56,
2687 0x34, 0x12, 0x00, 0x00, 2665 0x34, 0x12, 0x00, 0x00,
2688 }; 2666 };
2689 2667
2690 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2668 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2691 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2669 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2692 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); 2670 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
2693 ASSERT_TRUE(visitor_.public_reset_packet_.get()); 2671 ASSERT_TRUE(visitor_.public_reset_packet_.get());
2694 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 2672 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
2695 visitor_.public_reset_packet_->public_header.connection_id); 2673 visitor_.public_reset_packet_->public_header.connection_id);
2696 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); 2674 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
2697 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); 2675 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
2698 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), 2676 EXPECT_EQ(UINT64_C(0xABCDEF0123456789),
2699 visitor_.public_reset_packet_->nonce_proof); 2677 visitor_.public_reset_packet_->nonce_proof);
2700 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 2678 EXPECT_EQ(UINT64_C(0x123456789ABC),
2701 visitor_.public_reset_packet_->rejected_sequence_number); 2679 visitor_.public_reset_packet_->rejected_sequence_number);
2702 EXPECT_TRUE( 2680 EXPECT_TRUE(
2703 visitor_.public_reset_packet_->client_address.address().empty()); 2681 visitor_.public_reset_packet_->client_address.address().empty());
2704 2682
2705 // Now test framing boundaries. 2683 // Now test framing boundaries.
2706 for (size_t i = 0; i < arraysize(packet); ++i) { 2684 for (size_t i = 0; i < arraysize(packet); ++i) {
2707 string expected_error; 2685 string expected_error;
2708 DVLOG(1) << "iteration: " << i; 2686 DVLOG(1) << "iteration: " << i;
2709 if (i < kConnectionIdOffset) { 2687 if (i < kConnectionIdOffset) {
2710 expected_error = "Unable to read public flags."; 2688 expected_error = "Unable to read public flags.";
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2788 // client address: 4.31.198.44:443 2766 // client address: 4.31.198.44:443
2789 0x02, 0x00, 2767 0x02, 0x00,
2790 0x04, 0x1F, 0xC6, 0x2C, 2768 0x04, 0x1F, 0xC6, 0x2C,
2791 0xBB, 0x01, 2769 0xBB, 0x01,
2792 }; 2770 };
2793 2771
2794 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2772 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2795 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2773 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2796 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); 2774 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
2797 ASSERT_TRUE(visitor_.public_reset_packet_.get()); 2775 ASSERT_TRUE(visitor_.public_reset_packet_.get());
2798 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 2776 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210),
2799 visitor_.public_reset_packet_->public_header.connection_id); 2777 visitor_.public_reset_packet_->public_header.connection_id);
2800 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); 2778 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
2801 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); 2779 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
2802 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), 2780 EXPECT_EQ(UINT64_C(0xABCDEF0123456789),
2803 visitor_.public_reset_packet_->nonce_proof); 2781 visitor_.public_reset_packet_->nonce_proof);
2804 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 2782 EXPECT_EQ(UINT64_C(0x123456789ABC),
2805 visitor_.public_reset_packet_->rejected_sequence_number); 2783 visitor_.public_reset_packet_->rejected_sequence_number);
2806 EXPECT_EQ("4.31.198.44", 2784 EXPECT_EQ("4.31.198.44",
2807 IPAddressToString(visitor_.public_reset_packet_-> 2785 IPAddressToString(visitor_.public_reset_packet_->
2808 client_address.address())); 2786 client_address.address()));
2809 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); 2787 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port());
2810 2788
2811 // Now test framing boundaries. 2789 // Now test framing boundaries.
2812 for (size_t i = 0; i < arraysize(packet); ++i) { 2790 for (size_t i = 0; i < arraysize(packet); ++i) {
2813 string expected_error; 2791 string expected_error;
2814 DVLOG(1) << "iteration: " << i; 2792 DVLOG(1) << "iteration: " << i;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2868 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2891 2869
2892 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2870 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2893 ASSERT_TRUE(visitor_.header_.get()); 2871 ASSERT_TRUE(visitor_.header_.get());
2894 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 2872 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2895 2873
2896 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2874 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2897 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 2875 EXPECT_EQ(0u, visitor_.ack_frames_.size());
2898 ASSERT_EQ(1, visitor_.fec_count_); 2876 ASSERT_EQ(1, visitor_.fec_count_);
2899 const QuicFecData& fec_data = *visitor_.fec_data_[0]; 2877 const QuicFecData& fec_data = *visitor_.fec_data_[0];
2900 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), fec_data.fec_group); 2878 EXPECT_EQ(UINT64_C(0x0123456789ABB), fec_data.fec_group);
2901 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy); 2879 EXPECT_EQ("abcdefghijklmnop", fec_data.redundancy);
2902 } 2880 }
2903 2881
2904 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { 2882 TEST_P(QuicFramerTest, BuildPaddingFramePacket) {
2905 QuicPacketHeader header; 2883 QuicPacketHeader header;
2906 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 2884 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
2907 header.public_header.reset_flag = false; 2885 header.public_header.reset_flag = false;
2908 header.public_header.version_flag = false; 2886 header.public_header.version_flag = false;
2909 header.fec_flag = false; 2887 header.fec_flag = false;
2910 header.entropy_flag = false; 2888 header.entropy_flag = false;
2911 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2889 header.packet_sequence_number = UINT64_C(0x123456789ABC);
2912 header.fec_group = 0; 2890 header.fec_group = 0;
2913 2891
2914 QuicPaddingFrame padding_frame; 2892 QuicPaddingFrame padding_frame;
2915 2893
2916 QuicFrames frames; 2894 QuicFrames frames;
2917 frames.push_back(QuicFrame(&padding_frame)); 2895 frames.push_back(QuicFrame(&padding_frame));
2918 2896
2919 unsigned char packet[kMaxPacketSize] = { 2897 unsigned char packet[kMaxPacketSize] = {
2920 // public flags (8 byte connection_id) 2898 // public flags (8 byte connection_id)
2921 0x3C, 2899 0x3C,
(...skipping 20 matching lines...) Expand all
2942 ASSERT_TRUE(data != nullptr); 2920 ASSERT_TRUE(data != nullptr);
2943 2921
2944 test::CompareCharArraysWithHexError("constructed packet", 2922 test::CompareCharArraysWithHexError("constructed packet",
2945 data->data(), data->length(), 2923 data->data(), data->length(),
2946 AsChars(packet), 2924 AsChars(packet),
2947 arraysize(packet)); 2925 arraysize(packet));
2948 } 2926 }
2949 2927
2950 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { 2928 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
2951 QuicPacketHeader header; 2929 QuicPacketHeader header;
2952 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 2930 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
2953 header.public_header.reset_flag = false; 2931 header.public_header.reset_flag = false;
2954 header.public_header.version_flag = false; 2932 header.public_header.version_flag = false;
2955 header.fec_flag = false; 2933 header.fec_flag = false;
2956 header.entropy_flag = false; 2934 header.entropy_flag = false;
2957 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; 2935 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER;
2958 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2936 header.packet_sequence_number = UINT64_C(0x123456789ABC);
2959 header.fec_group = 0; 2937 header.fec_group = 0;
2960 2938
2961 QuicPaddingFrame padding_frame; 2939 QuicPaddingFrame padding_frame;
2962 2940
2963 QuicFrames frames; 2941 QuicFrames frames;
2964 frames.push_back(QuicFrame(&padding_frame)); 2942 frames.push_back(QuicFrame(&padding_frame));
2965 2943
2966 unsigned char packet[kMaxPacketSize] = { 2944 unsigned char packet[kMaxPacketSize] = {
2967 // public flags (8 byte connection_id and 4 byte sequence number) 2945 // public flags (8 byte connection_id and 4 byte sequence number)
2968 0x2C, 2946 0x2C,
(...skipping 19 matching lines...) Expand all
2988 ASSERT_TRUE(data != nullptr); 2966 ASSERT_TRUE(data != nullptr);
2989 2967
2990 test::CompareCharArraysWithHexError("constructed packet", 2968 test::CompareCharArraysWithHexError("constructed packet",
2991 data->data(), data->length(), 2969 data->data(), data->length(),
2992 AsChars(packet), 2970 AsChars(packet),
2993 arraysize(packet)); 2971 arraysize(packet));
2994 } 2972 }
2995 2973
2996 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { 2974 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
2997 QuicPacketHeader header; 2975 QuicPacketHeader header;
2998 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 2976 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
2999 header.public_header.reset_flag = false; 2977 header.public_header.reset_flag = false;
3000 header.public_header.version_flag = false; 2978 header.public_header.version_flag = false;
3001 header.fec_flag = false; 2979 header.fec_flag = false;
3002 header.entropy_flag = false; 2980 header.entropy_flag = false;
3003 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; 2981 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER;
3004 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 2982 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3005 header.fec_group = 0; 2983 header.fec_group = 0;
3006 2984
3007 QuicPaddingFrame padding_frame; 2985 QuicPaddingFrame padding_frame;
3008 2986
3009 QuicFrames frames; 2987 QuicFrames frames;
3010 frames.push_back(QuicFrame(&padding_frame)); 2988 frames.push_back(QuicFrame(&padding_frame));
3011 2989
3012 unsigned char packet[kMaxPacketSize] = { 2990 unsigned char packet[kMaxPacketSize] = {
3013 // public flags (8 byte connection_id and 2 byte sequence number) 2991 // public flags (8 byte connection_id and 2 byte sequence number)
3014 0x1C, 2992 0x1C,
(...skipping 19 matching lines...) Expand all
3034 ASSERT_TRUE(data != nullptr); 3012 ASSERT_TRUE(data != nullptr);
3035 3013
3036 test::CompareCharArraysWithHexError("constructed packet", 3014 test::CompareCharArraysWithHexError("constructed packet",
3037 data->data(), data->length(), 3015 data->data(), data->length(),
3038 AsChars(packet), 3016 AsChars(packet),
3039 arraysize(packet)); 3017 arraysize(packet));
3040 } 3018 }
3041 3019
3042 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { 3020 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
3043 QuicPacketHeader header; 3021 QuicPacketHeader header;
3044 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3022 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3045 header.public_header.reset_flag = false; 3023 header.public_header.reset_flag = false;
3046 header.public_header.version_flag = false; 3024 header.public_header.version_flag = false;
3047 header.fec_flag = false; 3025 header.fec_flag = false;
3048 header.entropy_flag = false; 3026 header.entropy_flag = false;
3049 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; 3027 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER;
3050 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3028 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3051 header.fec_group = 0; 3029 header.fec_group = 0;
3052 3030
3053 QuicPaddingFrame padding_frame; 3031 QuicPaddingFrame padding_frame;
3054 3032
3055 QuicFrames frames; 3033 QuicFrames frames;
3056 frames.push_back(QuicFrame(&padding_frame)); 3034 frames.push_back(QuicFrame(&padding_frame));
3057 3035
3058 unsigned char packet[kMaxPacketSize] = { 3036 unsigned char packet[kMaxPacketSize] = {
3059 // public flags (8 byte connection_id and 1 byte sequence number) 3037 // public flags (8 byte connection_id and 1 byte sequence number)
3060 0x0C, 3038 0x0C,
(...skipping 19 matching lines...) Expand all
3080 ASSERT_TRUE(data != nullptr); 3058 ASSERT_TRUE(data != nullptr);
3081 3059
3082 test::CompareCharArraysWithHexError("constructed packet", 3060 test::CompareCharArraysWithHexError("constructed packet",
3083 data->data(), data->length(), 3061 data->data(), data->length(),
3084 AsChars(packet), 3062 AsChars(packet),
3085 arraysize(packet)); 3063 arraysize(packet));
3086 } 3064 }
3087 3065
3088 TEST_P(QuicFramerTest, BuildStreamFramePacket) { 3066 TEST_P(QuicFramerTest, BuildStreamFramePacket) {
3089 QuicPacketHeader header; 3067 QuicPacketHeader header;
3090 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3068 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3091 header.public_header.reset_flag = false; 3069 header.public_header.reset_flag = false;
3092 header.public_header.version_flag = false; 3070 header.public_header.version_flag = false;
3093 header.fec_flag = false; 3071 header.fec_flag = false;
3094 header.entropy_flag = true; 3072 header.entropy_flag = true;
3095 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 3073 header.packet_sequence_number = UINT64_C(0x77123456789ABC);
3096 header.fec_group = 0; 3074 header.fec_group = 0;
3097 3075
3098 QuicStreamFrame stream_frame; 3076 QuicStreamFrame stream_frame;
3099 stream_frame.stream_id = 0x01020304; 3077 stream_frame.stream_id = 0x01020304;
3100 stream_frame.fin = true; 3078 stream_frame.fin = true;
3101 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 3079 stream_frame.offset = UINT64_C(0xBA98FEDC32107654);
3102 stream_frame.data = MakeIOVector("hello world!"); 3080 stream_frame.data = MakeIOVector("hello world!");
3103 3081
3104 QuicFrames frames; 3082 QuicFrames frames;
3105 frames.push_back(QuicFrame(&stream_frame)); 3083 frames.push_back(QuicFrame(&stream_frame));
3106 3084
3107 unsigned char packet[] = { 3085 unsigned char packet[] = {
3108 // public flags (8 byte connection_id) 3086 // public flags (8 byte connection_id)
3109 0x3C, 3087 0x3C,
3110 // connection_id 3088 // connection_id
3111 0x10, 0x32, 0x54, 0x76, 3089 0x10, 0x32, 0x54, 0x76,
(...skipping 20 matching lines...) Expand all
3132 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3110 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3133 ASSERT_TRUE(data != nullptr); 3111 ASSERT_TRUE(data != nullptr);
3134 3112
3135 test::CompareCharArraysWithHexError("constructed packet", 3113 test::CompareCharArraysWithHexError("constructed packet",
3136 data->data(), data->length(), 3114 data->data(), data->length(),
3137 AsChars(packet), arraysize(packet)); 3115 AsChars(packet), arraysize(packet));
3138 } 3116 }
3139 3117
3140 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { 3118 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) {
3141 QuicPacketHeader header; 3119 QuicPacketHeader header;
3142 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3120 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3143 header.public_header.reset_flag = false; 3121 header.public_header.reset_flag = false;
3144 header.public_header.version_flag = false; 3122 header.public_header.version_flag = false;
3145 header.fec_flag = false; 3123 header.fec_flag = false;
3146 header.entropy_flag = true; 3124 header.entropy_flag = true;
3147 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 3125 header.packet_sequence_number = UINT64_C(0x77123456789ABC);
3148 header.is_in_fec_group = IN_FEC_GROUP; 3126 header.is_in_fec_group = IN_FEC_GROUP;
3149 header.fec_group = GG_UINT64_C(0x77123456789ABC); 3127 header.fec_group = UINT64_C(0x77123456789ABC);
3150 3128
3151 QuicStreamFrame stream_frame; 3129 QuicStreamFrame stream_frame;
3152 stream_frame.stream_id = 0x01020304; 3130 stream_frame.stream_id = 0x01020304;
3153 stream_frame.fin = true; 3131 stream_frame.fin = true;
3154 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 3132 stream_frame.offset = UINT64_C(0xBA98FEDC32107654);
3155 stream_frame.data = MakeIOVector("hello world!"); 3133 stream_frame.data = MakeIOVector("hello world!");
3156 3134
3157 QuicFrames frames; 3135 QuicFrames frames;
3158 frames.push_back(QuicFrame(&stream_frame)); 3136 frames.push_back(QuicFrame(&stream_frame));
3159 unsigned char packet[] = { 3137 unsigned char packet[] = {
3160 // public flags (8 byte connection_id) 3138 // public flags (8 byte connection_id)
3161 0x3C, 3139 0x3C,
3162 // connection_id 3140 // connection_id
3163 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 3141 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3164 // packet sequence number 3142 // packet sequence number
(...skipping 17 matching lines...) Expand all
3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3160 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3183 ASSERT_TRUE(data != nullptr); 3161 ASSERT_TRUE(data != nullptr);
3184 3162
3185 test::CompareCharArraysWithHexError("constructed packet", 3163 test::CompareCharArraysWithHexError("constructed packet",
3186 data->data(), data->length(), 3164 data->data(), data->length(),
3187 AsChars(packet), arraysize(packet)); 3165 AsChars(packet), arraysize(packet));
3188 } 3166 }
3189 3167
3190 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { 3168 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
3191 QuicPacketHeader header; 3169 QuicPacketHeader header;
3192 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3170 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3193 header.public_header.reset_flag = false; 3171 header.public_header.reset_flag = false;
3194 header.public_header.version_flag = true; 3172 header.public_header.version_flag = true;
3195 header.fec_flag = false; 3173 header.fec_flag = false;
3196 header.entropy_flag = true; 3174 header.entropy_flag = true;
3197 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); 3175 header.packet_sequence_number = UINT64_C(0x77123456789ABC);
3198 header.fec_group = 0; 3176 header.fec_group = 0;
3199 3177
3200 QuicStreamFrame stream_frame; 3178 QuicStreamFrame stream_frame;
3201 stream_frame.stream_id = 0x01020304; 3179 stream_frame.stream_id = 0x01020304;
3202 stream_frame.fin = true; 3180 stream_frame.fin = true;
3203 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); 3181 stream_frame.offset = UINT64_C(0xBA98FEDC32107654);
3204 stream_frame.data = MakeIOVector("hello world!"); 3182 stream_frame.data = MakeIOVector("hello world!");
3205 3183
3206 QuicFrames frames; 3184 QuicFrames frames;
3207 frames.push_back(QuicFrame(&stream_frame)); 3185 frames.push_back(QuicFrame(&stream_frame));
3208 3186
3209 unsigned char packet[] = { 3187 unsigned char packet[] = {
3210 // public flags (version, 8 byte connection_id) 3188 // public flags (version, 8 byte connection_id)
3211 0x3D, 3189 0x3D,
3212 // connection_id 3190 // connection_id
3213 0x10, 3191 0x10,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3268 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3246 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3269 ASSERT_TRUE(data != nullptr); 3247 ASSERT_TRUE(data != nullptr);
3270 3248
3271 test::CompareCharArraysWithHexError("constructed packet", 3249 test::CompareCharArraysWithHexError("constructed packet",
3272 data->data(), data->length(), 3250 data->data(), data->length(),
3273 AsChars(packet), arraysize(packet)); 3251 AsChars(packet), arraysize(packet));
3274 } 3252 }
3275 3253
3276 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { 3254 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
3277 QuicPacketPublicHeader header; 3255 QuicPacketPublicHeader header;
3278 header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3256 header.connection_id = UINT64_C(0xFEDCBA9876543210);
3279 header.reset_flag = false; 3257 header.reset_flag = false;
3280 header.version_flag = true; 3258 header.version_flag = true;
3281 3259
3282 unsigned char packet[] = { 3260 unsigned char packet[] = {
3283 // public flags (version, 8 byte connection_id) 3261 // public flags (version, 8 byte connection_id)
3284 0x0D, 3262 0x0D,
3285 // connection_id 3263 // connection_id
3286 0x10, 3264 0x10,
3287 0x32, 3265 0x32,
3288 0x54, 3266 0x54,
(...skipping 14 matching lines...) Expand all
3303 scoped_ptr<QuicEncryptedPacket> data( 3281 scoped_ptr<QuicEncryptedPacket> data(
3304 framer_.BuildVersionNegotiationPacket(header, versions)); 3282 framer_.BuildVersionNegotiationPacket(header, versions));
3305 3283
3306 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3284 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3307 data->length(), AsChars(packet), 3285 data->length(), AsChars(packet),
3308 arraysize(packet)); 3286 arraysize(packet));
3309 } 3287 }
3310 3288
3311 TEST_P(QuicFramerTest, BuildAckFramePacket) { 3289 TEST_P(QuicFramerTest, BuildAckFramePacket) {
3312 QuicPacketHeader header; 3290 QuicPacketHeader header;
3313 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3291 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3314 header.public_header.reset_flag = false; 3292 header.public_header.reset_flag = false;
3315 header.public_header.version_flag = false; 3293 header.public_header.version_flag = false;
3316 header.fec_flag = false; 3294 header.fec_flag = false;
3317 header.entropy_flag = true; 3295 header.entropy_flag = true;
3318 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3296 header.packet_sequence_number = UINT64_C(0x770123456789AA8);
3319 header.fec_group = 0; 3297 header.fec_group = 0;
3320 3298
3321 QuicAckFrame ack_frame; 3299 QuicAckFrame ack_frame;
3322 ack_frame.entropy_hash = 0x43; 3300 ack_frame.entropy_hash = 0x43;
3323 ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF); 3301 ack_frame.largest_observed = UINT64_C(0x770123456789ABF);
3324 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3302 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3325 ack_frame.missing_packets.insert(GG_UINT64_C(0x770123456789ABE)); 3303 ack_frame.missing_packets.insert(UINT64_C(0x770123456789ABE));
3326 3304
3327 QuicFrames frames; 3305 QuicFrames frames;
3328 frames.push_back(QuicFrame(&ack_frame)); 3306 frames.push_back(QuicFrame(&ack_frame));
3329 3307
3330 unsigned char packet[] = { 3308 unsigned char packet[] = {
3331 // public flags (8 byte connection_id) 3309 // public flags (8 byte connection_id)
3332 0x3C, 3310 0x3C,
3333 // connection_id 3311 // connection_id
3334 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 3312 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3335 // packet sequence number 3313 // packet sequence number
(...skipping 28 matching lines...) Expand all
3364 test::CompareCharArraysWithHexError("constructed packet", 3342 test::CompareCharArraysWithHexError("constructed packet",
3365 data->data(), data->length(), 3343 data->data(), data->length(),
3366 AsChars(packet), arraysize(packet)); 3344 AsChars(packet), arraysize(packet));
3367 } 3345 }
3368 3346
3369 // TODO(jri): Add test for tuncated packets in which the original ack frame had 3347 // TODO(jri): Add test for tuncated packets in which the original ack frame had
3370 // revived packets. (In both the large and small packet cases below). 3348 // revived packets. (In both the large and small packet cases below).
3371 3349
3372 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 3350 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
3373 QuicPacketHeader header; 3351 QuicPacketHeader header;
3374 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3352 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3375 header.public_header.reset_flag = false; 3353 header.public_header.reset_flag = false;
3376 header.public_header.version_flag = false; 3354 header.public_header.version_flag = false;
3377 header.fec_flag = false; 3355 header.fec_flag = false;
3378 header.entropy_flag = true; 3356 header.entropy_flag = true;
3379 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3357 header.packet_sequence_number = UINT64_C(0x770123456789AA8);
3380 header.fec_group = 0; 3358 header.fec_group = 0;
3381 3359
3382 QuicAckFrame ack_frame; 3360 QuicAckFrame ack_frame;
3383 // This entropy hash is different from what shows up in the packet below, 3361 // This entropy hash is different from what shows up in the packet below,
3384 // since entropy is recomputed by the framer on ack truncation (by 3362 // since entropy is recomputed by the framer on ack truncation (by
3385 // TestEntropyCalculator for this test.) 3363 // TestEntropyCalculator for this test.)
3386 ack_frame.entropy_hash = 0x43; 3364 ack_frame.entropy_hash = 0x43;
3387 ack_frame.largest_observed = 2 * 300; 3365 ack_frame.largest_observed = 2 * 300;
3388 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3366 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3389 for (size_t i = 1; i < 2 * 300; i += 2) { 3367 for (size_t i = 1; i < 2 * 300; i += 2) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
3473 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3451 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3474 ASSERT_TRUE(data != nullptr); 3452 ASSERT_TRUE(data != nullptr);
3475 3453
3476 test::CompareCharArraysWithHexError("constructed packet", 3454 test::CompareCharArraysWithHexError("constructed packet",
3477 data->data(), data->length(), 3455 data->data(), data->length(),
3478 AsChars(packet), arraysize(packet)); 3456 AsChars(packet), arraysize(packet));
3479 } 3457 }
3480 3458
3481 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3459 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3482 QuicPacketHeader header; 3460 QuicPacketHeader header;
3483 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3461 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3484 header.public_header.reset_flag = false; 3462 header.public_header.reset_flag = false;
3485 header.public_header.version_flag = false; 3463 header.public_header.version_flag = false;
3486 header.fec_flag = false; 3464 header.fec_flag = false;
3487 header.entropy_flag = true; 3465 header.entropy_flag = true;
3488 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3466 header.packet_sequence_number = UINT64_C(0x770123456789AA8);
3489 header.fec_group = 0; 3467 header.fec_group = 0;
3490 3468
3491 QuicAckFrame ack_frame; 3469 QuicAckFrame ack_frame;
3492 // This entropy hash is different from what shows up in the packet below, 3470 // This entropy hash is different from what shows up in the packet below,
3493 // since entropy is recomputed by the framer on ack truncation (by 3471 // since entropy is recomputed by the framer on ack truncation (by
3494 // TestEntropyCalculator for this test.) 3472 // TestEntropyCalculator for this test.)
3495 ack_frame.entropy_hash = 0x43; 3473 ack_frame.entropy_hash = 0x43;
3496 ack_frame.largest_observed = 2 * 300; 3474 ack_frame.largest_observed = 2 * 300;
3497 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3475 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3498 for (size_t i = 1; i < 2 * 300; i += 2) { 3476 for (size_t i = 1; i < 2 * 300; i += 2) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3536 ASSERT_TRUE(data != nullptr); 3514 ASSERT_TRUE(data != nullptr);
3537 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 3515 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
3538 EXPECT_EQ(36u, data->length()); 3516 EXPECT_EQ(36u, data->length());
3539 test::CompareCharArraysWithHexError("constructed packet", 3517 test::CompareCharArraysWithHexError("constructed packet",
3540 data->data(), data->length(), 3518 data->data(), data->length(),
3541 AsChars(packet), arraysize(packet)); 3519 AsChars(packet), arraysize(packet));
3542 } 3520 }
3543 3521
3544 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3522 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3545 QuicPacketHeader header; 3523 QuicPacketHeader header;
3546 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3524 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3547 header.public_header.reset_flag = false; 3525 header.public_header.reset_flag = false;
3548 header.public_header.version_flag = false; 3526 header.public_header.version_flag = false;
3549 header.fec_flag = false; 3527 header.fec_flag = false;
3550 header.entropy_flag = true; 3528 header.entropy_flag = true;
3551 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3529 header.packet_sequence_number = UINT64_C(0x770123456789AA8);
3552 header.fec_group = 0; 3530 header.fec_group = 0;
3553 3531
3554 QuicStopWaitingFrame stop_waiting_frame; 3532 QuicStopWaitingFrame stop_waiting_frame;
3555 stop_waiting_frame.entropy_hash = 0x14; 3533 stop_waiting_frame.entropy_hash = 0x14;
3556 stop_waiting_frame.least_unacked = GG_UINT64_C(0x770123456789AA0); 3534 stop_waiting_frame.least_unacked = UINT64_C(0x770123456789AA0);
3557 3535
3558 QuicFrames frames; 3536 QuicFrames frames;
3559 frames.push_back(QuicFrame(&stop_waiting_frame)); 3537 frames.push_back(QuicFrame(&stop_waiting_frame));
3560 3538
3561 unsigned char packet[] = { 3539 unsigned char packet[] = {
3562 // public flags (8 byte connection_id) 3540 // public flags (8 byte connection_id)
3563 0x3C, 3541 0x3C,
3564 // connection_id 3542 // connection_id
3565 0x10, 0x32, 0x54, 0x76, 3543 0x10, 0x32, 0x54, 0x76,
3566 0x98, 0xBA, 0xDC, 0xFE, 3544 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 20 matching lines...) Expand all
3587 AsChars(packet), arraysize(packet)); 3565 AsChars(packet), arraysize(packet));
3588 } 3566 }
3589 3567
3590 TEST_P(QuicFramerTest, BuildRstFramePacketQuicVersion24) { 3568 TEST_P(QuicFramerTest, BuildRstFramePacketQuicVersion24) {
3591 if (version_ > QUIC_VERSION_24) { 3569 if (version_ > QUIC_VERSION_24) {
3592 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. 3570 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame.
3593 return; 3571 return;
3594 } 3572 }
3595 3573
3596 QuicPacketHeader header; 3574 QuicPacketHeader header;
3597 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3575 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3598 header.public_header.reset_flag = false; 3576 header.public_header.reset_flag = false;
3599 header.public_header.version_flag = false; 3577 header.public_header.version_flag = false;
3600 header.fec_flag = false; 3578 header.fec_flag = false;
3601 header.entropy_flag = false; 3579 header.entropy_flag = false;
3602 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3580 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3603 header.fec_group = 0; 3581 header.fec_group = 0;
3604 3582
3605 QuicRstStreamFrame rst_frame; 3583 QuicRstStreamFrame rst_frame;
3606 rst_frame.stream_id = 0x01020304; 3584 rst_frame.stream_id = 0x01020304;
3607 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); 3585 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708);
3608 rst_frame.error_details = "because I can"; 3586 rst_frame.error_details = "because I can";
3609 rst_frame.byte_offset = 0x0807060504030201; 3587 rst_frame.byte_offset = 0x0807060504030201;
3610 3588
3611 unsigned char packet[] = { 3589 unsigned char packet[] = {
3612 // public flags (8 byte connection_id) 3590 // public flags (8 byte connection_id)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3649 arraysize(packet)); 3627 arraysize(packet));
3650 } 3628 }
3651 3629
3652 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { 3630 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
3653 if (version_ <= QUIC_VERSION_24) { 3631 if (version_ <= QUIC_VERSION_24) {
3654 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame. 3632 // QUIC_VERSION_25 removes the error_details field from QuicRstStreamFrame.
3655 return; 3633 return;
3656 } 3634 }
3657 3635
3658 QuicPacketHeader header; 3636 QuicPacketHeader header;
3659 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3637 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3660 header.public_header.reset_flag = false; 3638 header.public_header.reset_flag = false;
3661 header.public_header.version_flag = false; 3639 header.public_header.version_flag = false;
3662 header.fec_flag = false; 3640 header.fec_flag = false;
3663 header.entropy_flag = false; 3641 header.entropy_flag = false;
3664 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3642 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3665 header.fec_group = 0; 3643 header.fec_group = 0;
3666 3644
3667 QuicRstStreamFrame rst_frame; 3645 QuicRstStreamFrame rst_frame;
3668 rst_frame.stream_id = 0x01020304; 3646 rst_frame.stream_id = 0x01020304;
3669 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); 3647 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708);
3670 rst_frame.byte_offset = 0x0807060504030201; 3648 rst_frame.byte_offset = 0x0807060504030201;
3671 3649
3672 // clang-format off 3650 // clang-format off
3673 unsigned char packet[] = { 3651 unsigned char packet[] = {
3674 // public flags (8 byte connection_id) 3652 // public flags (8 byte connection_id)
(...skipping 25 matching lines...) Expand all
3700 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3678 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3701 ASSERT_TRUE(data != nullptr); 3679 ASSERT_TRUE(data != nullptr);
3702 3680
3703 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3681 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3704 data->length(), AsChars(packet), 3682 data->length(), AsChars(packet),
3705 arraysize(packet)); 3683 arraysize(packet));
3706 } 3684 }
3707 3685
3708 TEST_P(QuicFramerTest, BuildCloseFramePacket) { 3686 TEST_P(QuicFramerTest, BuildCloseFramePacket) {
3709 QuicPacketHeader header; 3687 QuicPacketHeader header;
3710 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3688 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3711 header.public_header.reset_flag = false; 3689 header.public_header.reset_flag = false;
3712 header.public_header.version_flag = false; 3690 header.public_header.version_flag = false;
3713 header.fec_flag = false; 3691 header.fec_flag = false;
3714 header.entropy_flag = true; 3692 header.entropy_flag = true;
3715 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3693 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3716 header.fec_group = 0; 3694 header.fec_group = 0;
3717 3695
3718 QuicConnectionCloseFrame close_frame; 3696 QuicConnectionCloseFrame close_frame;
3719 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 3697 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
3720 close_frame.error_details = "because I can"; 3698 close_frame.error_details = "because I can";
3721 3699
3722 QuicFrames frames; 3700 QuicFrames frames;
3723 frames.push_back(QuicFrame(&close_frame)); 3701 frames.push_back(QuicFrame(&close_frame));
3724 3702
3725 unsigned char packet[] = { 3703 unsigned char packet[] = {
(...skipping 24 matching lines...) Expand all
3750 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3728 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3751 ASSERT_TRUE(data != nullptr); 3729 ASSERT_TRUE(data != nullptr);
3752 3730
3753 test::CompareCharArraysWithHexError("constructed packet", 3731 test::CompareCharArraysWithHexError("constructed packet",
3754 data->data(), data->length(), 3732 data->data(), data->length(),
3755 AsChars(packet), arraysize(packet)); 3733 AsChars(packet), arraysize(packet));
3756 } 3734 }
3757 3735
3758 TEST_P(QuicFramerTest, BuildGoAwayPacket) { 3736 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
3759 QuicPacketHeader header; 3737 QuicPacketHeader header;
3760 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3738 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3761 header.public_header.reset_flag = false; 3739 header.public_header.reset_flag = false;
3762 header.public_header.version_flag = false; 3740 header.public_header.version_flag = false;
3763 header.fec_flag = false; 3741 header.fec_flag = false;
3764 header.entropy_flag = true; 3742 header.entropy_flag = true;
3765 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3743 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3766 header.fec_group = 0; 3744 header.fec_group = 0;
3767 3745
3768 QuicGoAwayFrame goaway_frame; 3746 QuicGoAwayFrame goaway_frame;
3769 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 3747 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
3770 goaway_frame.last_good_stream_id = 0x01020304; 3748 goaway_frame.last_good_stream_id = 0x01020304;
3771 goaway_frame.reason_phrase = "because I can"; 3749 goaway_frame.reason_phrase = "because I can";
3772 3750
3773 QuicFrames frames; 3751 QuicFrames frames;
3774 frames.push_back(QuicFrame(&goaway_frame)); 3752 frames.push_back(QuicFrame(&goaway_frame));
3775 3753
(...skipping 27 matching lines...) Expand all
3803 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3781 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3804 ASSERT_TRUE(data != nullptr); 3782 ASSERT_TRUE(data != nullptr);
3805 3783
3806 test::CompareCharArraysWithHexError("constructed packet", 3784 test::CompareCharArraysWithHexError("constructed packet",
3807 data->data(), data->length(), 3785 data->data(), data->length(),
3808 AsChars(packet), arraysize(packet)); 3786 AsChars(packet), arraysize(packet));
3809 } 3787 }
3810 3788
3811 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { 3789 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
3812 QuicPacketHeader header; 3790 QuicPacketHeader header;
3813 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3791 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3814 header.public_header.reset_flag = false; 3792 header.public_header.reset_flag = false;
3815 header.public_header.version_flag = false; 3793 header.public_header.version_flag = false;
3816 header.fec_flag = false; 3794 header.fec_flag = false;
3817 header.entropy_flag = true; 3795 header.entropy_flag = true;
3818 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3796 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3819 header.fec_group = 0; 3797 header.fec_group = 0;
3820 3798
3821 QuicWindowUpdateFrame window_update_frame; 3799 QuicWindowUpdateFrame window_update_frame;
3822 window_update_frame.stream_id = 0x01020304; 3800 window_update_frame.stream_id = 0x01020304;
3823 window_update_frame.byte_offset = 0x1122334455667788; 3801 window_update_frame.byte_offset = 0x1122334455667788;
3824 3802
3825 QuicFrames frames; 3803 QuicFrames frames;
3826 frames.push_back(QuicFrame(&window_update_frame)); 3804 frames.push_back(QuicFrame(&window_update_frame));
3827 3805
3828 unsigned char packet[] = { 3806 unsigned char packet[] = {
(...skipping 20 matching lines...) Expand all
3849 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3827 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3850 ASSERT_TRUE(data != nullptr); 3828 ASSERT_TRUE(data != nullptr);
3851 3829
3852 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3830 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3853 data->length(), AsChars(packet), 3831 data->length(), AsChars(packet),
3854 arraysize(packet)); 3832 arraysize(packet));
3855 } 3833 }
3856 3834
3857 TEST_P(QuicFramerTest, BuildBlockedPacket) { 3835 TEST_P(QuicFramerTest, BuildBlockedPacket) {
3858 QuicPacketHeader header; 3836 QuicPacketHeader header;
3859 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3837 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3860 header.public_header.reset_flag = false; 3838 header.public_header.reset_flag = false;
3861 header.public_header.version_flag = false; 3839 header.public_header.version_flag = false;
3862 header.fec_flag = false; 3840 header.fec_flag = false;
3863 header.entropy_flag = true; 3841 header.entropy_flag = true;
3864 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3842 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3865 header.fec_group = 0; 3843 header.fec_group = 0;
3866 3844
3867 QuicBlockedFrame blocked_frame; 3845 QuicBlockedFrame blocked_frame;
3868 blocked_frame.stream_id = 0x01020304; 3846 blocked_frame.stream_id = 0x01020304;
3869 3847
3870 QuicFrames frames; 3848 QuicFrames frames;
3871 frames.push_back(QuicFrame(&blocked_frame)); 3849 frames.push_back(QuicFrame(&blocked_frame));
3872 3850
3873 unsigned char packet[] = { 3851 unsigned char packet[] = {
3874 // public flags (8 byte connection_id) 3852 // public flags (8 byte connection_id)
(...skipping 16 matching lines...) Expand all
3891 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3869 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3892 ASSERT_TRUE(data != nullptr); 3870 ASSERT_TRUE(data != nullptr);
3893 3871
3894 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3872 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3895 data->length(), AsChars(packet), 3873 data->length(), AsChars(packet),
3896 arraysize(packet)); 3874 arraysize(packet));
3897 } 3875 }
3898 3876
3899 TEST_P(QuicFramerTest, BuildPingPacket) { 3877 TEST_P(QuicFramerTest, BuildPingPacket) {
3900 QuicPacketHeader header; 3878 QuicPacketHeader header;
3901 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3879 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3902 header.public_header.reset_flag = false; 3880 header.public_header.reset_flag = false;
3903 header.public_header.version_flag = false; 3881 header.public_header.version_flag = false;
3904 header.fec_flag = false; 3882 header.fec_flag = false;
3905 header.entropy_flag = true; 3883 header.entropy_flag = true;
3906 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 3884 header.packet_sequence_number = UINT64_C(0x123456789ABC);
3907 header.fec_group = 0; 3885 header.fec_group = 0;
3908 3886
3909 QuicPingFrame ping_frame; 3887 QuicPingFrame ping_frame;
3910 3888
3911 QuicFrames frames; 3889 QuicFrames frames;
3912 frames.push_back(QuicFrame(&ping_frame)); 3890 frames.push_back(QuicFrame(&ping_frame));
3913 3891
3914 unsigned char packet[] = { 3892 unsigned char packet[] = {
3915 // public flags (8 byte connection_id) 3893 // public flags (8 byte connection_id)
3916 0x3C, 3894 0x3C,
(...skipping 13 matching lines...) Expand all
3930 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3908 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3931 ASSERT_TRUE(data != nullptr); 3909 ASSERT_TRUE(data != nullptr);
3932 3910
3933 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3911 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3934 data->length(), AsChars(packet), 3912 data->length(), AsChars(packet),
3935 arraysize(packet)); 3913 arraysize(packet));
3936 } 3914 }
3937 3915
3938 TEST_P(QuicFramerTest, BuildPublicResetPacket) { 3916 TEST_P(QuicFramerTest, BuildPublicResetPacket) {
3939 QuicPublicResetPacket reset_packet; 3917 QuicPublicResetPacket reset_packet;
3940 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3918 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3941 reset_packet.public_header.reset_flag = true; 3919 reset_packet.public_header.reset_flag = true;
3942 reset_packet.public_header.version_flag = false; 3920 reset_packet.public_header.version_flag = false;
3943 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); 3921 reset_packet.rejected_sequence_number = UINT64_C(0x123456789ABC);
3944 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); 3922 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789);
3945 3923
3946 unsigned char packet[] = { 3924 unsigned char packet[] = {
3947 // public flags (public reset, 8 byte ConnectionId) 3925 // public flags (public reset, 8 byte ConnectionId)
3948 0x0E, 3926 0x0E,
3949 // connection_id 3927 // connection_id
3950 0x10, 0x32, 0x54, 0x76, 3928 0x10, 0x32, 0x54, 0x76,
3951 0x98, 0xBA, 0xDC, 0xFE, 3929 0x98, 0xBA, 0xDC, 0xFE,
3952 // message tag (kPRST) 3930 // message tag (kPRST)
3953 'P', 'R', 'S', 'T', 3931 'P', 'R', 'S', 'T',
3954 // num_entries (2) + padding 3932 // num_entries (2) + padding
(...skipping 18 matching lines...) Expand all
3973 framer_.BuildPublicResetPacket(reset_packet)); 3951 framer_.BuildPublicResetPacket(reset_packet));
3974 ASSERT_TRUE(data != nullptr); 3952 ASSERT_TRUE(data != nullptr);
3975 3953
3976 test::CompareCharArraysWithHexError("constructed packet", 3954 test::CompareCharArraysWithHexError("constructed packet",
3977 data->data(), data->length(), 3955 data->data(), data->length(),
3978 AsChars(packet), arraysize(packet)); 3956 AsChars(packet), arraysize(packet));
3979 } 3957 }
3980 3958
3981 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { 3959 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
3982 QuicPublicResetPacket reset_packet; 3960 QuicPublicResetPacket reset_packet;
3983 reset_packet.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3961 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
3984 reset_packet.public_header.reset_flag = true; 3962 reset_packet.public_header.reset_flag = true;
3985 reset_packet.public_header.version_flag = false; 3963 reset_packet.public_header.version_flag = false;
3986 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); 3964 reset_packet.rejected_sequence_number = UINT64_C(0x123456789ABC);
3987 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); 3965 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789);
3988 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); 3966 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234);
3989 3967
3990 unsigned char packet[] = { 3968 unsigned char packet[] = {
3991 // public flags (public reset, 8 byte ConnectionId) 3969 // public flags (public reset, 8 byte ConnectionId)
3992 0x0E, 3970 0x0E,
3993 // connection_id 3971 // connection_id
3994 0x10, 0x32, 0x54, 0x76, 3972 0x10, 0x32, 0x54, 0x76,
3995 0x98, 0xBA, 0xDC, 0xFE, 3973 0x98, 0xBA, 0xDC, 0xFE,
3996 // message tag (kPRST) 3974 // message tag (kPRST)
3997 'P', 'R', 'S', 'T', 3975 'P', 'R', 'S', 'T',
(...skipping 27 matching lines...) Expand all
4025 framer_.BuildPublicResetPacket(reset_packet)); 4003 framer_.BuildPublicResetPacket(reset_packet));
4026 ASSERT_TRUE(data != nullptr); 4004 ASSERT_TRUE(data != nullptr);
4027 4005
4028 test::CompareCharArraysWithHexError("constructed packet", 4006 test::CompareCharArraysWithHexError("constructed packet",
4029 data->data(), data->length(), 4007 data->data(), data->length(),
4030 AsChars(packet), arraysize(packet)); 4008 AsChars(packet), arraysize(packet));
4031 } 4009 }
4032 4010
4033 TEST_P(QuicFramerTest, BuildFecPacket) { 4011 TEST_P(QuicFramerTest, BuildFecPacket) {
4034 QuicPacketHeader header; 4012 QuicPacketHeader header;
4035 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4013 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
4036 header.public_header.reset_flag = false; 4014 header.public_header.reset_flag = false;
4037 header.public_header.version_flag = false; 4015 header.public_header.version_flag = false;
4038 header.fec_flag = true; 4016 header.fec_flag = true;
4039 header.entropy_flag = true; 4017 header.entropy_flag = true;
4040 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); 4018 header.packet_sequence_number = (UINT64_C(0x123456789ABC));
4041 header.is_in_fec_group = IN_FEC_GROUP; 4019 header.is_in_fec_group = IN_FEC_GROUP;
4042 header.fec_group = GG_UINT64_C(0x123456789ABB);; 4020 header.fec_group = UINT64_C(0x123456789ABB);
4021 ;
4043 4022
4044 QuicFecData fec_data; 4023 QuicFecData fec_data;
4045 fec_data.fec_group = 1; 4024 fec_data.fec_group = 1;
4046 fec_data.redundancy = "abcdefghijklmnop"; 4025 fec_data.redundancy = "abcdefghijklmnop";
4047 4026
4048 unsigned char packet[] = { 4027 unsigned char packet[] = {
4049 // public flags (8 byte connection_id) 4028 // public flags (8 byte connection_id)
4050 0x3C, 4029 0x3C,
4051 // connection_id 4030 // connection_id
4052 0x10, 0x32, 0x54, 0x76, 4031 0x10, 0x32, 0x54, 0x76,
(...skipping 15 matching lines...) Expand all
4068 4047
4069 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data)); 4048 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data));
4070 ASSERT_TRUE(data != nullptr); 4049 ASSERT_TRUE(data != nullptr);
4071 4050
4072 test::CompareCharArraysWithHexError("constructed packet", 4051 test::CompareCharArraysWithHexError("constructed packet",
4073 data->data(), data->length(), 4052 data->data(), data->length(),
4074 AsChars(packet), arraysize(packet)); 4053 AsChars(packet), arraysize(packet));
4075 } 4054 }
4076 4055
4077 TEST_P(QuicFramerTest, EncryptPacket) { 4056 TEST_P(QuicFramerTest, EncryptPacket) {
4078 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 4057 QuicPacketSequenceNumber sequence_number = UINT64_C(0x123456789ABC);
4079 unsigned char packet[] = { 4058 unsigned char packet[] = {
4080 // public flags (8 byte connection_id) 4059 // public flags (8 byte connection_id)
4081 0x3C, 4060 0x3C,
4082 // connection_id 4061 // connection_id
4083 0x10, 0x32, 0x54, 0x76, 4062 0x10, 0x32, 0x54, 0x76,
4084 0x98, 0xBA, 0xDC, 0xFE, 4063 0x98, 0xBA, 0xDC, 0xFE,
4085 // packet sequence number 4064 // packet sequence number
4086 0xBC, 0x9A, 0x78, 0x56, 4065 0xBC, 0x9A, 0x78, 0x56,
4087 0x34, 0x12, 4066 0x34, 0x12,
4088 // private flags (fec group & fec packet) 4067 // private flags (fec group & fec packet)
(...skipping 13 matching lines...) Expand all
4102 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER)); 4081 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER));
4103 char buffer[kMaxPacketSize]; 4082 char buffer[kMaxPacketSize];
4104 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 4083 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
4105 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); 4084 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize));
4106 4085
4107 ASSERT_TRUE(encrypted.get() != nullptr); 4086 ASSERT_TRUE(encrypted.get() != nullptr);
4108 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 4087 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
4109 } 4088 }
4110 4089
4111 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { 4090 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
4112 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 4091 QuicPacketSequenceNumber sequence_number = UINT64_C(0x123456789ABC);
4113 unsigned char packet[] = { 4092 unsigned char packet[] = {
4114 // public flags (version, 8 byte connection_id) 4093 // public flags (version, 8 byte connection_id)
4115 0x3D, 4094 0x3D,
4116 // connection_id 4095 // connection_id
4117 0x10, 0x32, 0x54, 0x76, 4096 0x10, 0x32, 0x54, 0x76,
4118 0x98, 0xBA, 0xDC, 0xFE, 4097 0x98, 0xBA, 0xDC, 0xFE,
4119 // version tag 4098 // version tag
4120 'Q', '.', '1', '0', 4099 'Q', '.', '1', '0',
4121 // packet sequence number 4100 // packet sequence number
4122 0xBC, 0x9A, 0x78, 0x56, 4101 0xBC, 0x9A, 0x78, 0x56,
(...skipping 16 matching lines...) Expand all
4139 char buffer[kMaxPacketSize]; 4118 char buffer[kMaxPacketSize];
4140 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket( 4119 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(
4141 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize)); 4120 ENCRYPTION_NONE, sequence_number, *raw, buffer, kMaxPacketSize));
4142 4121
4143 ASSERT_TRUE(encrypted.get() != nullptr); 4122 ASSERT_TRUE(encrypted.get() != nullptr);
4144 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 4123 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
4145 } 4124 }
4146 4125
4147 TEST_P(QuicFramerTest, AckTruncationLargePacket) { 4126 TEST_P(QuicFramerTest, AckTruncationLargePacket) {
4148 QuicPacketHeader header; 4127 QuicPacketHeader header;
4149 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4128 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
4150 header.public_header.reset_flag = false; 4129 header.public_header.reset_flag = false;
4151 header.public_header.version_flag = false; 4130 header.public_header.version_flag = false;
4152 header.fec_flag = false; 4131 header.fec_flag = false;
4153 header.entropy_flag = false; 4132 header.entropy_flag = false;
4154 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4133 header.packet_sequence_number = UINT64_C(0x123456789ABC);
4155 header.fec_group = 0; 4134 header.fec_group = 0;
4156 4135
4157 // Create a packet with just the ack. 4136 // Create a packet with just the ack.
4158 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4137 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4159 QuicFrame frame; 4138 QuicFrame frame;
4160 frame.type = ACK_FRAME; 4139 frame.type = ACK_FRAME;
4161 frame.ack_frame = &ack_frame; 4140 frame.ack_frame = &ack_frame;
4162 QuicFrames frames; 4141 QuicFrames frames;
4163 frames.push_back(frame); 4142 frames.push_back(frame);
4164 4143
(...skipping 14 matching lines...) Expand all
4179 SequenceNumberSet::const_iterator missing_iter = 4158 SequenceNumberSet::const_iterator missing_iter =
4180 processed_ack_frame.missing_packets.begin(); 4159 processed_ack_frame.missing_packets.begin();
4181 EXPECT_EQ(1u, *missing_iter); 4160 EXPECT_EQ(1u, *missing_iter);
4182 SequenceNumberSet::const_reverse_iterator last_missing_iter = 4161 SequenceNumberSet::const_reverse_iterator last_missing_iter =
4183 processed_ack_frame.missing_packets.rbegin(); 4162 processed_ack_frame.missing_packets.rbegin();
4184 EXPECT_EQ(509u, *last_missing_iter); 4163 EXPECT_EQ(509u, *last_missing_iter);
4185 } 4164 }
4186 4165
4187 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { 4166 TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
4188 QuicPacketHeader header; 4167 QuicPacketHeader header;
4189 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4168 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
4190 header.public_header.reset_flag = false; 4169 header.public_header.reset_flag = false;
4191 header.public_header.version_flag = false; 4170 header.public_header.version_flag = false;
4192 header.fec_flag = false; 4171 header.fec_flag = false;
4193 header.entropy_flag = false; 4172 header.entropy_flag = false;
4194 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4173 header.packet_sequence_number = UINT64_C(0x123456789ABC);
4195 header.fec_group = 0; 4174 header.fec_group = 0;
4196 4175
4197 // Create a packet with just the ack. 4176 // Create a packet with just the ack.
4198 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4177 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4199 QuicFrame frame; 4178 QuicFrame frame;
4200 frame.type = ACK_FRAME; 4179 frame.type = ACK_FRAME;
4201 frame.ack_frame = &ack_frame; 4180 frame.ack_frame = &ack_frame;
4202 QuicFrames frames; 4181 QuicFrames frames;
4203 frames.push_back(frame); 4182 frames.push_back(frame);
4204 4183
(...skipping 14 matching lines...) Expand all
4219 SequenceNumberSet::const_iterator missing_iter = 4198 SequenceNumberSet::const_iterator missing_iter =
4220 processed_ack_frame.missing_packets.begin(); 4199 processed_ack_frame.missing_packets.begin();
4221 EXPECT_EQ(1u, *missing_iter); 4200 EXPECT_EQ(1u, *missing_iter);
4222 SequenceNumberSet::const_reverse_iterator last_missing_iter = 4201 SequenceNumberSet::const_reverse_iterator last_missing_iter =
4223 processed_ack_frame.missing_packets.rbegin(); 4202 processed_ack_frame.missing_packets.rbegin();
4224 EXPECT_EQ(475u, *last_missing_iter); 4203 EXPECT_EQ(475u, *last_missing_iter);
4225 } 4204 }
4226 4205
4227 TEST_P(QuicFramerTest, CleanTruncation) { 4206 TEST_P(QuicFramerTest, CleanTruncation) {
4228 QuicPacketHeader header; 4207 QuicPacketHeader header;
4229 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4208 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210);
4230 header.public_header.reset_flag = false; 4209 header.public_header.reset_flag = false;
4231 header.public_header.version_flag = false; 4210 header.public_header.version_flag = false;
4232 header.fec_flag = false; 4211 header.fec_flag = false;
4233 header.entropy_flag = true; 4212 header.entropy_flag = true;
4234 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4213 header.packet_sequence_number = UINT64_C(0x123456789ABC);
4235 header.fec_group = 0; 4214 header.fec_group = 0;
4236 4215
4237 QuicAckFrame ack_frame; 4216 QuicAckFrame ack_frame;
4238 ack_frame.largest_observed = 201; 4217 ack_frame.largest_observed = 201;
4239 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) { 4218 for (uint64 i = 1; i < ack_frame.largest_observed; ++i) {
4240 ack_frame.missing_packets.insert(i); 4219 ack_frame.missing_packets.insert(i);
4241 } 4220 }
4242 4221
4243 // Create a packet with just the ack. 4222 // Create a packet with just the ack.
4244 QuicFrame frame; 4223 QuicFrame frame;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
4401 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); 4380 EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true));
4402 EXPECT_CALL(visitor, OnDecryptedPacket(_)); 4381 EXPECT_CALL(visitor, OnDecryptedPacket(_));
4403 4382
4404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 4383 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 4384 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 4385 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4407 } 4386 }
4408 4387
4409 } // namespace test 4388 } // namespace test
4410 } // namespace net 4389 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_http_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698