Make QboneClientTests and QboneSessionTests run with multiple non-TLS QUIC versions. Previously these tests were only run with the first AllSupportedVersions(). In addition to increasing coverage, this change also makes them tolerant to reordering versions by cl/290840338. gfe-relnote: n/a (test-only change) PiperOrigin-RevId: 297422796 Change-Id: Ifea613e93791a46761dd47f41bb0971bed9b4552
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc index bdc86e7..0ee0bf8 100644 --- a/quic/qbone/qbone_client_test.cc +++ b/quic/qbone/qbone_client_test.cc
@@ -32,6 +32,24 @@ namespace test { namespace { +ParsedQuicVersionVector GetTestParams() { + ParsedQuicVersionVector test_versions; + + for (const auto& version : CurrentSupportedVersions()) { + // TODO(b/113130636): Make Qbone work with TLS. + if (version.handshake_protocol == PROTOCOL_TLS1_3) { + continue; + } + // Qbone requires MESSAGE frames + if (!version.SupportsMessageFrames()) { + continue; + } + test_versions.push_back(version); + } + + return test_versions; +} + std::string TestPacketIn(const std::string& body) { return PrependIPv6HeaderForTest(body, 5); } @@ -206,7 +224,14 @@ DataSavingQbonePacketWriter qbone_writer_; }; -TEST(QboneClientTest, SendDataFromClient) { +class QboneClientTest : public QuicTestWithParam<ParsedQuicVersion> {}; + +INSTANTIATE_TEST_SUITE_P(Tests, + QboneClientTest, + ::testing::ValuesIn(GetTestParams()), + ::testing::PrintToStringParamName()); + +TEST_P(QboneClientTest, SendDataFromClient) { auto server = new QboneTestServer(crypto_test_utils::ProofSourceForTesting()); QuicSocketAddress server_address(TestLoopback(), QuicPickServerPortForTestsOrDie()); @@ -218,7 +243,7 @@ QboneTestClient client( server_address, QuicServerId("test.example.com", server_address.port(), false), - AllSupportedVersions(), &epoll_server, + ParsedQuicVersionVector{GetParam()}, &epoll_server, crypto_test_utils::ProofVerifierForTesting()); ASSERT_TRUE(client.Initialize()); ASSERT_TRUE(client.Connect());
diff --git a/quic/qbone/qbone_session_test.cc b/quic/qbone/qbone_session_test.cc index 1c85c0b..bb75138 100644 --- a/quic/qbone/qbone_session_test.cc +++ b/quic/qbone/qbone_session_test.cc
@@ -44,6 +44,24 @@ return PrependIPv6HeaderForTest(body, 4); } +ParsedQuicVersionVector GetTestParams() { + ParsedQuicVersionVector test_versions; + + for (const auto& version : CurrentSupportedVersions()) { + // TODO(b/113130636): Make Qbone work with TLS. + if (version.handshake_protocol == PROTOCOL_TLS1_3) { + continue; + } + // Qbone requires MESSAGE frames + if (!version.SupportsMessageFrames()) { + continue; + } + test_versions.push_back(version); + } + + return test_versions; +} + // Used by QuicCryptoServerConfig to provide server credentials, returning a // canned response equal to |success|. class FakeProofSource : public ProofSource { @@ -227,9 +245,12 @@ MockQuicConnectionHelper* helper_; }; -class QboneSessionTest : public QuicTest { +class QboneSessionTest : public QuicTestWithParam<ParsedQuicVersion> { public: - QboneSessionTest() : runner_(&helper_), compressed_certs_cache_(100) {} + QboneSessionTest() + : supported_versions_({GetParam()}), + runner_(&helper_), + compressed_certs_cache_(100) {} ~QboneSessionTest() override { delete client_connection_; @@ -267,7 +288,7 @@ client_connection_ = new QuicConnection( TestConnectionId(), server_address, &helper_, alarm_factory_.get(), new NiceMock<MockPacketWriter>(), true, Perspective::IS_CLIENT, - ParsedVersionOfIndex(AllSupportedVersions(), 0)); + supported_versions_); client_connection_->SetSelfAddress(client_address); QuicConfig config; client_crypto_config_ = std::make_unique<QuicCryptoClientConfig>( @@ -277,8 +298,7 @@ } client_peer_ = std::make_unique<QboneClientSession>( client_connection_, client_crypto_config_.get(), - /*owner=*/nullptr, config, - ParsedVersionOfIndex(AllSupportedVersions(), 0), + /*owner=*/nullptr, config, supported_versions_, QuicServerId("test.example.com", 1234, false), client_writer_.get(), client_handler_.get()); } @@ -287,7 +307,7 @@ server_connection_ = new QuicConnection( TestConnectionId(), client_address, &helper_, alarm_factory_.get(), new NiceMock<MockPacketWriter>(), true, Perspective::IS_SERVER, - ParsedVersionOfIndex(AllSupportedVersions(), 0)); + supported_versions_); server_connection_->SetSelfAddress(server_address); QuicConfig config; server_crypto_config_ = std::make_unique<QuicCryptoServerConfig>( @@ -304,7 +324,7 @@ GetClock()->WallNow())); server_peer_ = std::make_unique<QboneServerSession>( - AllSupportedVersions(), server_connection_, nullptr, config, + supported_versions_, server_connection_, nullptr, config, server_crypto_config_.get(), &compressed_certs_cache_, server_writer_.get(), TestLoopback6(), TestLoopback6(), 64, server_handler_.get()); @@ -474,6 +494,7 @@ } protected: + const ParsedQuicVersionVector supported_versions_; QuicEpollServer epoll_server_; std::unique_ptr<QuicAlarmFactory> alarm_factory_; FakeTaskRunner runner_; @@ -495,7 +516,12 @@ std::unique_ptr<QboneClientSession> client_peer_; }; -TEST_F(QboneSessionTest, StreamConnection) { +INSTANTIATE_TEST_SUITE_P(Tests, + QboneSessionTest, + ::testing::ValuesIn(GetTestParams()), + ::testing::PrintToStringParamName()); + +TEST_P(QboneSessionTest, StreamConnection) { CreateClientAndServerSessions(); client_peer_->set_send_packets_as_messages(false); server_peer_->set_send_packets_as_messages(false); @@ -503,7 +529,7 @@ TestStreamConnection(false); } -TEST_F(QboneSessionTest, Messages) { +TEST_P(QboneSessionTest, Messages) { CreateClientAndServerSessions(); client_peer_->set_send_packets_as_messages(true); server_peer_->set_send_packets_as_messages(true); @@ -511,7 +537,7 @@ TestStreamConnection(true); } -TEST_F(QboneSessionTest, ClientRejection) { +TEST_P(QboneSessionTest, ClientRejection) { CreateClientAndServerSessions(false /*client_handshake_success*/, true /*server_handshake_success*/, true /*send_qbone_alpn*/); @@ -519,7 +545,7 @@ TestDisconnectAfterFailedHandshake(); } -TEST_F(QboneSessionTest, BadAlpn) { +TEST_P(QboneSessionTest, BadAlpn) { CreateClientAndServerSessions(true /*client_handshake_success*/, true /*server_handshake_success*/, false /*send_qbone_alpn*/); @@ -527,7 +553,7 @@ TestDisconnectAfterFailedHandshake(); } -TEST_F(QboneSessionTest, ServerRejection) { +TEST_P(QboneSessionTest, ServerRejection) { CreateClientAndServerSessions(true /*client_handshake_success*/, false /*server_handshake_success*/, true /*send_qbone_alpn*/); @@ -536,7 +562,7 @@ } // Test that data streams are not created before handshake. -TEST_F(QboneSessionTest, CannotCreateDataStreamBeforeHandshake) { +TEST_P(QboneSessionTest, CannotCreateDataStreamBeforeHandshake) { CreateClientAndServerSessions(); EXPECT_QUIC_BUG(client_peer_->ProcessPacketFromNetwork(TestPacketIn("hello")), "Attempting to send packet before encryption established"); @@ -546,7 +572,7 @@ EXPECT_EQ(0u, client_peer_->GetNumActiveStreams()); } -TEST_F(QboneSessionTest, ControlRequests) { +TEST_P(QboneSessionTest, ControlRequests) { CreateClientAndServerSessions(); StartHandshake(); EXPECT_TRUE(client_handler_->data().empty());