diff --git a/quic/core/quic_crypto_server_stream_test.cc b/quic/core/quic_crypto_server_stream_test.cc
index b6dfb5e..5105a27 100644
--- a/quic/core/quic_crypto_server_stream_test.cc
+++ b/quic/core/quic_crypto_server_stream_test.cc
@@ -113,13 +113,12 @@
 
   // Initializes a fake client, and all its associated state, for
   // testing.  May be called multiple times.
-  void InitializeFakeClient(bool supports_stateless_rejects) {
+  void InitializeFakeClient() {
     TestQuicSpdyClientSession* client_session = nullptr;
     helpers_.push_back(QuicMakeUnique<NiceMock<MockQuicConnectionHelper>>());
     alarm_factories_.push_back(QuicMakeUnique<MockAlarmFactory>());
     CreateClientSessionForTest(
-        server_id_, supports_stateless_rejects,
-        QuicTime::Delta::FromSeconds(100000), supported_versions_,
+        server_id_, QuicTime::Delta::FromSeconds(100000), supported_versions_,
         helpers_.back().get(), alarm_factories_.back().get(),
         &client_crypto_config_, &client_connection_, &client_session);
     CHECK(client_session);
@@ -214,7 +213,7 @@
 
 TEST_P(QuicCryptoServerStreamTest, ForwardSecureAfterCHLO) {
   Initialize();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   // Do a first handshake in order to prime the client config with the server's
   // information.
@@ -224,7 +223,7 @@
 
   // Now do another handshake, with the blocking SHLO connection option.
   InitializeServer();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   AdvanceHandshakeWithFakeClient();
   EXPECT_TRUE(server_stream()->encryption_established());
@@ -235,7 +234,7 @@
 
 TEST_P(QuicCryptoServerStreamTest, ZeroRTT) {
   Initialize();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   // Do a first handshake in order to prime the client config with the server's
   // information.
@@ -244,7 +243,7 @@
 
   // Now do another handshake, hopefully in 0-RTT.
   QUIC_LOG(INFO) << "Resetting for 0-RTT handshake attempt";
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
   InitializeServer();
 
   EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber());
@@ -266,7 +265,7 @@
 
 TEST_P(QuicCryptoServerStreamTest, FailByPolicy) {
   Initialize();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _, _, _))
       .WillOnce(testing::Return(false));
@@ -308,7 +307,7 @@
 TEST_P(QuicCryptoServerStreamTest, SendSCUPAfterHandshakeComplete) {
   Initialize();
 
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   // Do a first handshake in order to prime the client config with the server's
   // information.
@@ -316,7 +315,7 @@
 
   // Now do another handshake, with the blocking SHLO connection option.
   InitializeServer();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
   AdvanceHandshakeWithFakeClient();
 
   // Send a SCUP message and ensure that the client was able to verify it.
@@ -343,7 +342,7 @@
 
 TEST_P(QuicCryptoServerStreamTestWithFailingProofSource, Test) {
   Initialize();
-  InitializeFakeClient(/* supports_stateless_rejects= */ false);
+  InitializeFakeClient();
 
   EXPECT_CALL(*server_session_->helper(), CanAcceptClientHello(_, _, _, _, _))
       .WillOnce(testing::Return(true));
diff --git a/quic/test_tools/quic_test_utils.cc b/quic/test_tools/quic_test_utils.cc
index 506d323..e1f036d 100644
--- a/quic/test_tools/quic_test_utils.cc
+++ b/quic/test_tools/quic_test_utils.cc
@@ -1062,14 +1062,6 @@
   return config;
 }
 
-QuicConfig DefaultQuicConfigStatelessRejects() {
-  QuicConfig config = DefaultQuicConfig();
-  QuicTagVector copt;
-  copt.push_back(kSREJ);
-  config.SetConnectionOptionsToSend(copt);
-  return config;
-}
-
 QuicTransportVersionVector SupportedTransportVersions(
     QuicTransportVersion version) {
   QuicTransportVersionVector versions;
@@ -1100,7 +1092,6 @@
 
 void CreateClientSessionForTest(
     QuicServerId server_id,
-    bool supports_stateless_rejects,
     QuicTime::Delta connection_start_time,
     const ParsedQuicVersionVector& supported_versions,
     MockQuicConnectionHelper* helper,
@@ -1115,9 +1106,7 @@
       << "Connections must start at non-zero times, otherwise the "
       << "strike-register will be unhappy.";
 
-  QuicConfig config = supports_stateless_rejects
-                          ? DefaultQuicConfigStatelessRejects()
-                          : DefaultQuicConfig();
+  QuicConfig config = DefaultQuicConfig();
   *client_connection = new PacketSavingConnection(
       helper, alarm_factory, Perspective::IS_CLIENT, supported_versions);
   *client_session = new TestQuicSpdyClientSession(*client_connection, config,
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index f64ddbd..a889804 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -160,9 +160,6 @@
 // Returns QuicConfig set to default values.
 QuicConfig DefaultQuicConfig();
 
-// Returns a QuicConfig set to default values that supports stateless rejects.
-QuicConfig DefaultQuicConfigStatelessRejects();
-
 // Returns a version vector consisting of |version|.
 QuicTransportVersionVector SupportedTransportVersions(
     QuicTransportVersion version);
@@ -1072,7 +1069,6 @@
 // Creates a client session for testing.
 //
 // server_id: The server id associated with this stream.
-// supports_stateless_rejects:  Does this client support stateless rejects.
 // connection_start_time: The time to set for the connection clock.
 //   Needed for strike-register nonce verification.  The client
 //   connection_start_time should be synchronized witht the server
@@ -1087,7 +1083,6 @@
 //   session.  The new object will be owned by the caller.
 void CreateClientSessionForTest(
     QuicServerId server_id,
-    bool supports_stateless_rejects,
     QuicTime::Delta connection_start_time,
     const ParsedQuicVersionVector& supported_versions,
     MockQuicConnectionHelper* helper,
