Update Android Conformance Test QUIC test
We got the Android team to update their test to the new header format:
https://android-review.googlesource.com/c/platform/cts/+/1454515
This CL tweaks our QuicDispatcher test to ensure we support both old and new Android tests.
PiperOrigin-RevId: 336690796
Change-Id: Ic989c2fa0be0e9737a599a93eb171a38e79389de
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index db1020e..259c734 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -1392,7 +1392,57 @@
// clang-format off
static const unsigned char packet[1200] = {
// Android UDP network conformance test packet as it was after this change:
+ // https://android-review.googlesource.com/c/platform/cts/+/1454515
+ 0xc0, // long header
+ 0xaa, 0xda, 0xca, 0xca, // reserved-space version number
+ 0x08, // destination connection ID length
+ 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // 8-byte connection ID
+ 0x00, // source connection ID length
+ };
+ // clang-format on
+
+ QuicEncryptedPacket encrypted(reinterpret_cast<const char*>(packet),
+ sizeof(packet), false);
+ std::unique_ptr<QuicReceivedPacket> received_packet(
+ ConstructReceivedPacket(encrypted, mock_helper_.GetClock()->Now()));
+ EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _, _, _, _)).Times(0);
+
+ QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
+ dispatcher_->ProcessPacket(server_address_, client_address, *received_packet);
+ ASSERT_EQ(1u, saving_writer->packets()->size());
+
+ // The Android UDP network conformance test directly checks that these bytes
+ // of the response match the connection ID that was sent.
+ ASSERT_GE((*(saving_writer->packets()))[0]->length(), 15u);
+ quiche::test::CompareCharArraysWithHexError(
+ "response connection ID", &(*(saving_writer->packets()))[0]->data()[7], 8,
+ reinterpret_cast<const char*>(&packet[6]), 8);
+}
+
+TEST_P(QuicDispatcherTestOneVersion, AndroidConformanceTestOld) {
+ // WARNING: this test covers an old Android Conformance Test that has now been
+ // changed, but it'll take time for the change to propagate through the
+ // Android ecosystem. The Android team has asked us to keep this test
+ // supported until at least 2021-03-31. After that date, and when we drop
+ // support for sending QUIC version negotiation packets using the legacy
+ // Google QUIC format (Q001-Q043), then we can delete this test.
+ // TODO(dschinazi) delete this test after 2021-03-31
+ SavingWriter* saving_writer = new SavingWriter();
+ // dispatcher_ takes ownership of saving_writer.
+ QuicDispatcherPeer::UseWriter(dispatcher_.get(), saving_writer);
+
+ QuicTimeWaitListManager* time_wait_list_manager = new QuicTimeWaitListManager(
+ saving_writer, dispatcher_.get(), mock_helper_.GetClock(),
+ &mock_alarm_factory_);
+ // dispatcher_ takes ownership of time_wait_list_manager.
+ QuicDispatcherPeer::SetTimeWaitListManager(dispatcher_.get(),
+ time_wait_list_manager);
+ // clang-format off
+ static const unsigned char packet[1200] = {
+ // Android UDP network conformance test packet as it was after this change:
// https://android-review.googlesource.com/c/platform/cts/+/1104285
+ // but before this change:
+ // https://android-review.googlesource.com/c/platform/cts/+/1454515
0x0d, // public flags: version, 8-byte connection ID, 1-byte packet number
0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // 8-byte connection ID
0xaa, 0xda, 0xca, 0xaa, // reserved-space version number