Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: net/quic/quic_framer_test.cc

Issue 1437023002: Landing Recent QUIC changes until 2015-11-09 20:32 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_headers_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
3104 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3097 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3105 ASSERT_TRUE(data != nullptr); 3098 ASSERT_TRUE(data != nullptr);
3106 3099
3107 test::CompareCharArraysWithHexError("constructed packet", 3100 test::CompareCharArraysWithHexError("constructed packet",
3108 data->data(), data->length(), 3101 data->data(), data->length(),
3109 AsChars(packet), arraysize(packet)); 3102 AsChars(packet), arraysize(packet));
3110 } 3103 }
3111 3104
3112 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { 3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
3113 QuicPacketHeader header; 3106 QuicPacketHeader header;
3114 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3107 header.public_header.connection_id = kConnectionId;
3115 header.public_header.reset_flag = false; 3108 header.public_header.reset_flag = false;
3116 header.public_header.version_flag = true; 3109 header.public_header.version_flag = true;
3117 header.fec_flag = false; 3110 header.fec_flag = false;
3118 header.entropy_flag = true; 3111 header.entropy_flag = true;
3119 header.packet_number = UINT64_C(0x77123456789ABC); 3112 header.packet_number = kPacketNumber;
3120 header.fec_group = 0; 3113 header.fec_group = 0;
3121 3114
3122 QuicStreamFrame stream_frame(0x01020304, true, UINT64_C(0xBA98FEDC32107654), 3115 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
3123 StringPiece("hello world!")); 3116 StringPiece("hello world!"));
3124 3117
3125 QuicFrames frames; 3118 QuicFrames frames;
3126 frames.push_back(QuicFrame(&stream_frame)); 3119 frames.push_back(QuicFrame(&stream_frame));
3127 3120
3128 // clang-format off 3121 // clang-format off
3129 unsigned char packet[] = { 3122 unsigned char packet[] = {
3130 // public flags (version, 8 byte connection_id) 3123 // public flags (version, 8 byte connection_id)
3131 0x3D, 3124 0x3D,
3132 // connection_id 3125 // connection_id
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
3188 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); 3181 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
3189 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3190 ASSERT_TRUE(data != nullptr); 3183 ASSERT_TRUE(data != nullptr);
3191 3184
3192 test::CompareCharArraysWithHexError("constructed packet", 3185 test::CompareCharArraysWithHexError("constructed packet",
3193 data->data(), data->length(), 3186 data->data(), data->length(),
3194 AsChars(packet), arraysize(packet)); 3187 AsChars(packet), arraysize(packet));
3195 } 3188 }
3196 3189
3197 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { 3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
3198 QuicPacketPublicHeader header;
3199 header.connection_id = UINT64_C(0xFEDCBA9876543210);
3200 header.reset_flag = false;
3201 header.version_flag = true;
3202
3203 // clang-format off 3191 // clang-format off
3204 unsigned char packet[] = { 3192 unsigned char packet[] = {
3205 // public flags (version, 8 byte connection_id) 3193 // public flags (version, 8 byte connection_id)
3206 0x0D, 3194 0x0D,
3207 // connection_id 3195 // connection_id
3208 0x10, 3196 0x10,
3209 0x32, 3197 0x32,
3210 0x54, 3198 0x54,
3211 0x76, 3199 0x76,
3212 0x98, 3200 0x98,
3213 0xBA, 3201 0xBA,
3214 0xDC, 3202 0xDC,
3215 0xFE, 3203 0xFE,
3216 // version tag 3204 // version tag
3217 'Q', 3205 'Q',
3218 '0', 3206 '0',
3219 GetQuicVersionDigitTens(), 3207 GetQuicVersionDigitTens(),
3220 GetQuicVersionDigitOnes(), 3208 GetQuicVersionDigitOnes(),
3221 }; 3209 };
3222 // clang-format on 3210 // clang-format on
3223 3211
3224 QuicVersionVector versions; 3212 QuicConnectionId connection_id = kConnectionId;
3225 versions.push_back(GetParam()); 3213 scoped_ptr<QuicEncryptedPacket> data(framer_.BuildVersionNegotiationPacket(
3226 scoped_ptr<QuicEncryptedPacket> data( 3214 connection_id, SupportedVersions(GetParam())));
3227 framer_.BuildVersionNegotiationPacket(header, versions));
3228
3229 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3215 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3230 data->length(), AsChars(packet), 3216 data->length(), AsChars(packet),
3231 arraysize(packet)); 3217 arraysize(packet));
3232 } 3218 }
3233 3219
3234 TEST_P(QuicFramerTest, BuildAckFramePacket) { 3220 TEST_P(QuicFramerTest, BuildAckFramePacket) {
3235 QuicPacketHeader header; 3221 QuicPacketHeader header;
3236 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3222 header.public_header.connection_id = kConnectionId;
3237 header.public_header.reset_flag = false; 3223 header.public_header.reset_flag = false;
3238 header.public_header.version_flag = false; 3224 header.public_header.version_flag = false;
3239 header.fec_flag = false; 3225 header.fec_flag = false;
3240 header.entropy_flag = true; 3226 header.entropy_flag = true;
3241 header.packet_number = UINT64_C(0x770123456789AA8); 3227 header.packet_number = kPacketNumber;
3242 header.fec_group = 0; 3228 header.fec_group = 0;
3243 3229
3244 QuicAckFrame ack_frame; 3230 QuicAckFrame ack_frame;
3245 ack_frame.entropy_hash = 0x43; 3231 ack_frame.entropy_hash = 0x43;
3246 ack_frame.largest_observed = UINT64_C(0x770123456789ABF); 3232 ack_frame.largest_observed = kLargestObserved;
3247 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3233 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3248 ack_frame.missing_packets.Add(UINT64_C(0x770123456789ABE)); 3234 ack_frame.missing_packets.Add(kMissingPacket);
3249 3235
3250 QuicFrames frames; 3236 QuicFrames frames;
3251 frames.push_back(QuicFrame(&ack_frame)); 3237 frames.push_back(QuicFrame(&ack_frame));
3252 3238
3253 // clang-format off 3239 // clang-format off
3254 unsigned char packet[] = { 3240 unsigned char packet[] = {
3255 // public flags (8 byte connection_id) 3241 // public flags (8 byte connection_id)
3256 0x3C, 3242 0x3C,
3257 // connection_id 3243 // connection_id
3258 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 3244 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3259 // packet number 3245 // packet number
3260 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 3246 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3261 // private flags (entropy) 3247 // private flags (entropy)
3262 0x01, 3248 0x01,
3263 3249
3264 // frame type (ack frame) 3250 // frame type (ack frame)
3265 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 3251 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3266 0x6C, 3252 0x6C,
3267 // entropy hash of all received packets. 3253 // entropy hash of all received packets.
3268 0x43, 3254 0x43,
3269 // largest observed packet number 3255 // largest observed packet number
3270 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, 3256 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
(...skipping 18 matching lines...) Expand all
3289 test::CompareCharArraysWithHexError("constructed packet", 3275 test::CompareCharArraysWithHexError("constructed packet",
3290 data->data(), data->length(), 3276 data->data(), data->length(),
3291 AsChars(packet), arraysize(packet)); 3277 AsChars(packet), arraysize(packet));
3292 } 3278 }
3293 3279
3294 // TODO(jri): Add test for tuncated packets in which the original ack frame had 3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had
3295 // revived packets. (In both the large and small packet cases below). 3281 // revived packets. (In both the large and small packet cases below).
3296 3282
3297 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
3298 QuicPacketHeader header; 3284 QuicPacketHeader header;
3299 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3285 header.public_header.connection_id = kConnectionId;
3300 header.public_header.reset_flag = false; 3286 header.public_header.reset_flag = false;
3301 header.public_header.version_flag = false; 3287 header.public_header.version_flag = false;
3302 header.fec_flag = false; 3288 header.fec_flag = false;
3303 header.entropy_flag = true; 3289 header.entropy_flag = true;
3304 header.packet_number = UINT64_C(0x770123456789AA8); 3290 header.packet_number = kPacketNumber;
3305 header.fec_group = 0; 3291 header.fec_group = 0;
3306 3292
3307 QuicAckFrame ack_frame; 3293 QuicAckFrame ack_frame;
3308 // This entropy hash is different from what shows up in the packet below, 3294 // This entropy hash is different from what shows up in the packet below,
3309 // since entropy is recomputed by the framer on ack truncation (by 3295 // since entropy is recomputed by the framer on ack truncation (by
3310 // TestEntropyCalculator for this test.) 3296 // TestEntropyCalculator for this test.)
3311 ack_frame.entropy_hash = 0x43; 3297 ack_frame.entropy_hash = 0x43;
3312 ack_frame.largest_observed = 2 * 300; 3298 ack_frame.largest_observed = 2 * 300;
3313 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3299 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3314 for (size_t i = 1; i < 2 * 300; i += 2) { 3300 for (size_t i = 1; i < 2 * 300; i += 2) {
3315 ack_frame.missing_packets.Add(i); 3301 ack_frame.missing_packets.Add(i);
3316 } 3302 }
3317 3303
3318 QuicFrames frames; 3304 QuicFrames frames;
3319 frames.push_back(QuicFrame(&ack_frame)); 3305 frames.push_back(QuicFrame(&ack_frame));
3320 3306
3321 // clang-format off 3307 // clang-format off
3322 unsigned char packet[] = { 3308 unsigned char packet[] = {
3323 // public flags (8 byte connection_id) 3309 // public flags (8 byte connection_id)
3324 0x3C, 3310 0x3C,
3325 // connection_id 3311 // connection_id
3326 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 3312 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3327 // packet number 3313 // packet number
3328 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 3314 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3329 // private flags (entropy) 3315 // private flags (entropy)
3330 0x01, 3316 0x01,
3331 3317
3332 // frame type (ack frame) 3318 // frame type (ack frame)
3333 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) 3319 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
3334 0x74, 3320 0x74,
3335 // entropy hash of all received packets, set to 1 by TestEntropyCalculator 3321 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
3336 // since ack is truncated. 3322 // since ack is truncated.
3337 0x01, 3323 0x01,
3338 // 2-byte largest observed packet number. 3324 // 2-byte largest observed packet number.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
3400 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3386 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3401 ASSERT_TRUE(data != nullptr); 3387 ASSERT_TRUE(data != nullptr);
3402 3388
3403 test::CompareCharArraysWithHexError("constructed packet", 3389 test::CompareCharArraysWithHexError("constructed packet",
3404 data->data(), data->length(), 3390 data->data(), data->length(),
3405 AsChars(packet), arraysize(packet)); 3391 AsChars(packet), arraysize(packet));
3406 } 3392 }
3407 3393
3408 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3409 QuicPacketHeader header; 3395 QuicPacketHeader header;
3410 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3396 header.public_header.connection_id = kConnectionId;
3411 header.public_header.reset_flag = false; 3397 header.public_header.reset_flag = false;
3412 header.public_header.version_flag = false; 3398 header.public_header.version_flag = false;
3413 header.fec_flag = false; 3399 header.fec_flag = false;
3414 header.entropy_flag = true; 3400 header.entropy_flag = true;
3415 header.packet_number = UINT64_C(0x770123456789AA8); 3401 header.packet_number = kPacketNumber;
3416 header.fec_group = 0; 3402 header.fec_group = 0;
3417 3403
3418 QuicAckFrame ack_frame; 3404 QuicAckFrame ack_frame;
3419 // This entropy hash is different from what shows up in the packet below, 3405 // This entropy hash is different from what shows up in the packet below,
3420 // since entropy is recomputed by the framer on ack truncation (by 3406 // since entropy is recomputed by the framer on ack truncation (by
3421 // TestEntropyCalculator for this test.) 3407 // TestEntropyCalculator for this test.)
3422 ack_frame.entropy_hash = 0x43; 3408 ack_frame.entropy_hash = 0x43;
3423 ack_frame.largest_observed = 2 * 300; 3409 ack_frame.largest_observed = 2 * 300;
3424 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); 3410 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
3425 for (size_t i = 1; i < 2 * 300; i += 2) { 3411 for (size_t i = 1; i < 2 * 300; i += 2) {
3426 ack_frame.missing_packets.Add(i); 3412 ack_frame.missing_packets.Add(i);
3427 } 3413 }
3428 3414
3429 QuicFrames frames; 3415 QuicFrames frames;
3430 frames.push_back(QuicFrame(&ack_frame)); 3416 frames.push_back(QuicFrame(&ack_frame));
3431 3417
3432 // clang-format off 3418 // clang-format off
3433 unsigned char packet[] = { 3419 unsigned char packet[] = {
3434 // public flags (8 byte connection_id) 3420 // public flags (8 byte connection_id)
3435 0x3C, 3421 0x3C,
3436 // connection_id 3422 // connection_id
3437 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 3423 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3438 // packet number 3424 // packet number
3439 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 3425 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3440 // private flags (entropy) 3426 // private flags (entropy)
3441 0x01, 3427 0x01,
3442 3428
3443 // frame type (ack frame) 3429 // frame type (ack frame)
3444 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) 3430 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
3445 0x74, 3431 0x74,
3446 // entropy hash of all received packets, set to 1 by TestEntropyCalculator 3432 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
3447 // since ack is truncated. 3433 // since ack is truncated.
3448 0x01, 3434 0x01,
3449 // 2-byte largest observed packet number. 3435 // 2-byte largest observed packet number.
(...skipping 15 matching lines...) Expand all
3465 ASSERT_TRUE(data != nullptr); 3451 ASSERT_TRUE(data != nullptr);
3466 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 3452 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
3467 EXPECT_EQ(36u, data->length()); 3453 EXPECT_EQ(36u, data->length());
3468 test::CompareCharArraysWithHexError("constructed packet", 3454 test::CompareCharArraysWithHexError("constructed packet",
3469 data->data(), data->length(), 3455 data->data(), data->length(),
3470 AsChars(packet), arraysize(packet)); 3456 AsChars(packet), arraysize(packet));
3471 } 3457 }
3472 3458
3473 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3474 QuicPacketHeader header; 3460 QuicPacketHeader header;
3475 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3461 header.public_header.connection_id = kConnectionId;
3476 header.public_header.reset_flag = false; 3462 header.public_header.reset_flag = false;
3477 header.public_header.version_flag = false; 3463 header.public_header.version_flag = false;
3478 header.fec_flag = false; 3464 header.fec_flag = false;
3479 header.entropy_flag = true; 3465 header.entropy_flag = true;
3480 header.packet_number = UINT64_C(0x770123456789AA8); 3466 header.packet_number = kPacketNumber;
3481 header.fec_group = 0; 3467 header.fec_group = 0;
3482 3468
3483 QuicStopWaitingFrame stop_waiting_frame; 3469 QuicStopWaitingFrame stop_waiting_frame;
3484 stop_waiting_frame.entropy_hash = 0x14; 3470 stop_waiting_frame.entropy_hash = 0x14;
3485 stop_waiting_frame.least_unacked = UINT64_C(0x770123456789AA0); 3471 stop_waiting_frame.least_unacked = kLeastUnacked;
3486 3472
3487 QuicFrames frames; 3473 QuicFrames frames;
3488 frames.push_back(QuicFrame(&stop_waiting_frame)); 3474 frames.push_back(QuicFrame(&stop_waiting_frame));
3489 3475
3490 // clang-format off 3476 // clang-format off
3491 unsigned char packet[] = { 3477 unsigned char packet[] = {
3492 // public flags (8 byte connection_id) 3478 // public flags (8 byte connection_id)
3493 0x3C, 3479 0x3C,
3494 // connection_id 3480 // connection_id
3495 0x10, 0x32, 0x54, 0x76, 3481 0x10, 0x32, 0x54, 0x76,
3496 0x98, 0xBA, 0xDC, 0xFE, 3482 0x98, 0xBA, 0xDC, 0xFE,
3497 // packet number 3483 // packet number
3498 0xA8, 0x9A, 0x78, 0x56, 3484 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3499 0x34, 0x12,
3500 // private flags (entropy) 3485 // private flags (entropy)
3501 0x01, 3486 0x01,
3502 3487
3503 // frame type (stop waiting frame) 3488 // frame type (stop waiting frame)
3504 0x06, 3489 0x06,
3505 // entropy hash of sent packets till least awaiting - 1. 3490 // entropy hash of sent packets till least awaiting - 1.
3506 0x14, 3491 0x14,
3507 // least packet number awaiting an ack, delta from packet number. 3492 // least packet number awaiting an ack, delta from packet number.
3508 0x08, 0x00, 0x00, 0x00, 3493 0x1C, 0x00, 0x00, 0x00,
3509 0x00, 0x00, 3494 0x00, 0x00,
3510 }; 3495 };
3511 // clang-format on 3496 // clang-format on
3512 3497
3513 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3498 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3514 ASSERT_TRUE(data != nullptr); 3499 ASSERT_TRUE(data != nullptr);
3515 3500
3516 test::CompareCharArraysWithHexError("constructed packet", 3501 test::CompareCharArraysWithHexError("constructed packet",
3517 data->data(), data->length(), 3502 data->data(), data->length(),
3518 AsChars(packet), arraysize(packet)); 3503 AsChars(packet), arraysize(packet));
3519 } 3504 }
3520 3505
3521 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { 3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
3522 QuicPacketHeader header; 3507 QuicPacketHeader header;
3523 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3508 header.public_header.connection_id = kConnectionId;
3524 header.public_header.reset_flag = false; 3509 header.public_header.reset_flag = false;
3525 header.public_header.version_flag = false; 3510 header.public_header.version_flag = false;
3526 header.fec_flag = false; 3511 header.fec_flag = false;
3527 header.entropy_flag = false; 3512 header.entropy_flag = false;
3528 header.packet_number = UINT64_C(0x123456789ABC); 3513 header.packet_number = kPacketNumber;
3529 header.fec_group = 0; 3514 header.fec_group = 0;
3530 3515
3531 QuicRstStreamFrame rst_frame; 3516 QuicRstStreamFrame rst_frame;
3532 rst_frame.stream_id = 0x01020304; 3517 rst_frame.stream_id = kStreamId;
3533 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); 3518 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708);
3534 rst_frame.byte_offset = 0x0807060504030201; 3519 rst_frame.byte_offset = 0x0807060504030201;
3535 3520
3536 // clang-format off 3521 // clang-format off
3537 unsigned char packet[] = { 3522 unsigned char packet[] = {
3538 // public flags (8 byte connection_id) 3523 // public flags (8 byte connection_id)
3539 0x3C, 3524 0x3C,
3540 // connection_id 3525 // connection_id
3541 0x10, 0x32, 0x54, 0x76, 3526 0x10, 0x32, 0x54, 0x76,
3542 0x98, 0xBA, 0xDC, 0xFE, 3527 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 21 matching lines...) Expand all
3564 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3549 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3565 ASSERT_TRUE(data != nullptr); 3550 ASSERT_TRUE(data != nullptr);
3566 3551
3567 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3552 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3568 data->length(), AsChars(packet), 3553 data->length(), AsChars(packet),
3569 arraysize(packet)); 3554 arraysize(packet));
3570 } 3555 }
3571 3556
3572 TEST_P(QuicFramerTest, BuildCloseFramePacket) { 3557 TEST_P(QuicFramerTest, BuildCloseFramePacket) {
3573 QuicPacketHeader header; 3558 QuicPacketHeader header;
3574 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3559 header.public_header.connection_id = kConnectionId;
3575 header.public_header.reset_flag = false; 3560 header.public_header.reset_flag = false;
3576 header.public_header.version_flag = false; 3561 header.public_header.version_flag = false;
3577 header.fec_flag = false; 3562 header.fec_flag = false;
3578 header.entropy_flag = true; 3563 header.entropy_flag = true;
3579 header.packet_number = UINT64_C(0x123456789ABC); 3564 header.packet_number = kPacketNumber;
3580 header.fec_group = 0; 3565 header.fec_group = 0;
3581 3566
3582 QuicConnectionCloseFrame close_frame; 3567 QuicConnectionCloseFrame close_frame;
3583 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 3568 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
3584 close_frame.error_details = "because I can"; 3569 close_frame.error_details = "because I can";
3585 3570
3586 QuicFrames frames; 3571 QuicFrames frames;
3587 frames.push_back(QuicFrame(&close_frame)); 3572 frames.push_back(QuicFrame(&close_frame));
3588 3573
3589 // clang-format off 3574 // clang-format off
(...skipping 26 matching lines...) Expand all
3616 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3601 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3617 ASSERT_TRUE(data != nullptr); 3602 ASSERT_TRUE(data != nullptr);
3618 3603
3619 test::CompareCharArraysWithHexError("constructed packet", 3604 test::CompareCharArraysWithHexError("constructed packet",
3620 data->data(), data->length(), 3605 data->data(), data->length(),
3621 AsChars(packet), arraysize(packet)); 3606 AsChars(packet), arraysize(packet));
3622 } 3607 }
3623 3608
3624 TEST_P(QuicFramerTest, BuildGoAwayPacket) { 3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
3625 QuicPacketHeader header; 3610 QuicPacketHeader header;
3626 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3611 header.public_header.connection_id = kConnectionId;
3627 header.public_header.reset_flag = false; 3612 header.public_header.reset_flag = false;
3628 header.public_header.version_flag = false; 3613 header.public_header.version_flag = false;
3629 header.fec_flag = false; 3614 header.fec_flag = false;
3630 header.entropy_flag = true; 3615 header.entropy_flag = true;
3631 header.packet_number = UINT64_C(0x123456789ABC); 3616 header.packet_number = kPacketNumber;
3632 header.fec_group = 0; 3617 header.fec_group = 0;
3633 3618
3634 QuicGoAwayFrame goaway_frame; 3619 QuicGoAwayFrame goaway_frame;
3635 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 3620 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
3636 goaway_frame.last_good_stream_id = 0x01020304; 3621 goaway_frame.last_good_stream_id = kStreamId;
3637 goaway_frame.reason_phrase = "because I can"; 3622 goaway_frame.reason_phrase = "because I can";
3638 3623
3639 QuicFrames frames; 3624 QuicFrames frames;
3640 frames.push_back(QuicFrame(&goaway_frame)); 3625 frames.push_back(QuicFrame(&goaway_frame));
3641 3626
3642 // clang-format off 3627 // clang-format off
3643 unsigned char packet[] = { 3628 unsigned char packet[] = {
3644 // public flags (8 byte connection_id) 3629 // public flags (8 byte connection_id)
3645 0x3C, 3630 0x3C,
3646 // connection_id 3631 // connection_id
(...skipping 24 matching lines...) Expand all
3671 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3656 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3672 ASSERT_TRUE(data != nullptr); 3657 ASSERT_TRUE(data != nullptr);
3673 3658
3674 test::CompareCharArraysWithHexError("constructed packet", 3659 test::CompareCharArraysWithHexError("constructed packet",
3675 data->data(), data->length(), 3660 data->data(), data->length(),
3676 AsChars(packet), arraysize(packet)); 3661 AsChars(packet), arraysize(packet));
3677 } 3662 }
3678 3663
3679 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { 3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
3680 QuicPacketHeader header; 3665 QuicPacketHeader header;
3681 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3666 header.public_header.connection_id = kConnectionId;
3682 header.public_header.reset_flag = false; 3667 header.public_header.reset_flag = false;
3683 header.public_header.version_flag = false; 3668 header.public_header.version_flag = false;
3684 header.fec_flag = false; 3669 header.fec_flag = false;
3685 header.entropy_flag = true; 3670 header.entropy_flag = true;
3686 header.packet_number = UINT64_C(0x123456789ABC); 3671 header.packet_number = kPacketNumber;
3687 header.fec_group = 0; 3672 header.fec_group = 0;
3688 3673
3689 QuicWindowUpdateFrame window_update_frame; 3674 QuicWindowUpdateFrame window_update_frame;
3690 window_update_frame.stream_id = 0x01020304; 3675 window_update_frame.stream_id = kStreamId;
3691 window_update_frame.byte_offset = 0x1122334455667788; 3676 window_update_frame.byte_offset = 0x1122334455667788;
3692 3677
3693 QuicFrames frames; 3678 QuicFrames frames;
3694 frames.push_back(QuicFrame(&window_update_frame)); 3679 frames.push_back(QuicFrame(&window_update_frame));
3695 3680
3696 // clang-format off 3681 // clang-format off
3697 unsigned char packet[] = { 3682 unsigned char packet[] = {
3698 // public flags (8 byte connection_id) 3683 // public flags (8 byte connection_id)
3699 0x3C, 3684 0x3C,
3700 // connection_id 3685 // connection_id
(...skipping 18 matching lines...) Expand all
3719 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3704 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3720 ASSERT_TRUE(data != nullptr); 3705 ASSERT_TRUE(data != nullptr);
3721 3706
3722 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3707 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3723 data->length(), AsChars(packet), 3708 data->length(), AsChars(packet),
3724 arraysize(packet)); 3709 arraysize(packet));
3725 } 3710 }
3726 3711
3727 TEST_P(QuicFramerTest, BuildBlockedPacket) { 3712 TEST_P(QuicFramerTest, BuildBlockedPacket) {
3728 QuicPacketHeader header; 3713 QuicPacketHeader header;
3729 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3714 header.public_header.connection_id = kConnectionId;
3730 header.public_header.reset_flag = false; 3715 header.public_header.reset_flag = false;
3731 header.public_header.version_flag = false; 3716 header.public_header.version_flag = false;
3732 header.fec_flag = false; 3717 header.fec_flag = false;
3733 header.entropy_flag = true; 3718 header.entropy_flag = true;
3734 header.packet_number = UINT64_C(0x123456789ABC); 3719 header.packet_number = kPacketNumber;
3735 header.fec_group = 0; 3720 header.fec_group = 0;
3736 3721
3737 QuicBlockedFrame blocked_frame; 3722 QuicBlockedFrame blocked_frame;
3738 blocked_frame.stream_id = 0x01020304; 3723 blocked_frame.stream_id = kStreamId;
3739 3724
3740 QuicFrames frames; 3725 QuicFrames frames;
3741 frames.push_back(QuicFrame(&blocked_frame)); 3726 frames.push_back(QuicFrame(&blocked_frame));
3742 3727
3743 // clang-format off 3728 // clang-format off
3744 unsigned char packet[] = { 3729 unsigned char packet[] = {
3745 // public flags (8 byte connection_id) 3730 // public flags (8 byte connection_id)
3746 0x3C, 3731 0x3C,
3747 // connection_id 3732 // connection_id
3748 0x10, 0x32, 0x54, 0x76, 3733 0x10, 0x32, 0x54, 0x76,
(...skipping 14 matching lines...) Expand all
3763 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3748 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3764 ASSERT_TRUE(data != nullptr); 3749 ASSERT_TRUE(data != nullptr);
3765 3750
3766 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3751 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3767 data->length(), AsChars(packet), 3752 data->length(), AsChars(packet),
3768 arraysize(packet)); 3753 arraysize(packet));
3769 } 3754 }
3770 3755
3771 TEST_P(QuicFramerTest, BuildPingPacket) { 3756 TEST_P(QuicFramerTest, BuildPingPacket) {
3772 QuicPacketHeader header; 3757 QuicPacketHeader header;
3773 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3758 header.public_header.connection_id = kConnectionId;
3774 header.public_header.reset_flag = false; 3759 header.public_header.reset_flag = false;
3775 header.public_header.version_flag = false; 3760 header.public_header.version_flag = false;
3776 header.fec_flag = false; 3761 header.fec_flag = false;
3777 header.entropy_flag = true; 3762 header.entropy_flag = true;
3778 header.packet_number = UINT64_C(0x123456789ABC); 3763 header.packet_number = kPacketNumber;
3779 header.fec_group = 0; 3764 header.fec_group = 0;
3780 3765
3781 QuicPingFrame ping_frame; 3766 QuicPingFrame ping_frame;
3782 3767
3783 QuicFrames frames; 3768 QuicFrames frames;
3784 frames.push_back(QuicFrame(ping_frame)); 3769 frames.push_back(QuicFrame(ping_frame));
3785 3770
3786 // clang-format off 3771 // clang-format off
3787 unsigned char packet[] = { 3772 unsigned char packet[] = {
3788 // public flags (8 byte connection_id) 3773 // public flags (8 byte connection_id)
(...skipping 16 matching lines...) Expand all
3805 ASSERT_TRUE(data != nullptr); 3790 ASSERT_TRUE(data != nullptr);
3806 3791
3807 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3792 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3808 data->length(), AsChars(packet), 3793 data->length(), AsChars(packet),
3809 arraysize(packet)); 3794 arraysize(packet));
3810 } 3795 }
3811 3796
3812 // Test that the MTU discovery packet is serialized correctly as a PING packet. 3797 // Test that the MTU discovery packet is serialized correctly as a PING packet.
3813 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { 3798 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) {
3814 QuicPacketHeader header; 3799 QuicPacketHeader header;
3815 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3800 header.public_header.connection_id = kConnectionId;
3816 header.public_header.reset_flag = false; 3801 header.public_header.reset_flag = false;
3817 header.public_header.version_flag = false; 3802 header.public_header.version_flag = false;
3818 header.fec_flag = false; 3803 header.fec_flag = false;
3819 header.entropy_flag = true; 3804 header.entropy_flag = true;
3820 header.packet_number = UINT64_C(0x123456789ABC); 3805 header.packet_number = kPacketNumber;
3821 header.fec_group = 0; 3806 header.fec_group = 0;
3822 3807
3823 QuicMtuDiscoveryFrame mtu_discovery_frame; 3808 QuicMtuDiscoveryFrame mtu_discovery_frame;
3824 3809
3825 QuicFrames frames; 3810 QuicFrames frames;
3826 frames.push_back(QuicFrame(mtu_discovery_frame)); 3811 frames.push_back(QuicFrame(mtu_discovery_frame));
3827 3812
3828 // clang-format off 3813 // clang-format off
3829 unsigned char packet[] = { 3814 unsigned char packet[] = {
3830 // public flags (8 byte connection_id) 3815 // public flags (8 byte connection_id)
(...skipping 15 matching lines...) Expand all
3846 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3831 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3847 ASSERT_TRUE(data != nullptr); 3832 ASSERT_TRUE(data != nullptr);
3848 3833
3849 test::CompareCharArraysWithHexError("constructed packet", data->data(), 3834 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3850 data->length(), AsChars(packet), 3835 data->length(), AsChars(packet),
3851 arraysize(packet)); 3836 arraysize(packet));
3852 } 3837 }
3853 3838
3854 TEST_P(QuicFramerTest, BuildPublicResetPacket) { 3839 TEST_P(QuicFramerTest, BuildPublicResetPacket) {
3855 QuicPublicResetPacket reset_packet; 3840 QuicPublicResetPacket reset_packet;
3856 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3841 reset_packet.public_header.connection_id = kConnectionId;
3857 reset_packet.public_header.reset_flag = true; 3842 reset_packet.public_header.reset_flag = true;
3858 reset_packet.public_header.version_flag = false; 3843 reset_packet.public_header.version_flag = false;
3859 reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); 3844 reset_packet.rejected_packet_number = kPacketNumber;
3860 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); 3845 reset_packet.nonce_proof = kNonceProof;
3861 3846
3862 // clang-format off 3847 // clang-format off
3863 unsigned char packet[] = { 3848 unsigned char packet[] = {
3864 // public flags (public reset, 8 byte ConnectionId) 3849 // public flags (public reset, 8 byte ConnectionId)
3865 0x0E, 3850 0x0E,
3866 // connection_id 3851 // connection_id
3867 0x10, 0x32, 0x54, 0x76, 3852 0x10, 0x32, 0x54, 0x76,
3868 0x98, 0xBA, 0xDC, 0xFE, 3853 0x98, 0xBA, 0xDC, 0xFE,
3869 // message tag (kPRST) 3854 // message tag (kPRST)
3870 'P', 'R', 'S', 'T', 3855 'P', 'R', 'S', 'T',
(...skipping 20 matching lines...) Expand all
3891 framer_.BuildPublicResetPacket(reset_packet)); 3876 framer_.BuildPublicResetPacket(reset_packet));
3892 ASSERT_TRUE(data != nullptr); 3877 ASSERT_TRUE(data != nullptr);
3893 3878
3894 test::CompareCharArraysWithHexError("constructed packet", 3879 test::CompareCharArraysWithHexError("constructed packet",
3895 data->data(), data->length(), 3880 data->data(), data->length(),
3896 AsChars(packet), arraysize(packet)); 3881 AsChars(packet), arraysize(packet));
3897 } 3882 }
3898 3883
3899 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { 3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
3900 QuicPublicResetPacket reset_packet; 3885 QuicPublicResetPacket reset_packet;
3901 reset_packet.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3886 reset_packet.public_header.connection_id = kConnectionId;
3902 reset_packet.public_header.reset_flag = true; 3887 reset_packet.public_header.reset_flag = true;
3903 reset_packet.public_header.version_flag = false; 3888 reset_packet.public_header.version_flag = false;
3904 reset_packet.rejected_packet_number = UINT64_C(0x123456789ABC); 3889 reset_packet.rejected_packet_number = kPacketNumber;
3905 reset_packet.nonce_proof = UINT64_C(0xABCDEF0123456789); 3890 reset_packet.nonce_proof = kNonceProof;
3906 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); 3891 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234);
3907 3892
3908 // clang-format off 3893 // clang-format off
3909 unsigned char packet[] = { 3894 unsigned char packet[] = {
3910 // public flags (public reset, 8 byte ConnectionId) 3895 // public flags (public reset, 8 byte ConnectionId)
3911 0x0E, 3896 0x0E,
3912 // connection_id 3897 // connection_id
3913 0x10, 0x32, 0x54, 0x76, 3898 0x10, 0x32, 0x54, 0x76,
3914 0x98, 0xBA, 0xDC, 0xFE, 3899 0x98, 0xBA, 0xDC, 0xFE,
3915 // message tag (kPRST) 3900 // message tag (kPRST)
(...skipping 29 matching lines...) Expand all
3945 framer_.BuildPublicResetPacket(reset_packet)); 3930 framer_.BuildPublicResetPacket(reset_packet));
3946 ASSERT_TRUE(data != nullptr); 3931 ASSERT_TRUE(data != nullptr);
3947 3932
3948 test::CompareCharArraysWithHexError("constructed packet", 3933 test::CompareCharArraysWithHexError("constructed packet",
3949 data->data(), data->length(), 3934 data->data(), data->length(),
3950 AsChars(packet), arraysize(packet)); 3935 AsChars(packet), arraysize(packet));
3951 } 3936 }
3952 3937
3953 TEST_P(QuicFramerTest, BuildFecPacket) { 3938 TEST_P(QuicFramerTest, BuildFecPacket) {
3954 QuicPacketHeader header; 3939 QuicPacketHeader header;
3955 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 3940 header.public_header.connection_id = kConnectionId;
3956 header.public_header.reset_flag = false; 3941 header.public_header.reset_flag = false;
3957 header.public_header.version_flag = false; 3942 header.public_header.version_flag = false;
3958 header.fec_flag = true; 3943 header.fec_flag = true;
3959 header.entropy_flag = true; 3944 header.entropy_flag = true;
3960 header.packet_number = (UINT64_C(0x123456789ABC)); 3945 header.packet_number = kPacketNumber;
3961 header.is_in_fec_group = IN_FEC_GROUP; 3946 header.is_in_fec_group = IN_FEC_GROUP;
3962 header.fec_group = UINT64_C(0x123456789ABB); 3947 header.fec_group = kPacketNumber - 1;
3963 3948
3964 string redundancy = "abcdefghijklmnop"; 3949 string redundancy = "abcdefghijklmnop";
3965 3950
3966 // clang-format off 3951 // clang-format off
3967 unsigned char packet[] = { 3952 unsigned char packet[] = {
3968 // public flags (8 byte connection_id) 3953 // public flags (8 byte connection_id)
3969 0x3C, 3954 0x3C,
3970 // connection_id 3955 // connection_id
3971 0x10, 0x32, 0x54, 0x76, 3956 0x10, 0x32, 0x54, 0x76,
3972 0x98, 0xBA, 0xDC, 0xFE, 3957 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 15 matching lines...) Expand all
3988 3973
3989 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); 3974 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy));
3990 ASSERT_TRUE(data != nullptr); 3975 ASSERT_TRUE(data != nullptr);
3991 3976
3992 test::CompareCharArraysWithHexError("constructed packet", 3977 test::CompareCharArraysWithHexError("constructed packet",
3993 data->data(), data->length(), 3978 data->data(), data->length(),
3994 AsChars(packet), arraysize(packet)); 3979 AsChars(packet), arraysize(packet));
3995 } 3980 }
3996 3981
3997 TEST_P(QuicFramerTest, EncryptPacket) { 3982 TEST_P(QuicFramerTest, EncryptPacket) {
3998 QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); 3983 QuicPacketNumber packet_number = kPacketNumber;
3999 // clang-format off 3984 // clang-format off
4000 unsigned char packet[] = { 3985 unsigned char packet[] = {
4001 // public flags (8 byte connection_id) 3986 // public flags (8 byte connection_id)
4002 0x3C, 3987 0x3C,
4003 // connection_id 3988 // connection_id
4004 0x10, 0x32, 0x54, 0x76, 3989 0x10, 0x32, 0x54, 0x76,
4005 0x98, 0xBA, 0xDC, 0xFE, 3990 0x98, 0xBA, 0xDC, 0xFE,
4006 // packet number 3991 // packet number
4007 0xBC, 0x9A, 0x78, 0x56, 3992 0xBC, 0x9A, 0x78, 0x56,
4008 0x34, 0x12, 3993 0x34, 0x12,
(...skipping 15 matching lines...) Expand all
4024 !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER)); 4009 !kIncludeVersion, PACKET_6BYTE_PACKET_NUMBER));
4025 char buffer[kMaxPacketSize]; 4010 char buffer[kMaxPacketSize];
4026 size_t encrypted_length = framer_.EncryptPayload( 4011 size_t encrypted_length = framer_.EncryptPayload(
4027 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); 4012 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize);
4028 4013
4029 ASSERT_NE(0u, encrypted_length); 4014 ASSERT_NE(0u, encrypted_length);
4030 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); 4015 EXPECT_TRUE(CheckEncryption(packet_number, raw.get()));
4031 } 4016 }
4032 4017
4033 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { 4018 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
4034 QuicPacketNumber packet_number = UINT64_C(0x123456789ABC); 4019 QuicPacketNumber packet_number = kPacketNumber;
4035 // clang-format off 4020 // clang-format off
4036 unsigned char packet[] = { 4021 unsigned char packet[] = {
4037 // public flags (version, 8 byte connection_id) 4022 // public flags (version, 8 byte connection_id)
4038 0x3D, 4023 0x3D,
4039 // connection_id 4024 // connection_id
4040 0x10, 0x32, 0x54, 0x76, 4025 0x10, 0x32, 0x54, 0x76,
4041 0x98, 0xBA, 0xDC, 0xFE, 4026 0x98, 0xBA, 0xDC, 0xFE,
4042 // version tag 4027 // version tag
4043 'Q', '.', '1', '0', 4028 'Q', '.', '1', '0',
4044 // packet number 4029 // packet number
(...skipping 18 matching lines...) Expand all
4063 char buffer[kMaxPacketSize]; 4048 char buffer[kMaxPacketSize];
4064 size_t encrypted_length = framer_.EncryptPayload( 4049 size_t encrypted_length = framer_.EncryptPayload(
4065 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); 4050 ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize);
4066 4051
4067 ASSERT_NE(0u, encrypted_length); 4052 ASSERT_NE(0u, encrypted_length);
4068 EXPECT_TRUE(CheckEncryption(packet_number, raw.get())); 4053 EXPECT_TRUE(CheckEncryption(packet_number, raw.get()));
4069 } 4054 }
4070 4055
4071 TEST_P(QuicFramerTest, AckTruncationLargePacket) { 4056 TEST_P(QuicFramerTest, AckTruncationLargePacket) {
4072 QuicPacketHeader header; 4057 QuicPacketHeader header;
4073 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 4058 header.public_header.connection_id = kConnectionId;
4074 header.public_header.reset_flag = false; 4059 header.public_header.reset_flag = false;
4075 header.public_header.version_flag = false; 4060 header.public_header.version_flag = false;
4076 header.fec_flag = false; 4061 header.fec_flag = false;
4077 header.entropy_flag = false; 4062 header.entropy_flag = false;
4078 header.packet_number = UINT64_C(0x123456789ABC); 4063 header.packet_number = kPacketNumber;
4079 header.fec_group = 0; 4064 header.fec_group = 0;
4080 4065
4081 // Create a packet with just the ack. 4066 // Create a packet with just the ack.
4082 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4067 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4083 QuicFrame frame; 4068 QuicFrame frame;
4084 frame.type = ACK_FRAME; 4069 frame.type = ACK_FRAME;
4085 frame.ack_frame = &ack_frame; 4070 frame.ack_frame = &ack_frame;
4086 QuicFrames frames; 4071 QuicFrames frames;
4087 frames.push_back(frame); 4072 frames.push_back(frame);
4088 4073
(...skipping 12 matching lines...) Expand all
4101 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4086 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4102 EXPECT_TRUE(processed_ack_frame.is_truncated); 4087 EXPECT_TRUE(processed_ack_frame.is_truncated);
4103 EXPECT_EQ(510u, processed_ack_frame.largest_observed); 4088 EXPECT_EQ(510u, processed_ack_frame.largest_observed);
4104 ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow()); 4089 ASSERT_EQ(255u, processed_ack_frame.missing_packets.NumPacketsSlow());
4105 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); 4090 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min());
4106 EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max()); 4091 EXPECT_EQ(509u, processed_ack_frame.missing_packets.Max());
4107 } 4092 }
4108 4093
4109 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { 4094 TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
4110 QuicPacketHeader header; 4095 QuicPacketHeader header;
4111 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 4096 header.public_header.connection_id = kConnectionId;
4112 header.public_header.reset_flag = false; 4097 header.public_header.reset_flag = false;
4113 header.public_header.version_flag = false; 4098 header.public_header.version_flag = false;
4114 header.fec_flag = false; 4099 header.fec_flag = false;
4115 header.entropy_flag = false; 4100 header.entropy_flag = false;
4116 header.packet_number = UINT64_C(0x123456789ABC); 4101 header.packet_number = kPacketNumber;
4117 header.fec_group = 0; 4102 header.fec_group = 0;
4118 4103
4119 // Create a packet with just the ack. 4104 // Create a packet with just the ack.
4120 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4105 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4121 QuicFrame frame; 4106 QuicFrame frame;
4122 frame.type = ACK_FRAME; 4107 frame.type = ACK_FRAME;
4123 frame.ack_frame = &ack_frame; 4108 frame.ack_frame = &ack_frame;
4124 QuicFrames frames; 4109 QuicFrames frames;
4125 frames.push_back(frame); 4110 frames.push_back(frame);
4126 4111
(...skipping 12 matching lines...) Expand all
4139 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4124 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4140 EXPECT_TRUE(processed_ack_frame.is_truncated); 4125 EXPECT_TRUE(processed_ack_frame.is_truncated);
4141 EXPECT_EQ(476u, processed_ack_frame.largest_observed); 4126 EXPECT_EQ(476u, processed_ack_frame.largest_observed);
4142 ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow()); 4127 ASSERT_EQ(238u, processed_ack_frame.missing_packets.NumPacketsSlow());
4143 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min()); 4128 EXPECT_EQ(1u, processed_ack_frame.missing_packets.Min());
4144 EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max()); 4129 EXPECT_EQ(475u, processed_ack_frame.missing_packets.Max());
4145 } 4130 }
4146 4131
4147 TEST_P(QuicFramerTest, CleanTruncation) { 4132 TEST_P(QuicFramerTest, CleanTruncation) {
4148 QuicPacketHeader header; 4133 QuicPacketHeader header;
4149 header.public_header.connection_id = UINT64_C(0xFEDCBA9876543210); 4134 header.public_header.connection_id = kConnectionId;
4150 header.public_header.reset_flag = false; 4135 header.public_header.reset_flag = false;
4151 header.public_header.version_flag = false; 4136 header.public_header.version_flag = false;
4152 header.fec_flag = false; 4137 header.fec_flag = false;
4153 header.entropy_flag = true; 4138 header.entropy_flag = true;
4154 header.packet_number = UINT64_C(0x123456789ABC); 4139 header.packet_number = kPacketNumber;
4155 header.fec_group = 0; 4140 header.fec_group = 0;
4156 4141
4157 QuicAckFrame ack_frame; 4142 QuicAckFrame ack_frame;
4158 ack_frame.largest_observed = 201; 4143 ack_frame.largest_observed = 201;
4159 ack_frame.missing_packets.Add(1, ack_frame.largest_observed); 4144 ack_frame.missing_packets.Add(1, ack_frame.largest_observed);
4160 4145
4161 // Create a packet with just the ack. 4146 // Create a packet with just the ack.
4162 QuicFrame frame; 4147 QuicFrame frame;
4163 frame.type = ACK_FRAME; 4148 frame.type = ACK_FRAME;
4164 frame.ack_frame = &ack_frame; 4149 frame.ack_frame = &ack_frame;
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
4401 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); 4386 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0);
4402 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); 4387 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0);
4403 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); 4388 EXPECT_CALL(visitor, OnPacketComplete()).Times(0);
4404 4389
4405 EXPECT_FALSE(framer_.ProcessPacket(*packet)); 4390 EXPECT_FALSE(framer_.ProcessPacket(*packet));
4406 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); 4391 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
4407 } 4392 }
4408 4393
4409 } // namespace test 4394 } // namespace test
4410 } // namespace net 4395 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_headers_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698