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