gfe-relnote: (n/a) Remove the stateless reject variants from quic/core/http:end_to_end_test.
PiperOrigin-RevId: 247981730
Change-Id: I777faf44a02fdb978a873c4aff0408effe280b03
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 04567f1..a859f87 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -83,18 +83,11 @@
TestParams(const ParsedQuicVersionVector& client_supported_versions,
const ParsedQuicVersionVector& server_supported_versions,
ParsedQuicVersion negotiated_version,
- bool client_supports_stateless_rejects,
- bool server_uses_stateless_rejects_if_peer_supported,
- QuicTag congestion_control_tag,
- bool use_cheap_stateless_reject)
+ QuicTag congestion_control_tag)
: client_supported_versions(client_supported_versions),
server_supported_versions(server_supported_versions),
negotiated_version(negotiated_version),
- client_supports_stateless_rejects(client_supports_stateless_rejects),
- server_uses_stateless_rejects_if_peer_supported(
- server_uses_stateless_rejects_if_peer_supported),
- congestion_control_tag(congestion_control_tag),
- use_cheap_stateless_reject(use_cheap_stateless_reject) {}
+ congestion_control_tag(congestion_control_tag) {}
friend std::ostream& operator<<(std::ostream& os, const TestParams& p) {
os << "{ server_supported_versions: "
@@ -103,29 +96,19 @@
<< ParsedQuicVersionVectorToString(p.client_supported_versions);
os << " negotiated_version: "
<< ParsedQuicVersionToString(p.negotiated_version);
- os << " client_supports_stateless_rejects: "
- << p.client_supports_stateless_rejects;
- os << " server_uses_stateless_rejects_if_peer_supported: "
- << p.server_uses_stateless_rejects_if_peer_supported;
os << " congestion_control_tag: "
- << QuicTagToString(p.congestion_control_tag);
- os << " use_cheap_stateless_reject: " << p.use_cheap_stateless_reject
- << " }";
+ << QuicTagToString(p.congestion_control_tag) << " }";
return os;
}
ParsedQuicVersionVector client_supported_versions;
ParsedQuicVersionVector server_supported_versions;
ParsedQuicVersion negotiated_version;
- bool client_supports_stateless_rejects;
- bool server_uses_stateless_rejects_if_peer_supported;
QuicTag congestion_control_tag;
- bool use_cheap_stateless_reject;
};
// Constructs various test permutations.
-std::vector<TestParams> GetTestParams(bool use_tls_handshake,
- bool test_stateless_rejects) {
+std::vector<TestParams> GetTestParams(bool use_tls_handshake) {
QuicFlagSaver flags;
// Divide the versions into buckets in which the intra-frame format
// is compatible. When clients encounter QUIC version negotiation
@@ -157,92 +140,35 @@
}
}
- // This must be kept in sync with the number of nested for-loops below as it
- // is used to prune the number of tests that are run.
- const int kMaxEnabledOptions = 4;
- int max_enabled_options = 0;
std::vector<TestParams> params;
for (const QuicTag congestion_control_tag : {kRENO, kTBBR, kQBIC, kTPCC}) {
- for (bool server_uses_stateless_rejects_if_peer_supported : {true, false}) {
- for (bool client_supports_stateless_rejects : {true, false}) {
- for (bool use_cheap_stateless_reject : {true, false}) {
- int enabled_options = 0;
- if (congestion_control_tag != kQBIC) {
- ++enabled_options;
- }
- if (client_supports_stateless_rejects) {
- ++enabled_options;
- }
- if (server_uses_stateless_rejects_if_peer_supported) {
- ++enabled_options;
- }
- if (use_cheap_stateless_reject) {
- ++enabled_options;
- }
- CHECK_GE(kMaxEnabledOptions, enabled_options);
- if (enabled_options > max_enabled_options) {
- max_enabled_options = enabled_options;
- }
+ for (const ParsedQuicVersionVector& client_versions : version_buckets) {
+ if (FilterSupportedVersions(client_versions).empty()) {
+ continue;
+ }
+ // Add an entry for server and client supporting all versions.
+ params.push_back(TestParams(client_versions, all_supported_versions,
+ client_versions.front(),
+ congestion_control_tag));
- // Run tests with no options, a single option, or all the
- // options enabled to avoid a combinatorial explosion.
- if (enabled_options > 1 && enabled_options < kMaxEnabledOptions) {
- continue;
- }
+ // Test client supporting all versions and server supporting
+ // 1 version. Simulate an old server and exercise version
+ // downgrade in the client. Protocol negotiation should
+ // occur. Skip the i = 0 case because it is essentially the
+ // same as the default case.
+ for (size_t i = 1; i < client_versions.size(); ++i) {
+ ParsedQuicVersionVector server_supported_versions;
+ server_supported_versions.push_back(client_versions[i]);
+ if (FilterSupportedVersions(server_supported_versions).empty()) {
+ continue;
+ }
+ params.push_back(TestParams(client_versions, server_supported_versions,
+ server_supported_versions.front(),
+ congestion_control_tag));
+ } // End of inner version loop.
+ } // End of outer version loop.
+ } // End of congestion_control_tag loop.
- // There are many stateless reject combinations, so don't test them
- // unless requested.
- if ((server_uses_stateless_rejects_if_peer_supported ||
- client_supports_stateless_rejects ||
- use_cheap_stateless_reject) &&
- !test_stateless_rejects) {
- continue;
- }
-
- for (const ParsedQuicVersionVector& client_versions :
- version_buckets) {
- if (FilterSupportedVersions(client_versions).empty()) {
- continue;
- }
- // Add an entry for server and client supporting all
- // versions.
- params.push_back(TestParams(
- client_versions, all_supported_versions,
- client_versions.front(), client_supports_stateless_rejects,
- server_uses_stateless_rejects_if_peer_supported,
- congestion_control_tag, use_cheap_stateless_reject));
-
- // Run version negotiation tests tests with no options, or
- // all the options enabled to avoid a combinatorial
- // explosion.
- if (enabled_options > 1 && enabled_options < kMaxEnabledOptions) {
- continue;
- }
-
- // Test client supporting all versions and server supporting
- // 1 version. Simulate an old server and exercise version
- // downgrade in the client. Protocol negotiation should
- // occur. Skip the i = 0 case because it is essentially the
- // same as the default case.
- for (size_t i = 1; i < client_versions.size(); ++i) {
- ParsedQuicVersionVector server_supported_versions;
- server_supported_versions.push_back(client_versions[i]);
- if (FilterSupportedVersions(server_supported_versions).empty()) {
- continue;
- }
- params.push_back(TestParams(
- client_versions, server_supported_versions,
- server_supported_versions.front(),
- client_supports_stateless_rejects,
- server_uses_stateless_rejects_if_peer_supported,
- congestion_control_tag, use_cheap_stateless_reject));
- } // End of inner version loop.
- } // End of outer version loop.
- } // End of use_cheap_stateless_reject loop.
- } // End of client_supports_stateless_rejects loop.
- } // End of server_uses_stateless_rejects_if_peer_supported loop.
- } // End of congestion_control_tag loop.
- CHECK_EQ(kMaxEnabledOptions, max_enabled_options);
return params;
}
@@ -406,9 +332,6 @@
copt.push_back(kTPCC);
}
- if (GetParam().client_supports_stateless_rejects) {
- copt.push_back(kSREJ);
- }
client_config_.SetConnectionOptionsToSend(copt);
// Start the server first, because CreateQuicClient() attempts
@@ -448,9 +371,6 @@
}
void StartServer() {
- SetQuicReloadableFlag(quic_use_cheap_stateless_rejects,
- GetParam().use_cheap_stateless_reject);
-
auto* test_server = new QuicTestServer(
crypto_test_utils::ProofSourceForTesting(), server_config_,
server_supported_versions_, &memory_cache_backend_,
@@ -467,10 +387,6 @@
QuicServerPeer::GetDispatcher(server_thread_->server());
QuicDispatcherPeer::UseWriter(dispatcher, server_writer_);
- SetQuicReloadableFlag(
- enable_quic_stateless_reject_support,
- GetParam().server_uses_stateless_rejects_if_peer_supported);
-
server_writer_->Initialize(QuicDispatcherPeer::GetHelper(dispatcher),
QuicDispatcherPeer::GetAlarmFactory(dispatcher),
QuicMakeUnique<ServerDelegate>(dispatcher));
@@ -524,13 +440,10 @@
EXPECT_EQ(0u, client_stats.packets_lost);
}
EXPECT_EQ(0u, client_stats.packets_discarded);
- // When doing 0-RTT with stateless rejects, the encrypted requests cause
- // a retranmission of the SREJ packets which are dropped by the client.
// When client starts with an unsupported version, the version negotiation
// packet sent by server for the old connection (respond for the connection
// close packet) will be dropped by the client.
- if (!BothSidesSupportStatelessRejects() &&
- !ServerSendsVersionNegotiation()) {
+ if (!ServerSendsVersionNegotiation()) {
EXPECT_EQ(0u, client_stats.packets_dropped);
}
if (!ClientSupportsIetfQuicNotSupportedByServer()) {
@@ -542,13 +455,7 @@
EXPECT_EQ(client_stats.packets_received, client_stats.packets_processed);
}
- const int num_expected_stateless_rejects =
- (BothSidesSupportStatelessRejects() &&
- client_->client()->client_session()->GetNumSentClientHellos() > 0)
- ? 1
- : 0;
- EXPECT_EQ(num_expected_stateless_rejects,
- client_->client()->num_stateless_rejects_received());
+ EXPECT_EQ(0, client_->client()->num_stateless_rejects_received());
server_thread_->Pause();
QuicConnectionStats server_stats = GetServerConnection()->GetStats();
@@ -562,11 +469,6 @@
server_thread_->Resume();
}
- bool BothSidesSupportStatelessRejects() {
- return (GetParam().server_uses_stateless_rejects_if_peer_supported &&
- GetParam().client_supports_stateless_rejects);
- }
-
// Client supports IETF QUIC, while it is not supported by server.
bool ClientSupportsIetfQuicNotSupportedByServer() {
return client_supported_versions_[0].transport_version > QUIC_VERSION_43 &&
@@ -642,19 +544,13 @@
// Run all end to end tests with all supported versions.
INSTANTIATE_TEST_SUITE_P(EndToEndTests,
EndToEndTest,
- ::testing::ValuesIn(GetTestParams(false, false)));
+ ::testing::ValuesIn(GetTestParams(false)));
class EndToEndTestWithTls : public EndToEndTest {};
INSTANTIATE_TEST_SUITE_P(EndToEndTestsWithTls,
EndToEndTestWithTls,
- ::testing::ValuesIn(GetTestParams(true, false)));
-
-class EndToEndTestWithStatelessReject : public EndToEndTest {};
-
-INSTANTIATE_TEST_SUITE_P(WithStatelessReject,
- EndToEndTestWithStatelessReject,
- ::testing::ValuesIn(GetTestParams(false, true)));
+ ::testing::ValuesIn(GetTestParams(true)));
TEST_P(EndToEndTestWithTls, HandshakeSuccessful) {
ASSERT_TRUE(Initialize());
@@ -678,22 +574,6 @@
EXPECT_FALSE(QuicStreamSequencerPeer::IsUnderlyingBufferAllocated(sequencer));
}
-TEST_P(EndToEndTestWithStatelessReject, SimpleRequestResponseStatless) {
- ASSERT_TRUE(Initialize());
-
- EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
- EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
- int expected_num_client_hellos = 2;
- if (ServerSendsVersionNegotiation()) {
- ++expected_num_client_hellos;
- if (BothSidesSupportStatelessRejects()) {
- ++expected_num_client_hellos;
- }
- }
- EXPECT_EQ(expected_num_client_hellos,
- client_->client()->GetNumSentClientHellos());
-}
-
TEST_P(EndToEndTest, SimpleRequestResponse) {
ASSERT_TRUE(Initialize());
@@ -702,9 +582,6 @@
int expected_num_client_hellos = 2;
if (ServerSendsVersionNegotiation()) {
++expected_num_client_hellos;
- if (BothSidesSupportStatelessRejects()) {
- ++expected_num_client_hellos;
- }
}
EXPECT_EQ(expected_num_client_hellos,
client_->client()->GetNumSentClientHellos());
@@ -719,13 +596,7 @@
EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
EXPECT_EQ("200", client_->response_headers()->find(":status")->second);
- int expected_num_client_hellos = 3;
- if (BothSidesSupportStatelessRejects()) {
- ++expected_num_client_hellos;
- }
-
- EXPECT_EQ(expected_num_client_hellos,
- client_->client()->GetNumSentClientHellos());
+ EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
}
TEST_P(EndToEndTest, SimpleRequestResponseZeroConnectionID) {
@@ -740,9 +611,6 @@
int expected_num_client_hellos = 2;
if (ServerSendsVersionNegotiation()) {
++expected_num_client_hellos;
- if (BothSidesSupportStatelessRejects()) {
- ++expected_num_client_hellos;
- }
}
EXPECT_EQ(expected_num_client_hellos,
client_->client()->GetNumSentClientHellos());
@@ -1043,14 +911,10 @@
}
TEST_P(EndToEndTest, LargePostWithPacketLoss) {
- if (!BothSidesSupportStatelessRejects()) {
- // Connect with lower fake packet loss than we'd like to test.
- // Until b/10126687 is fixed, losing handshake packets is pretty
- // brutal.
- // TODO(jokulik): Until we support redundant SREJ packets, don't
- // drop handshake packets for stateless rejects.
- SetPacketLossPercentage(5);
- }
+ // Connect with lower fake packet loss than we'd like to test.
+ // Until b/10126687 is fixed, losing handshake packets is pretty
+ // brutal.
+ SetPacketLossPercentage(5);
ASSERT_TRUE(Initialize());
// Wait for the server SHLO before upping the packet loss.
@@ -1102,13 +966,9 @@
}
TEST_P(EndToEndTest, LargePostWithPacketLossAndBlockedSocket) {
- if (!BothSidesSupportStatelessRejects()) {
- // Connect with lower fake packet loss than we'd like to test. Until
- // b/10126687 is fixed, losing handshake packets is pretty brutal.
- // TODO(jokulik): Until we support redundant SREJ packets, don't
- // drop handshake packets for stateless rejects.
- SetPacketLossPercentage(5);
- }
+ // Connect with lower fake packet loss than we'd like to test. Until
+ // b/10126687 is fixed, losing handshake packets is pretty brutal.
+ SetPacketLossPercentage(5);
ASSERT_TRUE(Initialize());
// Wait for the server SHLO before upping the packet loss.
@@ -1162,17 +1022,9 @@
EXPECT_EQ(kFooResponseBody,
client_->SendCustomSynchronousRequest(headers, body));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos on the latest
- // session is 1.
- const int expected_num_hellos_latest_session =
- (BothSidesSupportStatelessRejects() && !ServerSendsVersionNegotiation())
- ? 1
- : 2;
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+ // The same session is used for both hellos, so the number of hellos sent on
+ // that session is 2.
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1207,13 +1059,9 @@
ASSERT_TRUE(client_->client()->connected());
EXPECT_EQ(kFooResponseBody,
client_->SendCustomSynchronousRequest(headers, body));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos sent on the
- // latest session is 1.
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+ // The same session is used for both hellos, so the number of hellos sent on
+ // that session is 2.
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1229,17 +1077,9 @@
ASSERT_TRUE(Initialize());
EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos on that second
- // latest session is 1.
- const int expected_num_hellos_latest_session =
- (BothSidesSupportStatelessRejects() && !ServerSendsVersionNegotiation())
- ? 1
- : 2;
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+ // The same session is used for both hellos, so the number of hellos sent on
+ // that session is 2.
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1272,13 +1112,8 @@
EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
ASSERT_TRUE(client_->client()->connected());
EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos sent on the
- // latest session is 1.
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1302,17 +1137,9 @@
EXPECT_EQ(kFooResponseBody,
client_->SendCustomSynchronousRequest(headers, body));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos on the latest
- // session is 1.
- const int expected_num_hellos_latest_session =
- (BothSidesSupportStatelessRejects() && !ServerSendsVersionNegotiation())
- ? 1
- : 2;
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+ // The same session is used for both hellos, so the number of hellos sent on
+ // that session is 2.
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1347,13 +1174,8 @@
ASSERT_TRUE(client_->client()->connected());
EXPECT_EQ(kFooResponseBody,
client_->SendCustomSynchronousRequest(headers, body));
- // In the non-stateless case, the same session is used for both
- // hellos, so the number of hellos sent on that session is 2. In
- // the stateless case, the first client session will be completely
- // torn down after the reject. The number of hellos sent on the
- // latest session is 1.
- EXPECT_EQ(expected_num_hellos_latest_session,
- client_->client()->client_session()->GetNumSentClientHellos());
+
+ EXPECT_EQ(2, client_->client()->client_session()->GetNumSentClientHellos());
if (ServerSendsVersionNegotiation()) {
EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
} else {
@@ -1363,9 +1185,9 @@
VerifyCleanConnection(false);
}
-TEST_P(EndToEndTest, StatelessRejectWithPacketLoss) {
+TEST_P(EndToEndTest, RejectWithPacketLoss) {
// In this test, we intentionally drop the first packet from the
- // server, which corresponds with the initial REJ/SREJ response from
+ // server, which corresponds with the initial REJ response from
// the server.
server_writer_->set_fake_drop_first_n_packets(1);
ASSERT_TRUE(Initialize());
@@ -1872,13 +1694,9 @@
// TODO(nharper): Needs to get turned back to EndToEndTestWithTls
// when we figure out why the test doesn't work on chrome.
TEST_P(EndToEndTest, MaxStreamsUberTest) {
- if (!BothSidesSupportStatelessRejects()) {
- // Connect with lower fake packet loss than we'd like to test. Until
- // b/10126687 is fixed, losing handshake packets is pretty brutal.
- // TODO(jokulik): Until we support redundant SREJ packets, don't
- // drop handshake packets for stateless rejects.
- SetPacketLossPercentage(1);
- }
+ // Connect with lower fake packet loss than we'd like to test. Until
+ // b/10126687 is fixed, losing handshake packets is pretty brutal.
+ SetPacketLossPercentage(1);
ASSERT_TRUE(Initialize());
std::string large_body(10240, 'a');
int max_streams = 100;
@@ -2295,11 +2113,8 @@
// socket, an AckNotifierDelegate will get informed that the data it is
// interested in has been ACKed. This tests end-to-end ACK notification, and
// demonstrates that retransmissions do not break this functionality.
- if (!BothSidesSupportStatelessRejects()) {
- // TODO(jokulik): Until we support redundant SREJ packets, don't
- // drop handshake packets for stateless rejects.
- SetPacketLossPercentage(5);
- }
+
+ SetPacketLossPercentage(5);
ASSERT_TRUE(Initialize());
// Wait for the server SHLO before upping the packet loss.
@@ -2963,7 +2778,7 @@
// Run all server push end to end tests with all supported versions.
INSTANTIATE_TEST_SUITE_P(EndToEndTestsServerPush,
EndToEndTestServerPush,
- ::testing::ValuesIn(GetTestParams(false, false)));
+ ::testing::ValuesIn(GetTestParams(false)));
TEST_P(EndToEndTestServerPush, ServerPush) {
ASSERT_TRUE(Initialize());
@@ -3258,10 +3073,7 @@
SetPacketLossPercentage(1);
client_->SendRequest("/huge_response");
client_->WaitForResponse();
- // TODO(fayang): Fix this test to work with stateless rejects.
- if (!BothSidesSupportStatelessRejects()) {
- VerifyCleanConnection(true);
- }
+ VerifyCleanConnection(true);
}
// Regression test for b/111515567
@@ -3682,7 +3494,7 @@
INSTANTIATE_TEST_SUITE_P(EndToEndPacketReorderingTests,
EndToEndPacketReorderingTest,
- testing::ValuesIn(GetTestParams(false, false)));
+ testing::ValuesIn(GetTestParams(false)));
TEST_P(EndToEndPacketReorderingTest, ReorderedConnectivityProbing) {
ASSERT_TRUE(Initialize());