Reenable QUIC e2e more tests with TLS
This CL enables running several QUIC end-to-end tests with QUIC+TLS versions.
Test-only
PiperOrigin-RevId: 312150867
Change-Id: I80e2ad7f95f61a2adf4f63caa9d14000c26f3701
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 399e19f..eb89efa 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -629,14 +629,10 @@
// Simple transaction, but set a non-default ack exponent at the client
// and ensure it gets to the server.
TEST_P(EndToEndTest, SimpleRequestResponseWithAckExponentChange) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
- return;
- }
- const uint32_t kClientAckDelayExponent = kDefaultAckDelayExponent + 100u;
+ const uint32_t kClientAckDelayExponent = 19;
+ EXPECT_NE(kClientAckDelayExponent, kDefaultAckDelayExponent);
// Force the ACK exponent to be something other than the default.
- // Note that it is sent only if doing IETF QUIC.
+ // Note that it is sent only with QUIC+TLS.
client_config_.SetAckDelayExponentToSend(kClientAckDelayExponent);
ASSERT_TRUE(Initialize());
@@ -645,12 +641,12 @@
EXPECT_FALSE(client_->client()->EarlyDataAccepted());
EXPECT_FALSE(client_->client()->ReceivedInchoateReject());
- if (VersionHasIetfQuicFrames(version_.transport_version)) {
- // Should be only for IETF QUIC.
+ if (version_.UsesTls()) {
+ // Should be only sent with QUIC+TLS.
EXPECT_EQ(kClientAckDelayExponent,
GetServerConnection()->framer().peer_ack_delay_exponent());
} else {
- // No change for Google QUIC.
+ // No change for QUIC_CRYPTO.
EXPECT_EQ(kDefaultAckDelayExponent,
GetServerConnection()->framer().peer_ack_delay_exponent());
}
@@ -2060,11 +2056,6 @@
}
TEST_P(EndToEndTest, DifferentFlowControlWindows) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
- return;
- }
// Client and server can set different initial flow control receive windows.
// These are sent in CHLO/SHLO. Tests that these values are exchanged properly
// in the crypto handshake.
@@ -2089,17 +2080,28 @@
WriteHeadersOnStream(stream);
stream->WriteOrBufferBody("hello", false);
- // Client should have the right values for server's receive window.
- EXPECT_EQ(kServerStreamIFCW,
- client_->client()
- ->client_session()
- ->config()
- ->ReceivedInitialStreamFlowControlWindowBytes());
- EXPECT_EQ(kServerSessionIFCW,
- client_->client()
- ->client_session()
- ->config()
- ->ReceivedInitialSessionFlowControlWindowBytes());
+ if (!version_.UsesTls()) {
+ // IFWA only exists with QUIC_CRYPTO.
+ // Client should have the right values for server's receive window.
+ ASSERT_TRUE(client_->client()
+ ->client_session()
+ ->config()
+ ->HasReceivedInitialStreamFlowControlWindowBytes());
+ EXPECT_EQ(kServerStreamIFCW,
+ client_->client()
+ ->client_session()
+ ->config()
+ ->ReceivedInitialStreamFlowControlWindowBytes());
+ ASSERT_TRUE(client_->client()
+ ->client_session()
+ ->config()
+ ->HasReceivedInitialSessionFlowControlWindowBytes());
+ EXPECT_EQ(kServerSessionIFCW,
+ client_->client()
+ ->client_session()
+ ->config()
+ ->ReceivedInitialSessionFlowControlWindowBytes());
+ }
EXPECT_EQ(kServerStreamIFCW, QuicFlowControllerPeer::SendWindowOffset(
stream->flow_controller()));
EXPECT_EQ(kServerSessionIFCW, QuicFlowControllerPeer::SendWindowOffset(
@@ -2107,23 +2109,24 @@
// Server should have the right values for client's receive window.
server_thread_->Pause();
- QuicSession* session = GetServerSession();
- EXPECT_EQ(kClientStreamIFCW,
- session->config()->ReceivedInitialStreamFlowControlWindowBytes());
- EXPECT_EQ(kClientSessionIFCW,
- session->config()->ReceivedInitialSessionFlowControlWindowBytes());
+ QuicConfig server_config = *GetServerSession()->config();
EXPECT_EQ(kClientSessionIFCW, QuicFlowControllerPeer::SendWindowOffset(
- session->flow_controller()));
+ GetServerSession()->flow_controller()));
server_thread_->Resume();
+ if (version_.UsesTls()) {
+ // IFWA only exists with QUIC_CRYPTO.
+ return;
+ }
+ ASSERT_TRUE(server_config.HasReceivedInitialStreamFlowControlWindowBytes());
+ EXPECT_EQ(kClientStreamIFCW,
+ server_config.ReceivedInitialStreamFlowControlWindowBytes());
+ ASSERT_TRUE(server_config.HasReceivedInitialSessionFlowControlWindowBytes());
+ EXPECT_EQ(kClientSessionIFCW,
+ server_config.ReceivedInitialSessionFlowControlWindowBytes());
}
// Test negotiation of IFWA connection option.
TEST_P(EndToEndTest, NegotiatedServerInitialFlowControlWindow) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
- return;
- }
const uint32_t kClientStreamIFCW = 123456;
const uint32_t kClientSessionIFCW = 234567;
set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW);
@@ -2150,17 +2153,28 @@
WriteHeadersOnStream(stream);
stream->WriteOrBufferBody("hello", false);
- // Client should have the right values for server's receive window.
- EXPECT_EQ(kExpectedStreamIFCW,
- client_->client()
- ->client_session()
- ->config()
- ->ReceivedInitialStreamFlowControlWindowBytes());
- EXPECT_EQ(kExpectedSessionIFCW,
- client_->client()
- ->client_session()
- ->config()
- ->ReceivedInitialSessionFlowControlWindowBytes());
+ if (!version_.UsesTls()) {
+ // IFWA only exists with QUIC_CRYPTO.
+ // Client should have the right values for server's receive window.
+ ASSERT_TRUE(client_->client()
+ ->client_session()
+ ->config()
+ ->HasReceivedInitialStreamFlowControlWindowBytes());
+ EXPECT_EQ(kExpectedStreamIFCW,
+ client_->client()
+ ->client_session()
+ ->config()
+ ->ReceivedInitialStreamFlowControlWindowBytes());
+ ASSERT_TRUE(client_->client()
+ ->client_session()
+ ->config()
+ ->HasReceivedInitialSessionFlowControlWindowBytes());
+ EXPECT_EQ(kExpectedSessionIFCW,
+ client_->client()
+ ->client_session()
+ ->config()
+ ->ReceivedInitialSessionFlowControlWindowBytes());
+ }
EXPECT_EQ(kExpectedStreamIFCW, QuicFlowControllerPeer::SendWindowOffset(
stream->flow_controller()));
EXPECT_EQ(kExpectedSessionIFCW, QuicFlowControllerPeer::SendWindowOffset(
@@ -3036,9 +3050,10 @@
// TODO(b/151749109): Test server push for IETF QUIC.
class EndToEndTestServerPush : public EndToEndTest {
protected:
- const size_t kNumMaxStreams = 10;
+ static constexpr size_t kNumMaxStreams = 10;
EndToEndTestServerPush() : EndToEndTest() {
+ SetQuicFlag(FLAGS_quic_enable_http3_server_push, true);
client_config_.SetMaxBidirectionalStreamsToSend(kNumMaxStreams);
server_config_.SetMaxBidirectionalStreamsToSend(kNumMaxStreams);
client_config_.SetMaxUnidirectionalStreamsToSend(kNumMaxStreams);
@@ -3117,10 +3132,7 @@
EXPECT_EQ(kBody, client_->SendSynchronousRequest(
"https://example.com/push_example"));
QuicStreamSequencer* sequencer;
- if (!VersionUsesHttp3(client_->client()
- ->client_session()
- ->connection()
- ->transport_version())) {
+ if (!version_.UsesHttp3()) {
QuicHeadersStream* headers_stream =
QuicSpdySessionPeer::GetHeadersStream(GetClientSession());
sequencer = QuicStreamPeer::sequencer(headers_stream);
@@ -3138,27 +3150,23 @@
QUIC_DVLOG(1) << "response body " << response_body;
EXPECT_EQ(expected_body, response_body);
}
- if (!VersionUsesHttp3(client_->client()
- ->client_session()
- ->connection()
- ->transport_version())) {
+ if (!version_.UsesHttp3()) {
EXPECT_FALSE(
QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
}
}
TEST_P(EndToEndTestServerPush, ServerPushUnderLimit) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
- return;
- }
// Tests that sending a request which has 4 push resources will trigger server
// to push those 4 resources and client can handle pushed resources and match
// them with requests later.
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
+ if (version_.UsesHttp3()) {
+ static_cast<QuicSpdySession*>(client_->client()->session())
+ ->SetMaxPushId(kMaxQuicStreamId);
+ }
// Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
@@ -3202,9 +3210,10 @@
}
TEST_P(EndToEndTestServerPush, ServerPushOverLimitNonBlocking) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
+ if (version_.UsesHttp3()) {
+ // TODO(b/142504641): Re-enable this test when we support push streams
+ // arriving before the corresponding promises.
+ ASSERT_TRUE(Initialize());
return;
}
// Tests that when streams are not blocked by flow control or congestion
@@ -3213,14 +3222,9 @@
// immediately after pushing resources.
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
-
- if (VersionUsesHttp3(client_->client()
- ->client_session()
- ->connection()
- ->transport_version())) {
- // TODO(b/142504641): Re-enable this test when we support push streams
- // arriving before the corresponding promises.
- return;
+ if (version_.UsesHttp3()) {
+ static_cast<QuicSpdySession*>(client_->client()->session())
+ ->SetMaxPushId(kMaxQuicStreamId);
}
// Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
@@ -3265,11 +3269,6 @@
}
TEST_P(EndToEndTestServerPush, ServerPushOverLimitWithBlocking) {
- if (version_.UsesTls()) {
- // TODO(b/155316241): Enable this test for TLS.
- Initialize();
- return;
- }
// Tests that when server tries to send more large resources(large enough to
// be blocked by flow control window or congestion control window) than max
// open outgoing streams , server can open upto max number of outgoing
@@ -3287,6 +3286,10 @@
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
+ if (version_.UsesHttp3()) {
+ static_cast<QuicSpdySession*>(client_->client()->session())
+ ->SetMaxPushId(kMaxQuicStreamId);
+ }
// Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
@@ -3318,9 +3321,11 @@
// Check server session to see if it has max number of outgoing streams opened
// though more resources need to be pushed.
- server_thread_->Pause();
- EXPECT_EQ(kNumMaxStreams, GetServerSession()->GetNumOpenOutgoingStreams());
- server_thread_->Resume();
+ if (!version_.HasIetfQuicFrames()) {
+ server_thread_->Pause();
+ EXPECT_EQ(kNumMaxStreams, GetServerSession()->GetNumOpenOutgoingStreams());
+ server_thread_->Resume();
+ }
EXPECT_EQ(1u, client_->num_requests());
EXPECT_EQ(1u, client_->num_responses());
@@ -4241,14 +4246,12 @@
}
TEST_P(EndToEndTest, TestMaxPushId) {
- if (version_.UsesTls() ||
- !VersionHasIetfQuicFrames(version_.transport_version)) {
- // TODO(b/155316241): Enable this test for TLS.
- // Only runs for IETF QUIC.
+ if (!version_.HasIetfQuicFrames()) {
+ // MaxPushId is only implemented for IETF QUIC.
Initialize();
return;
}
- // Has to be before version test, see EndToEndTest::TearDown()
+ SetQuicFlag(FLAGS_quic_enable_http3_server_push, true);
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
@@ -4264,8 +4267,12 @@
->CanCreatePushStreamWithId(kMaxQuicStreamId));
}
-TEST_P(EndToEndTest, DISABLED_CustomTransportParameters) {
- // TODO(b/155316241): Enable this test.
+TEST_P(EndToEndTest, CustomTransportParameters) {
+ if (!version_.UsesTls()) {
+ // Custom transport parameters are only supported with TLS.
+ ASSERT_TRUE(Initialize());
+ return;
+ }
constexpr auto kCustomParameter =
static_cast<TransportParameters::TransportParameterId>(0xff34);
client_config_.custom_transport_parameters_to_send()[kCustomParameter] =
@@ -4273,9 +4280,16 @@
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
- EXPECT_EQ(server_config_.received_custom_transport_parameters().at(
+
+ server_thread_->Pause();
+ QuicConfig server_config = *GetServerSession()->config();
+ server_thread_->Resume();
+ ASSERT_NE(server_config.received_custom_transport_parameters().find(
kCustomParameter),
- "test");
+ server_config.received_custom_transport_parameters().end());
+ EXPECT_EQ(
+ server_config.received_custom_transport_parameters().at(kCustomParameter),
+ "test");
}
} // namespace