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