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