Use max TLS idle_timeout and use in session tests The idle_timeout GetUint32 value returns the pre-handshake timeout, we need to call GetMax to get the post-handshake timeout which is what we want here. This is tested by quic_session_test and quic_spdy_sesion_test which now use transport parameters when the version under test uses TLS. gfe-relnote: change idle_timeout for TLS, protected by disabled TLS flag PiperOrigin-RevId: 273837598 Change-Id: Ia5f330ffd7405742b9756b9b15eebba6624f4ac5
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc index 931924f..5ffa216 100644 --- a/quic/core/http/quic_spdy_session_test.cc +++ b/quic/core/http/quic_spdy_session_test.cc
@@ -76,15 +76,25 @@ void OnHandshakeMessage(const CryptoHandshakeMessage& /*message*/) override { encryption_established_ = true; handshake_confirmed_ = true; - CryptoHandshakeMessage msg; + QuicErrorCode error; std::string error_details; session()->config()->SetInitialStreamFlowControlWindowToSend( kInitialStreamFlowControlWindowForTest); session()->config()->SetInitialSessionFlowControlWindowToSend( kInitialSessionFlowControlWindowForTest); - session()->config()->ToHandshakeMessage(&msg, transport_version()); - const QuicErrorCode error = - session()->config()->ProcessPeerHello(msg, CLIENT, &error_details); + if (session()->connection()->version().handshake_protocol == + PROTOCOL_TLS1_3) { + TransportParameters transport_parameters; + EXPECT_TRUE( + session()->config()->FillTransportParameters(&transport_parameters)); + error = session()->config()->ProcessTransportParameters( + transport_parameters, CLIENT, &error_details); + } else { + CryptoHandshakeMessage msg; + session()->config()->ToHandshakeMessage(&msg, transport_version()); + error = + session()->config()->ProcessPeerHello(msg, CLIENT, &error_details); + } EXPECT_EQ(QUIC_NO_ERROR, error); session()->OnConfigNegotiated(); session()->connection()->SetDefaultEncryptionLevel( @@ -1160,6 +1170,11 @@ } TEST_P(QuicSpdySessionTestServer, HandshakeUnblocksFlowControlBlockedStream) { + if (connection_->version().handshake_protocol == PROTOCOL_TLS1_3) { + // This test requires Google QUIC crypto because it assumes streams start + // off unblocked. + return; + } // Test that if a stream is flow control blocked, then on receipt of the SHLO // containing a suitable send window offset, the stream becomes unblocked.
diff --git a/quic/core/quic_config.cc b/quic/core/quic_config.cc index e48d21a..65e2c58 100644 --- a/quic/core/quic_config.cc +++ b/quic/core/quic_config.cc
@@ -926,7 +926,7 @@ bool QuicConfig::FillTransportParameters(TransportParameters* params) const { params->idle_timeout_milliseconds.set_value( - idle_network_timeout_seconds_.GetUint32() * kNumMillisPerSecond); + idle_network_timeout_seconds_.GetMax() * kNumMillisPerSecond); if (stateless_reset_token_.HasSendValue()) { QuicUint128 stateless_reset_token = stateless_reset_token_.GetSendValue();
diff --git a/quic/core/quic_config_test.cc b/quic/core/quic_config_test.cc index 080912e..2f5aa7a 100644 --- a/quic/core/quic_config_test.cc +++ b/quic/core/quic_config_test.cc
@@ -371,6 +371,9 @@ params.initial_max_stream_data_bidi_remote.value()); EXPECT_EQ(4 * kMinimumFlowControlSendWindow, params.initial_max_stream_data_uni.value()); + + EXPECT_EQ(static_cast<uint64_t>(kMaximumIdleTimeoutSecs * 1000), + params.idle_timeout_milliseconds.value()); } TEST_P(QuicConfigTest, ProcessTransportParametersServer) {
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc index 7a3b44a..b2ea0b2 100644 --- a/quic/core/quic_session_test.cc +++ b/quic/core/quic_session_test.cc
@@ -11,12 +11,14 @@ #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h" #include "net/third_party/quiche/src/quic/core/crypto/null_encrypter.h" +#include "net/third_party/quiche/src/quic/core/crypto/transport_parameters.h" #include "net/third_party/quiche/src/quic/core/quic_crypto_stream.h" #include "net/third_party/quiche/src/quic/core/quic_data_writer.h" #include "net/third_party/quiche/src/quic/core/quic_error_codes.h" #include "net/third_party/quiche/src/quic/core/quic_packets.h" #include "net/third_party/quiche/src/quic/core/quic_stream.h" #include "net/third_party/quiche/src/quic/core/quic_utils.h" +#include "net/third_party/quiche/src/quic/core/quic_versions.h" #include "net/third_party/quiche/src/quic/platform/api/quic_arraysize.h" #include "net/third_party/quiche/src/quic/platform/api/quic_expect_bug.h" #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" @@ -64,16 +66,25 @@ void OnHandshakeMessage(const CryptoHandshakeMessage& /*message*/) override { encryption_established_ = true; handshake_confirmed_ = true; - CryptoHandshakeMessage msg; + QuicErrorCode error; std::string error_details; session()->config()->SetInitialStreamFlowControlWindowToSend( kInitialStreamFlowControlWindowForTest); session()->config()->SetInitialSessionFlowControlWindowToSend( kInitialSessionFlowControlWindowForTest); - session()->config()->ToHandshakeMessage(&msg, - session()->transport_version()); - const QuicErrorCode error = - session()->config()->ProcessPeerHello(msg, CLIENT, &error_details); + if (session()->connection()->version().handshake_protocol == + PROTOCOL_TLS1_3) { + TransportParameters transport_parameters; + EXPECT_TRUE( + session()->config()->FillTransportParameters(&transport_parameters)); + error = session()->config()->ProcessTransportParameters( + transport_parameters, CLIENT, &error_details); + } else { + CryptoHandshakeMessage msg; + session()->config()->ToHandshakeMessage(&msg, transport_version()); + error = + session()->config()->ProcessPeerHello(msg, CLIENT, &error_details); + } EXPECT_EQ(QUIC_NO_ERROR, error); session()->OnConfigNegotiated(); session()->connection()->SetDefaultEncryptionLevel( @@ -1478,6 +1489,11 @@ } TEST_P(QuicSessionTestServer, HandshakeUnblocksFlowControlBlockedStream) { + if (connection_->version().handshake_protocol == PROTOCOL_TLS1_3) { + // This test requires Google QUIC crypto because it assumes streams start + // off unblocked. + return; + } // Test that if a stream is flow control blocked, then on receipt of the SHLO // containing a suitable send window offset, the stream becomes unblocked.