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.