| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |