Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1306)

Unified Diff: net/quic/quic_crypto_client_stream_test.cc

Issue 1139183002: Flag-protected. Add stateless reject support to crypto streams. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@QuicCryptoClientConfig_ProcessRejection_92637704
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_crypto_client_stream.cc ('k') | net/quic/quic_crypto_server_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_crypto_client_stream_test.cc
diff --git a/net/quic/quic_crypto_client_stream_test.cc b/net/quic/quic_crypto_client_stream_test.cc
index 417652d096a86684052a6d69e97f375f7f1a5a9d..de3d68e251dfce50fa1ab554b689cf01e813752f 100644
--- a/net/quic/quic_crypto_client_stream_test.cc
+++ b/net/quic/quic_crypto_client_stream_test.cc
@@ -200,6 +200,92 @@ TEST_F(QuicCryptoClientStreamTest, ServerConfigUpdateBeforeHandshake) {
stream_->ProcessRawData(data->data(), data->length());
}
+class QuicCryptoClientStreamStatelessTest : public ::testing::Test {
+ public:
+ QuicCryptoClientStreamStatelessTest()
+ : server_crypto_config_(QuicCryptoServerConfig::TESTING,
+ QuicRandom::GetInstance()),
+ server_id_(kServerHostname, kServerPort, false, PRIVACY_MODE_DISABLED) {
+ TestClientSession* client_session = nullptr;
+ QuicCryptoClientStream* client_stream = nullptr;
+ SetupCryptoClientStreamForTest(server_id_,
+ /* supports_stateless_rejects= */ true,
+ QuicTime::Delta::FromSeconds(100000),
+ &client_crypto_config_, &client_connection_,
+ &client_session, &client_stream);
+ CHECK(client_session);
+ CHECK(client_stream);
+ client_session_.reset(client_session);
+ client_stream_.reset(client_stream);
+ }
+
+ void AdvanceHandshakeWithFakeServer() {
+ client_stream_->CryptoConnect();
+ CryptoTestUtils::AdvanceHandshake(client_connection_, client_stream_.get(),
+ 0, server_connection_,
+ server_stream_.get(), 0);
+ }
+
+ // Initializes the server_stream_ for stateless rejects.
+ void InitializeFakeStatelessRejectServer() {
+ TestServerSession* server_session = nullptr;
+ QuicCryptoServerStream* server_stream = nullptr;
+ SetupCryptoServerStreamForTest(server_id_,
+ QuicTime::Delta::FromSeconds(100000),
+ &server_crypto_config_, &server_connection_,
+ &server_session, &server_stream);
+ CHECK(server_session);
+ CHECK(server_stream);
+ server_session_.reset(server_session);
+ server_stream_.reset(server_stream);
+ CryptoTestUtils::SetupCryptoServerConfigForTest(
+ server_connection_->clock(), server_connection_->random_generator(),
+ server_session_->config(), &server_crypto_config_);
+ server_stream_->set_use_stateless_rejects_if_peer_supported(true);
+ }
+
+ // Client crypto stream state
+ PacketSavingConnection* client_connection_;
+ scoped_ptr<TestClientSession> client_session_;
+ scoped_ptr<QuicCryptoClientStream> client_stream_;
+ QuicCryptoClientConfig client_crypto_config_;
+
+ // Server crypto stream state
+ PacketSavingConnection* server_connection_;
+ scoped_ptr<TestServerSession> server_session_;
+ QuicCryptoServerConfig server_crypto_config_;
+ scoped_ptr<QuicCryptoServerStream> server_stream_;
+ QuicServerId server_id_;
+};
+
+TEST_F(QuicCryptoClientStreamStatelessTest, StatelessReject) {
+ ValueRestore<bool> old_flag(&FLAGS_enable_quic_stateless_reject_support,
+ true);
+
+ QuicCryptoClientConfig::CachedState* client_state =
+ client_crypto_config_.LookupOrCreate(server_id_);
+
+ EXPECT_FALSE(client_state->has_server_designated_connection_id());
+ EXPECT_CALL(*client_session_, OnProofValid(testing::_));
+
+ InitializeFakeStatelessRejectServer();
+ AdvanceHandshakeWithFakeServer();
+
+ EXPECT_FALSE(client_stream_->encryption_established());
+ EXPECT_FALSE(client_stream_->handshake_confirmed());
+ // Even though the handshake was not complete, the cached client_state is
+ // complete, and can be used for a subsequent successful handshake.
+ EXPECT_TRUE(client_state->IsComplete(QuicWallTime::FromUNIXSeconds(0)));
+
+ ASSERT_TRUE(client_state->has_server_designated_connection_id());
+ QuicConnectionId server_designated_id =
+ client_state->GetNextServerDesignatedConnectionId();
+ QuicConnectionId expected_id =
+ server_session_->connection()->random_generator()->RandUint64();
+ EXPECT_EQ(expected_id, server_designated_id);
+ EXPECT_FALSE(client_state->has_server_designated_connection_id());
+}
+
} // namespace
} // namespace test
} // namespace net
« no previous file with comments | « net/quic/quic_crypto_client_stream.cc ('k') | net/quic/quic_crypto_server_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698