| Index: net/quic/core/quic_framer_test.cc
|
| diff --git a/net/quic/core/quic_framer_test.cc b/net/quic/core/quic_framer_test.cc
|
| index ca36bc7574baa9133db08ae90b9d26fc223ee3f4..b6a6fe72c3b85497ff9fdd1024b9cdfa4323e897 100644
|
| --- a/net/quic/core/quic_framer_test.cc
|
| +++ b/net/quic/core/quic_framer_test.cc
|
| @@ -31,6 +31,7 @@ using testing::_;
|
|
|
| namespace net {
|
| namespace test {
|
| +namespace {
|
|
|
| const QuicPacketNumber kEpoch = UINT64_C(1) << 48;
|
| const QuicPacketNumber kMask = kEpoch - 1;
|
| @@ -446,6 +447,26 @@ class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
|
| test::TestQuicVisitor visitor_;
|
| };
|
|
|
| +// Helper function to get index of packets in hex format.
|
| +// For each packet in hex format, integers and floating numbers are in big
|
| +// endian for v38 and up, and connection ID is in big endian according to
|
| +// perspective and flags.
|
| +// There are 4 combinations:
|
| +// 0 : little endian connection ID, little endian integers/floating numbers.
|
| +// 1 : big endian connection ID, little endian integers/floating numbers.
|
| +// 2 : little endian connection ID, big endian integers/floating numbers.
|
| +// 3 : big endian connection ID, big endian integers/floating numbers.
|
| +size_t GetPacketIndex(QuicVersion version, Perspective perspective) {
|
| + size_t index = 0;
|
| + if (QuicUtils::IsConnectionIdWireFormatBigEndian(perspective)) {
|
| + index = 1;
|
| + }
|
| + if (version > QUIC_VERSION_38) {
|
| + index += 2;
|
| + }
|
| + return index;
|
| +}
|
| +
|
| // Run all framer tests with all supported versions of QUIC.
|
| INSTANTIATE_TEST_CASE_P(QuicFramerTests,
|
| QuicFramerTest,
|
| @@ -627,17 +648,31 @@ TEST_P(QuicFramerTest, PacketHeader) {
|
| // packet number
|
| 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -661,11 +696,8 @@ TEST_P(QuicFramerTest, PacketHeader) {
|
| } else {
|
| expected_error = "Unable to read packet number.";
|
| }
|
| - CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + CheckProcessingFails(packets[index], i, expected_error,
|
| + QUIC_INVALID_PACKET_HEADER);
|
| }
|
| }
|
|
|
| @@ -681,9 +713,20 @@ TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) {
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (0 byte connection_id)
|
| + 0x30,
|
| + // connection_id
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
|
| + QuicEncryptedPacket encrypted(
|
| + AsChars(framer_.version() > QUIC_VERSION_38 ? packet39 : packet),
|
| + arraysize(packet), false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -708,7 +751,9 @@ TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) {
|
| } else {
|
| expected_error = "Unable to read packet number.";
|
| }
|
| - CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + CheckProcessingFails(
|
| + framer_.version() > QUIC_VERSION_38 ? packet39 : packet, i,
|
| + expected_error, QUIC_INVALID_PACKET_HEADER);
|
| }
|
| }
|
|
|
| @@ -735,17 +780,35 @@ TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) {
|
| // packet number
|
| 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (version)
|
| + 0x39,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (version)
|
| + 0x39,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -772,11 +835,8 @@ TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) {
|
| } else {
|
| expected_error = "Unable to read packet number.";
|
| }
|
| - CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + CheckProcessingFails(packets[index], i, expected_error,
|
| + QUIC_INVALID_PACKET_HEADER);
|
| }
|
| }
|
|
|
| @@ -801,17 +861,31 @@ TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) {
|
| // packet number
|
| 0xBC, 0x9A, 0x78, 0x56,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id and 4 byte packet number)
|
| + 0x28,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id and 4 byte packet number)
|
| + 0x28,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x56, 0x78, 0x9A, 0xBC,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -835,11 +909,8 @@ TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) {
|
| } else {
|
| expected_error = "Unable to read packet number.";
|
| }
|
| - CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + CheckProcessingFails(packets[index], i, expected_error,
|
| + QUIC_INVALID_PACKET_HEADER);
|
| }
|
| }
|
|
|
| @@ -864,17 +935,31 @@ TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) {
|
| // packet number
|
| 0xBC, 0x9A,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id and 2 byte packet number)
|
| + 0x18,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x9A, 0xBC,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id and 2 byte packet number)
|
| + 0x18,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x9A, 0xBC,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -900,11 +985,8 @@ TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) {
|
| } else {
|
| expected_error = "Unable to read packet number.";
|
| }
|
| - CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - i, expected_error, QUIC_INVALID_PACKET_HEADER);
|
| + CheckProcessingFails(packets[index], i, expected_error,
|
| + QUIC_INVALID_PACKET_HEADER);
|
| }
|
| }
|
|
|
| @@ -1070,17 +1152,50 @@ TEST_P(QuicFramerTest, PacketWithDiversificationNonce) {
|
| 0x00,
|
| 0x00, 0x00, 0x00, 0x00
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags: includes nonce flag
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x3C : 0x7C),
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // nonce
|
| + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
| + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
| + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
| + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (padding)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags: includes nonce flag
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x3C : 0x7C),
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // nonce
|
| + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
| + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
| + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
| + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (padding)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| // clang-format on
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| ASSERT_TRUE(visitor_.public_header_->nonce != nullptr);
|
| @@ -1127,16 +1242,47 @@ TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
|
| 0x00,
|
| 0x00, 0x00, 0x00, 0x00
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id, version flag and an unknown flag)
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x39 : 0x79),
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', '0', '0',
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id, version flag and an unknown flag)
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x39 : 0x79),
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // version tag
|
| + 'Q', '0', '0', '0',
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| // clang-format on
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| ASSERT_TRUE(visitor_.header_.get());
|
| @@ -1296,30 +1442,83 @@ TEST_P(QuicFramerTest, NewPaddingFrame) {
|
| // paddings
|
| 0x00, 0x00,
|
| };
|
| - // clang-format on
|
|
|
| - if (framer_.version() <= QUIC_VERSION_37) {
|
| - return;
|
| - }
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : 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,
|
| - !kIncludeDiversificationNonce));
|
| + // paddings
|
| + 0x00, 0x00,
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + // paddings
|
| + 0x00, 0x00,
|
| + };
|
|
|
| - ASSERT_EQ(1u, visitor_.stream_frames_.size());
|
| - EXPECT_EQ(0u, visitor_.ack_frames_.size());
|
| - EXPECT_EQ(2u, visitor_.padding_frames_.size());
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // paddings
|
| + 0x00, 0x00,
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + // paddings
|
| + 0x00, 0x00,
|
| + };
|
| + // clang-format on
|
| +
|
| + if (framer_.version() <= QUIC_VERSION_37) {
|
| + return;
|
| + }
|
| +
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), 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,
|
| + !kIncludeDiversificationNonce));
|
| +
|
| + ASSERT_EQ(1u, visitor_.stream_frames_.size());
|
| + EXPECT_EQ(0u, visitor_.ack_frames_.size());
|
| + EXPECT_EQ(2u, visitor_.padding_frames_.size());
|
| EXPECT_EQ(2, visitor_.padding_frames_[0]->num_padding_bytes);
|
| EXPECT_EQ(2, visitor_.padding_frames_[1]->num_padding_bytes);
|
| EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id);
|
| @@ -1378,17 +1577,61 @@ TEST_P(QuicFramerTest, StreamFrame) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -1404,11 +1647,8 @@ TEST_P(QuicFramerTest, StreamFrame) {
|
| CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get());
|
|
|
| // Now test framing boundaries.
|
| - CheckStreamFrameBoundaries(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - kQuicMaxStreamIdSize, !kIncludeVersion);
|
| + CheckStreamFrameBoundaries(packets[index], kQuicMaxStreamIdSize,
|
| + !kIncludeVersion);
|
| }
|
|
|
| TEST_P(QuicFramerTest, MissingDiversificationNonce) {
|
| @@ -1467,17 +1707,62 @@ TEST_P(QuicFramerTest, MissingDiversificationNonce) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_FALSE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_DECRYPTION_FAILURE, framer_.error());
|
| }
|
| @@ -1532,17 +1817,62 @@ TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFE,
|
| + // stream id
|
| + 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFE,
|
| + // stream id
|
| + 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -1560,11 +1890,7 @@ TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) {
|
|
|
| // Now test framing boundaries.
|
| const size_t stream_id_size = 3;
|
| - CheckStreamFrameBoundaries(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - stream_id_size, !kIncludeVersion);
|
| + CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
|
| }
|
|
|
| TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
|
| @@ -1617,17 +1943,62 @@ TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFD,
|
| + // stream id
|
| + 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFD,
|
| + // stream id
|
| + 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -1645,11 +2016,7 @@ TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
|
|
|
| // Now test framing boundaries.
|
| const size_t stream_id_size = 2;
|
| - CheckStreamFrameBoundaries(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - stream_id_size, !kIncludeVersion);
|
| + CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
|
| }
|
|
|
| TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) {
|
| @@ -1702,17 +2069,62 @@ TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFC,
|
| + // stream id
|
| + 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFC,
|
| + // stream id
|
| + 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -1730,11 +2142,7 @@ TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) {
|
|
|
| // Now test framing boundaries.
|
| const size_t stream_id_size = 1;
|
| - CheckStreamFrameBoundaries(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - stream_id_size, !kIncludeVersion);
|
| + CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
|
| }
|
|
|
| TEST_P(QuicFramerTest, StreamFrameWithVersion) {
|
| @@ -1791,23 +2199,72 @@ TEST_P(QuicFramerTest, StreamFrameWithVersion) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| - // clang-format on
|
| -
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| - EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| - EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| - ASSERT_TRUE(visitor_.header_.get());
|
| - EXPECT_TRUE(visitor_.header_->public_header.version_flag);
|
| - EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
|
| + unsigned char packet39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x39,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x39,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| + // clang-format on
|
| +
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| + EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| +
|
| + EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| + ASSERT_TRUE(visitor_.header_.get());
|
| + EXPECT_TRUE(visitor_.header_->public_header.version_flag);
|
| + EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
|
| EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion,
|
| !kIncludeDiversificationNonce));
|
|
|
| @@ -1819,11 +2276,8 @@ TEST_P(QuicFramerTest, StreamFrameWithVersion) {
|
| CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get());
|
|
|
| // Now test framing boundaries.
|
| - CheckStreamFrameBoundaries(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - kQuicMaxStreamIdSize, kIncludeVersion);
|
| + CheckStreamFrameBoundaries(packets[index], kQuicMaxStreamIdSize,
|
| + kIncludeVersion);
|
| }
|
|
|
| TEST_P(QuicFramerTest, RejectPacket) {
|
| @@ -1878,17 +2332,62 @@ TEST_P(QuicFramerTest, RejectPacket) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -1978,17 +2477,55 @@ TEST_P(QuicFramerTest, AckFrameOneAckBlock) {
|
| // num timestamps.
|
| 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (one ack block, 2 byte largest observed, 2 byte block length)
|
| + 0x45,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // first ack block length.
|
| + 0x12, 0x34,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (one ack block, 2 byte largest observed, 2 byte block length)
|
| + 0x45,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // first ack block length.
|
| + 0x12, 0x34,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2024,9 +2561,7 @@ TEST_P(QuicFramerTest, AckFrameOneAckBlock) {
|
| expected_error = "Unable to read num received packets.";
|
| }
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2129,17 +2664,107 @@ TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) {
|
| // Delta time.
|
| 0x10, 0x32,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (more than one ack block, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0x04,
|
| + // first ack block length.
|
| + 0x00, 0x01,
|
| + // gap to next block.
|
| + 0x01,
|
| + // ack block length.
|
| + 0x0e, 0xaf,
|
| + // gap to next block.
|
| + 0xff,
|
| + // ack block length.
|
| + 0x00, 0x00,
|
| + // gap to next block.
|
| + 0x91,
|
| + // ack block length.
|
| + 0x01, 0xea,
|
| + // gap to next block.
|
| + 0x05,
|
| + // ack block length.
|
| + 0x00, 0x04,
|
| + // Number of timestamps.
|
| + 0x02,
|
| + // Delta from largest observed.
|
| + 0x01,
|
| + // Delta time.
|
| + 0x76, 0x54, 0x32, 0x10,
|
| + // Delta from largest observed.
|
| + 0x02,
|
| + // Delta time.
|
| + 0x32, 0x10,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (more than one ack block, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0x04,
|
| + // first ack block length.
|
| + 0x00, 0x01,
|
| + // gap to next block.
|
| + 0x01,
|
| + // ack block length.
|
| + 0x0e, 0xaf,
|
| + // gap to next block.
|
| + 0xff,
|
| + // ack block length.
|
| + 0x00, 0x00,
|
| + // gap to next block.
|
| + 0x91,
|
| + // ack block length.
|
| + 0x01, 0xea,
|
| + // gap to next block.
|
| + 0x05,
|
| + // ack block length.
|
| + 0x00, 0x04,
|
| + // Number of timestamps.
|
| + 0x02,
|
| + // Delta from largest observed.
|
| + 0x01,
|
| + // Delta time.
|
| + 0x76, 0x54, 0x32, 0x10,
|
| + // Delta from largest observed.
|
| + 0x02,
|
| + // Delta time.
|
| + 0x32, 0x10,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2226,9 +2851,7 @@ TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) {
|
| }
|
|
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2268,25 +2891,52 @@ TEST_P(QuicFramerTest, NewStopWaitingFrame) {
|
| 0x08, 0x00, 0x00, 0x00,
|
| 0x00, 0x00,
|
| };
|
| - // clang-format on
|
| -
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : 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,
|
| - !kIncludeDiversificationNonce));
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xA8,
|
| + // frame type (stop waiting frame)
|
| + 0x06,
|
| + // least packet number awaiting an ack, delta from packet number.
|
| + 0x00, 0x00, 0x00, 0x00,
|
| + 0x00, 0x08,
|
| + };
|
|
|
| - EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xA8,
|
| + // frame type (stop waiting frame)
|
| + 0x06,
|
| + // least packet number awaiting an ack, delta from packet number.
|
| + 0x00, 0x00, 0x00, 0x00,
|
| + 0x00, 0x08,
|
| + };
|
| + // clang-format on
|
| +
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), 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,
|
| + !kIncludeDiversificationNonce));
|
| +
|
| + EXPECT_EQ(0u, visitor_.stream_frames_.size());
|
| ASSERT_EQ(1u, visitor_.stop_waiting_frames_.size());
|
| const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0];
|
| EXPECT_EQ(kLeastUnacked, frame.least_unacked);
|
| @@ -2296,9 +2946,7 @@ TEST_P(QuicFramerTest, NewStopWaitingFrame) {
|
| string expected_error;
|
| expected_error = "Unable to read least unacked delta.";
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2352,17 +3000,58 @@ TEST_P(QuicFramerTest, RstStreamFrameQuic) {
|
| // error code
|
| 0x01, 0x00, 0x00, 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (rst stream frame)
|
| + 0x01,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| +
|
| + // sent byte offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| +
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x01,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (rst stream frame)
|
| + 0x01,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| +
|
| + // sent byte offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| +
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x01,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2388,9 +3077,7 @@ TEST_P(QuicFramerTest, RstStreamFrameQuic) {
|
| expected_error = "Unable to read rst stream error code.";
|
| }
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2446,17 +3133,60 @@ TEST_P(QuicFramerTest, ConnectionCloseFrame) {
|
| 'I', ' ', 'c', 'a',
|
| 'n',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (connection close frame)
|
| + 0x02,
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x11,
|
| +
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (connection close frame)
|
| + 0x02,
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x11,
|
| +
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2481,9 +3211,7 @@ TEST_P(QuicFramerTest, ConnectionCloseFrame) {
|
| expected_error = "Unable to read connection close error details.";
|
| }
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2541,17 +3269,62 @@ TEST_P(QuicFramerTest, GoAwayFrame) {
|
| 'I', ' ', 'c', 'a',
|
| 'n',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (go away frame)
|
| + 0x03,
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x09,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (go away frame)
|
| + 0x03,
|
| + // error code
|
| + 0x00, 0x00, 0x00, 0x09,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2577,9 +3350,7 @@ TEST_P(QuicFramerTest, GoAwayFrame) {
|
| expected_error = "Unable to read goaway reason.";
|
| }
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2625,17 +3396,50 @@ TEST_P(QuicFramerTest, WindowUpdateFrame) {
|
| 0x54, 0x76, 0x10, 0x32,
|
| 0xDC, 0xFE, 0x98, 0xBA,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (window update frame)
|
| + 0x04,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // byte offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (window update frame)
|
| + 0x04,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // byte offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2656,9 +3460,7 @@ TEST_P(QuicFramerTest, WindowUpdateFrame) {
|
| expected_error = "Unable to read window byte_offset.";
|
| }
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2698,17 +3500,44 @@ TEST_P(QuicFramerTest, BlockedFrame) {
|
| // stream id
|
| 0x04, 0x03, 0x02, 0x01,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (blocked frame)
|
| + 0x05,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (blocked frame)
|
| + 0x05,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + };
|
| // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -2723,9 +3552,7 @@ TEST_P(QuicFramerTest, BlockedFrame) {
|
| ++i) {
|
| string expected_error = "Unable to read stream_id.";
|
| CheckProcessingFails(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| + packets[index],
|
| i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
|
| !kIncludeVersion, !kIncludeDiversificationNonce,
|
| PACKET_6BYTE_PACKET_NUMBER),
|
| @@ -2761,17 +3588,40 @@ TEST_P(QuicFramerTest, PingFrame) {
|
| // frame type (ping frame)
|
| 0x07,
|
| };
|
| - // clang-format on
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| + // clang-format on
|
| +
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
|
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| @@ -3377,29 +4227,52 @@ TEST_P(QuicFramerTest, BuildPaddingFramePacket) {
|
| 0x00,
|
| 0x00, 0x00, 0x00, 0x00
|
| };
|
| +
|
| + unsigned char packet39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| uint64_t header_size = GetPacketHeaderSize(
|
| framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER);
|
| - memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet) +
|
| - header_size + 1,
|
| - 0x00, kMaxPacketSize - header_size - 1);
|
| + memset((packets[index]) + header_size + 1, 0x00,
|
| + kMaxPacketSize - header_size - 1);
|
|
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) {
|
| @@ -3475,20 +4348,74 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) {
|
| // paddings
|
| 0x00, 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // paddings
|
| + 0x00, 0x00,
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + // paddings
|
| + 0x00, 0x00,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // paddings
|
| + 0x00, 0x00,
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + // paddings
|
| + 0x00, 0x00,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
|
| @@ -3528,29 +4455,50 @@ TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
|
| 0x00,
|
| 0x00, 0x00, 0x00, 0x00
|
| };
|
| +
|
| + unsigned char packet39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id and 4 byte packet number)
|
| + 0x28,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id and 4 byte packet number)
|
| + 0x28,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| uint64_t header_size = GetPacketHeaderSize(
|
| framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| !kIncludeDiversificationNonce, PACKET_4BYTE_PACKET_NUMBER);
|
| - memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet) +
|
| - header_size + 1,
|
| - 0x00, kMaxPacketSize - header_size - 1);
|
| + memset((packets[index]) + header_size + 1, 0x00,
|
| + kMaxPacketSize - header_size - 1);
|
|
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
|
| @@ -3590,29 +4538,50 @@ TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
|
| 0x00,
|
| 0x00, 0x00, 0x00, 0x00
|
| };
|
| +
|
| + unsigned char packet39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id and 2 byte packet number)
|
| + 0x18,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[kMaxPacketSize] = {
|
| + // public flags (8 byte connection_id and 2 byte packet number)
|
| + 0x18,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (padding frame)
|
| + 0x00,
|
| + 0x00, 0x00, 0x00, 0x00
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| uint64_t header_size = GetPacketHeaderSize(
|
| framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| !kIncludeDiversificationNonce, PACKET_2BYTE_PACKET_NUMBER);
|
| - memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet) +
|
| - header_size + 1,
|
| - 0x00, kMaxPacketSize - header_size - 1);
|
| + memset((packets[index]) + header_size + 1, 0x00,
|
| + kMaxPacketSize - header_size - 1);
|
|
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
|
| @@ -3734,20 +4703,62 @@ TEST_P(QuicFramerTest, BuildStreamFramePacket) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin and no length)
|
| + 0xDF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin and no length)
|
| + 0xDF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
|
| @@ -3803,21 +4814,60 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
|
| // data
|
| 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
|
| };
|
| - // clang-format on
|
|
|
| - QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
|
| - std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| - ASSERT_TRUE(data != nullptr);
|
| + unsigned char packet39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D),
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + // frame type (stream frame with fin and no length)
|
| + 0xDF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
|
| + // data
|
| + 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + static_cast<unsigned char>(
|
| + FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D),
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // version tag
|
| + 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin and no length)
|
| + 0xDF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
|
| + // data
|
| + 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
|
| + };
|
| + // clang-format on
|
| +
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
|
| + std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| + ASSERT_TRUE(data != nullptr);
|
| +
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
|
| @@ -3913,20 +4963,59 @@ TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) {
|
| // num timestamps.
|
| 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (no ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x45,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // first ack block length.
|
| + 0x12, 0x34,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (no ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x45,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // first ack block length.
|
| + 0x12, 0x34,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) {
|
| @@ -4025,20 +5114,95 @@ TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) {
|
| // num timestamps.
|
| 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (has ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0x04,
|
| + // first ack block length.
|
| + 0x00, 0x01,
|
| + // gap to next block.
|
| + 0x01,
|
| + // ack block length.
|
| + 0x0e, 0xaf,
|
| + // gap to next block.
|
| + 0xff,
|
| + // ack block length.
|
| + 0x00, 0x00,
|
| + // gap to next block.
|
| + 0x91,
|
| + // ack block length.
|
| + 0x01, 0xea,
|
| + // gap to next block.
|
| + 0x05,
|
| + // ack block length.
|
| + 0x00, 0x04,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (ack frame)
|
| + // (has ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0x04,
|
| + // first ack block length.
|
| + 0x00, 0x01,
|
| + // gap to next block.
|
| + 0x01,
|
| + // ack block length.
|
| + 0x0e, 0xaf,
|
| + // gap to next block.
|
| + 0xff,
|
| + // ack block length.
|
| + 0x00, 0x00,
|
| + // gap to next block.
|
| + 0x91,
|
| + // ack block length.
|
| + 0x01, 0xea,
|
| + // gap to next block.
|
| + 0x05,
|
| + // ack block length.
|
| + 0x00, 0x04,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) {
|
| @@ -4246,20 +5410,203 @@ TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) {
|
| // num timestamps.
|
| 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + // frame type (ack frame)
|
| + // (has ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0xff,
|
| + // first ack block length.
|
| + 0x0f, 0xdd,
|
| + // 255 = 4 * 63 + 3
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| + // frame type (ack frame)
|
| + // (has ack blocks, 2 byte largest observed, 2 byte block length)
|
| + 0x65,
|
| + // largest acked
|
| + 0x12, 0x34,
|
| + // Zero delta time.
|
| + 0x00, 0x00,
|
| + // num ack blocks ranges.
|
| + 0xff,
|
| + // first ack block length.
|
| + 0x0f, 0xdd,
|
| + // 255 = 4 * 63 + 3
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| +
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
|
| + // num timestamps.
|
| + 0x00,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
|
| @@ -4305,20 +5652,48 @@ TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
|
| 0x1C, 0x00, 0x00, 0x00,
|
| 0x00, 0x00,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (stop waiting frame)
|
| + 0x06,
|
| + // least packet number awaiting an ack, delta from packet number.
|
| + 0x00, 0x00, 0x00, 0x00,
|
| + 0x00, 0x1C,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
|
| +
|
| + // frame type (stop waiting frame)
|
| + 0x06,
|
| + // least packet number awaiting an ack, delta from packet number.
|
| + 0x00, 0x00, 0x00, 0x00,
|
| + 0x00, 0x1C,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
|
| @@ -4374,22 +5749,60 @@ TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
|
| // error code
|
| 0x08, 0x07, 0x06, 0x05,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (rst stream frame)
|
| + 0x01,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // sent byte offset
|
| + 0x08, 0x07, 0x06, 0x05,
|
| + 0x04, 0x03, 0x02, 0x01,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (rst stream frame)
|
| + 0x01,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // sent byte offset
|
| + 0x08, 0x07, 0x06, 0x05,
|
| + 0x04, 0x03, 0x02, 0x01,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| QuicFrames frames = {QuicFrame(&rst_frame)};
|
|
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildCloseFramePacket) {
|
| @@ -4450,20 +5863,62 @@ TEST_P(QuicFramerTest, BuildCloseFramePacket) {
|
| 'I', ' ', 'c', 'a',
|
| 'n',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (connection close frame)
|
| + 0x02,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (connection close frame)
|
| + 0x02,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildGoAwayPacket) {
|
| @@ -4529,20 +5984,66 @@ TEST_P(QuicFramerTest, BuildGoAwayPacket) {
|
| 'I', ' ', 'c', 'a',
|
| 'n',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (go away frame)
|
| + 0x03,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (go away frame)
|
| + 0x03,
|
| + // error code
|
| + 0x05, 0x06, 0x07, 0x08,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // error details length
|
| + 0x00, 0x0d,
|
| + // error details
|
| + 'b', 'e', 'c', 'a',
|
| + 'u', 's', 'e', ' ',
|
| + 'I', ' ', 'c', 'a',
|
| + 'n',
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
|
| @@ -4595,20 +6096,54 @@ TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
|
| 0x88, 0x77, 0x66, 0x55,
|
| 0x44, 0x33, 0x22, 0x11,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (window update frame)
|
| + 0x04,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // byte offset
|
| + 0x11, 0x22, 0x33, 0x44,
|
| + 0x55, 0x66, 0x77, 0x88,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (window update frame)
|
| + 0x04,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // byte offset
|
| + 0x11, 0x22, 0x33, 0x44,
|
| + 0x55, 0x66, 0x77, 0x88,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildBlockedPacket) {
|
| @@ -4654,20 +6189,48 @@ TEST_P(QuicFramerTest, BuildBlockedPacket) {
|
| // stream id
|
| 0x04, 0x03, 0x02, 0x01,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (blocked frame)
|
| + 0x05,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (blocked frame)
|
| + 0x05,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildPingPacket) {
|
| @@ -4706,20 +6269,44 @@ TEST_P(QuicFramerTest, BuildPingPacket) {
|
| // frame type (ping frame)
|
| 0x07,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| // Test that the MTU discovery packet is serialized correctly as a PING packet.
|
| @@ -4759,20 +6346,44 @@ TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) {
|
| // frame type (ping frame)
|
| 0x07,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (ping frame)
|
| + 0x07,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
|
| ASSERT_TRUE(data != nullptr);
|
|
|
| - test::CompareCharArraysWithHexError(
|
| - "constructed packet", data->data(), data->length(),
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + test::CompareCharArraysWithHexError("constructed packet", data->data(),
|
| + data->length(), AsChars(packets[index]),
|
| + arraysize(packet));
|
| }
|
|
|
| TEST_P(QuicFramerTest, BuildPublicResetPacketOld) {
|
| @@ -5016,17 +6627,46 @@ TEST_P(QuicFramerTest, EncryptPacket) {
|
| 'i', 'j', 'k', 'l',
|
| 'm', 'n', 'o', 'p',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // redundancy
|
| + 'a', 'b', 'c', 'd',
|
| + 'e', 'f', 'g', 'h',
|
| + 'i', 'j', 'k', 'l',
|
| + 'm', 'n', 'o', 'p',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // redundancy
|
| + 'a', 'b', 'c', 'd',
|
| + 'e', 'f', 'g', 'h',
|
| + 'i', 'j', 'k', 'l',
|
| + 'm', 'n', 'o', 'p',
|
| + };
|
| // clang-format on
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
|
|
| std::unique_ptr<QuicPacket> raw(new QuicPacket(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false, PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| + AsChars(packets[index]), arraysize(packet), false,
|
| + PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
|
| !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER));
|
| char buffer[kMaxPacketSize];
|
| size_t encrypted_length = framer_.EncryptPayload(
|
| @@ -5075,17 +6715,51 @@ TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
|
| 'i', 'j', 'k', 'l',
|
| 'm', 'n', 'o', 'p',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x39,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // version tag
|
| + 'Q', '.', '1', '0',
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // redundancy
|
| + 'a', 'b', 'c', 'd',
|
| + 'e', 'f', 'g', 'h',
|
| + 'i', 'j', 'k', 'l',
|
| + 'm', 'n', 'o', 'p',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (version, 8 byte connection_id)
|
| + 0x39,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // version tag
|
| + 'Q', '.', '1', '0',
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // redundancy
|
| + 'a', 'b', 'c', 'd',
|
| + 'e', 'f', 'g', 'h',
|
| + 'i', 'j', 'k', 'l',
|
| + 'm', 'n', 'o', 'p',
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| std::unique_ptr<QuicPacket> raw(new QuicPacket(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false, PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
|
| + AsChars(packets[index]), arraysize(packet), false,
|
| + PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
|
| !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER));
|
| char buffer[kMaxPacketSize];
|
| size_t encrypted_length = framer_.EncryptPayload(
|
| @@ -5275,8 +6949,88 @@ TEST_P(QuicFramerTest, StopPacketProcessing) {
|
| 0xBE, 0x9A, 0x78, 0x56,
|
| 0x34, 0x12,
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| +
|
| + // frame type (ack frame)
|
| + 0x40,
|
| + // least packet number awaiting an ack
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xA0,
|
| + // largest observed packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBF,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBE,
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x38,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| +
|
| + // frame type (ack frame)
|
| + 0x40,
|
| + // least packet number awaiting an ack
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xA0,
|
| + // largest observed packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBF,
|
| + // num missing packets
|
| + 0x01,
|
| + // missing packet
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBE,
|
| + };
|
| // clang-format on
|
|
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| MockFramerVisitor visitor;
|
| framer_.set_visitor(&visitor);
|
| EXPECT_CALL(visitor, OnPacket());
|
| @@ -5288,15 +7042,8 @@ TEST_P(QuicFramerTest, StopPacketProcessing) {
|
| EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true));
|
| EXPECT_CALL(visitor, OnDecryptedPacket(_));
|
|
|
| - QuicEncryptedPacket encrypted(
|
| - AsChars(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet),
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet),
|
| - false);
|
| + QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
|
| + false);
|
| EXPECT_TRUE(framer_.ProcessPacket(encrypted));
|
| EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
|
| }
|
| @@ -5465,16 +7212,67 @@ TEST_P(QuicFramerTest, FramerFuzzTest) {
|
| 'o', ' ', 'w', 'o',
|
| 'r', 'l', 'd', '!',
|
| };
|
| +
|
| + unsigned char packet39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0x10, 0x32, 0x54, 0x76,
|
| + 0x98, 0xBA, 0xDC, 0xFE,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| +
|
| + unsigned char packet_cid_be39[] = {
|
| + // public flags (8 byte connection_id)
|
| + 0x3C,
|
| + // connection_id
|
| + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
|
| + // packet number
|
| + 0x12, 0x34, 0x56, 0x78,
|
| + 0x9A, 0xBC,
|
| + // private flags
|
| + 0x00,
|
| +
|
| + // frame type (stream frame with fin)
|
| + 0xFF,
|
| + // stream id
|
| + 0x01, 0x02, 0x03, 0x04,
|
| + // offset
|
| + 0xBA, 0x98, 0xFE, 0xDC,
|
| + 0x32, 0x10, 0x76, 0x54,
|
| + // data length
|
| + 0x00, 0x0c,
|
| + // data
|
| + 'h', 'e', 'l', 'l',
|
| + 'o', ' ', 'w', 'o',
|
| + 'r', 'l', 'd', '!',
|
| + };
|
| // clang-format on
|
|
|
| - QuicFramerFuzzFunc(
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? packet_cid_be
|
| - : packet,
|
| - QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
|
| - ? arraysize(packet_cid_be)
|
| - : arraysize(packet));
|
| + unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
|
| + size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
|
| +
|
| + QuicFramerFuzzFunc(packets[index], arraysize(packet));
|
| }
|
|
|
| +} // namespace
|
| } // namespace test
|
| } // namespace net
|
|
|