| Index: net/quic/quic_framer_test.cc
|
| diff --git a/net/quic/quic_framer_test.cc b/net/quic/quic_framer_test.cc
|
| index b2dc6eb1202a3784d6e8c004bd7e437776d8f302..bb852a0a2d40025a0c7a80091d4240cbd380d7ec 100644
|
| --- a/net/quic/quic_framer_test.cc
|
| +++ b/net/quic/quic_framer_test.cc
|
| @@ -181,7 +181,6 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| ~TestQuicVisitor() override {
|
| STLDeleteElements(&stream_frames_);
|
| STLDeleteElements(&ack_frames_);
|
| - STLDeleteElements(&congestion_feedback_frames_);
|
| STLDeleteElements(&stop_waiting_frames_);
|
| STLDeleteElements(&ping_frames_);
|
| STLDeleteElements(&fec_data_);
|
| @@ -246,14 +245,6 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| return true;
|
| }
|
|
|
| - bool OnCongestionFeedbackFrame(
|
| - const QuicCongestionFeedbackFrame& frame) override {
|
| - ++frame_count_;
|
| - congestion_feedback_frames_.push_back(
|
| - new QuicCongestionFeedbackFrame(frame));
|
| - return true;
|
| - }
|
| -
|
| bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override {
|
| ++frame_count_;
|
| stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame));
|
| @@ -315,7 +306,6 @@ class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
|
| scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
|
| vector<QuicStreamFrame*> stream_frames_;
|
| vector<QuicAckFrame*> ack_frames_;
|
| - vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_;
|
| vector<QuicStopWaitingFrame*> stop_waiting_frames_;
|
| vector<QuicPingFrame*> ping_frames_;
|
| vector<QuicFecData*> fec_data_;
|
| @@ -594,16 +584,26 @@ TEST_P(QuicFramerTest, EmptyPacket) {
|
|
|
| TEST_P(QuicFramerTest, LargePacket) {
|
| unsigned char packet[kMaxPacketSize + 1] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10,
|
| + 0x32,
|
| + 0x54,
|
| + 0x76,
|
| + 0x98,
|
| + 0xBA,
|
| + 0xDC,
|
| + 0xFE,
|
| + // packet sequence number
|
| + 0xBC,
|
| + 0x9A,
|
| + 0x78,
|
| + 0x56,
|
| + 0x34,
|
| + 0x12,
|
| + // private flags
|
| + 0x00,
|
| };
|
|
|
| memset(packet + GetPacketHeaderSize(
|
| @@ -1654,145 +1654,44 @@ TEST_P(QuicFramerTest, StreamFrameInFecGroup) {
|
| CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
|
| }
|
|
|
| -TEST_P(QuicFramerTest, AckFramev22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x00,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| -
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| -
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| - ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - const QuicAckFrame& frame = *visitor_.ack_frames_[0];
|
| - EXPECT_EQ(0xBA, frame.entropy_hash);
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed);
|
| - ASSERT_EQ(1u, frame.missing_packets.size());
|
| - SequenceNumberSet::const_iterator missing_iter =
|
| - frame.missing_packets.begin();
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
|
| -
|
| - const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
|
| - const size_t kLargestObservedOffset = kReceivedEntropyOffset +
|
| - kQuicEntropyHashSize;
|
| - const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
|
| - PACKET_6BYTE_SEQUENCE_NUMBER;
|
| - const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
|
| - kQuicDeltaTimeLargestObservedSize;
|
| - const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
|
| - kNumberOfNackRangesSize;
|
| - const size_t kMissingPacketsRange = kMissingPacketsOffset +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - const size_t kRevivedPacketsLength = kMissingPacketsRange +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - // Now test framing boundaries.
|
| - const size_t ack_frame_size = kRevivedPacketsLength +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
|
| - string expected_error;
|
| - if (i < kLargestObservedOffset) {
|
| - expected_error = "Unable to read entropy hash for received packets.";
|
| - } else if (i < kMissingDeltaTimeOffset) {
|
| - expected_error = "Unable to read largest observed.";
|
| - } else if (i < kNumMissingPacketOffset) {
|
| - expected_error = "Unable to read delta time largest observed.";
|
| - } else if (i < kMissingPacketsOffset) {
|
| - expected_error = "Unable to read num missing packet ranges.";
|
| - } else if (i < kMissingPacketsRange) {
|
| - expected_error = "Unable to read missing sequence number delta.";
|
| - } else if (i < kRevivedPacketsLength) {
|
| - expected_error = "Unable to read missing sequence number range.";
|
| - } else {
|
| - expected_error = "Unable to read num revived packets.";
|
| - }
|
| - CheckProcessingFails(
|
| - packet,
|
| - i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| - PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| - expected_error, QUIC_INVALID_ACK_DATA);
|
| - }
|
| -}
|
| -
|
| -
|
| TEST_P(QuicFramerTest, AckFrameTwoTimestamp) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // Number of timestamps.
|
| - 0x02,
|
| - // Delta from largest observed.
|
| - 0x01,
|
| - // Delta time.
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - // Delta from largest observed.
|
| - 0x02,
|
| - // Delta time.
|
| - 0x10, 0x32,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // Number of timestamps.
|
| + 0x02,
|
| + // Delta from largest observed.
|
| + 0x01,
|
| + // Delta time.
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + // Delta from largest observed.
|
| + 0x02,
|
| + // Delta time.
|
| + 0x10, 0x32,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 0 more missing packets in range.
|
| + 0x00,
|
| + // Number of revived packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -1877,45 +1776,39 @@ TEST_P(QuicFramerTest, AckFrameTwoTimestamp) {
|
|
|
|
|
| TEST_P(QuicFramerTest, AckFrameOneTimestamp) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // Number of timestamps.
|
| - 0x01,
|
| - // Delta from largest observed.
|
| - 0x01,
|
| - // Delta time.
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // Number of timestamps.
|
| + 0x01,
|
| + // Delta from largest observed.
|
| + 0x01,
|
| + // Delta time.
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 0 more missing packets in range.
|
| + 0x00,
|
| + // Number of revived packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -1990,41 +1883,35 @@ TEST_P(QuicFramerTest, AckFrameOneTimestamp) {
|
|
|
|
|
| TEST_P(QuicFramerTest, AckFrame) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // Number of timestamps.
|
| - 0x00,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // Number of timestamps.
|
| + 0x00,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 0 more missing packets in range.
|
| + 0x00,
|
| + // Number of revived packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -2090,46 +1977,39 @@ TEST_P(QuicFramerTest, AckFrame) {
|
| }
|
|
|
| TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num received packets.
|
| - 0x00,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x01,
|
| - // Revived packet sequence number.
|
| - 0xBE, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Number of revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num received packets.
|
| + 0x00,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 0 more missing packets in range.
|
| + 0x00,
|
| + // Number of revived packets.
|
| + 0x01,
|
| + // Revived packet sequence number.
|
| + 0xBE, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Number of revived packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -2200,45 +2080,28 @@ TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
|
| }
|
| }
|
|
|
| -TEST_P(QuicFramerTest, AckFrameRevivedPacketsv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| +TEST_P(QuicFramerTest, AckFrameNoNacks) {
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packets
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // Number of revived packets.
|
| - 0x01,
|
| - // Revived packet sequence number.
|
| - 0xBE, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Number of revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x4C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // Number of received packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -2250,230 +2113,10 @@ TEST_P(QuicFramerTest, AckFrameRevivedPacketsv22) {
|
|
|
| EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - const QuicAckFrame& frame = *visitor_.ack_frames_[0];
|
| - EXPECT_EQ(0xBA, frame.entropy_hash);
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.largest_observed);
|
| - ASSERT_EQ(1u, frame.missing_packets.size());
|
| - SequenceNumberSet::const_iterator missing_iter =
|
| - frame.missing_packets.begin();
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter);
|
| -
|
| - const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
|
| - const size_t kLargestObservedOffset = kReceivedEntropyOffset +
|
| - kQuicEntropyHashSize;
|
| - const size_t kMissingDeltaTimeOffset = kLargestObservedOffset +
|
| - PACKET_6BYTE_SEQUENCE_NUMBER;
|
| - const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset +
|
| - kQuicDeltaTimeLargestObservedSize;
|
| - const size_t kMissingPacketsOffset = kNumMissingPacketOffset +
|
| - kNumberOfNackRangesSize;
|
| - const size_t kMissingPacketsRange = kMissingPacketsOffset +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - const size_t kRevivedPacketsLength = kMissingPacketsRange +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - const size_t kRevivedPacketSequenceNumberLength = kRevivedPacketsLength +
|
| - PACKET_1BYTE_SEQUENCE_NUMBER;
|
| - // Now test framing boundaries.
|
| - const size_t ack_frame_size = kRevivedPacketSequenceNumberLength +
|
| - PACKET_6BYTE_SEQUENCE_NUMBER;
|
| - for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
|
| - string expected_error;
|
| - if (i < kReceivedEntropyOffset) {
|
| - expected_error = "Unable to read least unacked delta.";
|
| - } else if (i < kLargestObservedOffset) {
|
| - expected_error = "Unable to read entropy hash for received packets.";
|
| - } else if (i < kMissingDeltaTimeOffset) {
|
| - expected_error = "Unable to read largest observed.";
|
| - } else if (i < kNumMissingPacketOffset) {
|
| - expected_error = "Unable to read delta time largest observed.";
|
| - } else if (i < kMissingPacketsOffset) {
|
| - expected_error = "Unable to read num missing packet ranges.";
|
| - } else if (i < kMissingPacketsRange) {
|
| - expected_error = "Unable to read missing sequence number delta.";
|
| - } else if (i < kRevivedPacketsLength) {
|
| - expected_error = "Unable to read missing sequence number range.";
|
| - } else if (i < kRevivedPacketSequenceNumberLength) {
|
| - expected_error = "Unable to read num revived packets.";
|
| - } else {
|
| - expected_error = "Unable to read revived packet.";
|
| - }
|
| - CheckProcessingFails(
|
| - packet,
|
| - i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| - PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| - expected_error, QUIC_INVALID_ACK_DATA);
|
| - }
|
| -}
|
| -
|
| -TEST_P(QuicFramerTest, AckFrameNoNacksv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x4C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| -
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| -
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| - ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - QuicAckFrame* frame = visitor_.ack_frames_[0];
|
| - EXPECT_EQ(0xBA, frame->entropy_hash);
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
|
| - ASSERT_EQ(0u, frame->missing_packets.size());
|
| -
|
| - // Verify that the packet re-serializes identically.
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(frame));
|
| - scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
|
| - ASSERT_TRUE(data != nullptr);
|
| -
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| -TEST_P(QuicFramerTest, AckFrameNoNacks) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x4C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // Number of received packets.
|
| - 0x00,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| -
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| -
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| - ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - QuicAckFrame* frame = visitor_.ack_frames_[0];
|
| - EXPECT_EQ(0xBA, frame->entropy_hash);
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
|
| - ASSERT_EQ(0u, frame->missing_packets.size());
|
| -
|
| - // Verify that the packet re-serializes identically.
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(frame));
|
| - scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
|
| - ASSERT_TRUE(data != nullptr);
|
| -
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| -TEST_P(QuicFramerTest, AckFrame500Nacksv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges
|
| - 0x02,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 243 more missing packets in range.
|
| - // The ranges are listed in this order so the re-constructed packet matches.
|
| - 0xF3,
|
| - // No gap between ranges
|
| - 0x00,
|
| - // 255 more missing packets in range.
|
| - 0xFF,
|
| - // No revived packets.
|
| - 0x00,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| -
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| -
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| - ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - QuicAckFrame* frame = visitor_.ack_frames_[0];
|
| - EXPECT_EQ(0xBA, frame->entropy_hash);
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
|
| - EXPECT_EQ(0u, frame->revived_packets.size());
|
| - ASSERT_EQ(500u, frame->missing_packets.size());
|
| - SequenceNumberSet::const_iterator first_missing_iter =
|
| - frame->missing_packets.begin();
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABE) - 499, *first_missing_iter);
|
| - SequenceNumberSet::const_reverse_iterator last_missing_iter =
|
| - frame->missing_packets.rbegin();
|
| - EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *last_missing_iter);
|
| + QuicAckFrame* frame = visitor_.ack_frames_[0];
|
| + EXPECT_EQ(0xBA, frame->entropy_hash);
|
| + EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame->largest_observed);
|
| + ASSERT_EQ(0u, frame->missing_packets.size());
|
|
|
| // Verify that the packet re-serializes identically.
|
| QuicFrames frames;
|
| @@ -2481,52 +2124,47 @@ TEST_P(QuicFramerTest, AckFrame500Nacksv22) {
|
| scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packet),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, AckFrame500Nacks) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0xBA,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // No received packets.
|
| - 0x00,
|
| - // num missing packet ranges
|
| - 0x02,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 243 more missing packets in range.
|
| - // The ranges are listed in this order so the re-constructed packet matches.
|
| - 0xF3,
|
| - // No gap between ranges
|
| - 0x00,
|
| - // 255 more missing packets in range.
|
| - 0xFF,
|
| - // No revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0xBA,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // No received packets.
|
| + 0x00,
|
| + // num missing packet ranges
|
| + 0x02,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 243 more missing packets in range.
|
| + // The ranges are listed in this order so the re-constructed packet
|
| + // matches.
|
| + 0xF3,
|
| + // No gap between ranges
|
| + 0x00,
|
| + // 255 more missing packets in range.
|
| + 0xFF,
|
| + // No revived packets.
|
| + 0x00,
|
| };
|
|
|
| QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| @@ -2561,82 +2199,6 @@ TEST_P(QuicFramerTest, AckFrame500Nacks) {
|
| AsChars(packet), arraysize(packet));
|
| }
|
|
|
| -TEST_P(QuicFramerTest, CongestionFeedbackFrameTCP) {
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags
|
| - 0x00,
|
| -
|
| - // frame type (congestion feedback frame)
|
| - 0x20,
|
| - // congestion feedback type (tcp)
|
| - 0x00,
|
| - // ack_frame.feedback.tcp.receive_window
|
| - 0x03, 0x04,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| -
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| -
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| - ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
|
| - const QuicCongestionFeedbackFrame& frame =
|
| - *visitor_.congestion_feedback_frames_[0];
|
| - ASSERT_EQ(kTCP, frame.type);
|
| - EXPECT_EQ(0x4030u, frame.tcp.receive_window);
|
| -
|
| - // Now test framing boundaries.
|
| - for (size_t i = kQuicFrameTypeSize; i < 4; ++i) {
|
| - string expected_error;
|
| - if (i < 2) {
|
| - expected_error = "Unable to read congestion feedback type.";
|
| - } else if (i < 4) {
|
| - expected_error = "Unable to read receive window.";
|
| - }
|
| - CheckProcessingFails(
|
| - packet,
|
| - i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| - PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
|
| - expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
|
| - }
|
| -}
|
| -
|
| -TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags
|
| - 0x00,
|
| -
|
| - // frame type (congestion feedback frame)
|
| - 0x20,
|
| - // congestion feedback type (invalid)
|
| - 0x03,
|
| - };
|
| -
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| - EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| - EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
|
| - EXPECT_EQ(QUIC_INVALID_CONGESTION_FEEDBACK_DATA, framer_.error());
|
| -}
|
| -
|
| TEST_P(QuicFramerTest, StopWaitingFrame) {
|
| unsigned char packet[] = {
|
| // public flags (8 byte connection_id)
|
| @@ -3500,31 +3062,26 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) {
|
| QuicFrames frames;
|
| frames.push_back(QuicFrame(&stream_frame));
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy, is_in_fec_group)
|
| - 0x03,
|
| - // FEC group
|
| - 0x00,
|
| - // frame type (stream frame with fin and data length field)
|
| - 0xFF,
|
| - // stream id
|
| - 0x04, 0x03, 0x02, 0x01,
|
| - // offset
|
| - 0x54, 0x76, 0x10, 0x32,
|
| - 0xDC, 0xFE, 0x98, 0xBA,
|
| - // data length (since packet is in an FEC group)
|
| - 0x0C, 0x00,
|
| - // data
|
| - 'h', 'e', 'l', 'l',
|
| - 'o', ' ', 'w', 'o',
|
| - 'r', 'l', 'd', '!',
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy, is_in_fec_group)
|
| + 0x03,
|
| + // FEC group
|
| + 0x00,
|
| + // frame type (stream frame with fin and data length field)
|
| + 0xFF,
|
| + // stream id
|
| + 0x04, 0x03, 0x02, 0x01,
|
| + // offset
|
| + 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA,
|
| + // data length (since packet is in an FEC group)
|
| + 0x0C, 0x00,
|
| + // data
|
| + 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
|
| };
|
|
|
| scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| @@ -3555,30 +3112,61 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
|
| frames.push_back(QuicFrame(&stream_frame));
|
|
|
| unsigned char packet[] = {
|
| - // public flags (version, 8 byte connection_id)
|
| - 0x3D,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // version tag
|
| - 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (stream frame with fin and no length)
|
| - 0xDF,
|
| - // stream id
|
| - 0x04, 0x03, 0x02, 0x01,
|
| - // offset
|
| - 0x54, 0x76, 0x10, 0x32,
|
| - 0xDC, 0xFE, 0x98, 0xBA,
|
| - // data
|
| - 'h', 'e', 'l', 'l',
|
| - 'o', ' ', 'w', 'o',
|
| - 'r', 'l', 'd', '!',
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x3D,
|
| + // connection_id
|
| + 0x10,
|
| + 0x32,
|
| + 0x54,
|
| + 0x76,
|
| + 0x98,
|
| + 0xBA,
|
| + 0xDC,
|
| + 0xFE,
|
| + // version tag
|
| + 'Q',
|
| + '0',
|
| + GetQuicVersionDigitTens(),
|
| + GetQuicVersionDigitOnes(),
|
| + // packet sequence number
|
| + 0xBC,
|
| + 0x9A,
|
| + 0x78,
|
| + 0x56,
|
| + 0x34,
|
| + 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (stream frame with fin and no length)
|
| + 0xDF,
|
| + // stream id
|
| + 0x04,
|
| + 0x03,
|
| + 0x02,
|
| + 0x01,
|
| + // offset
|
| + 0x54,
|
| + 0x76,
|
| + 0x10,
|
| + 0x32,
|
| + 0xDC,
|
| + 0xFE,
|
| + 0x98,
|
| + 0xBA,
|
| + // data
|
| + 'h',
|
| + 'e',
|
| + 'l',
|
| + 'l',
|
| + 'o',
|
| + ' ',
|
| + 'w',
|
| + 'o',
|
| + 'r',
|
| + 'l',
|
| + 'd',
|
| + '!',
|
| };
|
|
|
| QuicFramerPeer::SetIsServer(&framer_, false);
|
| @@ -3597,13 +3185,22 @@ TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
|
| header.version_flag = true;
|
|
|
| unsigned char packet[] = {
|
| - // public flags (version, 8 byte connection_id)
|
| - 0x0D,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // version tag
|
| - 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x0D,
|
| + // connection_id
|
| + 0x10,
|
| + 0x32,
|
| + 0x54,
|
| + 0x76,
|
| + 0x98,
|
| + 0xBA,
|
| + 0xDC,
|
| + 0xFE,
|
| + // version tag
|
| + 'Q',
|
| + '0',
|
| + GetQuicVersionDigitTens(),
|
| + GetQuicVersionDigitOnes(),
|
| };
|
|
|
| QuicVersionVector versions;
|
| @@ -3611,78 +3208,12 @@ TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
|
| scoped_ptr<QuicEncryptedPacket> data(
|
| framer_.BuildVersionNegotiationPacket(header, versions));
|
|
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| -TEST_P(QuicFramerTest, BuildAckFramePacketv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = true;
|
| - header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
|
| - header.fec_group = 0;
|
| -
|
| - QuicAckFrame ack_frame;
|
| - ack_frame.entropy_hash = 0x43;
|
| - ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF);
|
| - ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| - ack_frame.missing_packets.insert(
|
| - GG_UINT64_C(0x770123456789ABE));
|
| -
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(&ack_frame));
|
| -
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0x43,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // 0 revived packets.
|
| - 0x00,
|
| - };
|
| -
|
| - scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| - ASSERT_TRUE(data != nullptr);
|
| -
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packet),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildAckFramePacket) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| header.public_header.reset_flag = false;
|
| @@ -3696,44 +3227,40 @@ TEST_P(QuicFramerTest, BuildAckFramePacket) {
|
| ack_frame.entropy_hash = 0x43;
|
| ack_frame.largest_observed = GG_UINT64_C(0x770123456789ABF);
|
| ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| - ack_frame.missing_packets.insert(
|
| - GG_UINT64_C(0x770123456789ABE));
|
| + ack_frame.missing_packets.insert(GG_UINT64_C(0x770123456789ABE));
|
|
|
| QuicFrames frames;
|
| frames.push_back(QuicFrame(&ack_frame));
|
|
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| - 0x6C,
|
| - // entropy hash of all received packets.
|
| - 0x43,
|
| - // largest observed packet sequence number
|
| - 0xBF, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num received packets.
|
| - 0x00,
|
| - // num missing packet ranges
|
| - 0x01,
|
| - // missing packet delta
|
| - 0x01,
|
| - // 0 more missing packets in range.
|
| - 0x00,
|
| - // 0 revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
|
| + 0x6C,
|
| + // entropy hash of all received packets.
|
| + 0x43,
|
| + // largest observed packet sequence number
|
| + 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num received packets.
|
| + 0x00,
|
| + // num missing packet ranges
|
| + 0x01,
|
| + // missing packet delta
|
| + 0x01,
|
| + // 0 more missing packets in range.
|
| + 0x00,
|
| + // 0 revived packets.
|
| + 0x00,
|
| };
|
|
|
| scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| @@ -3747,125 +3274,7 @@ TEST_P(QuicFramerTest, BuildAckFramePacket) {
|
| // TODO(jri): Add test for tuncated packets in which the original ack frame had
|
| // revived packets. (In both the large and small packet cases below).
|
|
|
| -TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacketv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = true;
|
| - header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
|
| - header.fec_group = 0;
|
| -
|
| - QuicAckFrame ack_frame;
|
| - // This entropy hash is different from what shows up in the packet below,
|
| - // since entropy is recomputed by the framer on ack truncation (by
|
| - // TestEntropyCalculator for this test.)
|
| - ack_frame.entropy_hash = 0x43;
|
| - ack_frame.largest_observed = 2 * 300;
|
| - ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| - for (size_t i = 1; i < 2 * 300; i += 2) {
|
| - ack_frame.missing_packets.insert(i);
|
| - }
|
| -
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(&ack_frame));
|
| -
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| - 0x74,
|
| - // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| - // since ack is truncated.
|
| - 0x01,
|
| - // 2-byte largest observed packet sequence number.
|
| - // Expected to be 510 (0x1FE), since only 255 nack ranges can fit.
|
| - 0xFE, 0x01,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges (limited to 255 by size of this field).
|
| - 0xFF,
|
| - // {missing packet delta, further missing packets in range}
|
| - // 6 nack ranges x 42 + 3 nack ranges
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - // 0 revived packets.
|
| - 0x00,
|
| - };
|
| -
|
| - scoped_ptr<QuicPacket> data(
|
| - framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
|
| - ASSERT_TRUE(data != nullptr);
|
| -
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| header.public_header.reset_flag = false;
|
| @@ -3890,82 +3299,80 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
|
| frames.push_back(QuicFrame(&ack_frame));
|
|
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| - 0x74,
|
| - // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| - // since ack is truncated.
|
| - 0x01,
|
| - // 2-byte largest observed packet sequence number.
|
| - // Expected to be 510 (0x1FE), since only 255 nack ranges can fit.
|
| - 0xFE, 0x01,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges (limited to 255 by size of this field).
|
| - 0xFF,
|
| - // {missing packet delta, further missing packets in range}
|
| - // 6 nack ranges x 42 + 3 nack ranges
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| -
|
| - // 0 revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| + 0x74,
|
| + // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| + // since ack is truncated.
|
| + 0x01,
|
| + // 2-byte largest observed packet sequence number.
|
| + // Expected to be 510 (0x1FE), since only 255 nack ranges can fit.
|
| + 0xFE, 0x01,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num missing packet ranges (limited to 255 by size of this field).
|
| + 0xFF,
|
| + // {missing packet delta, further missing packets in range}
|
| + // 6 nack ranges x 42 + 3 nack ranges
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| +
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| +
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| +
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| +
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| +
|
| + // 0 revived packets.
|
| + 0x00,
|
| };
|
|
|
| scoped_ptr<QuicPacket> data(
|
| @@ -3977,80 +3384,7 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
|
| AsChars(packet), arraysize(packet));
|
| }
|
|
|
| -
|
| -TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacketv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = true;
|
| - header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
|
| - header.fec_group = 0;
|
| -
|
| - QuicAckFrame ack_frame;
|
| - // This entropy hash is different from what shows up in the packet below,
|
| - // since entropy is recomputed by the framer on ack truncation (by
|
| - // TestEntropyCalculator for this test.)
|
| - ack_frame.entropy_hash = 0x43;
|
| - ack_frame.largest_observed = 2 * 300;
|
| - ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero();
|
| - for (size_t i = 1; i < 2 * 300; i += 2) {
|
| - ack_frame.missing_packets.insert(i);
|
| - }
|
| -
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(&ack_frame));
|
| -
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| - 0x74,
|
| - // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| - // since ack is truncated.
|
| - 0x01,
|
| - // 2-byte largest observed packet sequence number.
|
| - // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
|
| - 0x0C, 0x00,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges (limited to 6 by packet size of 37).
|
| - 0x06,
|
| - // {missing packet delta, further missing packets in range}
|
| - // 6 nack ranges
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - // 0 revived packets.
|
| - 0x00,
|
| - };
|
| -
|
| - scoped_ptr<QuicPacket> data(
|
| - framer_.BuildDataPacket(header, frames, 37u).packet);
|
| - ASSERT_TRUE(data != nullptr);
|
| - // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
|
| - EXPECT_EQ(36u, data->length());
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| header.public_header.reset_flag = false;
|
| @@ -4075,35 +3409,33 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
|
| frames.push_back(QuicFrame(&ack_frame));
|
|
|
| unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xA8, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags (entropy)
|
| - 0x01,
|
| -
|
| - // frame type (ack frame)
|
| - // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| - 0x74,
|
| - // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| - // since ack is truncated.
|
| - 0x01,
|
| - // 2-byte largest observed packet sequence number.
|
| - // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
|
| - 0x0C, 0x00,
|
| - // Zero delta time.
|
| - 0x0, 0x0,
|
| - // num missing packet ranges (limited to 6 by packet size of 37).
|
| - 0x06,
|
| - // {missing packet delta, further missing packets in range}
|
| - // 6 nack ranges
|
| - 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| - // 0 revived packets.
|
| - 0x00,
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet sequence number
|
| + 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| + // private flags (entropy)
|
| + 0x01,
|
| +
|
| + // frame type (ack frame)
|
| + // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
|
| + 0x74,
|
| + // entropy hash of all received packets, set to 1 by TestEntropyCalculator
|
| + // since ack is truncated.
|
| + 0x01,
|
| + // 2-byte largest observed packet sequence number.
|
| + // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
|
| + 0x0C, 0x00,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num missing packet ranges (limited to 6 by packet size of 37).
|
| + 0x06,
|
| + // {missing packet delta, further missing packets in range}
|
| + // 6 nack ranges
|
| + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
|
| + // 0 revived packets.
|
| + 0x00,
|
| };
|
|
|
| scoped_ptr<QuicPacket> data(
|
| @@ -4116,51 +3448,6 @@ TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
|
| AsChars(packet), arraysize(packet));
|
| }
|
|
|
| -TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTCP) {
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = false;
|
| - header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| - header.fec_group = 0;
|
| -
|
| - QuicCongestionFeedbackFrame congestion_feedback_frame;
|
| - congestion_feedback_frame.type = kTCP;
|
| - congestion_feedback_frame.tcp.receive_window = 0x4030;
|
| -
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(&congestion_feedback_frame));
|
| -
|
| - unsigned char packet[] = {
|
| - // public flags (8 byte connection_id)
|
| - 0x3C,
|
| - // connection_id
|
| - 0x10, 0x32, 0x54, 0x76,
|
| - 0x98, 0xBA, 0xDC, 0xFE,
|
| - // packet sequence number
|
| - 0xBC, 0x9A, 0x78, 0x56,
|
| - 0x34, 0x12,
|
| - // private flags
|
| - 0x00,
|
| -
|
| - // frame type (congestion feedback frame)
|
| - 0x20,
|
| - // congestion feedback type (TCP)
|
| - 0x00,
|
| - // TCP receive window
|
| - 0x03, 0x04,
|
| - };
|
| -
|
| - scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| - ASSERT_TRUE(data != nullptr);
|
| -
|
| - test::CompareCharArraysWithHexError("constructed packet",
|
| - data->data(), data->length(),
|
| - AsChars(packet), arraysize(packet));
|
| -}
|
| -
|
| TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| @@ -4207,30 +3494,6 @@ TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
|
| AsChars(packet), arraysize(packet));
|
| }
|
|
|
| -TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketInvalidFeedback) {
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = false;
|
| - header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| - header.fec_group = 0;
|
| -
|
| - QuicCongestionFeedbackFrame congestion_feedback_frame;
|
| - congestion_feedback_frame.type =
|
| - static_cast<CongestionFeedbackType>(kTCP + 1);
|
| -
|
| - QuicFrames frames;
|
| - frames.push_back(QuicFrame(&congestion_feedback_frame));
|
| -
|
| - scoped_ptr<QuicPacket> data;
|
| - EXPECT_DFATAL(
|
| - data.reset(BuildDataPacket(header, frames)),
|
| - "AppendCongestionFeedbackFrame failed");
|
| - ASSERT_TRUE(data == nullptr);
|
| -}
|
| -
|
| TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| @@ -4768,54 +4031,7 @@ TEST_P(QuicFramerTest, AckTruncationLargePacket) {
|
| EXPECT_EQ(509u, *last_missing_iter);
|
| }
|
|
|
| -TEST_P(QuicFramerTest, AckTruncationSmallPacketv22) {
|
| - if (version_ > QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| - QuicPacketHeader header;
|
| - header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| - header.public_header.reset_flag = false;
|
| - header.public_header.version_flag = false;
|
| - header.fec_flag = false;
|
| - header.entropy_flag = false;
|
| - header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
|
| - header.fec_group = 0;
|
| -
|
| - // Create a packet with just the ack.
|
| - QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
|
| - QuicFrame frame;
|
| - frame.type = ACK_FRAME;
|
| - frame.ack_frame = &ack_frame;
|
| - QuicFrames frames;
|
| - frames.push_back(frame);
|
| -
|
| - // Build an ack packet with truncation due to limit in number of nack ranges.
|
| - scoped_ptr<QuicPacket> raw_ack_packet(
|
| - framer_.BuildDataPacket(header, frames, 500).packet);
|
| - ASSERT_TRUE(raw_ack_packet != nullptr);
|
| - scoped_ptr<QuicEncryptedPacket> ack_packet(
|
| - framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
|
| - *raw_ack_packet));
|
| - // Now make sure we can turn our ack packet back into an ack frame.
|
| - ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
|
| - ASSERT_EQ(1u, visitor_.ack_frames_.size());
|
| - QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
|
| - EXPECT_TRUE(processed_ack_frame.is_truncated);
|
| - EXPECT_EQ(476u, processed_ack_frame.largest_observed);
|
| - ASSERT_EQ(238u, processed_ack_frame.missing_packets.size());
|
| - SequenceNumberSet::const_iterator missing_iter =
|
| - processed_ack_frame.missing_packets.begin();
|
| - EXPECT_EQ(1u, *missing_iter);
|
| - SequenceNumberSet::const_reverse_iterator last_missing_iter =
|
| - processed_ack_frame.missing_packets.rbegin();
|
| - EXPECT_EQ(475u, *last_missing_iter);
|
| -}
|
| -
|
| -
|
| TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
|
| - if (version_ <= QUIC_VERSION_22) {
|
| - return;
|
| - }
|
| QuicPacketHeader header;
|
| header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
|
| header.public_header.reset_flag = false;
|
|
|