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

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

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

Powered by Google App Engine
This is Rietveld 408576698