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

Unified Diff: net/quic/quic_crypto_server_stream_test.cc

Issue 14411004: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use CONFIG_VERSION insteaf of VERSION Created 7 years, 8 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
Index: net/quic/quic_crypto_server_stream_test.cc
diff --git a/net/quic/quic_crypto_server_stream_test.cc b/net/quic/quic_crypto_server_stream_test.cc
index b567f85b1f469baac3af99831dcfed51cb45c06e..c9b779c33a48aab1e3c7d8464f48a32cfe8c3d6b 100644
--- a/net/quic/quic_crypto_server_stream_test.cc
+++ b/net/quic/quic_crypto_server_stream_test.cc
@@ -12,9 +12,12 @@
#include "net/quic/crypto/crypto_framer.h"
#include "net/quic/crypto/crypto_handshake.h"
#include "net/quic/crypto/crypto_protocol.h"
+#include "net/quic/crypto/crypto_server_config.h"
#include "net/quic/crypto/crypto_utils.h"
#include "net/quic/crypto/quic_decrypter.h"
#include "net/quic/crypto/quic_encrypter.h"
+#include "net/quic/quic_crypto_client_stream.h"
+#include "net/quic/quic_crypto_server_stream.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_session.h"
#include "net/quic/test_tools/crypto_test_utils.h"
@@ -73,6 +76,12 @@ class QuicCryptoServerStreamTest : public ::testing::Test {
session_(connection_, true),
crypto_config_(QuicCryptoServerConfig::TESTING),
stream_(config_, crypto_config_, &session_) {
+ // We advance the clock initially because the default time is zero and the
+ // strike register worries that we've just overflowed a uint32 time.
+ connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
+ // TODO(rtenneti): Enable testing of ProofSource.
+ // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting());
+
CryptoTestUtils::SetupCryptoServerConfigForTest(
connection_->clock(), connection_->random_generator(), &config_,
&crypto_config_);
@@ -83,8 +92,8 @@ class QuicCryptoServerStreamTest : public ::testing::Test {
message_data_.reset(framer.ConstructHandshakeMessage(message_));
}
- void CompleteCryptoHandshake() {
- CryptoTestUtils::HandshakeWithFakeClient(connection_, &stream_);
+ int CompleteCryptoHandshake() {
+ return CryptoTestUtils::HandshakeWithFakeClient(connection_, &stream_);
}
protected:
@@ -115,10 +124,81 @@ TEST_F(QuicCryptoServerStreamTest, ConnectedAfterCHLO) {
return;
}
- CompleteCryptoHandshake();
+ EXPECT_EQ(2, CompleteCryptoHandshake());
EXPECT_TRUE(stream_.handshake_complete());
}
+TEST_F(QuicCryptoServerStreamTest, ZeroRTT) {
+ if (!Aes128GcmEncrypter::IsSupported()) {
+ LOG(INFO) << "AES GCM not supported. Test skipped.";
+ return;
+ }
+
+ QuicGuid guid(1);
+ IPAddressNumber ip;
+ ParseIPLiteralToNumber("127.0.0.1", &ip);
+ IPEndPoint addr(ip, 0);
+ PacketSavingConnection* client_conn =
+ new PacketSavingConnection(guid, addr, false);
+ PacketSavingConnection* server_conn =
+ new PacketSavingConnection(guid, addr, false);
+ client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1000000));
+ server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1000000));
+
+ scoped_ptr<TestSession> client_session(new TestSession(client_conn, true));
+ scoped_ptr<TestSession> server_session(new TestSession(server_conn, true));
+
+ QuicConfig client_config;
+ QuicCryptoClientConfig client_crypto_config;
+
+ client_config.SetDefaults();
+ client_crypto_config.SetDefaults();
+
+ scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream(
+ "test.example.com", client_config, client_session.get(),
+ &client_crypto_config));
+
+ // Do a first handshake in order to prime the client config with the server's
+ // information.
+ CHECK(client->CryptoConnect());
+ CHECK_EQ(1u, client_conn->packets_.size());
+
+ scoped_ptr<QuicCryptoServerStream> server(
+ new QuicCryptoServerStream(config_, crypto_config_,
+ server_session.get()));
+
+ CryptoTestUtils::CommunicateHandshakeMessages(
+ client_conn, client.get(), server_conn, server.get());
+ EXPECT_EQ(2, client->num_sent_client_hellos());
+
+ // Now do another handshake, hopefully in 0-RTT.
+ LOG(INFO) << "Resetting for 0-RTT handshake attempt";
+
+ client_conn = new PacketSavingConnection(guid, addr, false);
+ server_conn = new PacketSavingConnection(guid, addr, false);
+ // We need to advance time past the strike-server window so that it's
+ // authoritative in this time span.
+ client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1002000));
+ server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1002000));
+
+ // This causes the client's nonce to be different and thus stops the
+ // strike-register from rejecting the repeated nonce.
+ client_conn->random_generator()->Reseed(NULL, 0);
+ client_session.reset(new TestSession(client_conn, true));
+ server_session.reset(new TestSession(server_conn, true));
+ client.reset(new QuicCryptoClientStream(
+ "test.example.com", client_config, client_session.get(),
+ &client_crypto_config));
+ server.reset(new QuicCryptoServerStream(config_, crypto_config_,
+ server_session.get()));
+
+ CHECK(client->CryptoConnect());
+
+ CryptoTestUtils::CommunicateHandshakeMessages(
+ client_conn, client.get(), server_conn, server.get());
+ EXPECT_EQ(1, client->num_sent_client_hellos());
+}
+
TEST_F(QuicCryptoServerStreamTest, MessageAfterHandshake) {
if (!Aes128GcmEncrypter::IsSupported()) {
LOG(INFO) << "AES GCM not supported. Test skipped.";

Powered by Google App Engine
This is Rietveld 408576698