summaryrefslogtreecommitdiff
path: root/chromium/net/quic/quic_crypto_server_stream_test.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-08-14 11:38:45 +0200
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-08-14 17:16:47 +0000
commit3a97ca8dd9b96b599ae2d33e40df0dd2f7ea5859 (patch)
tree43cc572ba067417c7341db81f71ae7cc6e0fcc3e /chromium/net/quic/quic_crypto_server_stream_test.cc
parentf61ab1ac7f855cd281809255c0aedbb1895e1823 (diff)
downloadqtwebengine-chromium-3a97ca8dd9b96b599ae2d33e40df0dd2f7ea5859.tar.gz
BASELINE: Update chromium to 45.0.2454.40
Change-Id: Id2121d9f11a8fc633677236c65a3e41feef589e4 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'chromium/net/quic/quic_crypto_server_stream_test.cc')
-rw-r--r--chromium/net/quic/quic_crypto_server_stream_test.cc201
1 files changed, 91 insertions, 110 deletions
diff --git a/chromium/net/quic/quic_crypto_server_stream_test.cc b/chromium/net/quic/quic_crypto_server_stream_test.cc
index 6874612dd1b..aa3828bbf67 100644
--- a/chromium/net/quic/quic_crypto_server_stream_test.cc
+++ b/chromium/net/quic/quic_crypto_server_stream_test.cc
@@ -95,34 +95,35 @@ class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> {
// Initializes the crypto server stream state for testing. May be
// called multiple times.
void InitializeServer() {
- TestServerSession* server_session = nullptr;
- QuicCryptoServerStream* server_stream = nullptr;
- SetupCryptoServerStreamForTest(server_id_,
- QuicTime::Delta::FromSeconds(100000),
- &server_crypto_config_, &server_connection_,
- &server_session, &server_stream);
+ TestQuicSpdyServerSession* server_session = nullptr;
+ CreateServerSessionForTest(server_id_, QuicTime::Delta::FromSeconds(100000),
+ &server_crypto_config_, &server_connection_,
+ &server_session);
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_);
}
+ QuicCryptoServerStream* server_stream() {
+ return server_session_->GetCryptoStream();
+ }
+
+ QuicCryptoClientStream* client_stream() {
+ return client_session_->GetCryptoStream();
+ }
+
// Initializes a fake client, and all its associated state, for
// testing. May be called multiple times.
void InitializeFakeClient(bool supports_stateless_rejects) {
- TestClientSession* client_session = nullptr;
- QuicCryptoClientStream* client_stream = nullptr;
- SetupCryptoClientStreamForTest(server_id_, supports_stateless_rejects,
- QuicTime::Delta::FromSeconds(100000),
- &client_crypto_config_, &client_connection_,
- &client_session, &client_stream);
+ TestQuicSpdyClientSession* client_session = nullptr;
+ CreateClientSessionForTest(server_id_, supports_stateless_rejects,
+ QuicTime::Delta::FromSeconds(100000),
+ &client_crypto_config_, &client_connection_,
+ &client_session);
CHECK(client_session);
- CHECK(client_stream);
client_session_.reset(client_session);
- client_stream_.reset(client_stream);
}
bool AsyncStrikeRegisterVerification() {
@@ -136,39 +137,34 @@ class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> {
int CompleteCryptoHandshake() {
CHECK(server_connection_);
- CHECK(server_stream_ != nullptr);
+ CHECK(server_session_ != nullptr);
return CryptoTestUtils::HandshakeWithFakeClient(
- server_connection_, server_stream_.get(), client_options_);
+ server_connection_, server_stream(), client_options_);
}
// Performs a single round of handshake message-exchange between the
// client and server.
void AdvanceHandshakeWithFakeClient() {
CHECK(server_connection_);
- CHECK(server_stream_ != nullptr);
CHECK(client_session_ != nullptr);
- CHECK(client_stream_ != nullptr);
EXPECT_CALL(*client_session_, OnProofValid(_)).Times(testing::AnyNumber());
- client_stream_->CryptoConnect();
- CryptoTestUtils::AdvanceHandshake(client_connection_, client_stream_.get(),
- 0, server_connection_,
- server_stream_.get(), 0);
+ client_stream()->CryptoConnect();
+ CryptoTestUtils::AdvanceHandshake(client_connection_, client_stream(), 0,
+ server_connection_, server_stream(), 0);
}
protected:
// Server state
PacketSavingConnection* server_connection_;
- scoped_ptr<TestServerSession> server_session_;
+ scoped_ptr<TestQuicSpdyServerSession> server_session_;
QuicCryptoServerConfig server_crypto_config_;
- scoped_ptr<QuicCryptoServerStream> server_stream_;
QuicServerId server_id_;
// Client state
PacketSavingConnection* client_connection_;
QuicCryptoClientConfig client_crypto_config_;
- scoped_ptr<TestClientSession> client_session_;
- scoped_ptr<QuicCryptoClientStream> client_stream_;
+ scoped_ptr<TestQuicSpdyClientSession> client_session_;
CryptoHandshakeMessage message_;
scoped_ptr<QuicData> message_data_;
@@ -179,13 +175,13 @@ class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> {
INSTANTIATE_TEST_CASE_P(Tests, QuicCryptoServerStreamTest, testing::Bool());
TEST_P(QuicCryptoServerStreamTest, NotInitiallyConected) {
- EXPECT_FALSE(server_stream_->encryption_established());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->encryption_established());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
}
TEST_P(QuicCryptoServerStreamTest, NotInitiallySendingStatelessRejects) {
- EXPECT_FALSE(server_stream_->use_stateless_rejects_if_peer_supported());
- EXPECT_FALSE(server_stream_->peer_supports_stateless_rejects());
+ EXPECT_FALSE(server_stream()->use_stateless_rejects_if_peer_supported());
+ EXPECT_FALSE(server_stream()->peer_supports_stateless_rejects());
}
TEST_P(QuicCryptoServerStreamTest, ConnectedAfterCHLO) {
@@ -194,27 +190,31 @@ TEST_P(QuicCryptoServerStreamTest, ConnectedAfterCHLO) {
// * One to get a source-address token and certificates.
// * One to complete the handshake.
EXPECT_EQ(2, CompleteCryptoHandshake());
- EXPECT_TRUE(server_stream_->encryption_established());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->encryption_established());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
}
TEST_P(QuicCryptoServerStreamTest, StatelessRejectAfterCHLO) {
ValueRestore<bool> old_flag(&FLAGS_enable_quic_stateless_reject_support,
true);
- server_stream_->set_use_stateless_rejects_if_peer_supported(true);
+ server_stream()->set_use_stateless_rejects_if_peer_supported(true);
InitializeFakeClient(/* supports_stateless_rejects= */ true);
AdvanceHandshakeWithFakeClient();
// Check the server to make the sure the handshake did not succeed.
- EXPECT_FALSE(server_stream_->encryption_established());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->encryption_established());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
- // Check the client state to make sure that it received a
- // server-designated connection id.
+ // Check the client state to make sure that it received a server-designated
+ // connection id.
QuicCryptoClientConfig::CachedState* client_state =
client_crypto_config_.LookupOrCreate(server_id_);
+ ASSERT_TRUE(client_state->has_server_nonce());
+ ASSERT_FALSE(client_state->GetNextServerNonce().empty());
+ ASSERT_FALSE(client_state->has_server_nonce());
+
ASSERT_TRUE(client_state->has_server_designated_connection_id());
const QuicConnectionId server_designated_connection_id =
client_state->GetNextServerDesignatedConnectionId();
@@ -229,14 +229,16 @@ TEST_P(QuicCryptoServerStreamTest, StatelessRejectAfterCHLO) {
TEST_P(QuicCryptoServerStreamTest, ConnectedAfterStatelessHandshake) {
ValueRestore<bool> old_flag(&FLAGS_enable_quic_stateless_reject_support,
true);
- server_stream_->set_use_stateless_rejects_if_peer_supported(true);
+ server_stream()->set_use_stateless_rejects_if_peer_supported(true);
InitializeFakeClient(/* supports_stateless_rejects= */ true);
AdvanceHandshakeWithFakeClient();
// On the first round, encryption will not be established.
- EXPECT_FALSE(server_stream_->encryption_established());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->encryption_established());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
+ EXPECT_EQ(1, server_stream()->num_handshake_messages());
+ EXPECT_EQ(0, server_stream()->num_handshake_messages_with_server_nonces());
// Now check the client state.
QuicCryptoClientConfig::CachedState* client_state =
@@ -255,58 +257,37 @@ TEST_P(QuicCryptoServerStreamTest, ConnectedAfterStatelessHandshake) {
// Now create new client and server streams with the existing config
// and try the handshake again (0-RTT handshake).
InitializeServer();
- server_stream_->set_use_stateless_rejects_if_peer_supported(true);
+ server_stream()->set_use_stateless_rejects_if_peer_supported(true);
InitializeFakeClient(/* supports_stateless_rejects= */ true);
- client_stream_->CryptoConnect();
- if (AsyncStrikeRegisterVerification()) {
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ client_stream()->CryptoConnect();
- // Advance the handshake. Expect that the server will be stuck
- // waiting for client nonce verification to complete.
- pair<size_t, size_t> messages_moved = CryptoTestUtils::AdvanceHandshake(
- client_connection_, client_stream_.get(), 0, server_connection_,
- server_stream_.get(), 0);
- EXPECT_EQ(1u, messages_moved.first);
- EXPECT_EQ(0u, messages_moved.second);
- EXPECT_EQ(1, strike_register_client_->PendingVerifications());
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
-
- // The server handshake completes once the nonce verification completes.
- strike_register_client_->RunPendingVerifications();
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
-
- messages_moved = CryptoTestUtils::AdvanceHandshake(
- client_connection_, client_stream_.get(), messages_moved.first,
- server_connection_, server_stream_.get(), messages_moved.second);
- EXPECT_EQ(1u, messages_moved.first);
- EXPECT_EQ(1u, messages_moved.second);
- } else {
- AdvanceHandshakeWithFakeClient();
- }
+ // In the stateless case, the second handshake contains a server-nonce, so the
+ // AsyncStrikeRegisterVerification() case will still succeed (unlike a 0-RTT
+ // handshake).
+ AdvanceHandshakeWithFakeClient();
// On the second round, encryption will be established.
- EXPECT_TRUE(server_stream_->encryption_established());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->encryption_established());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
+ EXPECT_EQ(2, server_stream()->num_handshake_messages());
+ EXPECT_EQ(1, server_stream()->num_handshake_messages_with_server_nonces());
}
TEST_P(QuicCryptoServerStreamTest, NoStatelessRejectIfNoClientSupport) {
ValueRestore<bool> old_flag(&FLAGS_enable_quic_stateless_reject_support,
true);
- server_stream_->set_use_stateless_rejects_if_peer_supported(true);
+ server_stream()->set_use_stateless_rejects_if_peer_supported(true);
- // The server is configured to use stateless rejects, but the client
- // does not support it.
+ // The server is configured to use stateless rejects, but the client does not
+ // support it.
InitializeFakeClient(/* supports_stateless_rejects= */ false);
AdvanceHandshakeWithFakeClient();
// Check the server to make the sure the handshake did not succeed.
- EXPECT_FALSE(server_stream_->encryption_established());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->encryption_established());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
// Check the client state to make sure that it did not receive a
// server-designated connection id.
@@ -329,42 +310,42 @@ TEST_P(QuicCryptoServerStreamTest, ZeroRTT) {
InitializeFakeClient(/* supports_stateless_rejects= */ false);
InitializeServer();
- client_stream_->CryptoConnect();
+ client_stream()->CryptoConnect();
if (AsyncStrikeRegisterVerification()) {
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(client_stream()->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
- // Advance the handshake. Expect that the server will be stuck
- // waiting for client nonce verification to complete.
+ // Advance the handshake. Expect that the server will be stuck waiting for
+ // client nonce verification to complete.
pair<size_t, size_t> messages_moved = CryptoTestUtils::AdvanceHandshake(
- client_connection_, client_stream_.get(), 0, server_connection_,
- server_stream_.get(), 0);
+ client_connection_, client_stream(), 0, server_connection_,
+ server_stream(), 0);
EXPECT_EQ(1u, messages_moved.first);
EXPECT_EQ(0u, messages_moved.second);
EXPECT_EQ(1, strike_register_client_->PendingVerifications());
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_FALSE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(client_stream()->handshake_confirmed());
+ EXPECT_FALSE(server_stream()->handshake_confirmed());
// The server handshake completes once the nonce verification completes.
strike_register_client_->RunPendingVerifications();
- EXPECT_FALSE(client_stream_->handshake_confirmed());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_FALSE(client_stream()->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
messages_moved = CryptoTestUtils::AdvanceHandshake(
- client_connection_, client_stream_.get(), messages_moved.first,
- server_connection_, server_stream_.get(), messages_moved.second);
+ client_connection_, client_stream(), messages_moved.first,
+ server_connection_, server_stream(), messages_moved.second);
EXPECT_EQ(1u, messages_moved.first);
EXPECT_EQ(1u, messages_moved.second);
- EXPECT_TRUE(client_stream_->handshake_confirmed());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(client_stream()->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
} else {
CryptoTestUtils::CommunicateHandshakeMessages(
- client_connection_, client_stream_.get(), server_connection_,
- server_stream_.get());
+ client_connection_, client_stream(), server_connection_,
+ server_stream());
}
- EXPECT_EQ(1, client_stream_->num_sent_client_hellos());
+ EXPECT_EQ(1, client_stream()->num_sent_client_hellos());
}
TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) {
@@ -374,8 +355,8 @@ TEST_P(QuicCryptoServerStreamTest, MessageAfterHandshake) {
SendConnectionClose(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE));
message_.set_tag(kCHLO);
ConstructHandshakeMessage();
- server_stream_->ProcessRawData(message_data_->data(),
- message_data_->length());
+ server_stream()->ProcessRawData(message_data_->data(),
+ message_data_->length());
}
TEST_P(QuicCryptoServerStreamTest, BadMessageType) {
@@ -383,8 +364,8 @@ TEST_P(QuicCryptoServerStreamTest, BadMessageType) {
ConstructHandshakeMessage();
EXPECT_CALL(*server_connection_,
SendConnectionClose(QUIC_INVALID_CRYPTO_MESSAGE_TYPE));
- server_stream_->ProcessRawData(message_data_->data(),
- message_data_->length());
+ server_stream()->ProcessRawData(message_data_->data(),
+ message_data_->length());
}
TEST_P(QuicCryptoServerStreamTest, WithoutCertificates) {
@@ -394,34 +375,34 @@ TEST_P(QuicCryptoServerStreamTest, WithoutCertificates) {
// Only 2 client hellos need to be sent in the no-certs case: one to get the
// source-address token and the second to finish.
EXPECT_EQ(2, CompleteCryptoHandshake());
- EXPECT_TRUE(server_stream_->encryption_established());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->encryption_established());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
}
TEST_P(QuicCryptoServerStreamTest, ChannelID) {
client_options_.channel_id_enabled = true;
client_options_.channel_id_source_async = false;
// CompleteCryptoHandshake verifies
- // server_stream_->crypto_negotiated_params().channel_id is correct.
+ // server_stream()->crypto_negotiated_params().channel_id is correct.
EXPECT_EQ(2, CompleteCryptoHandshake());
- EXPECT_TRUE(server_stream_->encryption_established());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->encryption_established());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
}
TEST_P(QuicCryptoServerStreamTest, ChannelIDAsync) {
client_options_.channel_id_enabled = true;
client_options_.channel_id_source_async = true;
// CompleteCryptoHandshake verifies
- // server_stream_->crypto_negotiated_params().channel_id is correct.
+ // server_stream()->crypto_negotiated_params().channel_id is correct.
EXPECT_EQ(2, CompleteCryptoHandshake());
- EXPECT_TRUE(server_stream_->encryption_established());
- EXPECT_TRUE(server_stream_->handshake_confirmed());
+ EXPECT_TRUE(server_stream()->encryption_established());
+ EXPECT_TRUE(server_stream()->handshake_confirmed());
}
TEST_P(QuicCryptoServerStreamTest, OnlySendSCUPAfterHandshakeComplete) {
// An attempt to send a SCUP before completing handshake should fail.
- server_stream_->SendServerConfigUpdate(nullptr);
- EXPECT_EQ(0, server_stream_->num_server_config_update_messages_sent());
+ server_stream()->SendServerConfigUpdate(nullptr);
+ EXPECT_EQ(0, server_stream()->num_server_config_update_messages_sent());
}
TEST_P(QuicCryptoServerStreamTest, DoesPeerSupportStatelessRejects) {