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

Side by Side Diff: net/quic/quic_crypto_server_stream_test.cc

Issue 15074007: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix for windows Created 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_crypto_server_stream.cc ('k') | net/quic/quic_crypto_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_crypto_server_stream.h" 5 #include "net/quic/quic_crypto_server_stream.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 DISALLOW_COPY_AND_ASSIGN(TestQuicVisitor); 54 DISALLOW_COPY_AND_ASSIGN(TestQuicVisitor);
55 }; 55 };
56 56
57 class QuicCryptoServerStreamTest : public ::testing::Test { 57 class QuicCryptoServerStreamTest : public ::testing::Test {
58 public: 58 public:
59 QuicCryptoServerStreamTest() 59 QuicCryptoServerStreamTest()
60 : guid_(1), 60 : guid_(1),
61 addr_(ParseIPLiteralToNumber("192.0.2.33", &ip_) ? 61 addr_(ParseIPLiteralToNumber("192.0.2.33", &ip_) ?
62 ip_ : IPAddressNumber(), 1), 62 ip_ : IPAddressNumber(), 1),
63 connection_(new PacketSavingConnection(guid_, addr_, true)), 63 connection_(new PacketSavingConnection(guid_, addr_, true)),
64 session_(connection_, true), 64 session_(connection_, QuicConfig(), true),
65 crypto_config_(QuicCryptoServerConfig::TESTING), 65 crypto_config_(QuicCryptoServerConfig::TESTING),
66 stream_(config_, crypto_config_, &session_) { 66 stream_(crypto_config_, &session_) {
67 session_.config()->SetDefaults();
67 session_.SetCryptoStream(&stream_); 68 session_.SetCryptoStream(&stream_);
68 // We advance the clock initially because the default time is zero and the 69 // We advance the clock initially because the default time is zero and the
69 // strike register worries that we've just overflowed a uint32 time. 70 // strike register worries that we've just overflowed a uint32 time.
70 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 71 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
71 // TODO(rtenneti): Enable testing of ProofSource. 72 // TODO(rtenneti): Enable testing of ProofSource.
72 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); 73 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting());
73 74
74 CryptoTestUtils::SetupCryptoServerConfigForTest( 75 CryptoTestUtils::SetupCryptoServerConfigForTest(
75 connection_->clock(), connection_->random_generator(), &config_, 76 connection_->clock(), connection_->random_generator(),
76 &crypto_config_); 77 session_.config(), &crypto_config_);
77 } 78 }
78 79
79 void ConstructHandshakeMessage() { 80 void ConstructHandshakeMessage() {
80 CryptoFramer framer; 81 CryptoFramer framer;
81 message_data_.reset(framer.ConstructHandshakeMessage(message_)); 82 message_data_.reset(framer.ConstructHandshakeMessage(message_));
82 } 83 }
83 84
84 int CompleteCryptoHandshake() { 85 int CompleteCryptoHandshake() {
85 return CryptoTestUtils::HandshakeWithFakeClient(connection_, &stream_); 86 return CryptoTestUtils::HandshakeWithFakeClient(connection_, &stream_,
87 client_options_);
86 } 88 }
87 89
88 protected: 90 protected:
89 IPAddressNumber ip_; 91 IPAddressNumber ip_;
90 QuicGuid guid_; 92 QuicGuid guid_;
91 IPEndPoint addr_; 93 IPEndPoint addr_;
92 PacketSavingConnection* connection_; 94 PacketSavingConnection* connection_;
93 TestSession session_; 95 TestSession session_;
94 QuicConfig config_; 96 QuicConfig config_;
95 QuicCryptoServerConfig crypto_config_; 97 QuicCryptoServerConfig crypto_config_;
96 QuicCryptoServerStream stream_; 98 QuicCryptoServerStream stream_;
97 CryptoHandshakeMessage message_; 99 CryptoHandshakeMessage message_;
98 scoped_ptr<QuicData> message_data_; 100 scoped_ptr<QuicData> message_data_;
101 CryptoTestUtils::FakeClientOptions client_options_;
99 }; 102 };
100 103
101 TEST_F(QuicCryptoServerStreamTest, NotInitiallyConected) { 104 TEST_F(QuicCryptoServerStreamTest, NotInitiallyConected) {
102 if (!Aes128GcmEncrypter::IsSupported()) { 105 if (!Aes128GcmEncrypter::IsSupported()) {
103 LOG(INFO) << "AES GCM not supported. Test skipped."; 106 LOG(INFO) << "AES GCM not supported. Test skipped.";
104 return; 107 return;
105 } 108 }
106 109
107 EXPECT_FALSE(stream_.encryption_established()); 110 EXPECT_FALSE(stream_.encryption_established());
108 EXPECT_FALSE(stream_.handshake_confirmed()); 111 EXPECT_FALSE(stream_.handshake_confirmed());
(...skipping 28 matching lines...) Expand all
137 IPAddressNumber ip; 140 IPAddressNumber ip;
138 ParseIPLiteralToNumber("127.0.0.1", &ip); 141 ParseIPLiteralToNumber("127.0.0.1", &ip);
139 IPEndPoint addr(ip, 0); 142 IPEndPoint addr(ip, 0);
140 PacketSavingConnection* client_conn = 143 PacketSavingConnection* client_conn =
141 new PacketSavingConnection(guid, addr, false); 144 new PacketSavingConnection(guid, addr, false);
142 PacketSavingConnection* server_conn = 145 PacketSavingConnection* server_conn =
143 new PacketSavingConnection(guid, addr, false); 146 new PacketSavingConnection(guid, addr, false);
144 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 147 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
145 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); 148 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000));
146 149
147 scoped_ptr<TestSession> client_session(new TestSession(client_conn, true));
148 scoped_ptr<TestSession> server_session(new TestSession(server_conn, true));
149
150 QuicConfig client_config; 150 QuicConfig client_config;
151 scoped_ptr<TestSession> client_session(
152 new TestSession(client_conn, client_config, false));
153 client_session->config()->SetDefaults();
151 QuicCryptoClientConfig client_crypto_config; 154 QuicCryptoClientConfig client_crypto_config;
152
153 client_config.SetDefaults();
154 client_crypto_config.SetDefaults(); 155 client_crypto_config.SetDefaults();
155 156
156 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream( 157 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream(
157 "test.example.com", client_config, client_session.get(), 158 "test.example.com", client_session.get(), &client_crypto_config));
158 &client_crypto_config));
159 client_session->SetCryptoStream(client.get()); 159 client_session->SetCryptoStream(client.get());
160 160
161 // Do a first handshake in order to prime the client config with the server's 161 // Do a first handshake in order to prime the client config with the server's
162 // information. 162 // information.
163 CHECK(client->CryptoConnect()); 163 CHECK(client->CryptoConnect());
164 CHECK_EQ(1u, client_conn->packets_.size()); 164 CHECK_EQ(1u, client_conn->packets_.size());
165 165
166 scoped_ptr<TestSession> server_session(
167 new TestSession(server_conn, config_, true));
168 server_session->config()->SetDefaults();
166 scoped_ptr<QuicCryptoServerStream> server( 169 scoped_ptr<QuicCryptoServerStream> server(
167 new QuicCryptoServerStream(config_, crypto_config_, 170 new QuicCryptoServerStream(crypto_config_, server_session.get()));
168 server_session.get()));
169 server_session->SetCryptoStream(server.get()); 171 server_session->SetCryptoStream(server.get());
170 172
171 CryptoTestUtils::CommunicateHandshakeMessages( 173 CryptoTestUtils::CommunicateHandshakeMessages(
172 client_conn, client.get(), server_conn, server.get()); 174 client_conn, client.get(), server_conn, server.get());
173 EXPECT_EQ(2, client->num_sent_client_hellos()); 175 EXPECT_EQ(2, client->num_sent_client_hellos());
174 176
175 // Now do another handshake, hopefully in 0-RTT. 177 // Now do another handshake, hopefully in 0-RTT.
176 LOG(INFO) << "Resetting for 0-RTT handshake attempt"; 178 LOG(INFO) << "Resetting for 0-RTT handshake attempt";
177 179
178 client_conn = new PacketSavingConnection(guid, addr, false); 180 client_conn = new PacketSavingConnection(guid, addr, false);
179 server_conn = new PacketSavingConnection(guid, addr, false); 181 server_conn = new PacketSavingConnection(guid, addr, false);
180 // We need to advance time past the strike-server window so that it's 182 // We need to advance time past the strike-server window so that it's
181 // authoritative in this time span. 183 // authoritative in this time span.
182 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000)); 184 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000));
183 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000)); 185 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000));
184 186
185 // This causes the client's nonce to be different and thus stops the 187 // This causes the client's nonce to be different and thus stops the
186 // strike-register from rejecting the repeated nonce. 188 // strike-register from rejecting the repeated nonce.
187 client_conn->random_generator()->Reseed(NULL, 0); 189 client_conn->random_generator()->Reseed(NULL, 0);
188 client_session.reset(new TestSession(client_conn, true)); 190 client_session.reset(new TestSession(client_conn, client_config, false));
189 server_session.reset(new TestSession(server_conn, true)); 191 client_session->config()->SetDefaults();
192 server_session.reset(new TestSession(server_conn, config_, true));
193 server_session->config()->SetDefaults();
190 client.reset(new QuicCryptoClientStream( 194 client.reset(new QuicCryptoClientStream(
191 "test.example.com", client_config, client_session.get(), 195 "test.example.com", client_session.get(), &client_crypto_config));
192 &client_crypto_config));
193 client_session->SetCryptoStream(client.get()); 196 client_session->SetCryptoStream(client.get());
194 197
195 server.reset(new QuicCryptoServerStream(config_, crypto_config_, 198 server.reset(new QuicCryptoServerStream(crypto_config_,
196 server_session.get())); 199 server_session.get()));
197 server_session->SetCryptoStream(server.get()); 200 server_session->SetCryptoStream(server.get());
198 201
199 CHECK(client->CryptoConnect()); 202 CHECK(client->CryptoConnect());
200 203
201 CryptoTestUtils::CommunicateHandshakeMessages( 204 CryptoTestUtils::CommunicateHandshakeMessages(
202 client_conn, client.get(), server_conn, server.get()); 205 client_conn, client.get(), server_conn, server.get());
203 EXPECT_EQ(1, client->num_sent_client_hellos()); 206 EXPECT_EQ(1, client->num_sent_client_hellos());
204 } 207 }
205 208
(...skipping 17 matching lines...) Expand all
223 return; 226 return;
224 } 227 }
225 228
226 message_.set_tag(kSHLO); 229 message_.set_tag(kSHLO);
227 ConstructHandshakeMessage(); 230 ConstructHandshakeMessage();
228 EXPECT_CALL(*connection_, SendConnectionClose( 231 EXPECT_CALL(*connection_, SendConnectionClose(
229 QUIC_INVALID_CRYPTO_MESSAGE_TYPE)); 232 QUIC_INVALID_CRYPTO_MESSAGE_TYPE));
230 stream_.ProcessData(message_data_->data(), message_data_->length()); 233 stream_.ProcessData(message_data_->data(), message_data_->length());
231 } 234 }
232 235
236 TEST_F(QuicCryptoServerStreamTest, WithoutCertificates) {
237 if (!Aes128GcmEncrypter::IsSupported()) {
238 LOG(INFO) << "AES GCM not supported. Test skipped.";
239 return;
240 }
241
242 crypto_config_.SetProofSource(NULL);
243 client_options_.dont_verify_certs = true;
244
245 // Only 2 client hellos need to be sent in the no-certs case: one to get the
246 // source-address token and the second to finish.
247 EXPECT_EQ(2, CompleteCryptoHandshake());
248 EXPECT_TRUE(stream_.encryption_established());
249 EXPECT_TRUE(stream_.handshake_confirmed());
250 }
251
233 } // namespace 252 } // namespace
234 } // namespace test 253 } // namespace test
235 } // namespace net 254 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_crypto_server_stream.cc ('k') | net/quic/quic_crypto_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698