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

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

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

Powered by Google App Engine
This is Rietveld 408576698