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 |