Fix timeouts and rebinding check in quic_client_interop_test gfe-relnote: n/a (test-only tool change) PiperOrigin-RevId: 293349649 Change-Id: Ie06ac6f2190da8aeff0796a6bec6efd4a13d056d
diff --git a/quic/tools/quic_client.cc b/quic/tools/quic_client.cc index 50ba040..a9a9320 100644 --- a/quic/tools/quic_client.cc +++ b/quic/tools/quic_client.cc
@@ -84,6 +84,23 @@ std::move(proof_verifier), std::move(session_cache)) {} +QuicClient::QuicClient(QuicSocketAddress server_address, + const QuicServerId& server_id, + const ParsedQuicVersionVector& supported_versions, + const QuicConfig& config, + QuicEpollServer* epoll_server, + std::unique_ptr<ProofVerifier> proof_verifier, + std::unique_ptr<SessionCache> session_cache) + : QuicClient( + server_address, + server_id, + supported_versions, + config, + epoll_server, + QuicWrapUnique(new QuicClientEpollNetworkHelper(epoll_server, this)), + std::move(proof_verifier), + std::move(session_cache)) {} + QuicClient::QuicClient( QuicSocketAddress server_address, const QuicServerId& server_id,
diff --git a/quic/tools/quic_client.h b/quic/tools/quic_client.h index 10c61f3..7ce795d 100644 --- a/quic/tools/quic_client.h +++ b/quic/tools/quic_client.h
@@ -49,6 +49,13 @@ QuicEpollServer* epoll_server, std::unique_ptr<ProofVerifier> proof_verifier, std::unique_ptr<SessionCache> session_cache); + QuicClient(QuicSocketAddress server_address, + const QuicServerId& server_id, + const ParsedQuicVersionVector& supported_versions, + const QuicConfig& config, + QuicEpollServer* epoll_server, + std::unique_ptr<ProofVerifier> proof_verifier, + std::unique_ptr<SessionCache> session_cache); // This will take ownership of a passed in network primitive. QuicClient(QuicSocketAddress server_address, const QuicServerId& server_id,
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc index 03d32a5..0ea2c7c 100644 --- a/quic/tools/quic_client_interop_test_bin.cc +++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -163,9 +163,12 @@ auto session_cache = std::make_unique<test::SimpleSessionCache>(); QuicEpollServer epoll_server; QuicEpollClock epoll_clock(&epoll_server); + QuicConfig config; + QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(20); + config.SetIdleNetworkTimeout(timeout, timeout); auto client = std::make_unique<QuicClient>( - addr, server_id, versions, &epoll_server, std::move(proof_verifier), - std::move(session_cache)); + addr, server_id, versions, config, &epoll_server, + std::move(proof_verifier), std::move(session_cache)); client->set_connection_debug_visitor(this); if (!client->Initialize()) { QUIC_LOG(ERROR) << "Failed to initialize client"; @@ -202,18 +205,7 @@ header_block[":authority"] = authority; header_block[":path"] = "/"; client->set_store_response(true); - client->SendRequest(header_block, "", /*fin=*/true); - - const QuicTime request_start_time = epoll_clock.Now(); - static const auto request_timeout = QuicTime::Delta::FromSeconds(20); - bool request_timed_out = false; - while (client->WaitForEvents()) { - if (epoll_clock.Now() - request_start_time >= request_timeout) { - QUIC_LOG(ERROR) << "Timed out waiting for HTTP response"; - request_timed_out = true; - break; - } - } + client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true); client_stats = connection->GetStats(); QuicSentPacketManager* sent_packet_manager = @@ -226,7 +218,7 @@ InsertFeature(Feature::kStreamData); } - if (request_timed_out || !client->connected()) { + if (!client->connected()) { return; } @@ -240,17 +232,12 @@ if (attempt_rebind) { // Now make a second request after switching to a different client port. if (client->ChangeEphemeralPort()) { - client->SendRequest(header_block, "", /*fin=*/true); - - const QuicTime second_request_start_time = epoll_clock.Now(); - while (client->WaitForEvents()) { - if (epoll_clock.Now() - second_request_start_time >= - request_timeout) { - // Rebinding does not work, retry without attempting it. - AttemptRequest(addr, authority, server_id, test_version_negotiation, - /*attempt_rebind=*/false); - return; - } + client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true); + if (!client->connected()) { + // Rebinding does not work, retry without attempting it. + AttemptRequest(addr, authority, server_id, test_version_negotiation, + /*attempt_rebind=*/false); + return; } InsertFeature(Feature::kRebinding);