| 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 <stdint.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 22 matching lines...) Expand all Loading... |
| 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 QuicPacketNumber kEpoch = UINT64_C(1) << 48; | 40 const QuicPacketNumber kEpoch = UINT64_C(1) << 48; |
| 41 const QuicPacketNumber kMask = kEpoch - 1; | 41 const QuicPacketNumber kMask = kEpoch - 1; |
| 42 | 42 |
| 43 // Use fields in which each byte is distinct to ensure that every byte is |
| 44 // framed correctly. The values are otherwise arbitrary. |
| 45 const QuicConnectionId kConnectionId = UINT64_C(0xFEDCBA9876543210); |
| 46 const QuicPacketNumber kPacketNumber = UINT64_C(0x123456789ABC); |
| 47 const QuicPacketNumber kLargestObserved = UINT64_C(0x0123456789ABF); |
| 48 const QuicPacketNumber kMissingPacket = UINT64_C(0x0123456789ABE); |
| 49 const QuicPacketNumber kLeastUnacked = UINT64_C(0x0123456789AA0); |
| 50 const QuicStreamId kStreamId = UINT64_C(0x01020304); |
| 51 const QuicStreamOffset kStreamOffset = UINT64_C(0xBA98FEDC32107654); |
| 52 const QuicPublicResetNonceProof kNonceProof = UINT64_C(0xABCDEF0123456789); |
| 53 |
| 43 // Index into the connection_id offset in the header. | 54 // Index into the connection_id offset in the header. |
| 44 const size_t kConnectionIdOffset = kPublicFlagsSize; | 55 const size_t kConnectionIdOffset = kPublicFlagsSize; |
| 45 // Index into the version string in the header. (if present). | 56 // Index into the version string in the header. (if present). |
| 46 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 57 const size_t kVersionOffset = kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
| 47 | 58 |
| 48 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 59 // Size in bytes of the stream frame fields for an arbitrary StreamID and |
| 49 // offset and the last frame in a packet. | 60 // offset and the last frame in a packet. |
| 50 size_t GetMinStreamFrameSize() { | 61 size_t GetMinStreamFrameSize() { |
| 51 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; | 62 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; |
| 52 } | 63 } |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 kMaxPacketSize - GetPacketHeaderSize( | 617 kMaxPacketSize - GetPacketHeaderSize( |
| 607 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 618 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 608 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); | 619 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); |
| 609 // clang-format on | 620 // clang-format on |
| 610 | 621 |
| 611 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 622 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 612 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 623 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 613 | 624 |
| 614 ASSERT_TRUE(visitor_.header_.get()); | 625 ASSERT_TRUE(visitor_.header_.get()); |
| 615 // Make sure we've parsed the packet header, so we can send an error. | 626 // Make sure we've parsed the packet header, so we can send an error. |
| 616 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 627 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 617 visitor_.header_->public_header.connection_id); | |
| 618 // Make sure the correct error is propagated. | 628 // Make sure the correct error is propagated. |
| 619 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 629 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
| 620 } | 630 } |
| 621 | 631 |
| 622 TEST_P(QuicFramerTest, PacketHeader) { | 632 TEST_P(QuicFramerTest, PacketHeader) { |
| 623 // clang-format off | 633 // clang-format off |
| 624 unsigned char packet[] = { | 634 unsigned char packet[] = { |
| 625 // public flags (8 byte connection_id) | 635 // public flags (8 byte connection_id) |
| 626 0x3C, | 636 0x3C, |
| 627 // connection_id | 637 // connection_id |
| 628 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 638 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 629 // packet number | 639 // packet number |
| 630 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 640 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 631 // private flags | 641 // private flags |
| 632 0x00, | 642 0x00, |
| 633 }; | 643 }; |
| 634 // clang-format on | 644 // clang-format on |
| 635 | 645 |
| 636 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 646 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 637 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 647 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 638 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 648 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 639 ASSERT_TRUE(visitor_.header_.get()); | 649 ASSERT_TRUE(visitor_.header_.get()); |
| 640 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 650 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 641 visitor_.header_->public_header.connection_id); | |
| 642 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 651 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 643 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 652 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 644 EXPECT_FALSE(visitor_.header_->fec_flag); | 653 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 645 EXPECT_FALSE(visitor_.header_->entropy_flag); | 654 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 646 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 655 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 647 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 656 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 648 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 657 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 649 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 658 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 650 | 659 |
| 651 // Now test framing boundaries. | 660 // Now test framing boundaries. |
| 652 for (size_t i = 0; | 661 for (size_t i = 0; |
| 653 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 662 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 654 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 663 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 655 ++i) { | 664 ++i) { |
| 656 string expected_error; | 665 string expected_error; |
| 657 if (i < kConnectionIdOffset) { | 666 if (i < kConnectionIdOffset) { |
| 658 expected_error = "Unable to read public flags."; | 667 expected_error = "Unable to read public flags."; |
| 659 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 668 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
| 660 expected_error = "Unable to read ConnectionId."; | 669 expected_error = "Unable to read ConnectionId."; |
| 661 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 670 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { |
| 662 expected_error = "Unable to read packet number."; | 671 expected_error = "Unable to read packet number."; |
| 663 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 672 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
| 664 expected_error = "Unable to read private flags."; | 673 expected_error = "Unable to read private flags."; |
| 665 } else { | 674 } else { |
| 666 expected_error = "Unable to read first fec protected packet offset."; | 675 expected_error = "Unable to read first fec protected packet offset."; |
| 667 } | 676 } |
| 668 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 677 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 669 } | 678 } |
| 670 } | 679 } |
| 671 | 680 |
| 672 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 681 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { |
| 673 QuicFramerPeer::SetLastSerializedConnectionId( | 682 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 674 &framer_, UINT64_C(0xFEDCBA9876543210)); | |
| 675 | 683 |
| 676 // clang-format off | 684 // clang-format off |
| 677 unsigned char packet[] = { | 685 unsigned char packet[] = { |
| 678 // public flags (4 byte connection_id) | 686 // public flags (4 byte connection_id) |
| 679 0x38, | 687 0x38, |
| 680 // connection_id | 688 // connection_id |
| 681 0x10, 0x32, 0x54, 0x76, | 689 0x10, 0x32, 0x54, 0x76, |
| 682 // packet number | 690 // packet number |
| 683 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 691 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 684 // private flags | 692 // private flags |
| 685 0x00, | 693 0x00, |
| 686 }; | 694 }; |
| 687 // clang-format on | 695 // clang-format on |
| 688 | 696 |
| 689 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 697 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 690 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 698 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 691 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 699 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 692 ASSERT_TRUE(visitor_.header_.get()); | 700 ASSERT_TRUE(visitor_.header_.get()); |
| 693 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 701 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 694 visitor_.header_->public_header.connection_id); | |
| 695 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 702 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 696 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 703 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 697 EXPECT_FALSE(visitor_.header_->fec_flag); | 704 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 698 EXPECT_FALSE(visitor_.header_->entropy_flag); | 705 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 699 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 706 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 700 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 707 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 701 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 708 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 702 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 709 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 703 | 710 |
| 704 // Now test framing boundaries. | 711 // Now test framing boundaries. |
| 705 for (size_t i = 0; | 712 for (size_t i = 0; |
| 706 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 713 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, |
| 707 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 714 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 708 ++i) { | 715 ++i) { |
| 709 string expected_error; | 716 string expected_error; |
| 710 if (i < kConnectionIdOffset) { | 717 if (i < kConnectionIdOffset) { |
| 711 expected_error = "Unable to read public flags."; | 718 expected_error = "Unable to read public flags."; |
| 712 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 719 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, |
| 713 !kIncludeVersion)) { | 720 !kIncludeVersion)) { |
| 714 expected_error = "Unable to read ConnectionId."; | 721 expected_error = "Unable to read ConnectionId."; |
| 715 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 722 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, |
| 716 !kIncludeVersion)) { | 723 !kIncludeVersion)) { |
| 717 expected_error = "Unable to read packet number."; | 724 expected_error = "Unable to read packet number."; |
| 718 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 725 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, |
| 719 !kIncludeVersion)) { | 726 !kIncludeVersion)) { |
| 720 expected_error = "Unable to read private flags."; | 727 expected_error = "Unable to read private flags."; |
| 721 } else { | 728 } else { |
| 722 expected_error = "Unable to read first fec protected packet offset."; | 729 expected_error = "Unable to read first fec protected packet offset."; |
| 723 } | 730 } |
| 724 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 731 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 725 } | 732 } |
| 726 } | 733 } |
| 727 | 734 |
| 728 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 735 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { |
| 729 QuicFramerPeer::SetLastSerializedConnectionId( | 736 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 730 &framer_, UINT64_C(0xFEDCBA9876543210)); | |
| 731 | 737 |
| 732 // clang-format off | 738 // clang-format off |
| 733 unsigned char packet[] = { | 739 unsigned char packet[] = { |
| 734 // public flags (1 byte connection_id) | 740 // public flags (1 byte connection_id) |
| 735 0x34, | 741 0x34, |
| 736 // connection_id | 742 // connection_id |
| 737 0x10, | 743 0x10, |
| 738 // packet number | 744 // packet number |
| 739 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 745 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 740 // private flags | 746 // private flags |
| 741 0x00, | 747 0x00, |
| 742 }; | 748 }; |
| 743 // clang-format on | 749 // clang-format on |
| 744 | 750 |
| 745 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 751 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 746 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 752 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 747 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 753 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 748 ASSERT_TRUE(visitor_.header_.get()); | 754 ASSERT_TRUE(visitor_.header_.get()); |
| 749 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 755 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 750 visitor_.header_->public_header.connection_id); | |
| 751 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 756 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 752 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 757 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 753 EXPECT_FALSE(visitor_.header_->fec_flag); | 758 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 754 EXPECT_FALSE(visitor_.header_->entropy_flag); | 759 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 755 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 760 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 756 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 761 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 757 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 762 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 758 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 763 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 759 | 764 |
| 760 // Now test framing boundaries. | 765 // Now test framing boundaries. |
| 761 for (size_t i = 0; | 766 for (size_t i = 0; |
| 762 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 767 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, |
| 763 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 768 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 764 ++i) { | 769 ++i) { |
| 765 string expected_error; | 770 string expected_error; |
| 766 if (i < kConnectionIdOffset) { | 771 if (i < kConnectionIdOffset) { |
| 767 expected_error = "Unable to read public flags."; | 772 expected_error = "Unable to read public flags."; |
| 768 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 773 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, |
| 769 !kIncludeVersion)) { | 774 !kIncludeVersion)) { |
| 770 expected_error = "Unable to read ConnectionId."; | 775 expected_error = "Unable to read ConnectionId."; |
| 771 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 776 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, |
| 772 !kIncludeVersion)) { | 777 !kIncludeVersion)) { |
| 773 expected_error = "Unable to read packet number."; | 778 expected_error = "Unable to read packet number."; |
| 774 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 779 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, |
| 775 !kIncludeVersion)) { | 780 !kIncludeVersion)) { |
| 776 expected_error = "Unable to read private flags."; | 781 expected_error = "Unable to read private flags."; |
| 777 } else { | 782 } else { |
| 778 expected_error = "Unable to read first fec protected packet offset."; | 783 expected_error = "Unable to read first fec protected packet offset."; |
| 779 } | 784 } |
| 780 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 785 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 781 } | 786 } |
| 782 } | 787 } |
| 783 | 788 |
| 784 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 789 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
| 785 QuicFramerPeer::SetLastSerializedConnectionId( | 790 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 786 &framer_, UINT64_C(0xFEDCBA9876543210)); | |
| 787 | 791 |
| 788 // clang-format off | 792 // clang-format off |
| 789 unsigned char packet[] = { | 793 unsigned char packet[] = { |
| 790 // public flags (0 byte connection_id) | 794 // public flags (0 byte connection_id) |
| 791 0x30, | 795 0x30, |
| 792 // connection_id | 796 // connection_id |
| 793 // packet number | 797 // packet number |
| 794 0xBC, 0x9A, 0x78, 0x56, | 798 0xBC, 0x9A, 0x78, 0x56, |
| 795 0x34, 0x12, | 799 0x34, 0x12, |
| 796 // private flags | 800 // private flags |
| 797 0x00, | 801 0x00, |
| 798 }; | 802 }; |
| 799 // clang-format on | 803 // clang-format on |
| 800 | 804 |
| 801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 805 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 802 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 806 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 803 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 807 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 804 ASSERT_TRUE(visitor_.header_.get()); | 808 ASSERT_TRUE(visitor_.header_.get()); |
| 805 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 809 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 806 visitor_.header_->public_header.connection_id); | |
| 807 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 810 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 808 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 811 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 809 EXPECT_FALSE(visitor_.header_->fec_flag); | 812 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 810 EXPECT_FALSE(visitor_.header_->entropy_flag); | 813 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 811 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 814 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 812 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 815 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 813 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 816 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 814 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 817 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 815 | 818 |
| 816 // Now test framing boundaries. | 819 // Now test framing boundaries. |
| 817 for (size_t i = 0; | 820 for (size_t i = 0; |
| 818 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 821 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, |
| 819 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 822 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 820 ++i) { | 823 ++i) { |
| 821 string expected_error; | 824 string expected_error; |
| 822 if (i < kConnectionIdOffset) { | 825 if (i < kConnectionIdOffset) { |
| 823 expected_error = "Unable to read public flags."; | 826 expected_error = "Unable to read public flags."; |
| 824 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, | 827 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 850 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 853 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 851 // private flags | 854 // private flags |
| 852 0x00, | 855 0x00, |
| 853 }; | 856 }; |
| 854 // clang-format on | 857 // clang-format on |
| 855 | 858 |
| 856 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 859 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 857 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 860 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 858 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 861 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 859 ASSERT_TRUE(visitor_.header_.get()); | 862 ASSERT_TRUE(visitor_.header_.get()); |
| 860 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 863 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 861 visitor_.header_->public_header.connection_id); | |
| 862 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 864 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 863 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 865 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
| 864 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 866 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
| 865 EXPECT_FALSE(visitor_.header_->fec_flag); | 867 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 866 EXPECT_FALSE(visitor_.header_->entropy_flag); | 868 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 867 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 869 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 868 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 870 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 869 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 871 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 870 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 872 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 871 | 873 |
| 872 // Now test framing boundaries. | 874 // Now test framing boundaries. |
| 873 for (size_t i = 0; | 875 for (size_t i = 0; |
| 874 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 876 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
| 875 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 877 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 876 ++i) { | 878 ++i) { |
| 877 string expected_error; | 879 string expected_error; |
| 878 if (i < kConnectionIdOffset) { | 880 if (i < kConnectionIdOffset) { |
| 879 expected_error = "Unable to read public flags."; | 881 expected_error = "Unable to read public flags."; |
| 880 } else if (i < kVersionOffset) { | 882 } else if (i < kVersionOffset) { |
| 881 expected_error = "Unable to read ConnectionId."; | 883 expected_error = "Unable to read ConnectionId."; |
| 882 } else if (i < GetPacketNumberOffset(kIncludeVersion)) { | 884 } else if (i < GetPacketNumberOffset(kIncludeVersion)) { |
| 883 expected_error = "Unable to read protocol version."; | 885 expected_error = "Unable to read protocol version."; |
| 884 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 886 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { |
| 885 expected_error = "Unable to read packet number."; | 887 expected_error = "Unable to read packet number."; |
| 886 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 888 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
| 887 expected_error = "Unable to read private flags."; | 889 expected_error = "Unable to read private flags."; |
| 888 } else { | 890 } else { |
| 889 expected_error = "Unable to read first fec protected packet offset."; | 891 expected_error = "Unable to read first fec protected packet offset."; |
| 890 } | 892 } |
| 891 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 893 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 892 } | 894 } |
| 893 } | 895 } |
| 894 | 896 |
| 895 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { | 897 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { |
| 896 QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 898 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
| 897 | 899 |
| 898 // clang-format off | 900 // clang-format off |
| 899 unsigned char packet[] = { | 901 unsigned char packet[] = { |
| 900 // public flags (8 byte connection_id and 4 byte packet number) | 902 // public flags (8 byte connection_id and 4 byte packet number) |
| 901 0x2C, | 903 0x2C, |
| 902 // connection_id | 904 // connection_id |
| 903 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 905 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 904 // packet number | 906 // packet number |
| 905 0xBC, 0x9A, 0x78, 0x56, | 907 0xBC, 0x9A, 0x78, 0x56, |
| 906 // private flags | 908 // private flags |
| 907 0x00, | 909 0x00, |
| 908 }; | 910 }; |
| 909 // clang-format on | 911 // clang-format on |
| 910 | 912 |
| 911 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 913 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 912 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 914 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 913 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 915 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 914 ASSERT_TRUE(visitor_.header_.get()); | 916 ASSERT_TRUE(visitor_.header_.get()); |
| 915 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 917 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 916 visitor_.header_->public_header.connection_id); | |
| 917 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 918 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 918 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 919 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 919 EXPECT_FALSE(visitor_.header_->fec_flag); | 920 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 920 EXPECT_FALSE(visitor_.header_->entropy_flag); | 921 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 921 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 922 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 922 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 923 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 923 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 924 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 924 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 925 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 925 | 926 |
| 926 // Now test framing boundaries. | 927 // Now test framing boundaries. |
| 927 for (size_t i = 0; | 928 for (size_t i = 0; |
| 928 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 929 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 929 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 930 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 930 ++i) { | 931 ++i) { |
| 931 string expected_error; | 932 string expected_error; |
| 932 if (i < kConnectionIdOffset) { | 933 if (i < kConnectionIdOffset) { |
| 933 expected_error = "Unable to read public flags."; | 934 expected_error = "Unable to read public flags."; |
| 934 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 935 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
| 935 expected_error = "Unable to read ConnectionId."; | 936 expected_error = "Unable to read ConnectionId."; |
| 936 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 937 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 937 PACKET_4BYTE_PACKET_NUMBER)) { | 938 PACKET_4BYTE_PACKET_NUMBER)) { |
| 938 expected_error = "Unable to read packet number."; | 939 expected_error = "Unable to read packet number."; |
| 939 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 940 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 940 PACKET_4BYTE_PACKET_NUMBER)) { | 941 PACKET_4BYTE_PACKET_NUMBER)) { |
| 941 expected_error = "Unable to read private flags."; | 942 expected_error = "Unable to read private flags."; |
| 942 } else { | 943 } else { |
| 943 expected_error = "Unable to read first fec protected packet offset."; | 944 expected_error = "Unable to read first fec protected packet offset."; |
| 944 } | 945 } |
| 945 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 946 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 946 } | 947 } |
| 947 } | 948 } |
| 948 | 949 |
| 949 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 950 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
| 950 QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 951 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
| 951 | 952 |
| 952 // clang-format off | 953 // clang-format off |
| 953 unsigned char packet[] = { | 954 unsigned char packet[] = { |
| 954 // public flags (8 byte connection_id and 2 byte packet number) | 955 // public flags (8 byte connection_id and 2 byte packet number) |
| 955 0x1C, | 956 0x1C, |
| 956 // connection_id | 957 // connection_id |
| 957 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 958 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 958 // packet number | 959 // packet number |
| 959 0xBC, 0x9A, | 960 0xBC, 0x9A, |
| 960 // private flags | 961 // private flags |
| 961 0x00, | 962 0x00, |
| 962 }; | 963 }; |
| 963 // clang-format on | 964 // clang-format on |
| 964 | 965 |
| 965 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 966 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 966 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 967 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 967 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 968 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 968 ASSERT_TRUE(visitor_.header_.get()); | 969 ASSERT_TRUE(visitor_.header_.get()); |
| 969 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 970 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 970 visitor_.header_->public_header.connection_id); | |
| 971 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 971 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 972 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 972 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 973 EXPECT_FALSE(visitor_.header_->fec_flag); | 973 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 974 EXPECT_FALSE(visitor_.header_->entropy_flag); | 974 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 975 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 975 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 976 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 976 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 977 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 977 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 978 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 978 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 979 | 979 |
| 980 // Now test framing boundaries. | 980 // Now test framing boundaries. |
| 981 for (size_t i = 0; | 981 for (size_t i = 0; |
| 982 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 982 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 983 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 983 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 984 ++i) { | 984 ++i) { |
| 985 string expected_error; | 985 string expected_error; |
| 986 if (i < kConnectionIdOffset) { | 986 if (i < kConnectionIdOffset) { |
| 987 expected_error = "Unable to read public flags."; | 987 expected_error = "Unable to read public flags."; |
| 988 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 988 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
| 989 expected_error = "Unable to read ConnectionId."; | 989 expected_error = "Unable to read ConnectionId."; |
| 990 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, | 990 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 991 PACKET_2BYTE_PACKET_NUMBER)) { | 991 PACKET_2BYTE_PACKET_NUMBER)) { |
| 992 expected_error = "Unable to read packet number."; | 992 expected_error = "Unable to read packet number."; |
| 993 } else if (i < GetFecGroupOffset(!kIncludeVersion, | 993 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 994 PACKET_2BYTE_PACKET_NUMBER)) { | 994 PACKET_2BYTE_PACKET_NUMBER)) { |
| 995 expected_error = "Unable to read private flags."; | 995 expected_error = "Unable to read private flags."; |
| 996 } else { | 996 } else { |
| 997 expected_error = "Unable to read first fec protected packet offset."; | 997 expected_error = "Unable to read first fec protected packet offset."; |
| 998 } | 998 } |
| 999 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 999 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1000 } | 1000 } |
| 1001 } | 1001 } |
| 1002 | 1002 |
| 1003 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 1003 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
| 1004 QuicFramerPeer::SetLastPacketNumber(&framer_, UINT64_C(0x123456789ABA)); | 1004 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
| 1005 | 1005 |
| 1006 // clang-format off | 1006 // clang-format off |
| 1007 unsigned char packet[] = { | 1007 unsigned char packet[] = { |
| 1008 // public flags (8 byte connection_id and 1 byte packet number) | 1008 // public flags (8 byte connection_id and 1 byte packet number) |
| 1009 0x0C, | 1009 0x0C, |
| 1010 // connection_id | 1010 // connection_id |
| 1011 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1011 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 1012 // packet number | 1012 // packet number |
| 1013 0xBC, | 1013 0xBC, |
| 1014 // private flags | 1014 // private flags |
| 1015 0x00, | 1015 0x00, |
| 1016 }; | 1016 }; |
| 1017 // clang-format on | 1017 // clang-format on |
| 1018 | 1018 |
| 1019 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1019 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1020 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1020 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 1021 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); | 1021 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
| 1022 ASSERT_TRUE(visitor_.header_.get()); | 1022 ASSERT_TRUE(visitor_.header_.get()); |
| 1023 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 1023 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 1024 visitor_.header_->public_header.connection_id); | |
| 1025 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1024 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1026 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1025 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1027 EXPECT_FALSE(visitor_.header_->fec_flag); | 1026 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1028 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1027 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1029 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1028 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1030 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 1029 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1031 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1030 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1032 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1031 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1033 | 1032 |
| 1034 // Now test framing boundaries. | 1033 // Now test framing boundaries. |
| 1035 for (size_t i = 0; | 1034 for (size_t i = 0; |
| 1036 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1035 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1037 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 1036 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 1038 ++i) { | 1037 ++i) { |
| 1039 string expected_error; | 1038 string expected_error; |
| 1040 if (i < kConnectionIdOffset) { | 1039 if (i < kConnectionIdOffset) { |
| 1041 expected_error = "Unable to read public flags."; | 1040 expected_error = "Unable to read public flags."; |
| 1042 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { | 1041 } else if (i < GetPacketNumberOffset(!kIncludeVersion)) { |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1267 | 1266 |
| 1268 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1267 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1269 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1268 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1270 | 1269 |
| 1271 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1270 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1272 ASSERT_TRUE(visitor_.header_.get()); | 1271 ASSERT_TRUE(visitor_.header_.get()); |
| 1273 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1272 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1274 | 1273 |
| 1275 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1274 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1276 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1275 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1277 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1276 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1278 visitor_.stream_frames_[0]->stream_id); | |
| 1279 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1277 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1280 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1278 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1281 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1279 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1282 | 1280 |
| 1283 // Now test framing boundaries. | 1281 // Now test framing boundaries. |
| 1284 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 1282 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); |
| 1285 } | 1283 } |
| 1286 | 1284 |
| 1287 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1285 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
| 1288 // clang-format off | 1286 // clang-format off |
| 1289 unsigned char packet[] = { | 1287 unsigned char packet[] = { |
| 1290 // public flags (8 byte connection_id) | 1288 // public flags (8 byte connection_id) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1316 | 1314 |
| 1317 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1315 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1318 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1316 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1319 | 1317 |
| 1320 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1318 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1321 ASSERT_TRUE(visitor_.header_.get()); | 1319 ASSERT_TRUE(visitor_.header_.get()); |
| 1322 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1320 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1323 | 1321 |
| 1324 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1322 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1325 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1323 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1326 EXPECT_EQ(UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id); | 1324 // Stream ID should be the last 3 bytes of kStreamId. |
| 1325 EXPECT_EQ(0x00FFFFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1327 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1326 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1328 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1327 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1329 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1328 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1330 | 1329 |
| 1331 // Now test framing boundaries. | 1330 // Now test framing boundaries. |
| 1332 const size_t stream_id_size = 3; | 1331 const size_t stream_id_size = 3; |
| 1333 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1332 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1334 } | 1333 } |
| 1335 | 1334 |
| 1336 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1335 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
| 1337 // clang-format off | 1336 // clang-format off |
| 1338 unsigned char packet[] = { | 1337 unsigned char packet[] = { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1365 | 1364 |
| 1366 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1365 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1367 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1366 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1368 | 1367 |
| 1369 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1368 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1370 ASSERT_TRUE(visitor_.header_.get()); | 1369 ASSERT_TRUE(visitor_.header_.get()); |
| 1371 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1370 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1372 | 1371 |
| 1373 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1372 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1374 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1373 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1375 EXPECT_EQ(static_cast<uint64>(0x00000304), | 1374 // Stream ID should be the last 2 bytes of kStreamId. |
| 1376 visitor_.stream_frames_[0]->stream_id); | 1375 EXPECT_EQ(0x0000FFFF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1377 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1376 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1378 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1377 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1379 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1378 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1380 | 1379 |
| 1381 // Now test framing boundaries. | 1380 // Now test framing boundaries. |
| 1382 const size_t stream_id_size = 2; | 1381 const size_t stream_id_size = 2; |
| 1383 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1382 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1384 } | 1383 } |
| 1385 | 1384 |
| 1386 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1385 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
| 1387 // clang-format off | 1386 // clang-format off |
| 1388 unsigned char packet[] = { | 1387 unsigned char packet[] = { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1415 | 1414 |
| 1416 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1415 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1417 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1416 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1418 | 1417 |
| 1419 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1418 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1420 ASSERT_TRUE(visitor_.header_.get()); | 1419 ASSERT_TRUE(visitor_.header_.get()); |
| 1421 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1420 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1422 | 1421 |
| 1423 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1422 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1424 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1423 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1425 EXPECT_EQ(static_cast<uint64>(0x00000004), | 1424 // Stream ID should be the last byte of kStreamId. |
| 1426 visitor_.stream_frames_[0]->stream_id); | 1425 EXPECT_EQ(0x000000FF & kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1427 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1426 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1428 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1427 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1429 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1428 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1430 | 1429 |
| 1431 // Now test framing boundaries. | 1430 // Now test framing boundaries. |
| 1432 const size_t stream_id_size = 1; | 1431 const size_t stream_id_size = 1; |
| 1433 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1432 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
| 1434 } | 1433 } |
| 1435 | 1434 |
| 1436 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1435 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
| 1437 // clang-format off | 1436 // clang-format off |
| 1438 unsigned char packet[] = { | 1437 unsigned char packet[] = { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1469 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1468 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1470 | 1469 |
| 1471 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1470 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1472 ASSERT_TRUE(visitor_.header_.get()); | 1471 ASSERT_TRUE(visitor_.header_.get()); |
| 1473 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 1472 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
| 1474 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 1473 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
| 1475 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1474 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); |
| 1476 | 1475 |
| 1477 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1476 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1478 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1477 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1479 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1478 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1480 visitor_.stream_frames_[0]->stream_id); | |
| 1481 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1479 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1482 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1480 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1483 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1481 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1484 | 1482 |
| 1485 // Now test framing boundaries. | 1483 // Now test framing boundaries. |
| 1486 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 1484 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); |
| 1487 } | 1485 } |
| 1488 | 1486 |
| 1489 TEST_P(QuicFramerTest, RejectPacket) { | 1487 TEST_P(QuicFramerTest, RejectPacket) { |
| 1490 visitor_.accept_packet_ = false; | 1488 visitor_.accept_packet_ = false; |
| 1491 | 1489 |
| 1492 // clang-format off | 1490 // clang-format off |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1563 // data length | 1561 // data length |
| 1564 0x0c, 0x00, | 1562 0x0c, 0x00, |
| 1565 // data | 1563 // data |
| 1566 'h', 'e', 'l', 'l', | 1564 'h', 'e', 'l', 'l', |
| 1567 'o', ' ', 'w', 'o', | 1565 'o', ' ', 'w', 'o', |
| 1568 'r', 'l', 'd', '!', | 1566 'r', 'l', 'd', '!', |
| 1569 }; | 1567 }; |
| 1570 // clang-format on | 1568 // clang-format on |
| 1571 | 1569 |
| 1572 QuicPacketHeader header; | 1570 QuicPacketHeader header; |
| 1573 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 1571 header.public_header.connection_id = kConnectionId; |
| 1574 header.public_header.reset_flag = false; | 1572 header.public_header.reset_flag = false; |
| 1575 header.public_header.version_flag = false; | 1573 header.public_header.version_flag = false; |
| 1576 header.fec_flag = true; | 1574 header.fec_flag = true; |
| 1577 header.entropy_flag = true; | 1575 header.entropy_flag = true; |
| 1578 header.packet_number = UINT64_C(0x123456789ABC); | 1576 header.packet_number = kPacketNumber; |
| 1579 header.fec_group = 0; | 1577 header.fec_group = 0; |
| 1580 | 1578 |
| 1581 // Do not encrypt the payload because the revived payload is post-encryption. | 1579 // Do not encrypt the payload because the revived payload is post-encryption. |
| 1582 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 1580 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, |
| 1583 StringPiece(AsChars(payload), | 1581 StringPiece(AsChars(payload), |
| 1584 arraysize(payload)))); | 1582 arraysize(payload)))); |
| 1585 | 1583 |
| 1586 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1584 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1587 ASSERT_EQ(1, visitor_.revived_packets_); | 1585 ASSERT_EQ(1, visitor_.revived_packets_); |
| 1588 ASSERT_TRUE(visitor_.header_.get()); | 1586 ASSERT_TRUE(visitor_.header_.get()); |
| 1589 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 1587 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 1590 visitor_.header_->public_header.connection_id); | |
| 1591 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1588 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1592 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1589 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1593 EXPECT_TRUE(visitor_.header_->fec_flag); | 1590 EXPECT_TRUE(visitor_.header_->fec_flag); |
| 1594 EXPECT_TRUE(visitor_.header_->entropy_flag); | 1591 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 1595 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | 1592 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); |
| 1596 EXPECT_EQ(UINT64_C(0x123456789ABC), visitor_.header_->packet_number); | 1593 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1597 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1594 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1598 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1595 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1599 | 1596 |
| 1600 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1597 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1601 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1598 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1602 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1599 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1603 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1600 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1604 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1601 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1605 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1602 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1606 } | 1603 } |
| 1607 | 1604 |
| 1608 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 1605 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
| 1609 // clang-format off | 1606 // clang-format off |
| 1610 unsigned char packet[] = { | 1607 unsigned char packet[] = { |
| 1611 // public flags (8 byte connection_id) | 1608 // public flags (8 byte connection_id) |
| 1612 0x3C, | 1609 0x3C, |
| 1613 // connection_id | 1610 // connection_id |
| 1614 0x10, 0x32, 0x54, 0x76, | 1611 0x10, 0x32, 0x54, 0x76, |
| 1615 0x98, 0xBA, 0xDC, 0xFE, | 1612 0x98, 0xBA, 0xDC, 0xFE, |
| 1616 // packet number | 1613 // packet number |
| 1617 0xBC, 0x9A, 0x78, 0x56, | 1614 0xBC, 0x9A, 0x78, 0x56, |
| 1618 0x12, 0x34, | 1615 0x34, 0x12, |
| 1619 // private flags (fec group) | 1616 // private flags (fec group) |
| 1620 0x02, | 1617 0x02, |
| 1621 // first fec protected packet offset | 1618 // first fec protected packet offset |
| 1622 0x02, | 1619 0x02, |
| 1623 | 1620 |
| 1624 // frame type (stream frame with fin) | 1621 // frame type (stream frame with fin) |
| 1625 0xFF, | 1622 0xFF, |
| 1626 // stream id | 1623 // stream id |
| 1627 0x04, 0x03, 0x02, 0x01, | 1624 0x04, 0x03, 0x02, 0x01, |
| 1628 // offset | 1625 // offset |
| 1629 0x54, 0x76, 0x10, 0x32, | 1626 0x54, 0x76, 0x10, 0x32, |
| 1630 0xDC, 0xFE, 0x98, 0xBA, | 1627 0xDC, 0xFE, 0x98, 0xBA, |
| 1631 // data length | 1628 // data length |
| 1632 0x0c, 0x00, | 1629 0x0c, 0x00, |
| 1633 // data | 1630 // data |
| 1634 'h', 'e', 'l', 'l', | 1631 'h', 'e', 'l', 'l', |
| 1635 'o', ' ', 'w', 'o', | 1632 'o', ' ', 'w', 'o', |
| 1636 'r', 'l', 'd', '!', | 1633 'r', 'l', 'd', '!', |
| 1637 }; | 1634 }; |
| 1638 // clang-format on | 1635 // clang-format on |
| 1639 | 1636 |
| 1640 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1637 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1641 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1638 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1642 | 1639 |
| 1643 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1640 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1644 ASSERT_TRUE(visitor_.header_.get()); | 1641 ASSERT_TRUE(visitor_.header_.get()); |
| 1645 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1642 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1646 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1643 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1647 EXPECT_EQ(UINT64_C(0x341256789ABA), visitor_.header_->fec_group); | 1644 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->fec_group); |
| 1648 const size_t fec_offset = GetStartOfFecProtectedData( | 1645 const size_t fec_offset = GetStartOfFecProtectedData( |
| 1649 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER); | 1646 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER); |
| 1650 EXPECT_EQ( | 1647 EXPECT_EQ( |
| 1651 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 1648 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), |
| 1652 visitor_.fec_protected_payload_); | 1649 visitor_.fec_protected_payload_); |
| 1653 | 1650 |
| 1654 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1651 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
| 1655 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1652 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1656 EXPECT_EQ(UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1653 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
| 1657 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1654 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
| 1658 EXPECT_EQ(UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0]->offset); | 1655 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
| 1659 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1656 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
| 1660 } | 1657 } |
| 1661 | 1658 |
| 1662 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1659 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { |
| 1663 // clang-format off | 1660 // clang-format off |
| 1664 unsigned char packet[] = { | 1661 unsigned char packet[] = { |
| 1665 // public flags (8 byte connection_id) | 1662 // public flags (8 byte connection_id) |
| 1666 0x3C, | 1663 0x3C, |
| 1667 // connection_id | 1664 // connection_id |
| 1668 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1665 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1705 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1702 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1706 | 1703 |
| 1707 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1704 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1708 ASSERT_TRUE(visitor_.header_.get()); | 1705 ASSERT_TRUE(visitor_.header_.get()); |
| 1709 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1706 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1710 | 1707 |
| 1711 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1708 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1712 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1709 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1713 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1710 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1714 EXPECT_EQ(0xBA, frame.entropy_hash); | 1711 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1715 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1712 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 1716 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1713 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 1717 ASSERT_EQ(2u, frame.received_packet_times.size()); | 1714 ASSERT_EQ(2u, frame.received_packet_times.size()); |
| 1718 EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1715 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 1719 | 1716 |
| 1720 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1717 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1721 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1718 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1722 kQuicEntropyHashSize; | 1719 kQuicEntropyHashSize; |
| 1723 const size_t kMissingDeltaTimeOffset = | 1720 const size_t kMissingDeltaTimeOffset = |
| 1724 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1721 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1725 const size_t kNumTimestampsOffset = | 1722 const size_t kNumTimestampsOffset = |
| 1726 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1723 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 1727 const size_t kTimestampDeltaLargestObserved1 = | 1724 const size_t kTimestampDeltaLargestObserved1 = |
| 1728 kNumTimestampsOffset + kQuicNumTimestampsSize; | 1725 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1821 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1818 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1822 | 1819 |
| 1823 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1820 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1824 ASSERT_TRUE(visitor_.header_.get()); | 1821 ASSERT_TRUE(visitor_.header_.get()); |
| 1825 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1822 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1826 | 1823 |
| 1827 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1824 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1828 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1825 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1829 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1826 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1830 EXPECT_EQ(0xBA, frame.entropy_hash); | 1827 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1831 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1828 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 1832 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1829 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 1833 ASSERT_EQ(1u, frame.received_packet_times.size()); | 1830 ASSERT_EQ(1u, frame.received_packet_times.size()); |
| 1834 EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1831 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 1835 | 1832 |
| 1836 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1833 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1837 const size_t kLargestObservedOffset = | 1834 const size_t kLargestObservedOffset = |
| 1838 kReceivedEntropyOffset + kQuicEntropyHashSize; | 1835 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 1839 const size_t kMissingDeltaTimeOffset = | 1836 const size_t kMissingDeltaTimeOffset = |
| 1840 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1837 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1841 const size_t kNumTimestampsOffset = | 1838 const size_t kNumTimestampsOffset = |
| 1842 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1839 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 1843 const size_t kTimestampDeltaLargestObserved = | 1840 const size_t kTimestampDeltaLargestObserved = |
| 1844 kNumTimestampsOffset + kQuicNumTimestampsSize; | 1841 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1923 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1920 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1924 | 1921 |
| 1925 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1922 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1926 ASSERT_TRUE(visitor_.header_.get()); | 1923 ASSERT_TRUE(visitor_.header_.get()); |
| 1927 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1924 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 1928 | 1925 |
| 1929 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1926 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1930 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1927 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1931 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1928 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1932 EXPECT_EQ(0xBA, frame.entropy_hash); | 1929 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1933 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 1930 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 1934 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1931 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 1935 EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 1932 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 1936 | 1933 |
| 1937 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1934 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1938 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1935 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 1939 kQuicEntropyHashSize; | 1936 kQuicEntropyHashSize; |
| 1940 const size_t kMissingDeltaTimeOffset = | 1937 const size_t kMissingDeltaTimeOffset = |
| 1941 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1938 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1942 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1939 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 1943 kQuicDeltaTimeLargestObservedSize; | 1940 kQuicDeltaTimeLargestObservedSize; |
| 1944 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 1941 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + |
| 1945 kQuicNumTimestampsSize; | 1942 kQuicNumTimestampsSize; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2021 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2018 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2022 | 2019 |
| 2023 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2020 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2024 ASSERT_TRUE(visitor_.header_.get()); | 2021 ASSERT_TRUE(visitor_.header_.get()); |
| 2025 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2022 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2026 | 2023 |
| 2027 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2024 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2028 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2025 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2029 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2026 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 2030 EXPECT_EQ(0xBA, frame.entropy_hash); | 2027 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 2031 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame.largest_observed); | 2028 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 2032 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 2029 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 2033 EXPECT_EQ(UINT64_C(0x0123456789ABE), frame.missing_packets.Min()); | 2030 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 2034 | 2031 |
| 2035 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2032 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 2036 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 2033 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
| 2037 kQuicEntropyHashSize; | 2034 kQuicEntropyHashSize; |
| 2038 const size_t kMissingDeltaTimeOffset = | 2035 const size_t kMissingDeltaTimeOffset = |
| 2039 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2036 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 2040 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 2037 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + |
| 2041 kQuicDeltaTimeLargestObservedSize; | 2038 kQuicDeltaTimeLargestObservedSize; |
| 2042 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 2039 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + |
| 2043 kQuicNumTimestampsSize; | 2040 kQuicNumTimestampsSize; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2113 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2110 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2114 | 2111 |
| 2115 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2112 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2116 ASSERT_TRUE(visitor_.header_.get()); | 2113 ASSERT_TRUE(visitor_.header_.get()); |
| 2117 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2114 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2118 | 2115 |
| 2119 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2116 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2120 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2117 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2121 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2118 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2122 EXPECT_EQ(0xBA, frame->entropy_hash); | 2119 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2123 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); | 2120 EXPECT_EQ(kLargestObserved, frame->largest_observed); |
| 2124 ASSERT_TRUE(frame->missing_packets.Empty()); | 2121 ASSERT_TRUE(frame->missing_packets.Empty()); |
| 2125 | 2122 |
| 2126 // Verify that the packet re-serializes identically. | 2123 // Verify that the packet re-serializes identically. |
| 2127 QuicFrames frames; | 2124 QuicFrames frames; |
| 2128 frames.push_back(QuicFrame(frame)); | 2125 frames.push_back(QuicFrame(frame)); |
| 2129 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2126 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2130 ASSERT_TRUE(data != nullptr); | 2127 ASSERT_TRUE(data != nullptr); |
| 2131 | 2128 |
| 2132 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2129 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2133 data->length(), AsChars(packet), | 2130 data->length(), AsChars(packet), |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2178 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2175 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2179 | 2176 |
| 2180 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2177 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2181 ASSERT_TRUE(visitor_.header_.get()); | 2178 ASSERT_TRUE(visitor_.header_.get()); |
| 2182 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2179 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2183 | 2180 |
| 2184 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2181 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2185 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2182 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2186 QuicAckFrame* frame = visitor_.ack_frames_[0]; | 2183 QuicAckFrame* frame = visitor_.ack_frames_[0]; |
| 2187 EXPECT_EQ(0xBA, frame->entropy_hash); | 2184 EXPECT_EQ(0xBA, frame->entropy_hash); |
| 2188 EXPECT_EQ(UINT64_C(0x0123456789ABF), frame->largest_observed); | 2185 EXPECT_EQ(kLargestObserved, frame->largest_observed); |
| 2189 EXPECT_EQ(0u, frame->latest_revived_packet); | 2186 EXPECT_EQ(0u, frame->latest_revived_packet); |
| 2190 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); | 2187 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); |
| 2191 EXPECT_EQ(UINT64_C(0x0123456789ABE) - 499, frame->missing_packets.Min()); | 2188 EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min()); |
| 2192 EXPECT_EQ(UINT64_C(0x0123456789ABE), frame->missing_packets.Max()); | 2189 EXPECT_EQ(kMissingPacket, frame->missing_packets.Max()); |
| 2193 | 2190 |
| 2194 // Verify that the packet re-serializes identically. | 2191 // Verify that the packet re-serializes identically. |
| 2195 QuicFrames frames; | 2192 QuicFrames frames; |
| 2196 frames.push_back(QuicFrame(frame)); | 2193 frames.push_back(QuicFrame(frame)); |
| 2197 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2194 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2198 ASSERT_TRUE(data != nullptr); | 2195 ASSERT_TRUE(data != nullptr); |
| 2199 | 2196 |
| 2200 test::CompareCharArraysWithHexError("constructed packet", | 2197 test::CompareCharArraysWithHexError("constructed packet", |
| 2201 data->data(), data->length(), | 2198 data->data(), data->length(), |
| 2202 AsChars(packet), arraysize(packet)); | 2199 AsChars(packet), arraysize(packet)); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2231 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2228 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2232 | 2229 |
| 2233 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2230 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2234 ASSERT_TRUE(visitor_.header_.get()); | 2231 ASSERT_TRUE(visitor_.header_.get()); |
| 2235 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2232 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2236 | 2233 |
| 2237 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2234 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2238 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); | 2235 ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size()); |
| 2239 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; | 2236 const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0]; |
| 2240 EXPECT_EQ(0xAB, frame.entropy_hash); | 2237 EXPECT_EQ(0xAB, frame.entropy_hash); |
| 2241 EXPECT_EQ(UINT64_C(0x0123456789AA0), frame.least_unacked); | 2238 EXPECT_EQ(kLeastUnacked, frame.least_unacked); |
| 2242 | 2239 |
| 2243 const size_t kSentEntropyOffset = kQuicFrameTypeSize; | 2240 const size_t kSentEntropyOffset = kQuicFrameTypeSize; |
| 2244 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | 2241 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; |
| 2245 const size_t frame_size = 7; | 2242 const size_t frame_size = 7; |
| 2246 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2243 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
| 2247 string expected_error; | 2244 string expected_error; |
| 2248 if (i < kLeastUnackedOffset) { | 2245 if (i < kLeastUnackedOffset) { |
| 2249 expected_error = "Unable to read entropy hash for sent packets."; | 2246 expected_error = "Unable to read entropy hash for sent packets."; |
| 2250 } else { | 2247 } else { |
| 2251 expected_error = "Unable to read least unacked delta."; | 2248 expected_error = "Unable to read least unacked delta."; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2271 0x34, 0x12, | 2268 0x34, 0x12, |
| 2272 // private flags | 2269 // private flags |
| 2273 0x00, | 2270 0x00, |
| 2274 | 2271 |
| 2275 // frame type (rst stream frame) | 2272 // frame type (rst stream frame) |
| 2276 0x01, | 2273 0x01, |
| 2277 // stream id | 2274 // stream id |
| 2278 0x04, 0x03, 0x02, 0x01, | 2275 0x04, 0x03, 0x02, 0x01, |
| 2279 | 2276 |
| 2280 // sent byte offset | 2277 // sent byte offset |
| 2281 0x01, 0x02, 0x03, 0x04, | 2278 0x54, 0x76, 0x10, 0x32, |
| 2282 0x05, 0x06, 0x07, 0x08, | 2279 0xDC, 0xFE, 0x98, 0xBA, |
| 2283 | 2280 |
| 2284 // error code | 2281 // error code |
| 2285 0x01, 0x00, 0x00, 0x00, | 2282 0x01, 0x00, 0x00, 0x00, |
| 2286 }; | 2283 }; |
| 2287 // clang-format on | 2284 // clang-format on |
| 2288 | 2285 |
| 2289 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2286 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2290 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2287 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2291 | 2288 |
| 2292 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2289 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2293 ASSERT_TRUE(visitor_.header_.get()); | 2290 ASSERT_TRUE(visitor_.header_.get()); |
| 2294 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2291 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2295 | 2292 |
| 2296 EXPECT_EQ(UINT64_C(0x01020304), visitor_.rst_stream_frame_.stream_id); | 2293 EXPECT_EQ(kStreamId, visitor_.rst_stream_frame_.stream_id); |
| 2297 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); | 2294 EXPECT_EQ(0x01, visitor_.rst_stream_frame_.error_code); |
| 2298 EXPECT_EQ(UINT64_C(0x0807060504030201), | 2295 EXPECT_EQ(kStreamOffset, visitor_.rst_stream_frame_.byte_offset); |
| 2299 visitor_.rst_stream_frame_.byte_offset); | |
| 2300 | 2296 |
| 2301 // Now test framing boundaries. | 2297 // Now test framing boundaries. |
| 2302 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); | 2298 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetRstStreamFrameSize(); |
| 2303 ++i) { | 2299 ++i) { |
| 2304 string expected_error; | 2300 string expected_error; |
| 2305 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2301 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2306 expected_error = "Unable to read stream_id."; | 2302 expected_error = "Unable to read stream_id."; |
| 2307 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2303 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2308 kQuicMaxStreamOffsetSize) { | 2304 kQuicMaxStreamOffsetSize) { |
| 2309 expected_error = "Unable to read rst stream sent byte offset."; | 2305 expected_error = "Unable to read rst stream sent byte offset."; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2409 }; | 2405 }; |
| 2410 // clang-format on | 2406 // clang-format on |
| 2411 | 2407 |
| 2412 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2408 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2413 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2409 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2414 | 2410 |
| 2415 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2411 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2416 ASSERT_TRUE(visitor_.header_.get()); | 2412 ASSERT_TRUE(visitor_.header_.get()); |
| 2417 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2413 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2418 | 2414 |
| 2419 EXPECT_EQ(UINT64_C(0x01020304), visitor_.goaway_frame_.last_good_stream_id); | 2415 EXPECT_EQ(kStreamId, visitor_.goaway_frame_.last_good_stream_id); |
| 2420 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 2416 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); |
| 2421 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 2417 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); |
| 2422 | 2418 |
| 2423 const size_t reason_size = arraysize("because I can") - 1; | 2419 const size_t reason_size = arraysize("because I can") - 1; |
| 2424 // Now test framing boundaries. | 2420 // Now test framing boundaries. |
| 2425 for (size_t i = kQuicFrameTypeSize; | 2421 for (size_t i = kQuicFrameTypeSize; |
| 2426 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 2422 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { |
| 2427 string expected_error; | 2423 string expected_error; |
| 2428 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2424 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
| 2429 expected_error = "Unable to read go away error code."; | 2425 expected_error = "Unable to read go away error code."; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 2453 0xBC, 0x9A, 0x78, 0x56, | 2449 0xBC, 0x9A, 0x78, 0x56, |
| 2454 0x34, 0x12, | 2450 0x34, 0x12, |
| 2455 // private flags | 2451 // private flags |
| 2456 0x00, | 2452 0x00, |
| 2457 | 2453 |
| 2458 // frame type (window update frame) | 2454 // frame type (window update frame) |
| 2459 0x04, | 2455 0x04, |
| 2460 // stream id | 2456 // stream id |
| 2461 0x04, 0x03, 0x02, 0x01, | 2457 0x04, 0x03, 0x02, 0x01, |
| 2462 // byte offset | 2458 // byte offset |
| 2463 0x05, 0x06, 0x07, 0x08, | 2459 0x54, 0x76, 0x10, 0x32, |
| 2464 0x09, 0x0a, 0x0b, 0x0c, | 2460 0xDC, 0xFE, 0x98, 0xBA, |
| 2465 }; | 2461 }; |
| 2466 // clang-format on | 2462 // clang-format on |
| 2467 | 2463 |
| 2468 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2464 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2469 | 2465 |
| 2470 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2466 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2471 | 2467 |
| 2472 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2468 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2473 ASSERT_TRUE(visitor_.header_.get()); | 2469 ASSERT_TRUE(visitor_.header_.get()); |
| 2474 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2470 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2475 | 2471 |
| 2476 EXPECT_EQ(UINT64_C(0x01020304), visitor_.window_update_frame_.stream_id); | 2472 EXPECT_EQ(kStreamId, visitor_.window_update_frame_.stream_id); |
| 2477 EXPECT_EQ(UINT64_C(0x0c0b0a0908070605), | 2473 EXPECT_EQ(kStreamOffset, visitor_.window_update_frame_.byte_offset); |
| 2478 visitor_.window_update_frame_.byte_offset); | |
| 2479 | 2474 |
| 2480 // Now test framing boundaries. | 2475 // Now test framing boundaries. |
| 2481 for (size_t i = kQuicFrameTypeSize; | 2476 for (size_t i = kQuicFrameTypeSize; |
| 2482 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2477 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
| 2483 string expected_error; | 2478 string expected_error; |
| 2484 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2479 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2485 expected_error = "Unable to read stream_id."; | 2480 expected_error = "Unable to read stream_id."; |
| 2486 } else { | 2481 } else { |
| 2487 expected_error = "Unable to read window byte_offset."; | 2482 expected_error = "Unable to read window byte_offset."; |
| 2488 } | 2483 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2516 // clang-format on | 2511 // clang-format on |
| 2517 | 2512 |
| 2518 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2513 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2519 | 2514 |
| 2520 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2515 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2521 | 2516 |
| 2522 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2517 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2523 ASSERT_TRUE(visitor_.header_.get()); | 2518 ASSERT_TRUE(visitor_.header_.get()); |
| 2524 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2519 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2525 | 2520 |
| 2526 EXPECT_EQ(UINT64_C(0x01020304), visitor_.blocked_frame_.stream_id); | 2521 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); |
| 2527 | 2522 |
| 2528 // Now test framing boundaries. | 2523 // Now test framing boundaries. |
| 2529 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2524 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
| 2530 ++i) { | 2525 ++i) { |
| 2531 string expected_error = "Unable to read stream_id."; | 2526 string expected_error = "Unable to read stream_id."; |
| 2532 CheckProcessingFails( | 2527 CheckProcessingFails( |
| 2533 packet, | 2528 packet, |
| 2534 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2529 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2535 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 2530 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), |
| 2536 expected_error, QUIC_INVALID_BLOCKED_DATA); | 2531 expected_error, QUIC_INVALID_BLOCKED_DATA); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2594 // rejected packet number | 2589 // rejected packet number |
| 2595 0xBC, 0x9A, 0x78, 0x56, | 2590 0xBC, 0x9A, 0x78, 0x56, |
| 2596 0x34, 0x12, 0x00, 0x00, | 2591 0x34, 0x12, 0x00, 0x00, |
| 2597 }; | 2592 }; |
| 2598 // clang-format on | 2593 // clang-format on |
| 2599 | 2594 |
| 2600 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2595 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2601 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2596 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2602 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2597 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2603 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2598 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
| 2604 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 2599 EXPECT_EQ(kConnectionId, |
| 2605 visitor_.public_reset_packet_->public_header.connection_id); | 2600 visitor_.public_reset_packet_->public_header.connection_id); |
| 2606 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2601 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
| 2607 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2602 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
| 2608 EXPECT_EQ(UINT64_C(0xABCDEF0123456789), | 2603 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
| 2609 visitor_.public_reset_packet_->nonce_proof); | 2604 EXPECT_EQ(kPacketNumber, |
| 2610 EXPECT_EQ(UINT64_C(0x123456789ABC), | |
| 2611 visitor_.public_reset_packet_->rejected_packet_number); | 2605 visitor_.public_reset_packet_->rejected_packet_number); |
| 2612 EXPECT_TRUE( | 2606 EXPECT_TRUE( |
| 2613 visitor_.public_reset_packet_->client_address.address().empty()); | 2607 visitor_.public_reset_packet_->client_address.address().empty()); |
| 2614 | 2608 |
| 2615 // Now test framing boundaries. | 2609 // Now test framing boundaries. |
| 2616 for (size_t i = 0; i < arraysize(packet); ++i) { | 2610 for (size_t i = 0; i < arraysize(packet); ++i) { |
| 2617 string expected_error; | 2611 string expected_error; |
| 2618 DVLOG(1) << "iteration: " << i; | 2612 DVLOG(1) << "iteration: " << i; |
| 2619 if (i < kConnectionIdOffset) { | 2613 if (i < kConnectionIdOffset) { |
| 2620 expected_error = "Unable to read public flags."; | 2614 expected_error = "Unable to read public flags."; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2702 0x02, 0x00, | 2696 0x02, 0x00, |
| 2703 0x04, 0x1F, 0xC6, 0x2C, | 2697 0x04, 0x1F, 0xC6, 0x2C, |
| 2704 0xBB, 0x01, | 2698 0xBB, 0x01, |
| 2705 }; | 2699 }; |
| 2706 // clang-format on | 2700 // clang-format on |
| 2707 | 2701 |
| 2708 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2702 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 2709 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2703 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2710 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2704 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2711 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2705 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
| 2712 EXPECT_EQ(UINT64_C(0xFEDCBA9876543210), | 2706 EXPECT_EQ(kConnectionId, |
| 2713 visitor_.public_reset_packet_->public_header.connection_id); | 2707 visitor_.public_reset_packet_->public_header.connection_id); |
| 2714 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2708 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
| 2715 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2709 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
| 2716 EXPECT_EQ(UINT64_C(0xABCDEF0123456789), | 2710 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
| 2717 visitor_.public_reset_packet_->nonce_proof); | 2711 EXPECT_EQ(kPacketNumber, |
| 2718 EXPECT_EQ(UINT64_C(0x123456789ABC), | |
| 2719 visitor_.public_reset_packet_->rejected_packet_number); | 2712 visitor_.public_reset_packet_->rejected_packet_number); |
| 2720 EXPECT_EQ("4.31.198.44", | 2713 EXPECT_EQ("4.31.198.44", |
| 2721 IPAddressToString(visitor_.public_reset_packet_-> | 2714 IPAddressToString(visitor_.public_reset_packet_-> |
| 2722 client_address.address())); | 2715 client_address.address())); |
| 2723 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); | 2716 EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); |
| 2724 | 2717 |
| 2725 // Now test framing boundaries. | 2718 // Now test framing boundaries. |
| 2726 for (size_t i = 0; i < arraysize(packet); ++i) { | 2719 for (size_t i = 0; i < arraysize(packet); ++i) { |
| 2727 string expected_error; | 2720 string expected_error; |
| 2728 DVLOG(1) << "iteration: " << i; | 2721 DVLOG(1) << "iteration: " << i; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2812 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 2805 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
| 2813 | 2806 |
| 2814 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2807 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2815 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 2808 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 2816 ASSERT_EQ(1, visitor_.fec_count_); | 2809 ASSERT_EQ(1, visitor_.fec_count_); |
| 2817 EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); | 2810 EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); |
| 2818 } | 2811 } |
| 2819 | 2812 |
| 2820 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2813 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
| 2821 QuicPacketHeader header; | 2814 QuicPacketHeader header; |
| 2822 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2815 header.public_header.connection_id = kConnectionId; |
| 2823 header.public_header.reset_flag = false; | 2816 header.public_header.reset_flag = false; |
| 2824 header.public_header.version_flag = false; | 2817 header.public_header.version_flag = false; |
| 2825 header.fec_flag = false; | 2818 header.fec_flag = false; |
| 2826 header.entropy_flag = false; | 2819 header.entropy_flag = false; |
| 2827 header.packet_number = UINT64_C(0x123456789ABC); | 2820 header.packet_number = kPacketNumber; |
| 2828 header.fec_group = 0; | 2821 header.fec_group = 0; |
| 2829 | 2822 |
| 2830 QuicPaddingFrame padding_frame; | 2823 QuicPaddingFrame padding_frame; |
| 2831 | 2824 |
| 2832 QuicFrames frames; | 2825 QuicFrames frames; |
| 2833 frames.push_back(QuicFrame(padding_frame)); | 2826 frames.push_back(QuicFrame(padding_frame)); |
| 2834 | 2827 |
| 2835 // clang-format off | 2828 // clang-format off |
| 2836 unsigned char packet[kMaxPacketSize] = { | 2829 unsigned char packet[kMaxPacketSize] = { |
| 2837 // public flags (8 byte connection_id) | 2830 // public flags (8 byte connection_id) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2860 ASSERT_TRUE(data != nullptr); | 2853 ASSERT_TRUE(data != nullptr); |
| 2861 | 2854 |
| 2862 test::CompareCharArraysWithHexError("constructed packet", | 2855 test::CompareCharArraysWithHexError("constructed packet", |
| 2863 data->data(), data->length(), | 2856 data->data(), data->length(), |
| 2864 AsChars(packet), | 2857 AsChars(packet), |
| 2865 arraysize(packet)); | 2858 arraysize(packet)); |
| 2866 } | 2859 } |
| 2867 | 2860 |
| 2868 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 2861 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
| 2869 QuicPacketHeader header; | 2862 QuicPacketHeader header; |
| 2870 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2863 header.public_header.connection_id = kConnectionId; |
| 2871 header.public_header.reset_flag = false; | 2864 header.public_header.reset_flag = false; |
| 2872 header.public_header.version_flag = false; | 2865 header.public_header.version_flag = false; |
| 2873 header.fec_flag = false; | 2866 header.fec_flag = false; |
| 2874 header.entropy_flag = false; | 2867 header.entropy_flag = false; |
| 2875 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; | 2868 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; |
| 2876 header.packet_number = UINT64_C(0x123456789ABC); | 2869 header.packet_number = kPacketNumber; |
| 2877 header.fec_group = 0; | 2870 header.fec_group = 0; |
| 2878 | 2871 |
| 2879 QuicPaddingFrame padding_frame; | 2872 QuicPaddingFrame padding_frame; |
| 2880 | 2873 |
| 2881 QuicFrames frames; | 2874 QuicFrames frames; |
| 2882 frames.push_back(QuicFrame(padding_frame)); | 2875 frames.push_back(QuicFrame(padding_frame)); |
| 2883 | 2876 |
| 2884 // clang-format off | 2877 // clang-format off |
| 2885 unsigned char packet[kMaxPacketSize] = { | 2878 unsigned char packet[kMaxPacketSize] = { |
| 2886 // public flags (8 byte connection_id and 4 byte packet number) | 2879 // public flags (8 byte connection_id and 4 byte packet number) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2908 ASSERT_TRUE(data != nullptr); | 2901 ASSERT_TRUE(data != nullptr); |
| 2909 | 2902 |
| 2910 test::CompareCharArraysWithHexError("constructed packet", | 2903 test::CompareCharArraysWithHexError("constructed packet", |
| 2911 data->data(), data->length(), | 2904 data->data(), data->length(), |
| 2912 AsChars(packet), | 2905 AsChars(packet), |
| 2913 arraysize(packet)); | 2906 arraysize(packet)); |
| 2914 } | 2907 } |
| 2915 | 2908 |
| 2916 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 2909 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
| 2917 QuicPacketHeader header; | 2910 QuicPacketHeader header; |
| 2918 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2911 header.public_header.connection_id = kConnectionId; |
| 2919 header.public_header.reset_flag = false; | 2912 header.public_header.reset_flag = false; |
| 2920 header.public_header.version_flag = false; | 2913 header.public_header.version_flag = false; |
| 2921 header.fec_flag = false; | 2914 header.fec_flag = false; |
| 2922 header.entropy_flag = false; | 2915 header.entropy_flag = false; |
| 2923 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; | 2916 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; |
| 2924 header.packet_number = UINT64_C(0x123456789ABC); | 2917 header.packet_number = kPacketNumber; |
| 2925 header.fec_group = 0; | 2918 header.fec_group = 0; |
| 2926 | 2919 |
| 2927 QuicPaddingFrame padding_frame; | 2920 QuicPaddingFrame padding_frame; |
| 2928 | 2921 |
| 2929 QuicFrames frames; | 2922 QuicFrames frames; |
| 2930 frames.push_back(QuicFrame(padding_frame)); | 2923 frames.push_back(QuicFrame(padding_frame)); |
| 2931 | 2924 |
| 2932 // clang-format off | 2925 // clang-format off |
| 2933 unsigned char packet[kMaxPacketSize] = { | 2926 unsigned char packet[kMaxPacketSize] = { |
| 2934 // public flags (8 byte connection_id and 2 byte packet number) | 2927 // public flags (8 byte connection_id and 2 byte packet number) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2956 ASSERT_TRUE(data != nullptr); | 2949 ASSERT_TRUE(data != nullptr); |
| 2957 | 2950 |
| 2958 test::CompareCharArraysWithHexError("constructed packet", | 2951 test::CompareCharArraysWithHexError("constructed packet", |
| 2959 data->data(), data->length(), | 2952 data->data(), data->length(), |
| 2960 AsChars(packet), | 2953 AsChars(packet), |
| 2961 arraysize(packet)); | 2954 arraysize(packet)); |
| 2962 } | 2955 } |
| 2963 | 2956 |
| 2964 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 2957 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
| 2965 QuicPacketHeader header; | 2958 QuicPacketHeader header; |
| 2966 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 2959 header.public_header.connection_id = kConnectionId; |
| 2967 header.public_header.reset_flag = false; | 2960 header.public_header.reset_flag = false; |
| 2968 header.public_header.version_flag = false; | 2961 header.public_header.version_flag = false; |
| 2969 header.fec_flag = false; | 2962 header.fec_flag = false; |
| 2970 header.entropy_flag = false; | 2963 header.entropy_flag = false; |
| 2971 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; | 2964 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; |
| 2972 header.packet_number = UINT64_C(0x123456789ABC); | 2965 header.packet_number = kPacketNumber; |
| 2973 header.fec_group = 0; | 2966 header.fec_group = 0; |
| 2974 | 2967 |
| 2975 QuicPaddingFrame padding_frame; | 2968 QuicPaddingFrame padding_frame; |
| 2976 | 2969 |
| 2977 QuicFrames frames; | 2970 QuicFrames frames; |
| 2978 frames.push_back(QuicFrame(padding_frame)); | 2971 frames.push_back(QuicFrame(padding_frame)); |
| 2979 | 2972 |
| 2980 // clang-format off | 2973 // clang-format off |
| 2981 unsigned char packet[kMaxPacketSize] = { | 2974 unsigned char packet[kMaxPacketSize] = { |
| 2982 // public flags (8 byte connection_id and 1 byte packet number) | 2975 // public flags (8 byte connection_id and 1 byte packet number) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3004 ASSERT_TRUE(data != nullptr); | 2997 ASSERT_TRUE(data != nullptr); |
| 3005 | 2998 |
| 3006 test::CompareCharArraysWithHexError("constructed packet", | 2999 test::CompareCharArraysWithHexError("constructed packet", |
| 3007 data->data(), data->length(), | 3000 data->data(), data->length(), |
| 3008 AsChars(packet), | 3001 AsChars(packet), |
| 3009 arraysize(packet)); | 3002 arraysize(packet)); |
| 3010 } | 3003 } |
| 3011 | 3004 |
| 3012 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 3005 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
| 3013 QuicPacketHeader header; | 3006 QuicPacketHeader header; |
| 3014 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3007 header.public_header.connection_id = kConnectionId; |
| 3015 header.public_header.reset_flag = false; | 3008 header.public_header.reset_flag = false; |
| 3016 header.public_header.version_flag = false; | 3009 header.public_header.version_flag = false; |
| 3017 header.fec_flag = false; | 3010 header.fec_flag = false; |
| 3018 header.entropy_flag = true; | 3011 header.entropy_flag = true; |
| 3019 header.packet_number = UINT64_C(0x77123456789ABC); | 3012 header.packet_number = kPacketNumber; |
| 3020 header.fec_group = 0; | 3013 header.fec_group = 0; |
| 3021 | 3014 |
| 3022 QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3015 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
| 3023 StringPiece("hello world!")); | 3016 StringPiece("hello world!")); |
| 3024 | 3017 |
| 3025 QuicFrames frames; | 3018 QuicFrames frames; |
| 3026 frames.push_back(QuicFrame(&stream_frame)); | 3019 frames.push_back(QuicFrame(&stream_frame)); |
| 3027 | 3020 |
| 3028 // clang-format off | 3021 // clang-format off |
| 3029 unsigned char packet[] = { | 3022 unsigned char packet[] = { |
| 3030 // public flags (8 byte connection_id) | 3023 // public flags (8 byte connection_id) |
| 3031 0x3C, | 3024 0x3C, |
| 3032 // connection_id | 3025 // connection_id |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3055 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3048 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3056 ASSERT_TRUE(data != nullptr); | 3049 ASSERT_TRUE(data != nullptr); |
| 3057 | 3050 |
| 3058 test::CompareCharArraysWithHexError("constructed packet", | 3051 test::CompareCharArraysWithHexError("constructed packet", |
| 3059 data->data(), data->length(), | 3052 data->data(), data->length(), |
| 3060 AsChars(packet), arraysize(packet)); | 3053 AsChars(packet), arraysize(packet)); |
| 3061 } | 3054 } |
| 3062 | 3055 |
| 3063 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | 3056 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { |
| 3064 QuicPacketHeader header; | 3057 QuicPacketHeader header; |
| 3065 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3058 header.public_header.connection_id = kConnectionId; |
| 3066 header.public_header.reset_flag = false; | 3059 header.public_header.reset_flag = false; |
| 3067 header.public_header.version_flag = false; | 3060 header.public_header.version_flag = false; |
| 3068 header.fec_flag = false; | 3061 header.fec_flag = false; |
| 3069 header.entropy_flag = true; | 3062 header.entropy_flag = true; |
| 3070 header.packet_number = UINT64_C(0x77123456789ABC); | 3063 header.packet_number = kPacketNumber; |
| 3071 header.is_in_fec_group = IN_FEC_GROUP; | 3064 header.is_in_fec_group = IN_FEC_GROUP; |
| 3072 header.fec_group = UINT64_C(0x77123456789ABC); | 3065 header.fec_group = kPacketNumber; |
| 3073 | 3066 |
| 3074 QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3067 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
| 3075 StringPiece("hello world!")); | 3068 StringPiece("hello world!")); |
| 3076 | 3069 |
| 3077 QuicFrames frames; | 3070 QuicFrames frames; |
| 3078 frames.push_back(QuicFrame(&stream_frame)); | 3071 frames.push_back(QuicFrame(&stream_frame)); |
| 3079 // clang-format off | 3072 // clang-format off |
| 3080 unsigned char packet[] = { | 3073 unsigned char packet[] = { |
| 3081 // public flags (8 byte connection_id) | 3074 // public flags (8 byte connection_id) |
| 3082 0x3C, | 3075 0x3C, |
| 3083 // connection_id | 3076 // connection_id |
| 3084 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3077 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3104 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3097 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3105 ASSERT_TRUE(data != nullptr); | 3098 ASSERT_TRUE(data != nullptr); |
| 3106 | 3099 |
| 3107 test::CompareCharArraysWithHexError("constructed packet", | 3100 test::CompareCharArraysWithHexError("constructed packet", |
| 3108 data->data(), data->length(), | 3101 data->data(), data->length(), |
| 3109 AsChars(packet), arraysize(packet)); | 3102 AsChars(packet), arraysize(packet)); |
| 3110 } | 3103 } |
| 3111 | 3104 |
| 3112 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
| 3113 QuicPacketHeader header; | 3106 QuicPacketHeader header; |
| 3114 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3107 header.public_header.connection_id = kConnectionId; |
| 3115 header.public_header.reset_flag = false; | 3108 header.public_header.reset_flag = false; |
| 3116 header.public_header.version_flag = true; | 3109 header.public_header.version_flag = true; |
| 3117 header.fec_flag = false; | 3110 header.fec_flag = false; |
| 3118 header.entropy_flag = true; | 3111 header.entropy_flag = true; |
| 3119 header.packet_number = UINT64_C(0x77123456789ABC); | 3112 header.packet_number = kPacketNumber; |
| 3120 header.fec_group = 0; | 3113 header.fec_group = 0; |
| 3121 | 3114 |
| 3122 QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), | 3115 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, |
| 3123 StringPiece("hello world!")); | 3116 StringPiece("hello world!")); |
| 3124 | 3117 |
| 3125 QuicFrames frames; | 3118 QuicFrames frames; |
| 3126 frames.push_back(QuicFrame(&stream_frame)); | 3119 frames.push_back(QuicFrame(&stream_frame)); |
| 3127 | 3120 |
| 3128 // clang-format off | 3121 // clang-format off |
| 3129 unsigned char packet[] = { | 3122 unsigned char packet[] = { |
| 3130 // public flags (version, 8 byte connection_id) | 3123 // public flags (version, 8 byte connection_id) |
| 3131 0x3D, | 3124 0x3D, |
| 3132 // connection_id | 3125 // connection_id |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3188 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3181 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
| 3189 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3190 ASSERT_TRUE(data != nullptr); | 3183 ASSERT_TRUE(data != nullptr); |
| 3191 | 3184 |
| 3192 test::CompareCharArraysWithHexError("constructed packet", | 3185 test::CompareCharArraysWithHexError("constructed packet", |
| 3193 data->data(), data->length(), | 3186 data->data(), data->length(), |
| 3194 AsChars(packet), arraysize(packet)); | 3187 AsChars(packet), arraysize(packet)); |
| 3195 } | 3188 } |
| 3196 | 3189 |
| 3197 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
| 3198 QuicPacketPublicHeader header; | |
| 3199 header.connection_id = UINT64_C(0xFEDCBA9876543210); | |
| 3200 header.reset_flag = false; | |
| 3201 header.version_flag = true; | |
| 3202 | |
| 3203 // clang-format off | 3191 // clang-format off |
| 3204 unsigned char packet[] = { | 3192 unsigned char packet[] = { |
| 3205 // public flags (version, 8 byte connection_id) | 3193 // public flags (version, 8 byte connection_id) |
| 3206 0x0D, | 3194 0x0D, |
| 3207 // connection_id | 3195 // connection_id |
| 3208 0x10, | 3196 0x10, |
| 3209 0x32, | 3197 0x32, |
| 3210 0x54, | 3198 0x54, |
| 3211 0x76, | 3199 0x76, |
| 3212 0x98, | 3200 0x98, |
| 3213 0xBA, | 3201 0xBA, |
| 3214 0xDC, | 3202 0xDC, |
| 3215 0xFE, | 3203 0xFE, |
| 3216 // version tag | 3204 // version tag |
| 3217 'Q', | 3205 'Q', |
| 3218 '0', | 3206 '0', |
| 3219 GetQuicVersionDigitTens(), | 3207 GetQuicVersionDigitTens(), |
| 3220 GetQuicVersionDigitOnes(), | 3208 GetQuicVersionDigitOnes(), |
| 3221 }; | 3209 }; |
| 3222 // clang-format on | 3210 // clang-format on |
| 3223 | 3211 |
| 3224 QuicVersionVector versions; | 3212 QuicConnectionId connection_id = kConnectionId; |
| 3225 versions.push_back(GetParam()); | 3213 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket( |
| 3226 scoped_ptr<QuicEncryptedPacket> data( | 3214 connection_id, SupportedVersions(GetParam()))); |
| 3227 framer_.BuildVersionNegotiationPacket(header, versions)); | |
| 3228 | |
| 3229 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3215 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3230 data->length(), AsChars(packet), | 3216 data->length(), AsChars(packet), |
| 3231 arraysize(packet)); | 3217 arraysize(packet)); |
| 3232 } | 3218 } |
| 3233 | 3219 |
| 3234 TEST_P(QuicFramerTest, BuildAckFramePacket) { | 3220 TEST_P(QuicFramerTest, BuildAckFramePacket) { |
| 3235 QuicPacketHeader header; | 3221 QuicPacketHeader header; |
| 3236 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3222 header.public_header.connection_id = kConnectionId; |
| 3237 header.public_header.reset_flag = false; | 3223 header.public_header.reset_flag = false; |
| 3238 header.public_header.version_flag = false; | 3224 header.public_header.version_flag = false; |
| 3239 header.fec_flag = false; | 3225 header.fec_flag = false; |
| 3240 header.entropy_flag = true; | 3226 header.entropy_flag = true; |
| 3241 header.packet_number = UINT64_C(0x770123456789AA8); | 3227 header.packet_number = kPacketNumber; |
| 3242 header.fec_group = 0; | 3228 header.fec_group = 0; |
| 3243 | 3229 |
| 3244 QuicAckFrame ack_frame; | 3230 QuicAckFrame ack_frame; |
| 3245 ack_frame.entropy_hash = 0x43; | 3231 ack_frame.entropy_hash = 0x43; |
| 3246 ack_frame.largest_observed = UINT64_C(0x770123456789ABF); | 3232 ack_frame.largest_observed = kLargestObserved; |
| 3247 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3233 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3248 ack_frame.missing_packets.Add(UINT64_C(0x770123456789ABE)); | 3234 ack_frame.missing_packets.Add(kMissingPacket); |
| 3249 | 3235 |
| 3250 QuicFrames frames; | 3236 QuicFrames frames; |
| 3251 frames.push_back(QuicFrame(&ack_frame)); | 3237 frames.push_back(QuicFrame(&ack_frame)); |
| 3252 | 3238 |
| 3253 // clang-format off | 3239 // clang-format off |
| 3254 unsigned char packet[] = { | 3240 unsigned char packet[] = { |
| 3255 // public flags (8 byte connection_id) | 3241 // public flags (8 byte connection_id) |
| 3256 0x3C, | 3242 0x3C, |
| 3257 // connection_id | 3243 // connection_id |
| 3258 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3244 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3259 // packet number | 3245 // packet number |
| 3260 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3246 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3261 // private flags (entropy) | 3247 // private flags (entropy) |
| 3262 0x01, | 3248 0x01, |
| 3263 | 3249 |
| 3264 // frame type (ack frame) | 3250 // frame type (ack frame) |
| 3265 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) | 3251 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) |
| 3266 0x6C, | 3252 0x6C, |
| 3267 // entropy hash of all received packets. | 3253 // entropy hash of all received packets. |
| 3268 0x43, | 3254 0x43, |
| 3269 // largest observed packet number | 3255 // largest observed packet number |
| 3270 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3256 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3289 test::CompareCharArraysWithHexError("constructed packet", | 3275 test::CompareCharArraysWithHexError("constructed packet", |
| 3290 data->data(), data->length(), | 3276 data->data(), data->length(), |
| 3291 AsChars(packet), arraysize(packet)); | 3277 AsChars(packet), arraysize(packet)); |
| 3292 } | 3278 } |
| 3293 | 3279 |
| 3294 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had |
| 3295 // revived packets. (In both the large and small packet cases below). | 3281 // revived packets. (In both the large and small packet cases below). |
| 3296 | 3282 |
| 3297 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
| 3298 QuicPacketHeader header; | 3284 QuicPacketHeader header; |
| 3299 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3285 header.public_header.connection_id = kConnectionId; |
| 3300 header.public_header.reset_flag = false; | 3286 header.public_header.reset_flag = false; |
| 3301 header.public_header.version_flag = false; | 3287 header.public_header.version_flag = false; |
| 3302 header.fec_flag = false; | 3288 header.fec_flag = false; |
| 3303 header.entropy_flag = true; | 3289 header.entropy_flag = true; |
| 3304 header.packet_number = UINT64_C(0x770123456789AA8); | 3290 header.packet_number = kPacketNumber; |
| 3305 header.fec_group = 0; | 3291 header.fec_group = 0; |
| 3306 | 3292 |
| 3307 QuicAckFrame ack_frame; | 3293 QuicAckFrame ack_frame; |
| 3308 // This entropy hash is different from what shows up in the packet below, | 3294 // This entropy hash is different from what shows up in the packet below, |
| 3309 // since entropy is recomputed by the framer on ack truncation (by | 3295 // since entropy is recomputed by the framer on ack truncation (by |
| 3310 // TestEntropyCalculator for this test.) | 3296 // TestEntropyCalculator for this test.) |
| 3311 ack_frame.entropy_hash = 0x43; | 3297 ack_frame.entropy_hash = 0x43; |
| 3312 ack_frame.largest_observed = 2 * 300; | 3298 ack_frame.largest_observed = 2 * 300; |
| 3313 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3299 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3314 for (size_t i = 1; i < 2 * 300; i += 2) { | 3300 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 3315 ack_frame.missing_packets.Add(i); | 3301 ack_frame.missing_packets.Add(i); |
| 3316 } | 3302 } |
| 3317 | 3303 |
| 3318 QuicFrames frames; | 3304 QuicFrames frames; |
| 3319 frames.push_back(QuicFrame(&ack_frame)); | 3305 frames.push_back(QuicFrame(&ack_frame)); |
| 3320 | 3306 |
| 3321 // clang-format off | 3307 // clang-format off |
| 3322 unsigned char packet[] = { | 3308 unsigned char packet[] = { |
| 3323 // public flags (8 byte connection_id) | 3309 // public flags (8 byte connection_id) |
| 3324 0x3C, | 3310 0x3C, |
| 3325 // connection_id | 3311 // connection_id |
| 3326 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3312 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3327 // packet number | 3313 // packet number |
| 3328 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3314 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3329 // private flags (entropy) | 3315 // private flags (entropy) |
| 3330 0x01, | 3316 0x01, |
| 3331 | 3317 |
| 3332 // frame type (ack frame) | 3318 // frame type (ack frame) |
| 3333 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 3319 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) |
| 3334 0x74, | 3320 0x74, |
| 3335 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 3321 // entropy hash of all received packets, set to 1 by TestEntropyCalculator |
| 3336 // since ack is truncated. | 3322 // since ack is truncated. |
| 3337 0x01, | 3323 0x01, |
| 3338 // 2-byte largest observed packet number. | 3324 // 2-byte largest observed packet number. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3400 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3386 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3401 ASSERT_TRUE(data != nullptr); | 3387 ASSERT_TRUE(data != nullptr); |
| 3402 | 3388 |
| 3403 test::CompareCharArraysWithHexError("constructed packet", | 3389 test::CompareCharArraysWithHexError("constructed packet", |
| 3404 data->data(), data->length(), | 3390 data->data(), data->length(), |
| 3405 AsChars(packet), arraysize(packet)); | 3391 AsChars(packet), arraysize(packet)); |
| 3406 } | 3392 } |
| 3407 | 3393 |
| 3408 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
| 3409 QuicPacketHeader header; | 3395 QuicPacketHeader header; |
| 3410 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3396 header.public_header.connection_id = kConnectionId; |
| 3411 header.public_header.reset_flag = false; | 3397 header.public_header.reset_flag = false; |
| 3412 header.public_header.version_flag = false; | 3398 header.public_header.version_flag = false; |
| 3413 header.fec_flag = false; | 3399 header.fec_flag = false; |
| 3414 header.entropy_flag = true; | 3400 header.entropy_flag = true; |
| 3415 header.packet_number = UINT64_C(0x770123456789AA8); | 3401 header.packet_number = kPacketNumber; |
| 3416 header.fec_group = 0; | 3402 header.fec_group = 0; |
| 3417 | 3403 |
| 3418 QuicAckFrame ack_frame; | 3404 QuicAckFrame ack_frame; |
| 3419 // This entropy hash is different from what shows up in the packet below, | 3405 // This entropy hash is different from what shows up in the packet below, |
| 3420 // since entropy is recomputed by the framer on ack truncation (by | 3406 // since entropy is recomputed by the framer on ack truncation (by |
| 3421 // TestEntropyCalculator for this test.) | 3407 // TestEntropyCalculator for this test.) |
| 3422 ack_frame.entropy_hash = 0x43; | 3408 ack_frame.entropy_hash = 0x43; |
| 3423 ack_frame.largest_observed = 2 * 300; | 3409 ack_frame.largest_observed = 2 * 300; |
| 3424 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 3410 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 3425 for (size_t i = 1; i < 2 * 300; i += 2) { | 3411 for (size_t i = 1; i < 2 * 300; i += 2) { |
| 3426 ack_frame.missing_packets.Add(i); | 3412 ack_frame.missing_packets.Add(i); |
| 3427 } | 3413 } |
| 3428 | 3414 |
| 3429 QuicFrames frames; | 3415 QuicFrames frames; |
| 3430 frames.push_back(QuicFrame(&ack_frame)); | 3416 frames.push_back(QuicFrame(&ack_frame)); |
| 3431 | 3417 |
| 3432 // clang-format off | 3418 // clang-format off |
| 3433 unsigned char packet[] = { | 3419 unsigned char packet[] = { |
| 3434 // public flags (8 byte connection_id) | 3420 // public flags (8 byte connection_id) |
| 3435 0x3C, | 3421 0x3C, |
| 3436 // connection_id | 3422 // connection_id |
| 3437 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 3423 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 3438 // packet number | 3424 // packet number |
| 3439 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 3425 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3440 // private flags (entropy) | 3426 // private flags (entropy) |
| 3441 0x01, | 3427 0x01, |
| 3442 | 3428 |
| 3443 // frame type (ack frame) | 3429 // frame type (ack frame) |
| 3444 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) | 3430 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) |
| 3445 0x74, | 3431 0x74, |
| 3446 // entropy hash of all received packets, set to 1 by TestEntropyCalculator | 3432 // entropy hash of all received packets, set to 1 by TestEntropyCalculator |
| 3447 // since ack is truncated. | 3433 // since ack is truncated. |
| 3448 0x01, | 3434 0x01, |
| 3449 // 2-byte largest observed packet number. | 3435 // 2-byte largest observed packet number. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3465 ASSERT_TRUE(data != nullptr); | 3451 ASSERT_TRUE(data != nullptr); |
| 3466 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 3452 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. |
| 3467 EXPECT_EQ(36u, data->length()); | 3453 EXPECT_EQ(36u, data->length()); |
| 3468 test::CompareCharArraysWithHexError("constructed packet", | 3454 test::CompareCharArraysWithHexError("constructed packet", |
| 3469 data->data(), data->length(), | 3455 data->data(), data->length(), |
| 3470 AsChars(packet), arraysize(packet)); | 3456 AsChars(packet), arraysize(packet)); |
| 3471 } | 3457 } |
| 3472 | 3458 |
| 3473 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
| 3474 QuicPacketHeader header; | 3460 QuicPacketHeader header; |
| 3475 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3461 header.public_header.connection_id = kConnectionId; |
| 3476 header.public_header.reset_flag = false; | 3462 header.public_header.reset_flag = false; |
| 3477 header.public_header.version_flag = false; | 3463 header.public_header.version_flag = false; |
| 3478 header.fec_flag = false; | 3464 header.fec_flag = false; |
| 3479 header.entropy_flag = true; | 3465 header.entropy_flag = true; |
| 3480 header.packet_number = UINT64_C(0x770123456789AA8); | 3466 header.packet_number = kPacketNumber; |
| 3481 header.fec_group = 0; | 3467 header.fec_group = 0; |
| 3482 | 3468 |
| 3483 QuicStopWaitingFrame stop_waiting_frame; | 3469 QuicStopWaitingFrame stop_waiting_frame; |
| 3484 stop_waiting_frame.entropy_hash = 0x14; | 3470 stop_waiting_frame.entropy_hash = 0x14; |
| 3485 stop_waiting_frame.least_unacked = UINT64_C(0x770123456789AA0); | 3471 stop_waiting_frame.least_unacked = kLeastUnacked; |
| 3486 | 3472 |
| 3487 QuicFrames frames; | 3473 QuicFrames frames; |
| 3488 frames.push_back(QuicFrame(&stop_waiting_frame)); | 3474 frames.push_back(QuicFrame(&stop_waiting_frame)); |
| 3489 | 3475 |
| 3490 // clang-format off | 3476 // clang-format off |
| 3491 unsigned char packet[] = { | 3477 unsigned char packet[] = { |
| 3492 // public flags (8 byte connection_id) | 3478 // public flags (8 byte connection_id) |
| 3493 0x3C, | 3479 0x3C, |
| 3494 // connection_id | 3480 // connection_id |
| 3495 0x10, 0x32, 0x54, 0x76, | 3481 0x10, 0x32, 0x54, 0x76, |
| 3496 0x98, 0xBA, 0xDC, 0xFE, | 3482 0x98, 0xBA, 0xDC, 0xFE, |
| 3497 // packet number | 3483 // packet number |
| 3498 0xA8, 0x9A, 0x78, 0x56, | 3484 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 3499 0x34, 0x12, | |
| 3500 // private flags (entropy) | 3485 // private flags (entropy) |
| 3501 0x01, | 3486 0x01, |
| 3502 | 3487 |
| 3503 // frame type (stop waiting frame) | 3488 // frame type (stop waiting frame) |
| 3504 0x06, | 3489 0x06, |
| 3505 // entropy hash of sent packets till least awaiting - 1. | 3490 // entropy hash of sent packets till least awaiting - 1. |
| 3506 0x14, | 3491 0x14, |
| 3507 // least packet number awaiting an ack, delta from packet number. | 3492 // least packet number awaiting an ack, delta from packet number. |
| 3508 0x08, 0x00, 0x00, 0x00, | 3493 0x1C, 0x00, 0x00, 0x00, |
| 3509 0x00, 0x00, | 3494 0x00, 0x00, |
| 3510 }; | 3495 }; |
| 3511 // clang-format on | 3496 // clang-format on |
| 3512 | 3497 |
| 3513 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3498 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3514 ASSERT_TRUE(data != nullptr); | 3499 ASSERT_TRUE(data != nullptr); |
| 3515 | 3500 |
| 3516 test::CompareCharArraysWithHexError("constructed packet", | 3501 test::CompareCharArraysWithHexError("constructed packet", |
| 3517 data->data(), data->length(), | 3502 data->data(), data->length(), |
| 3518 AsChars(packet), arraysize(packet)); | 3503 AsChars(packet), arraysize(packet)); |
| 3519 } | 3504 } |
| 3520 | 3505 |
| 3521 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
| 3522 QuicPacketHeader header; | 3507 QuicPacketHeader header; |
| 3523 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3508 header.public_header.connection_id = kConnectionId; |
| 3524 header.public_header.reset_flag = false; | 3509 header.public_header.reset_flag = false; |
| 3525 header.public_header.version_flag = false; | 3510 header.public_header.version_flag = false; |
| 3526 header.fec_flag = false; | 3511 header.fec_flag = false; |
| 3527 header.entropy_flag = false; | 3512 header.entropy_flag = false; |
| 3528 header.packet_number = UINT64_C(0x123456789ABC); | 3513 header.packet_number = kPacketNumber; |
| 3529 header.fec_group = 0; | 3514 header.fec_group = 0; |
| 3530 | 3515 |
| 3531 QuicRstStreamFrame rst_frame; | 3516 QuicRstStreamFrame rst_frame; |
| 3532 rst_frame.stream_id = 0x01020304; | 3517 rst_frame.stream_id = kStreamId; |
| 3533 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 3518 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
| 3534 rst_frame.byte_offset = 0x0807060504030201; | 3519 rst_frame.byte_offset = 0x0807060504030201; |
| 3535 | 3520 |
| 3536 // clang-format off | 3521 // clang-format off |
| 3537 unsigned char packet[] = { | 3522 unsigned char packet[] = { |
| 3538 // public flags (8 byte connection_id) | 3523 // public flags (8 byte connection_id) |
| 3539 0x3C, | 3524 0x3C, |
| 3540 // connection_id | 3525 // connection_id |
| 3541 0x10, 0x32, 0x54, 0x76, | 3526 0x10, 0x32, 0x54, 0x76, |
| 3542 0x98, 0xBA, 0xDC, 0xFE, | 3527 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3564 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3549 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3565 ASSERT_TRUE(data != nullptr); | 3550 ASSERT_TRUE(data != nullptr); |
| 3566 | 3551 |
| 3567 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3552 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3568 data->length(), AsChars(packet), | 3553 data->length(), AsChars(packet), |
| 3569 arraysize(packet)); | 3554 arraysize(packet)); |
| 3570 } | 3555 } |
| 3571 | 3556 |
| 3572 TEST_P(QuicFramerTest, BuildCloseFramePacket) { | 3557 TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
| 3573 QuicPacketHeader header; | 3558 QuicPacketHeader header; |
| 3574 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3559 header.public_header.connection_id = kConnectionId; |
| 3575 header.public_header.reset_flag = false; | 3560 header.public_header.reset_flag = false; |
| 3576 header.public_header.version_flag = false; | 3561 header.public_header.version_flag = false; |
| 3577 header.fec_flag = false; | 3562 header.fec_flag = false; |
| 3578 header.entropy_flag = true; | 3563 header.entropy_flag = true; |
| 3579 header.packet_number = UINT64_C(0x123456789ABC); | 3564 header.packet_number = kPacketNumber; |
| 3580 header.fec_group = 0; | 3565 header.fec_group = 0; |
| 3581 | 3566 |
| 3582 QuicConnectionCloseFrame close_frame; | 3567 QuicConnectionCloseFrame close_frame; |
| 3583 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3568 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
| 3584 close_frame.error_details = "because I can"; | 3569 close_frame.error_details = "because I can"; |
| 3585 | 3570 |
| 3586 QuicFrames frames; | 3571 QuicFrames frames; |
| 3587 frames.push_back(QuicFrame(&close_frame)); | 3572 frames.push_back(QuicFrame(&close_frame)); |
| 3588 | 3573 |
| 3589 // clang-format off | 3574 // clang-format off |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3616 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3601 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3617 ASSERT_TRUE(data != nullptr); | 3602 ASSERT_TRUE(data != nullptr); |
| 3618 | 3603 |
| 3619 test::CompareCharArraysWithHexError("constructed packet", | 3604 test::CompareCharArraysWithHexError("constructed packet", |
| 3620 data->data(), data->length(), | 3605 data->data(), data->length(), |
| 3621 AsChars(packet), arraysize(packet)); | 3606 AsChars(packet), arraysize(packet)); |
| 3622 } | 3607 } |
| 3623 | 3608 |
| 3624 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
| 3625 QuicPacketHeader header; | 3610 QuicPacketHeader header; |
| 3626 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3611 header.public_header.connection_id = kConnectionId; |
| 3627 header.public_header.reset_flag = false; | 3612 header.public_header.reset_flag = false; |
| 3628 header.public_header.version_flag = false; | 3613 header.public_header.version_flag = false; |
| 3629 header.fec_flag = false; | 3614 header.fec_flag = false; |
| 3630 header.entropy_flag = true; | 3615 header.entropy_flag = true; |
| 3631 header.packet_number = UINT64_C(0x123456789ABC); | 3616 header.packet_number = kPacketNumber; |
| 3632 header.fec_group = 0; | 3617 header.fec_group = 0; |
| 3633 | 3618 |
| 3634 QuicGoAwayFrame goaway_frame; | 3619 QuicGoAwayFrame goaway_frame; |
| 3635 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 3620 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
| 3636 goaway_frame.last_good_stream_id = 0x01020304; | 3621 goaway_frame.last_good_stream_id = kStreamId; |
| 3637 goaway_frame.reason_phrase = "because I can"; | 3622 goaway_frame.reason_phrase = "because I can"; |
| 3638 | 3623 |
| 3639 QuicFrames frames; | 3624 QuicFrames frames; |
| 3640 frames.push_back(QuicFrame(&goaway_frame)); | 3625 frames.push_back(QuicFrame(&goaway_frame)); |
| 3641 | 3626 |
| 3642 // clang-format off | 3627 // clang-format off |
| 3643 unsigned char packet[] = { | 3628 unsigned char packet[] = { |
| 3644 // public flags (8 byte connection_id) | 3629 // public flags (8 byte connection_id) |
| 3645 0x3C, | 3630 0x3C, |
| 3646 // connection_id | 3631 // connection_id |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3671 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3656 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3672 ASSERT_TRUE(data != nullptr); | 3657 ASSERT_TRUE(data != nullptr); |
| 3673 | 3658 |
| 3674 test::CompareCharArraysWithHexError("constructed packet", | 3659 test::CompareCharArraysWithHexError("constructed packet", |
| 3675 data->data(), data->length(), | 3660 data->data(), data->length(), |
| 3676 AsChars(packet), arraysize(packet)); | 3661 AsChars(packet), arraysize(packet)); |
| 3677 } | 3662 } |
| 3678 | 3663 |
| 3679 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
| 3680 QuicPacketHeader header; | 3665 QuicPacketHeader header; |
| 3681 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3666 header.public_header.connection_id = kConnectionId; |
| 3682 header.public_header.reset_flag = false; | 3667 header.public_header.reset_flag = false; |
| 3683 header.public_header.version_flag = false; | 3668 header.public_header.version_flag = false; |
| 3684 header.fec_flag = false; | 3669 header.fec_flag = false; |
| 3685 header.entropy_flag = true; | 3670 header.entropy_flag = true; |
| 3686 header.packet_number = UINT64_C(0x123456789ABC); | 3671 header.packet_number = kPacketNumber; |
| 3687 header.fec_group = 0; | 3672 header.fec_group = 0; |
| 3688 | 3673 |
| 3689 QuicWindowUpdateFrame window_update_frame; | 3674 QuicWindowUpdateFrame window_update_frame; |
| 3690 window_update_frame.stream_id = 0x01020304; | 3675 window_update_frame.stream_id = kStreamId; |
| 3691 window_update_frame.byte_offset = 0x1122334455667788; | 3676 window_update_frame.byte_offset = 0x1122334455667788; |
| 3692 | 3677 |
| 3693 QuicFrames frames; | 3678 QuicFrames frames; |
| 3694 frames.push_back(QuicFrame(&window_update_frame)); | 3679 frames.push_back(QuicFrame(&window_update_frame)); |
| 3695 | 3680 |
| 3696 // clang-format off | 3681 // clang-format off |
| 3697 unsigned char packet[] = { | 3682 unsigned char packet[] = { |
| 3698 // public flags (8 byte connection_id) | 3683 // public flags (8 byte connection_id) |
| 3699 0x3C, | 3684 0x3C, |
| 3700 // connection_id | 3685 // connection_id |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3719 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3704 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3720 ASSERT_TRUE(data != nullptr); | 3705 ASSERT_TRUE(data != nullptr); |
| 3721 | 3706 |
| 3722 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3707 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3723 data->length(), AsChars(packet), | 3708 data->length(), AsChars(packet), |
| 3724 arraysize(packet)); | 3709 arraysize(packet)); |
| 3725 } | 3710 } |
| 3726 | 3711 |
| 3727 TEST_P(QuicFramerTest, BuildBlockedPacket) { | 3712 TEST_P(QuicFramerTest, BuildBlockedPacket) { |
| 3728 QuicPacketHeader header; | 3713 QuicPacketHeader header; |
| 3729 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3714 header.public_header.connection_id = kConnectionId; |
| 3730 header.public_header.reset_flag = false; | 3715 header.public_header.reset_flag = false; |
| 3731 header.public_header.version_flag = false; | 3716 header.public_header.version_flag = false; |
| 3732 header.fec_flag = false; | 3717 header.fec_flag = false; |
| 3733 header.entropy_flag = true; | 3718 header.entropy_flag = true; |
| 3734 header.packet_number = UINT64_C(0x123456789ABC); | 3719 header.packet_number = kPacketNumber; |
| 3735 header.fec_group = 0; | 3720 header.fec_group = 0; |
| 3736 | 3721 |
| 3737 QuicBlockedFrame blocked_frame; | 3722 QuicBlockedFrame blocked_frame; |
| 3738 blocked_frame.stream_id = 0x01020304; | 3723 blocked_frame.stream_id = kStreamId; |
| 3739 | 3724 |
| 3740 QuicFrames frames; | 3725 QuicFrames frames; |
| 3741 frames.push_back(QuicFrame(&blocked_frame)); | 3726 frames.push_back(QuicFrame(&blocked_frame)); |
| 3742 | 3727 |
| 3743 // clang-format off | 3728 // clang-format off |
| 3744 unsigned char packet[] = { | 3729 unsigned char packet[] = { |
| 3745 // public flags (8 byte connection_id) | 3730 // public flags (8 byte connection_id) |
| 3746 0x3C, | 3731 0x3C, |
| 3747 // connection_id | 3732 // connection_id |
| 3748 0x10, 0x32, 0x54, 0x76, | 3733 0x10, 0x32, 0x54, 0x76, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3763 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3748 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3764 ASSERT_TRUE(data != nullptr); | 3749 ASSERT_TRUE(data != nullptr); |
| 3765 | 3750 |
| 3766 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3751 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3767 data->length(), AsChars(packet), | 3752 data->length(), AsChars(packet), |
| 3768 arraysize(packet)); | 3753 arraysize(packet)); |
| 3769 } | 3754 } |
| 3770 | 3755 |
| 3771 TEST_P(QuicFramerTest, BuildPingPacket) { | 3756 TEST_P(QuicFramerTest, BuildPingPacket) { |
| 3772 QuicPacketHeader header; | 3757 QuicPacketHeader header; |
| 3773 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3758 header.public_header.connection_id = kConnectionId; |
| 3774 header.public_header.reset_flag = false; | 3759 header.public_header.reset_flag = false; |
| 3775 header.public_header.version_flag = false; | 3760 header.public_header.version_flag = false; |
| 3776 header.fec_flag = false; | 3761 header.fec_flag = false; |
| 3777 header.entropy_flag = true; | 3762 header.entropy_flag = true; |
| 3778 header.packet_number = UINT64_C(0x123456789ABC); | 3763 header.packet_number = kPacketNumber; |
| 3779 header.fec_group = 0; | 3764 header.fec_group = 0; |
| 3780 | 3765 |
| 3781 QuicPingFrame ping_frame; | 3766 QuicPingFrame ping_frame; |
| 3782 | 3767 |
| 3783 QuicFrames frames; | 3768 QuicFrames frames; |
| 3784 frames.push_back(QuicFrame(ping_frame)); | 3769 frames.push_back(QuicFrame(ping_frame)); |
| 3785 | 3770 |
| 3786 // clang-format off | 3771 // clang-format off |
| 3787 unsigned char packet[] = { | 3772 unsigned char packet[] = { |
| 3788 // public flags (8 byte connection_id) | 3773 // public flags (8 byte connection_id) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3805 ASSERT_TRUE(data != nullptr); | 3790 ASSERT_TRUE(data != nullptr); |
| 3806 | 3791 |
| 3807 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3792 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3808 data->length(), AsChars(packet), | 3793 data->length(), AsChars(packet), |
| 3809 arraysize(packet)); | 3794 arraysize(packet)); |
| 3810 } | 3795 } |
| 3811 | 3796 |
| 3812 // Test that the MTU discovery packet is serialized correctly as a PING packet. | 3797 // Test that the MTU discovery packet is serialized correctly as a PING packet. |
| 3813 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { | 3798 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { |
| 3814 QuicPacketHeader header; | 3799 QuicPacketHeader header; |
| 3815 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3800 header.public_header.connection_id = kConnectionId; |
| 3816 header.public_header.reset_flag = false; | 3801 header.public_header.reset_flag = false; |
| 3817 header.public_header.version_flag = false; | 3802 header.public_header.version_flag = false; |
| 3818 header.fec_flag = false; | 3803 header.fec_flag = false; |
| 3819 header.entropy_flag = true; | 3804 header.entropy_flag = true; |
| 3820 header.packet_number = UINT64_C(0x123456789ABC); | 3805 header.packet_number = kPacketNumber; |
| 3821 header.fec_group = 0; | 3806 header.fec_group = 0; |
| 3822 | 3807 |
| 3823 QuicMtuDiscoveryFrame mtu_discovery_frame; | 3808 QuicMtuDiscoveryFrame mtu_discovery_frame; |
| 3824 | 3809 |
| 3825 QuicFrames frames; | 3810 QuicFrames frames; |
| 3826 frames.push_back(QuicFrame(mtu_discovery_frame)); | 3811 frames.push_back(QuicFrame(mtu_discovery_frame)); |
| 3827 | 3812 |
| 3828 // clang-format off | 3813 // clang-format off |
| 3829 unsigned char packet[] = { | 3814 unsigned char packet[] = { |
| 3830 // public flags (8 byte connection_id) | 3815 // public flags (8 byte connection_id) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3846 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3831 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3847 ASSERT_TRUE(data != nullptr); | 3832 ASSERT_TRUE(data != nullptr); |
| 3848 | 3833 |
| 3849 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3834 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3850 data->length(), AsChars(packet), | 3835 data->length(), AsChars(packet), |
| 3851 arraysize(packet)); | 3836 arraysize(packet)); |
| 3852 } | 3837 } |
| 3853 | 3838 |
| 3854 TEST_P(QuicFramerTest, BuildPublicResetPacket) { | 3839 TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
| 3855 QuicPublicResetPacket reset_packet; | 3840 QuicPublicResetPacket reset_packet; |
| 3856 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3841 reset_packet.public_header.connection_id = kConnectionId; |
| 3857 reset_packet.public_header.reset_flag = true; | 3842 reset_packet.public_header.reset_flag = true; |
| 3858 reset_packet.public_header.version_flag = false; | 3843 reset_packet.public_header.version_flag = false; |
| 3859 reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); | 3844 reset_packet.rejected_packet_number = kPacketNumber; |
| 3860 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); | 3845 reset_packet.nonce_proof = kNonceProof; |
| 3861 | 3846 |
| 3862 // clang-format off | 3847 // clang-format off |
| 3863 unsigned char packet[] = { | 3848 unsigned char packet[] = { |
| 3864 // public flags (public reset, 8 byte ConnectionId) | 3849 // public flags (public reset, 8 byte ConnectionId) |
| 3865 0x0E, | 3850 0x0E, |
| 3866 // connection_id | 3851 // connection_id |
| 3867 0x10, 0x32, 0x54, 0x76, | 3852 0x10, 0x32, 0x54, 0x76, |
| 3868 0x98, 0xBA, 0xDC, 0xFE, | 3853 0x98, 0xBA, 0xDC, 0xFE, |
| 3869 // message tag (kPRST) | 3854 // message tag (kPRST) |
| 3870 'P', 'R', 'S', 'T', | 3855 'P', 'R', 'S', 'T', |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3891 framer_.BuildPublicResetPacket(reset_packet)); | 3876 framer_.BuildPublicResetPacket(reset_packet)); |
| 3892 ASSERT_TRUE(data != nullptr); | 3877 ASSERT_TRUE(data != nullptr); |
| 3893 | 3878 |
| 3894 test::CompareCharArraysWithHexError("constructed packet", | 3879 test::CompareCharArraysWithHexError("constructed packet", |
| 3895 data->data(), data->length(), | 3880 data->data(), data->length(), |
| 3896 AsChars(packet), arraysize(packet)); | 3881 AsChars(packet), arraysize(packet)); |
| 3897 } | 3882 } |
| 3898 | 3883 |
| 3899 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
| 3900 QuicPublicResetPacket reset_packet; | 3885 QuicPublicResetPacket reset_packet; |
| 3901 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3886 reset_packet.public_header.connection_id = kConnectionId; |
| 3902 reset_packet.public_header.reset_flag = true; | 3887 reset_packet.public_header.reset_flag = true; |
| 3903 reset_packet.public_header.version_flag = false; | 3888 reset_packet.public_header.version_flag = false; |
| 3904 reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); | 3889 reset_packet.rejected_packet_number = kPacketNumber; |
| 3905 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); | 3890 reset_packet.nonce_proof = kNonceProof; |
| 3906 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 3891 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); |
| 3907 | 3892 |
| 3908 // clang-format off | 3893 // clang-format off |
| 3909 unsigned char packet[] = { | 3894 unsigned char packet[] = { |
| 3910 // public flags (public reset, 8 byte ConnectionId) | 3895 // public flags (public reset, 8 byte ConnectionId) |
| 3911 0x0E, | 3896 0x0E, |
| 3912 // connection_id | 3897 // connection_id |
| 3913 0x10, 0x32, 0x54, 0x76, | 3898 0x10, 0x32, 0x54, 0x76, |
| 3914 0x98, 0xBA, 0xDC, 0xFE, | 3899 0x98, 0xBA, 0xDC, 0xFE, |
| 3915 // message tag (kPRST) | 3900 // message tag (kPRST) |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3945 framer_.BuildPublicResetPacket(reset_packet)); | 3930 framer_.BuildPublicResetPacket(reset_packet)); |
| 3946 ASSERT_TRUE(data != nullptr); | 3931 ASSERT_TRUE(data != nullptr); |
| 3947 | 3932 |
| 3948 test::CompareCharArraysWithHexError("constructed packet", | 3933 test::CompareCharArraysWithHexError("constructed packet", |
| 3949 data->data(), data->length(), | 3934 data->data(), data->length(), |
| 3950 AsChars(packet), arraysize(packet)); | 3935 AsChars(packet), arraysize(packet)); |
| 3951 } | 3936 } |
| 3952 | 3937 |
| 3953 TEST_P(QuicFramerTest, BuildFecPacket) { | 3938 TEST_P(QuicFramerTest, BuildFecPacket) { |
| 3954 QuicPacketHeader header; | 3939 QuicPacketHeader header; |
| 3955 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 3940 header.public_header.connection_id = kConnectionId; |
| 3956 header.public_header.reset_flag = false; | 3941 header.public_header.reset_flag = false; |
| 3957 header.public_header.version_flag = false; | 3942 header.public_header.version_flag = false; |
| 3958 header.fec_flag = true; | 3943 header.fec_flag = true; |
| 3959 header.entropy_flag = true; | 3944 header.entropy_flag = true; |
| 3960 header.packet_number = (UINT64_C(0x123456789ABC)); | 3945 header.packet_number = kPacketNumber; |
| 3961 header.is_in_fec_group = IN_FEC_GROUP; | 3946 header.is_in_fec_group = IN_FEC_GROUP; |
| 3962 header.fec_group = UINT64_C(0x123456789ABB); | 3947 header.fec_group = kPacketNumber - 1; |
| 3963 | 3948 |
| 3964 string redundancy = "abcdefghijklmnop"; | 3949 string redundancy = "abcdefghijklmnop"; |
| 3965 | 3950 |
| 3966 // clang-format off | 3951 // clang-format off |
| 3967 unsigned char packet[] = { | 3952 unsigned char packet[] = { |
| 3968 // public flags (8 byte connection_id) | 3953 // public flags (8 byte connection_id) |
| 3969 0x3C, | 3954 0x3C, |
| 3970 // connection_id | 3955 // connection_id |
| 3971 0x10, 0x32, 0x54, 0x76, | 3956 0x10, 0x32, 0x54, 0x76, |
| 3972 0x98, 0xBA, 0xDC, 0xFE, | 3957 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 3988 | 3973 |
| 3989 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | 3974 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); |
| 3990 ASSERT_TRUE(data != nullptr); | 3975 ASSERT_TRUE(data != nullptr); |
| 3991 | 3976 |
| 3992 test::CompareCharArraysWithHexError("constructed packet", | 3977 test::CompareCharArraysWithHexError("constructed packet", |
| 3993 data->data(), data->length(), | 3978 data->data(), data->length(), |
| 3994 AsChars(packet), arraysize(packet)); | 3979 AsChars(packet), arraysize(packet)); |
| 3995 } | 3980 } |
| 3996 | 3981 |
| 3997 TEST_P(QuicFramerTest, EncryptPacket) { | 3982 TEST_P(QuicFramerTest, EncryptPacket) { |
| 3998 QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); | 3983 QuicPacketNumber packet_number = kPacketNumber; |
| 3999 // clang-format off | 3984 // clang-format off |
| 4000 unsigned char packet[] = { | 3985 unsigned char packet[] = { |
| 4001 // public flags (8 byte connection_id) | 3986 // public flags (8 byte connection_id) |
| 4002 0x3C, | 3987 0x3C, |
| 4003 // connection_id | 3988 // connection_id |
| 4004 0x10, 0x32, 0x54, 0x76, | 3989 0x10, 0x32, 0x54, 0x76, |
| 4005 0x98, 0xBA, 0xDC, 0xFE, | 3990 0x98, 0xBA, 0xDC, 0xFE, |
| 4006 // packet number | 3991 // packet number |
| 4007 0xBC, 0x9A, 0x78, 0x56, | 3992 0xBC, 0x9A, 0x78, 0x56, |
| 4008 0x34, 0x12, | 3993 0x34, 0x12, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4024 !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER)); | 4009 !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER)); |
| 4025 char buffer[kMaxPacketSize]; | 4010 char buffer[kMaxPacketSize]; |
| 4026 size_t encrypted_length = framer_.EncryptPayload( | 4011 size_t encrypted_length = framer_.EncryptPayload( |
| 4027 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 4012 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
| 4028 | 4013 |
| 4029 ASSERT_NE(0u, encrypted_length); | 4014 ASSERT_NE(0u, encrypted_length); |
| 4030 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 4015 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); |
| 4031 } | 4016 } |
| 4032 | 4017 |
| 4033 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 4018 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
| 4034 QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); | 4019 QuicPacketNumber packet_number = kPacketNumber; |
| 4035 // clang-format off | 4020 // clang-format off |
| 4036 unsigned char packet[] = { | 4021 unsigned char packet[] = { |
| 4037 // public flags (version, 8 byte connection_id) | 4022 // public flags (version, 8 byte connection_id) |
| 4038 0x3D, | 4023 0x3D, |
| 4039 // connection_id | 4024 // connection_id |
| 4040 0x10, 0x32, 0x54, 0x76, | 4025 0x10, 0x32, 0x54, 0x76, |
| 4041 0x98, 0xBA, 0xDC, 0xFE, | 4026 0x98, 0xBA, 0xDC, 0xFE, |
| 4042 // version tag | 4027 // version tag |
| 4043 'Q', '.', '1', '0', | 4028 'Q', '.', '1', '0', |
| 4044 // packet number | 4029 // packet number |
| (...skipping 18 matching lines...) Expand all Loading... |
| 4063 char buffer[kMaxPacketSize]; | 4048 char buffer[kMaxPacketSize]; |
| 4064 size_t encrypted_length = framer_.EncryptPayload( | 4049 size_t encrypted_length = framer_.EncryptPayload( |
| 4065 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); | 4050 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
| 4066 | 4051 |
| 4067 ASSERT_NE(0u, encrypted_length); | 4052 ASSERT_NE(0u, encrypted_length); |
| 4068 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); | 4053 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); |
| 4069 } | 4054 } |
| 4070 | 4055 |
| 4071 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 4056 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
| 4072 QuicPacketHeader header; | 4057 QuicPacketHeader header; |
| 4073 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4058 header.public_header.connection_id = kConnectionId; |
| 4074 header.public_header.reset_flag = false; | 4059 header.public_header.reset_flag = false; |
| 4075 header.public_header.version_flag = false; | 4060 header.public_header.version_flag = false; |
| 4076 header.fec_flag = false; | 4061 header.fec_flag = false; |
| 4077 header.entropy_flag = false; | 4062 header.entropy_flag = false; |
| 4078 header.packet_number = UINT64_C(0x123456789ABC); | 4063 header.packet_number = kPacketNumber; |
| 4079 header.fec_group = 0; | 4064 header.fec_group = 0; |
| 4080 | 4065 |
| 4081 // Create a packet with just the ack. | 4066 // Create a packet with just the ack. |
| 4082 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4067 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4083 QuicFrame frame; | 4068 QuicFrame frame; |
| 4084 frame.type = ACK_FRAME; | 4069 frame.type = ACK_FRAME; |
| 4085 frame.ack_frame = &ack_frame; | 4070 frame.ack_frame = &ack_frame; |
| 4086 QuicFrames frames; | 4071 QuicFrames frames; |
| 4087 frames.push_back(frame); | 4072 frames.push_back(frame); |
| 4088 | 4073 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4101 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4086 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
| 4102 EXPECT_TRUE(processed_ack_frame.is_truncated); | 4087 EXPECT_TRUE(processed_ack_frame.is_truncated); |
| 4103 EXPECT_EQ(510u, processed_ack_frame.largest_observed); | 4088 EXPECT_EQ(510u, processed_ack_frame.largest_observed); |
| 4104 ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 4089 ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow()); |
| 4105 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 4090 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); |
| 4106 EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max()); | 4091 EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max()); |
| 4107 } | 4092 } |
| 4108 | 4093 |
| 4109 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { | 4094 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { |
| 4110 QuicPacketHeader header; | 4095 QuicPacketHeader header; |
| 4111 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4096 header.public_header.connection_id = kConnectionId; |
| 4112 header.public_header.reset_flag = false; | 4097 header.public_header.reset_flag = false; |
| 4113 header.public_header.version_flag = false; | 4098 header.public_header.version_flag = false; |
| 4114 header.fec_flag = false; | 4099 header.fec_flag = false; |
| 4115 header.entropy_flag = false; | 4100 header.entropy_flag = false; |
| 4116 header.packet_number = UINT64_C(0x123456789ABC); | 4101 header.packet_number = kPacketNumber; |
| 4117 header.fec_group = 0; | 4102 header.fec_group = 0; |
| 4118 | 4103 |
| 4119 // Create a packet with just the ack. | 4104 // Create a packet with just the ack. |
| 4120 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4105 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
| 4121 QuicFrame frame; | 4106 QuicFrame frame; |
| 4122 frame.type = ACK_FRAME; | 4107 frame.type = ACK_FRAME; |
| 4123 frame.ack_frame = &ack_frame; | 4108 frame.ack_frame = &ack_frame; |
| 4124 QuicFrames frames; | 4109 QuicFrames frames; |
| 4125 frames.push_back(frame); | 4110 frames.push_back(frame); |
| 4126 | 4111 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4139 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4124 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
| 4140 EXPECT_TRUE(processed_ack_frame.is_truncated); | 4125 EXPECT_TRUE(processed_ack_frame.is_truncated); |
| 4141 EXPECT_EQ(476u, processed_ack_frame.largest_observed); | 4126 EXPECT_EQ(476u, processed_ack_frame.largest_observed); |
| 4142 ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow()); | 4127 ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow()); |
| 4143 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); | 4128 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); |
| 4144 EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max()); | 4129 EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max()); |
| 4145 } | 4130 } |
| 4146 | 4131 |
| 4147 TEST_P(QuicFramerTest, CleanTruncation) { | 4132 TEST_P(QuicFramerTest, CleanTruncation) { |
| 4148 QuicPacketHeader header; | 4133 QuicPacketHeader header; |
| 4149 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); | 4134 header.public_header.connection_id = kConnectionId; |
| 4150 header.public_header.reset_flag = false; | 4135 header.public_header.reset_flag = false; |
| 4151 header.public_header.version_flag = false; | 4136 header.public_header.version_flag = false; |
| 4152 header.fec_flag = false; | 4137 header.fec_flag = false; |
| 4153 header.entropy_flag = true; | 4138 header.entropy_flag = true; |
| 4154 header.packet_number = UINT64_C(0x123456789ABC); | 4139 header.packet_number = kPacketNumber; |
| 4155 header.fec_group = 0; | 4140 header.fec_group = 0; |
| 4156 | 4141 |
| 4157 QuicAckFrame ack_frame; | 4142 QuicAckFrame ack_frame; |
| 4158 ack_frame.largest_observed = 201; | 4143 ack_frame.largest_observed = 201; |
| 4159 ack_frame.missing_packets.Add(1, ack_frame.largest_observed); | 4144 ack_frame.missing_packets.Add(1, ack_frame.largest_observed); |
| 4160 | 4145 |
| 4161 // Create a packet with just the ack. | 4146 // Create a packet with just the ack. |
| 4162 QuicFrame frame; | 4147 QuicFrame frame; |
| 4163 frame.type = ACK_FRAME; | 4148 frame.type = ACK_FRAME; |
| 4164 frame.ack_frame = &ack_frame; | 4149 frame.ack_frame = &ack_frame; |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4401 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); | 4386 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); |
| 4402 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 4387 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
| 4403 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); | 4388 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); |
| 4404 | 4389 |
| 4405 EXPECT_FALSE(framer_.ProcessPacket(*packet)); | 4390 EXPECT_FALSE(framer_.ProcessPacket(*packet)); |
| 4406 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 4391 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
| 4407 } | 4392 } |
| 4408 | 4393 |
| 4409 } // namespace test | 4394 } // namespace test |
| 4410 } // namespace net | 4395 } // namespace net |
| OLD | NEW |