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

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

Issue 185773006: Add PrivacyMode support to the QuicStreamFactory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase again Created 6 years, 9 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_stream_factory.cc ('k') | net/quic/test_tools/crypto_test_utils.cc » ('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_stream_factory.h" 5 #include "net/quic/quic_stream_factory.h"
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "net/base/test_data_directory.h" 9 #include "net/base/test_data_directory.h"
10 #include "net/cert/cert_verifier.h" 10 #include "net/cert/cert_verifier.h"
(...skipping 30 matching lines...) Expand all
41 41
42 class QuicStreamFactoryPeer { 42 class QuicStreamFactoryPeer {
43 public: 43 public:
44 static QuicCryptoClientConfig* GetCryptoConfig(QuicStreamFactory* factory) { 44 static QuicCryptoClientConfig* GetCryptoConfig(QuicStreamFactory* factory) {
45 return &factory->crypto_config_; 45 return &factory->crypto_config_;
46 } 46 }
47 47
48 static bool HasActiveSession(QuicStreamFactory* factory, 48 static bool HasActiveSession(QuicStreamFactory* factory,
49 const HostPortPair& host_port_pair, 49 const HostPortPair& host_port_pair,
50 bool is_https) { 50 bool is_https) {
51 QuicSessionKey server_key(host_port_pair, is_https); 51 QuicSessionKey server_key(host_port_pair, is_https, kPrivacyModeDisabled);
52 return factory->HasActiveSession(server_key); 52 return factory->HasActiveSession(server_key);
53 } 53 }
54 54
55 static QuicClientSession* GetActiveSession( 55 static QuicClientSession* GetActiveSession(
56 QuicStreamFactory* factory, 56 QuicStreamFactory* factory,
57 const HostPortPair& host_port_pair, 57 const HostPortPair& host_port_pair,
58 bool is_https) { 58 bool is_https) {
59 QuicSessionKey server_key(host_port_pair, is_https); 59 QuicSessionKey server_key(host_port_pair, is_https, kPrivacyModeDisabled);
60 DCHECK(factory->HasActiveSession(server_key)); 60 DCHECK(factory->HasActiveSession(server_key));
61 return factory->active_sessions_[server_key]; 61 return factory->active_sessions_[server_key];
62 } 62 }
63 63
64 static scoped_ptr<QuicHttpStream> CreateIfSessionExists( 64 static scoped_ptr<QuicHttpStream> CreateIfSessionExists(
65 QuicStreamFactory* factory, 65 QuicStreamFactory* factory,
66 const HostPortPair& host_port_pair, 66 const HostPortPair& host_port_pair,
67 bool is_https, 67 bool is_https,
68 const BoundNetLog& net_log) { 68 const BoundNetLog& net_log) {
69 QuicSessionKey server_key(host_port_pair, is_https); 69 QuicSessionKey server_key(host_port_pair, is_https, kPrivacyModeDisabled);
70 return factory->CreateIfSessionExists(server_key, net_log); 70 return factory->CreateIfSessionExists(server_key, net_log);
71 } 71 }
72 72
73 static bool IsLiveSession(QuicStreamFactory* factory, 73 static bool IsLiveSession(QuicStreamFactory* factory,
74 QuicClientSession* session) { 74 QuicClientSession* session) {
75 for (QuicStreamFactory::SessionSet::iterator it = 75 for (QuicStreamFactory::SessionSet::iterator it =
76 factory->all_sessions_.begin(); 76 factory->all_sessions_.begin();
77 it != factory->all_sessions_.end(); ++it) { 77 it != factory->all_sessions_.end(); ++it) {
78 if (*it == session) 78 if (*it == session)
79 return true; 79 return true;
80 } 80 }
81 return false; 81 return false;
82 } 82 }
83 }; 83 };
84 84
85 class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> { 85 class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> {
86 protected: 86 protected:
87 QuicStreamFactoryTest() 87 QuicStreamFactoryTest()
88 : random_generator_(0), 88 : random_generator_(0),
89 maker_(GetParam(), 0), 89 maker_(GetParam(), 0),
90 clock_(new MockClock()), 90 clock_(new MockClock()),
91 cert_verifier_(CertVerifier::CreateDefault()), 91 cert_verifier_(CertVerifier::CreateDefault()),
92 factory_(&host_resolver_, &socket_factory_, 92 factory_(&host_resolver_, &socket_factory_,
93 base::WeakPtr<HttpServerProperties>(), 93 base::WeakPtr<HttpServerProperties>(),
94 cert_verifier_.get(), 94 cert_verifier_.get(),
95 &crypto_client_stream_factory_, 95 &crypto_client_stream_factory_,
96 &random_generator_, clock_, kDefaultMaxPacketSize, 96 &random_generator_, clock_, kDefaultMaxPacketSize,
97 SupportedVersions(GetParam()), true, true), 97 SupportedVersions(GetParam()), true, true),
98 host_port_pair_(kDefaultServerHostName, kDefaultServerPort), 98 host_port_pair_(kDefaultServerHostName, kDefaultServerPort),
99 is_https_(false) { 99 is_https_(false),
100 privacy_mode_(kPrivacyModeDisabled) {
100 factory_.set_require_confirmation(false); 101 factory_.set_require_confirmation(false);
101 } 102 }
102 103
103 scoped_ptr<QuicHttpStream> CreateIfSessionExists( 104 scoped_ptr<QuicHttpStream> CreateIfSessionExists(
104 const HostPortPair& host_port_pair, 105 const HostPortPair& host_port_pair,
105 const BoundNetLog& net_log) { 106 const BoundNetLog& net_log) {
106 return QuicStreamFactoryPeer::CreateIfSessionExists( 107 return QuicStreamFactoryPeer::CreateIfSessionExists(
107 &factory_, host_port_pair, false, net_log_); 108 &factory_, host_port_pair, false, net_log_);
108 } 109 }
109 110
(...skipping 16 matching lines...) Expand all
126 MockRead(ASYNC, OK, 0) // EOF 127 MockRead(ASYNC, OK, 0) // EOF
127 }; 128 };
128 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 129 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
129 socket_data.StopAfter(1); 130 socket_data.StopAfter(1);
130 socket_factory_.AddSocketDataProvider(&socket_data); 131 socket_factory_.AddSocketDataProvider(&socket_data);
131 132
132 QuicStreamRequest request(&factory_); 133 QuicStreamRequest request(&factory_);
133 EXPECT_EQ(ERR_IO_PENDING, 134 EXPECT_EQ(ERR_IO_PENDING,
134 request.Request(destination, 135 request.Request(destination,
135 is_https_, 136 is_https_,
137 privacy_mode_,
136 "GET", 138 "GET",
137 net_log_, 139 net_log_,
138 callback_.callback())); 140 callback_.callback()));
139 141
140 EXPECT_EQ(OK, callback_.WaitForResult()); 142 EXPECT_EQ(OK, callback_.WaitForResult());
141 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 143 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
142 EXPECT_TRUE(stream.get()); 144 EXPECT_TRUE(stream.get());
143 stream.reset(); 145 stream.reset();
144 146
145 QuicClientSession* session = QuicStreamFactoryPeer::GetActiveSession( 147 QuicClientSession* session = QuicStreamFactoryPeer::GetActiveSession(
(...skipping 28 matching lines...) Expand all
174 MockHostResolver host_resolver_; 176 MockHostResolver host_resolver_;
175 DeterministicMockClientSocketFactory socket_factory_; 177 DeterministicMockClientSocketFactory socket_factory_;
176 MockCryptoClientStreamFactory crypto_client_stream_factory_; 178 MockCryptoClientStreamFactory crypto_client_stream_factory_;
177 MockRandom random_generator_; 179 MockRandom random_generator_;
178 QuicTestPacketMaker maker_; 180 QuicTestPacketMaker maker_;
179 MockClock* clock_; // Owned by factory_. 181 MockClock* clock_; // Owned by factory_.
180 scoped_ptr<CertVerifier> cert_verifier_; 182 scoped_ptr<CertVerifier> cert_verifier_;
181 QuicStreamFactory factory_; 183 QuicStreamFactory factory_;
182 HostPortPair host_port_pair_; 184 HostPortPair host_port_pair_;
183 bool is_https_; 185 bool is_https_;
186 PrivacyMode privacy_mode_;
184 BoundNetLog net_log_; 187 BoundNetLog net_log_;
185 TestCompletionCallback callback_; 188 TestCompletionCallback callback_;
186 }; 189 };
187 190
188 INSTANTIATE_TEST_CASE_P(Version, QuicStreamFactoryTest, 191 INSTANTIATE_TEST_CASE_P(Version, QuicStreamFactoryTest,
189 ::testing::ValuesIn(QuicSupportedVersions())); 192 ::testing::ValuesIn(QuicSupportedVersions()));
190 193
191 TEST_P(QuicStreamFactoryTest, CreateIfSessionExists) { 194 TEST_P(QuicStreamFactoryTest, CreateIfSessionExists) {
192 EXPECT_EQ(NULL, CreateIfSessionExists(host_port_pair_, net_log_).get()); 195 EXPECT_EQ(NULL, CreateIfSessionExists(host_port_pair_, net_log_).get());
193 } 196 }
194 197
195 TEST_P(QuicStreamFactoryTest, Create) { 198 TEST_P(QuicStreamFactoryTest, Create) {
196 MockRead reads[] = { 199 MockRead reads[] = {
197 MockRead(ASYNC, OK, 0) // EOF 200 MockRead(ASYNC, OK, 0) // EOF
198 }; 201 };
199 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 202 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
200 socket_factory_.AddSocketDataProvider(&socket_data); 203 socket_factory_.AddSocketDataProvider(&socket_data);
201 socket_data.StopAfter(1); 204 socket_data.StopAfter(1);
202 205
203 QuicStreamRequest request(&factory_); 206 QuicStreamRequest request(&factory_);
204 EXPECT_EQ(ERR_IO_PENDING, 207 EXPECT_EQ(ERR_IO_PENDING,
205 request.Request(host_port_pair_, 208 request.Request(host_port_pair_,
206 is_https_, 209 is_https_,
210 privacy_mode_,
207 "GET", 211 "GET",
208 net_log_, 212 net_log_,
209 callback_.callback())); 213 callback_.callback()));
210 214
211 EXPECT_EQ(OK, callback_.WaitForResult()); 215 EXPECT_EQ(OK, callback_.WaitForResult());
212 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 216 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
213 EXPECT_TRUE(stream.get()); 217 EXPECT_TRUE(stream.get());
214 218
215 // Will reset stream 3. 219 // Will reset stream 3.
216 stream = CreateIfSessionExists(host_port_pair_, net_log_); 220 stream = CreateIfSessionExists(host_port_pair_, net_log_);
217 EXPECT_TRUE(stream.get()); 221 EXPECT_TRUE(stream.get());
218 222
219 // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result 223 // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result
220 // in streams on different sessions. 224 // in streams on different sessions.
221 QuicStreamRequest request2(&factory_); 225 QuicStreamRequest request2(&factory_);
222 EXPECT_EQ(OK, 226 EXPECT_EQ(OK,
223 request2.Request(host_port_pair_, 227 request2.Request(host_port_pair_,
224 is_https_, 228 is_https_,
229 privacy_mode_,
225 "GET", 230 "GET",
226 net_log_, 231 net_log_,
227 callback_.callback())); 232 callback_.callback()));
228 stream = request2.ReleaseStream(); // Will reset stream 5. 233 stream = request2.ReleaseStream(); // Will reset stream 5.
229 stream.reset(); // Will reset stream 7. 234 stream.reset(); // Will reset stream 7.
230 235
231 EXPECT_TRUE(socket_data.at_read_eof()); 236 EXPECT_TRUE(socket_data.at_read_eof());
232 EXPECT_TRUE(socket_data.at_write_eof()); 237 EXPECT_TRUE(socket_data.at_write_eof());
233 } 238 }
234 239
235 TEST_P(QuicStreamFactoryTest, CreateZeroRtt) { 240 TEST_P(QuicStreamFactoryTest, CreateZeroRtt) {
236 MockRead reads[] = { 241 MockRead reads[] = {
237 MockRead(ASYNC, OK, 0) // EOF 242 MockRead(ASYNC, OK, 0) // EOF
238 }; 243 };
239 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 244 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
240 socket_factory_.AddSocketDataProvider(&socket_data); 245 socket_factory_.AddSocketDataProvider(&socket_data);
241 socket_data.StopAfter(1); 246 socket_data.StopAfter(1);
242 247
243 crypto_client_stream_factory_.set_handshake_mode( 248 crypto_client_stream_factory_.set_handshake_mode(
244 MockCryptoClientStream::ZERO_RTT); 249 MockCryptoClientStream::ZERO_RTT);
245 host_resolver_.set_synchronous_mode(true); 250 host_resolver_.set_synchronous_mode(true);
246 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), 251 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
247 "192.168.0.1", ""); 252 "192.168.0.1", "");
248 253
249 QuicStreamRequest request(&factory_); 254 QuicStreamRequest request(&factory_);
250 EXPECT_EQ(OK, 255 EXPECT_EQ(OK,
251 request.Request(host_port_pair_, 256 request.Request(host_port_pair_,
252 is_https_, 257 is_https_,
258 privacy_mode_,
253 "GET", 259 "GET",
254 net_log_, 260 net_log_,
255 callback_.callback())); 261 callback_.callback()));
256 262
257 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 263 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
258 EXPECT_TRUE(stream.get()); 264 EXPECT_TRUE(stream.get());
259 EXPECT_TRUE(socket_data.at_read_eof()); 265 EXPECT_TRUE(socket_data.at_read_eof());
260 EXPECT_TRUE(socket_data.at_write_eof()); 266 EXPECT_TRUE(socket_data.at_write_eof());
261 } 267 }
262 268
263 TEST_P(QuicStreamFactoryTest, CreateZeroRttPost) { 269 TEST_P(QuicStreamFactoryTest, CreateZeroRttPost) {
264 MockRead reads[] = { 270 MockRead reads[] = {
265 MockRead(ASYNC, OK, 0) // EOF 271 MockRead(ASYNC, OK, 0) // EOF
266 }; 272 };
267 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 273 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
268 socket_factory_.AddSocketDataProvider(&socket_data); 274 socket_factory_.AddSocketDataProvider(&socket_data);
269 socket_data.StopAfter(1); 275 socket_data.StopAfter(1);
270 276
271 crypto_client_stream_factory_.set_handshake_mode( 277 crypto_client_stream_factory_.set_handshake_mode(
272 MockCryptoClientStream::ZERO_RTT); 278 MockCryptoClientStream::ZERO_RTT);
273 host_resolver_.set_synchronous_mode(true); 279 host_resolver_.set_synchronous_mode(true);
274 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(), 280 host_resolver_.rules()->AddIPLiteralRule(host_port_pair_.host(),
275 "192.168.0.1", ""); 281 "192.168.0.1", "");
276 282
277 QuicStreamRequest request(&factory_); 283 QuicStreamRequest request(&factory_);
278 // Posts require handshake confirmation, so this will return asynchronously. 284 // Posts require handshake confirmation, so this will return asynchronously.
279 EXPECT_EQ(ERR_IO_PENDING, 285 EXPECT_EQ(ERR_IO_PENDING,
280 request.Request(host_port_pair_, 286 request.Request(host_port_pair_,
281 is_https_, 287 is_https_,
288 privacy_mode_,
282 "POST", 289 "POST",
283 net_log_, 290 net_log_,
284 callback_.callback())); 291 callback_.callback()));
285 292
286 // Confirm the handshake and verify that the stream is created. 293 // Confirm the handshake and verify that the stream is created.
287 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( 294 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent(
288 QuicSession::HANDSHAKE_CONFIRMED); 295 QuicSession::HANDSHAKE_CONFIRMED);
289 296
290 EXPECT_EQ(OK, callback_.WaitForResult()); 297 EXPECT_EQ(OK, callback_.WaitForResult());
291 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 298 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
(...skipping 10 matching lines...) Expand all
302 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0); 309 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0);
303 socket_factory_.AddSocketDataProvider(&socket_data1); 310 socket_factory_.AddSocketDataProvider(&socket_data1);
304 socket_factory_.AddSocketDataProvider(&socket_data2); 311 socket_factory_.AddSocketDataProvider(&socket_data2);
305 socket_data1.StopAfter(1); 312 socket_data1.StopAfter(1);
306 socket_data2.StopAfter(1); 313 socket_data2.StopAfter(1);
307 314
308 QuicStreamRequest request(&factory_); 315 QuicStreamRequest request(&factory_);
309 EXPECT_EQ(ERR_IO_PENDING, 316 EXPECT_EQ(ERR_IO_PENDING,
310 request.Request(host_port_pair_, 317 request.Request(host_port_pair_,
311 is_https_, 318 is_https_,
319 privacy_mode_,
312 "GET", 320 "GET",
313 net_log_, 321 net_log_,
314 callback_.callback())); 322 callback_.callback()));
315 323
316 EXPECT_EQ(OK, callback_.WaitForResult()); 324 EXPECT_EQ(OK, callback_.WaitForResult());
317 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 325 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
318 EXPECT_TRUE(stream.get()); 326 EXPECT_TRUE(stream.get());
319 327
320 QuicStreamRequest request2(&factory_); 328 QuicStreamRequest request2(&factory_);
321 EXPECT_EQ(ERR_IO_PENDING, 329 EXPECT_EQ(ERR_IO_PENDING,
322 request2.Request(host_port_pair_, 330 request2.Request(host_port_pair_,
323 !is_https_, 331 !is_https_,
332 privacy_mode_,
324 "GET", 333 "GET",
325 net_log_, 334 net_log_,
326 callback_.callback())); 335 callback_.callback()));
327 EXPECT_EQ(OK, callback_.WaitForResult()); 336 EXPECT_EQ(OK, callback_.WaitForResult());
328 stream = request2.ReleaseStream(); 337 stream = request2.ReleaseStream();
329 EXPECT_TRUE(stream.get()); 338 EXPECT_TRUE(stream.get());
330 stream.reset(); 339 stream.reset();
331 340
332 EXPECT_NE(QuicStreamFactoryPeer::GetActiveSession( 341 EXPECT_NE(QuicStreamFactoryPeer::GetActiveSession(
333 &factory_, host_port_pair_, is_https_), 342 &factory_, host_port_pair_, is_https_),
(...skipping 18 matching lines...) Expand all
352 host_resolver_.set_synchronous_mode(true); 361 host_resolver_.set_synchronous_mode(true);
353 host_resolver_.rules()->AddIPLiteralRule( 362 host_resolver_.rules()->AddIPLiteralRule(
354 kDefaultServerHostName, "192.168.0.1", ""); 363 kDefaultServerHostName, "192.168.0.1", "");
355 host_resolver_.rules()->AddIPLiteralRule( 364 host_resolver_.rules()->AddIPLiteralRule(
356 "mail.google.com", "192.168.0.1", ""); 365 "mail.google.com", "192.168.0.1", "");
357 366
358 QuicStreamRequest request(&factory_); 367 QuicStreamRequest request(&factory_);
359 EXPECT_EQ(OK, 368 EXPECT_EQ(OK,
360 request.Request(host_port_pair_, 369 request.Request(host_port_pair_,
361 is_https_, 370 is_https_,
371 privacy_mode_,
362 "GET", 372 "GET",
363 net_log_, 373 net_log_,
364 callback_.callback())); 374 callback_.callback()));
365 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 375 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
366 EXPECT_TRUE(stream.get()); 376 EXPECT_TRUE(stream.get());
367 377
368 TestCompletionCallback callback; 378 TestCompletionCallback callback;
369 QuicStreamRequest request2(&factory_); 379 QuicStreamRequest request2(&factory_);
370 EXPECT_EQ(OK, 380 EXPECT_EQ(OK,
371 request2.Request(server2, 381 request2.Request(server2,
372 is_https_, 382 is_https_,
383 privacy_mode_,
373 "GET", 384 "GET",
374 net_log_, 385 net_log_,
375 callback.callback())); 386 callback.callback()));
376 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream(); 387 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream();
377 EXPECT_TRUE(stream2.get()); 388 EXPECT_TRUE(stream2.get());
378 389
379 EXPECT_EQ( 390 EXPECT_EQ(
380 QuicStreamFactoryPeer::GetActiveSession( 391 QuicStreamFactoryPeer::GetActiveSession(
381 &factory_, host_port_pair_, is_https_), 392 &factory_, host_port_pair_, is_https_),
382 QuicStreamFactoryPeer::GetActiveSession(&factory_, server2, is_https_)); 393 QuicStreamFactoryPeer::GetActiveSession(&factory_, server2, is_https_));
(...skipping 17 matching lines...) Expand all
400 host_resolver_.set_synchronous_mode(true); 411 host_resolver_.set_synchronous_mode(true);
401 host_resolver_.rules()->AddIPLiteralRule( 412 host_resolver_.rules()->AddIPLiteralRule(
402 kDefaultServerHostName, "192.168.0.1", ""); 413 kDefaultServerHostName, "192.168.0.1", "");
403 host_resolver_.rules()->AddIPLiteralRule( 414 host_resolver_.rules()->AddIPLiteralRule(
404 "mail.google.com", "192.168.0.1", ""); 415 "mail.google.com", "192.168.0.1", "");
405 416
406 QuicStreamRequest request(&factory_); 417 QuicStreamRequest request(&factory_);
407 EXPECT_EQ(OK, 418 EXPECT_EQ(OK,
408 request.Request(host_port_pair_, 419 request.Request(host_port_pair_,
409 is_https_, 420 is_https_,
421 privacy_mode_,
410 "GET", 422 "GET",
411 net_log_, 423 net_log_,
412 callback_.callback())); 424 callback_.callback()));
413 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 425 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
414 EXPECT_TRUE(stream.get()); 426 EXPECT_TRUE(stream.get());
415 427
416 TestCompletionCallback callback; 428 TestCompletionCallback callback;
417 QuicStreamRequest request2(&factory_); 429 QuicStreamRequest request2(&factory_);
418 EXPECT_EQ(OK, 430 EXPECT_EQ(OK,
419 request2.Request(server2, 431 request2.Request(server2,
420 is_https_, 432 is_https_,
433 privacy_mode_,
421 "GET", 434 "GET",
422 net_log_, 435 net_log_,
423 callback.callback())); 436 callback.callback()));
424 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream(); 437 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream();
425 EXPECT_TRUE(stream2.get()); 438 EXPECT_TRUE(stream2.get());
426 439
427 factory_.OnSessionGoingAway(QuicStreamFactoryPeer::GetActiveSession( 440 factory_.OnSessionGoingAway(QuicStreamFactoryPeer::GetActiveSession(
428 &factory_, host_port_pair_, is_https_)); 441 &factory_, host_port_pair_, is_https_));
429 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession( 442 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession(
430 &factory_, host_port_pair_, is_https_)); 443 &factory_, host_port_pair_, is_https_));
431 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession( 444 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession(
432 &factory_, server2, is_https_)); 445 &factory_, server2, is_https_));
433 446
434 TestCompletionCallback callback3; 447 TestCompletionCallback callback3;
435 QuicStreamRequest request3(&factory_); 448 QuicStreamRequest request3(&factory_);
436 EXPECT_EQ(OK, 449 EXPECT_EQ(OK,
437 request3.Request(server2, 450 request3.Request(server2,
438 is_https_, 451 is_https_,
452 privacy_mode_,
439 "GET", 453 "GET",
440 net_log_, 454 net_log_,
441 callback3.callback())); 455 callback3.callback()));
442 scoped_ptr<QuicHttpStream> stream3 = request3.ReleaseStream(); 456 scoped_ptr<QuicHttpStream> stream3 = request3.ReleaseStream();
443 EXPECT_TRUE(stream3.get()); 457 EXPECT_TRUE(stream3.get());
444 458
445 EXPECT_TRUE(QuicStreamFactoryPeer::HasActiveSession( 459 EXPECT_TRUE(QuicStreamFactoryPeer::HasActiveSession(
446 &factory_, server2, is_https_)); 460 &factory_, server2, is_https_));
447 461
448 EXPECT_TRUE(socket_data1.at_read_eof()); 462 EXPECT_TRUE(socket_data1.at_read_eof());
(...skipping 27 matching lines...) Expand all
476 490
477 host_resolver_.set_synchronous_mode(true); 491 host_resolver_.set_synchronous_mode(true);
478 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); 492 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", "");
479 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); 493 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
480 494
481 QuicStreamRequest request(&factory_); 495 QuicStreamRequest request(&factory_);
482 is_https_ = true; 496 is_https_ = true;
483 EXPECT_EQ(OK, 497 EXPECT_EQ(OK,
484 request.Request(server1, 498 request.Request(server1,
485 is_https_, 499 is_https_,
500 privacy_mode_,
486 "GET", 501 "GET",
487 net_log_, 502 net_log_,
488 callback_.callback())); 503 callback_.callback()));
489 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 504 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
490 EXPECT_TRUE(stream.get()); 505 EXPECT_TRUE(stream.get());
491 506
492 TestCompletionCallback callback; 507 TestCompletionCallback callback;
493 QuicStreamRequest request2(&factory_); 508 QuicStreamRequest request2(&factory_);
494 EXPECT_EQ(OK, 509 EXPECT_EQ(OK,
495 request2.Request(server2, 510 request2.Request(server2,
496 is_https_, 511 is_https_,
512 privacy_mode_,
497 "GET", 513 "GET",
498 net_log_, 514 net_log_,
499 callback_.callback())); 515 callback_.callback()));
500 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream(); 516 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream();
501 EXPECT_TRUE(stream2.get()); 517 EXPECT_TRUE(stream2.get());
502 518
503 EXPECT_EQ(QuicStreamFactoryPeer::GetActiveSession( 519 EXPECT_EQ(QuicStreamFactoryPeer::GetActiveSession(
504 &factory_, server1, is_https_), 520 &factory_, server1, is_https_),
505 QuicStreamFactoryPeer::GetActiveSession( 521 QuicStreamFactoryPeer::GetActiveSession(
506 &factory_, server2, is_https_)); 522 &factory_, server2, is_https_));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 555
540 host_resolver_.set_synchronous_mode(true); 556 host_resolver_.set_synchronous_mode(true);
541 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); 557 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", "");
542 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); 558 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", "");
543 559
544 QuicStreamRequest request(&factory_); 560 QuicStreamRequest request(&factory_);
545 is_https_ = true; 561 is_https_ = true;
546 EXPECT_EQ(OK, 562 EXPECT_EQ(OK,
547 request.Request(server1, 563 request.Request(server1,
548 is_https_, 564 is_https_,
565 privacy_mode_,
549 "GET", 566 "GET",
550 net_log_, 567 net_log_,
551 callback_.callback())); 568 callback_.callback()));
552 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 569 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
553 EXPECT_TRUE(stream.get()); 570 EXPECT_TRUE(stream.get());
554 571
555 TestCompletionCallback callback; 572 TestCompletionCallback callback;
556 QuicStreamRequest request2(&factory_); 573 QuicStreamRequest request2(&factory_);
557 EXPECT_EQ(OK, 574 EXPECT_EQ(OK,
558 request2.Request(server2, 575 request2.Request(server2,
559 is_https_, 576 is_https_,
577 privacy_mode_,
560 "GET", 578 "GET",
561 net_log_, 579 net_log_,
562 callback_.callback())); 580 callback_.callback()));
563 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream(); 581 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream();
564 EXPECT_TRUE(stream2.get()); 582 EXPECT_TRUE(stream2.get());
565 583
566 EXPECT_NE(QuicStreamFactoryPeer::GetActiveSession( 584 EXPECT_NE(QuicStreamFactoryPeer::GetActiveSession(
567 &factory_, server1, is_https_), 585 &factory_, server1, is_https_),
568 QuicStreamFactoryPeer::GetActiveSession( 586 QuicStreamFactoryPeer::GetActiveSession(
569 &factory_, server2, is_https_)); 587 &factory_, server2, is_https_));
(...skipping 12 matching lines...) Expand all
582 socket_data.StopAfter(1); 600 socket_data.StopAfter(1);
583 socket_factory_.AddSocketDataProvider(&socket_data); 601 socket_factory_.AddSocketDataProvider(&socket_data);
584 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0); 602 DeterministicSocketData socket_data2(reads, arraysize(reads), NULL, 0);
585 socket_data2.StopAfter(1); 603 socket_data2.StopAfter(1);
586 socket_factory_.AddSocketDataProvider(&socket_data2); 604 socket_factory_.AddSocketDataProvider(&socket_data2);
587 605
588 QuicStreamRequest request(&factory_); 606 QuicStreamRequest request(&factory_);
589 EXPECT_EQ(ERR_IO_PENDING, 607 EXPECT_EQ(ERR_IO_PENDING,
590 request.Request(host_port_pair_, 608 request.Request(host_port_pair_,
591 is_https_, 609 is_https_,
610 privacy_mode_,
592 "GET", 611 "GET",
593 net_log_, 612 net_log_,
594 callback_.callback())); 613 callback_.callback()));
595 614
596 EXPECT_EQ(OK, callback_.WaitForResult()); 615 EXPECT_EQ(OK, callback_.WaitForResult());
597 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 616 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
598 EXPECT_TRUE(stream.get()); 617 EXPECT_TRUE(stream.get());
599 618
600 // Mark the session as going away. Ensure that while it is still alive 619 // Mark the session as going away. Ensure that while it is still alive
601 // that it is no longer active. 620 // that it is no longer active.
602 QuicClientSession* session = QuicStreamFactoryPeer::GetActiveSession( 621 QuicClientSession* session = QuicStreamFactoryPeer::GetActiveSession(
603 &factory_, host_port_pair_, is_https_); 622 &factory_, host_port_pair_, is_https_);
604 factory_.OnSessionGoingAway(session); 623 factory_.OnSessionGoingAway(session);
605 EXPECT_EQ(true, QuicStreamFactoryPeer::IsLiveSession(&factory_, session)); 624 EXPECT_EQ(true, QuicStreamFactoryPeer::IsLiveSession(&factory_, session));
606 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession( 625 EXPECT_FALSE(QuicStreamFactoryPeer::HasActiveSession(
607 &factory_, host_port_pair_, is_https_)); 626 &factory_, host_port_pair_, is_https_));
608 EXPECT_EQ(NULL, CreateIfSessionExists(host_port_pair_, net_log_).get()); 627 EXPECT_EQ(NULL, CreateIfSessionExists(host_port_pair_, net_log_).get());
609 628
610 // Create a new request for the same destination and verify that a 629 // Create a new request for the same destination and verify that a
611 // new session is created. 630 // new session is created.
612 QuicStreamRequest request2(&factory_); 631 QuicStreamRequest request2(&factory_);
613 EXPECT_EQ(ERR_IO_PENDING, 632 EXPECT_EQ(ERR_IO_PENDING,
614 request2.Request(host_port_pair_, 633 request2.Request(host_port_pair_,
615 is_https_, 634 is_https_,
635 privacy_mode_,
616 "GET", 636 "GET",
617 net_log_, 637 net_log_,
618 callback_.callback())); 638 callback_.callback()));
619 EXPECT_EQ(OK, callback_.WaitForResult()); 639 EXPECT_EQ(OK, callback_.WaitForResult());
620 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream(); 640 scoped_ptr<QuicHttpStream> stream2 = request2.ReleaseStream();
621 EXPECT_TRUE(stream2.get()); 641 EXPECT_TRUE(stream2.get());
622 642
623 EXPECT_TRUE(QuicStreamFactoryPeer::HasActiveSession(&factory_, 643 EXPECT_TRUE(QuicStreamFactoryPeer::HasActiveSession(&factory_,
624 host_port_pair_, 644 host_port_pair_,
625 is_https_)); 645 is_https_));
(...skipping 27 matching lines...) Expand all
653 socket_data.StopAfter(1); 673 socket_data.StopAfter(1);
654 674
655 HttpRequestInfo request_info; 675 HttpRequestInfo request_info;
656 std::vector<QuicHttpStream*> streams; 676 std::vector<QuicHttpStream*> streams;
657 // The MockCryptoClientStream sets max_open_streams to be 677 // The MockCryptoClientStream sets max_open_streams to be
658 // 2 * kDefaultMaxStreamsPerConnection. 678 // 2 * kDefaultMaxStreamsPerConnection.
659 for (size_t i = 0; i < 2 * kDefaultMaxStreamsPerConnection; i++) { 679 for (size_t i = 0; i < 2 * kDefaultMaxStreamsPerConnection; i++) {
660 QuicStreamRequest request(&factory_); 680 QuicStreamRequest request(&factory_);
661 int rv = request.Request(host_port_pair_, 681 int rv = request.Request(host_port_pair_,
662 is_https_, 682 is_https_,
683 privacy_mode_,
663 "GET", 684 "GET",
664 net_log_, 685 net_log_,
665 callback_.callback()); 686 callback_.callback());
666 if (i == 0) { 687 if (i == 0) {
667 EXPECT_EQ(ERR_IO_PENDING, rv); 688 EXPECT_EQ(ERR_IO_PENDING, rv);
668 EXPECT_EQ(OK, callback_.WaitForResult()); 689 EXPECT_EQ(OK, callback_.WaitForResult());
669 } else { 690 } else {
670 EXPECT_EQ(OK, rv); 691 EXPECT_EQ(OK, rv);
671 } 692 }
672 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 693 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
673 EXPECT_TRUE(stream); 694 EXPECT_TRUE(stream);
674 EXPECT_EQ(OK, stream->InitializeStream( 695 EXPECT_EQ(OK, stream->InitializeStream(
675 &request_info, DEFAULT_PRIORITY, net_log_, CompletionCallback())); 696 &request_info, DEFAULT_PRIORITY, net_log_, CompletionCallback()));
676 streams.push_back(stream.release()); 697 streams.push_back(stream.release());
677 } 698 }
678 699
679 QuicStreamRequest request(&factory_); 700 QuicStreamRequest request(&factory_);
680 EXPECT_EQ(OK, 701 EXPECT_EQ(OK,
681 request.Request(host_port_pair_, 702 request.Request(host_port_pair_,
682 is_https_, 703 is_https_,
704 privacy_mode_,
683 "GET", 705 "GET",
684 net_log_, 706 net_log_,
685 CompletionCallback())); 707 CompletionCallback()));
686 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 708 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
687 EXPECT_TRUE(stream); 709 EXPECT_TRUE(stream);
688 EXPECT_EQ(ERR_IO_PENDING, stream->InitializeStream( 710 EXPECT_EQ(ERR_IO_PENDING, stream->InitializeStream(
689 &request_info, DEFAULT_PRIORITY, net_log_, callback_.callback())); 711 &request_info, DEFAULT_PRIORITY, net_log_, callback_.callback()));
690 712
691 // Close the first stream. 713 // Close the first stream.
692 streams.front()->Close(false); 714 streams.front()->Close(false);
(...skipping 10 matching lines...) Expand all
703 TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) { 725 TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) {
704 DeterministicSocketData socket_data(NULL, 0, NULL, 0); 726 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
705 socket_factory_.AddSocketDataProvider(&socket_data); 727 socket_factory_.AddSocketDataProvider(&socket_data);
706 728
707 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName); 729 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName);
708 730
709 QuicStreamRequest request(&factory_); 731 QuicStreamRequest request(&factory_);
710 EXPECT_EQ(ERR_IO_PENDING, 732 EXPECT_EQ(ERR_IO_PENDING,
711 request.Request(host_port_pair_, 733 request.Request(host_port_pair_,
712 is_https_, 734 is_https_,
735 privacy_mode_,
713 "GET", 736 "GET",
714 net_log_, 737 net_log_,
715 callback_.callback())); 738 callback_.callback()));
716 739
717 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); 740 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult());
718 741
719 EXPECT_TRUE(socket_data.at_read_eof()); 742 EXPECT_TRUE(socket_data.at_read_eof());
720 EXPECT_TRUE(socket_data.at_write_eof()); 743 EXPECT_TRUE(socket_data.at_write_eof());
721 } 744 }
722 745
723 TEST_P(QuicStreamFactoryTest, ConnectErrorInCreate) { 746 TEST_P(QuicStreamFactoryTest, ConnectErrorInCreate) {
724 MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE); 747 MockConnect connect(SYNCHRONOUS, ERR_ADDRESS_IN_USE);
725 DeterministicSocketData socket_data(NULL, 0, NULL, 0); 748 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
726 socket_data.set_connect_data(connect); 749 socket_data.set_connect_data(connect);
727 socket_factory_.AddSocketDataProvider(&socket_data); 750 socket_factory_.AddSocketDataProvider(&socket_data);
728 socket_data.StopAfter(1); 751 socket_data.StopAfter(1);
729 752
730 QuicStreamRequest request(&factory_); 753 QuicStreamRequest request(&factory_);
731 EXPECT_EQ(ERR_IO_PENDING, 754 EXPECT_EQ(ERR_IO_PENDING,
732 request.Request(host_port_pair_, 755 request.Request(host_port_pair_,
733 is_https_, 756 is_https_,
757 privacy_mode_,
734 "GET", 758 "GET",
735 net_log_, 759 net_log_,
736 callback_.callback())); 760 callback_.callback()));
737 761
738 EXPECT_EQ(ERR_ADDRESS_IN_USE, callback_.WaitForResult()); 762 EXPECT_EQ(ERR_ADDRESS_IN_USE, callback_.WaitForResult());
739 763
740 EXPECT_TRUE(socket_data.at_read_eof()); 764 EXPECT_TRUE(socket_data.at_read_eof());
741 EXPECT_TRUE(socket_data.at_write_eof()); 765 EXPECT_TRUE(socket_data.at_write_eof());
742 } 766 }
743 767
744 TEST_P(QuicStreamFactoryTest, CancelCreate) { 768 TEST_P(QuicStreamFactoryTest, CancelCreate) {
745 MockRead reads[] = { 769 MockRead reads[] = {
746 MockRead(ASYNC, OK, 0) // EOF 770 MockRead(ASYNC, OK, 0) // EOF
747 }; 771 };
748 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0); 772 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
749 socket_factory_.AddSocketDataProvider(&socket_data); 773 socket_factory_.AddSocketDataProvider(&socket_data);
750 { 774 {
751 QuicStreamRequest request(&factory_); 775 QuicStreamRequest request(&factory_);
752 EXPECT_EQ(ERR_IO_PENDING, 776 EXPECT_EQ(ERR_IO_PENDING,
753 request.Request(host_port_pair_, 777 request.Request(host_port_pair_,
754 is_https_, 778 is_https_,
779 privacy_mode_,
755 "GET", 780 "GET",
756 net_log_, 781 net_log_,
757 callback_.callback())); 782 callback_.callback()));
758 } 783 }
759 784
760 socket_data.StopAfter(1); 785 socket_data.StopAfter(1);
761 base::RunLoop run_loop; 786 base::RunLoop run_loop;
762 run_loop.RunUntilIdle(); 787 run_loop.RunUntilIdle();
763 788
764 scoped_ptr<QuicHttpStream> stream( 789 scoped_ptr<QuicHttpStream> stream(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 MockRead(ASYNC, 0, 0) // EOF 837 MockRead(ASYNC, 0, 0) // EOF
813 }; 838 };
814 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0); 839 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
815 socket_factory_.AddSocketDataProvider(&socket_data2); 840 socket_factory_.AddSocketDataProvider(&socket_data2);
816 socket_data2.StopAfter(1); 841 socket_data2.StopAfter(1);
817 842
818 QuicStreamRequest request(&factory_); 843 QuicStreamRequest request(&factory_);
819 EXPECT_EQ(ERR_IO_PENDING, 844 EXPECT_EQ(ERR_IO_PENDING,
820 request.Request(host_port_pair_, 845 request.Request(host_port_pair_,
821 is_https_, 846 is_https_,
847 privacy_mode_,
822 "GET", 848 "GET",
823 net_log_, 849 net_log_,
824 callback_.callback())); 850 callback_.callback()));
825 851
826 EXPECT_EQ(OK, callback_.WaitForResult()); 852 EXPECT_EQ(OK, callback_.WaitForResult());
827 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 853 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
828 HttpRequestInfo request_info; 854 HttpRequestInfo request_info;
829 EXPECT_EQ(OK, stream->InitializeStream(&request_info, 855 EXPECT_EQ(OK, stream->InitializeStream(&request_info,
830 DEFAULT_PRIORITY, 856 DEFAULT_PRIORITY,
831 net_log_, CompletionCallback())); 857 net_log_, CompletionCallback()));
832 858
833 // Close the session and verify that stream saw the error. 859 // Close the session and verify that stream saw the error.
834 factory_.CloseAllSessions(ERR_INTERNET_DISCONNECTED); 860 factory_.CloseAllSessions(ERR_INTERNET_DISCONNECTED);
835 EXPECT_EQ(ERR_INTERNET_DISCONNECTED, 861 EXPECT_EQ(ERR_INTERNET_DISCONNECTED,
836 stream->ReadResponseHeaders(callback_.callback())); 862 stream->ReadResponseHeaders(callback_.callback()));
837 863
838 // Now attempting to request a stream to the same origin should create 864 // Now attempting to request a stream to the same origin should create
839 // a new session. 865 // a new session.
840 866
841 QuicStreamRequest request2(&factory_); 867 QuicStreamRequest request2(&factory_);
842 EXPECT_EQ(ERR_IO_PENDING, 868 EXPECT_EQ(ERR_IO_PENDING,
843 request2.Request(host_port_pair_, 869 request2.Request(host_port_pair_,
844 is_https_, 870 is_https_,
871 privacy_mode_,
845 "GET", 872 "GET",
846 net_log_, 873 net_log_,
847 callback_.callback())); 874 callback_.callback()));
848 875
849 EXPECT_EQ(OK, callback_.WaitForResult()); 876 EXPECT_EQ(OK, callback_.WaitForResult());
850 stream = request2.ReleaseStream(); 877 stream = request2.ReleaseStream();
851 stream.reset(); // Will reset stream 3. 878 stream.reset(); // Will reset stream 3.
852 879
853 EXPECT_TRUE(socket_data.at_read_eof()); 880 EXPECT_TRUE(socket_data.at_read_eof());
854 EXPECT_TRUE(socket_data.at_write_eof()); 881 EXPECT_TRUE(socket_data.at_write_eof());
(...skipping 19 matching lines...) Expand all
874 MockRead(ASYNC, 0, 0) // EOF 901 MockRead(ASYNC, 0, 0) // EOF
875 }; 902 };
876 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0); 903 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
877 socket_factory_.AddSocketDataProvider(&socket_data2); 904 socket_factory_.AddSocketDataProvider(&socket_data2);
878 socket_data2.StopAfter(1); 905 socket_data2.StopAfter(1);
879 906
880 QuicStreamRequest request(&factory_); 907 QuicStreamRequest request(&factory_);
881 EXPECT_EQ(ERR_IO_PENDING, 908 EXPECT_EQ(ERR_IO_PENDING,
882 request.Request(host_port_pair_, 909 request.Request(host_port_pair_,
883 is_https_, 910 is_https_,
911 privacy_mode_,
884 "GET", 912 "GET",
885 net_log_, 913 net_log_,
886 callback_.callback())); 914 callback_.callback()));
887 915
888 EXPECT_EQ(OK, callback_.WaitForResult()); 916 EXPECT_EQ(OK, callback_.WaitForResult());
889 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 917 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
890 HttpRequestInfo request_info; 918 HttpRequestInfo request_info;
891 EXPECT_EQ(OK, stream->InitializeStream(&request_info, 919 EXPECT_EQ(OK, stream->InitializeStream(&request_info,
892 DEFAULT_PRIORITY, 920 DEFAULT_PRIORITY,
893 net_log_, CompletionCallback())); 921 net_log_, CompletionCallback()));
894 922
895 // Change the IP address and verify that stream saw the error. 923 // Change the IP address and verify that stream saw the error.
896 factory_.OnIPAddressChanged(); 924 factory_.OnIPAddressChanged();
897 EXPECT_EQ(ERR_NETWORK_CHANGED, 925 EXPECT_EQ(ERR_NETWORK_CHANGED,
898 stream->ReadResponseHeaders(callback_.callback())); 926 stream->ReadResponseHeaders(callback_.callback()));
899 EXPECT_TRUE(factory_.require_confirmation()); 927 EXPECT_TRUE(factory_.require_confirmation());
900 928
901 // Now attempting to request a stream to the same origin should create 929 // Now attempting to request a stream to the same origin should create
902 // a new session. 930 // a new session.
903 931
904 QuicStreamRequest request2(&factory_); 932 QuicStreamRequest request2(&factory_);
905 EXPECT_EQ(ERR_IO_PENDING, 933 EXPECT_EQ(ERR_IO_PENDING,
906 request2.Request(host_port_pair_, 934 request2.Request(host_port_pair_,
907 is_https_, 935 is_https_,
936 privacy_mode_,
908 "GET", 937 "GET",
909 net_log_, 938 net_log_,
910 callback_.callback())); 939 callback_.callback()));
911 940
912 EXPECT_EQ(OK, callback_.WaitForResult()); 941 EXPECT_EQ(OK, callback_.WaitForResult());
913 stream = request2.ReleaseStream(); 942 stream = request2.ReleaseStream();
914 stream.reset(); // Will reset stream 3. 943 stream.reset(); // Will reset stream 3.
915 944
916 EXPECT_TRUE(socket_data.at_read_eof()); 945 EXPECT_TRUE(socket_data.at_read_eof());
917 EXPECT_TRUE(socket_data.at_write_eof()); 946 EXPECT_TRUE(socket_data.at_write_eof());
(...skipping 19 matching lines...) Expand all
937 MockRead(ASYNC, 0, 0) // EOF 966 MockRead(ASYNC, 0, 0) // EOF
938 }; 967 };
939 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0); 968 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
940 socket_factory_.AddSocketDataProvider(&socket_data2); 969 socket_factory_.AddSocketDataProvider(&socket_data2);
941 socket_data2.StopAfter(1); 970 socket_data2.StopAfter(1);
942 971
943 QuicStreamRequest request(&factory_); 972 QuicStreamRequest request(&factory_);
944 EXPECT_EQ(ERR_IO_PENDING, 973 EXPECT_EQ(ERR_IO_PENDING,
945 request.Request(host_port_pair_, 974 request.Request(host_port_pair_,
946 is_https_, 975 is_https_,
976 privacy_mode_,
947 "GET", 977 "GET",
948 net_log_, 978 net_log_,
949 callback_.callback())); 979 callback_.callback()));
950 980
951 EXPECT_EQ(OK, callback_.WaitForResult()); 981 EXPECT_EQ(OK, callback_.WaitForResult());
952 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 982 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
953 HttpRequestInfo request_info; 983 HttpRequestInfo request_info;
954 EXPECT_EQ(OK, stream->InitializeStream(&request_info, 984 EXPECT_EQ(OK, stream->InitializeStream(&request_info,
955 DEFAULT_PRIORITY, 985 DEFAULT_PRIORITY,
956 net_log_, CompletionCallback())); 986 net_log_, CompletionCallback()));
957 987
958 // Add a cert and verify that stream saw the event. 988 // Add a cert and verify that stream saw the event.
959 factory_.OnCertAdded(NULL); 989 factory_.OnCertAdded(NULL);
960 EXPECT_EQ(ERR_CERT_DATABASE_CHANGED, 990 EXPECT_EQ(ERR_CERT_DATABASE_CHANGED,
961 stream->ReadResponseHeaders(callback_.callback())); 991 stream->ReadResponseHeaders(callback_.callback()));
962 EXPECT_FALSE(factory_.require_confirmation()); 992 EXPECT_FALSE(factory_.require_confirmation());
963 993
964 // Now attempting to request a stream to the same origin should create 994 // Now attempting to request a stream to the same origin should create
965 // a new session. 995 // a new session.
966 996
967 QuicStreamRequest request2(&factory_); 997 QuicStreamRequest request2(&factory_);
968 EXPECT_EQ(ERR_IO_PENDING, 998 EXPECT_EQ(ERR_IO_PENDING,
969 request2.Request(host_port_pair_, 999 request2.Request(host_port_pair_,
970 is_https_, 1000 is_https_,
1001 privacy_mode_,
971 "GET", 1002 "GET",
972 net_log_, 1003 net_log_,
973 callback_.callback())); 1004 callback_.callback()));
974 1005
975 EXPECT_EQ(OK, callback_.WaitForResult()); 1006 EXPECT_EQ(OK, callback_.WaitForResult());
976 stream = request2.ReleaseStream(); 1007 stream = request2.ReleaseStream();
977 stream.reset(); // Will reset stream 3. 1008 stream.reset(); // Will reset stream 3.
978 1009
979 EXPECT_TRUE(socket_data.at_read_eof()); 1010 EXPECT_TRUE(socket_data.at_read_eof());
980 EXPECT_TRUE(socket_data.at_write_eof()); 1011 EXPECT_TRUE(socket_data.at_write_eof());
(...skipping 19 matching lines...) Expand all
1000 MockRead(ASYNC, 0, 0) // EOF 1031 MockRead(ASYNC, 0, 0) // EOF
1001 }; 1032 };
1002 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0); 1033 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
1003 socket_factory_.AddSocketDataProvider(&socket_data2); 1034 socket_factory_.AddSocketDataProvider(&socket_data2);
1004 socket_data2.StopAfter(1); 1035 socket_data2.StopAfter(1);
1005 1036
1006 QuicStreamRequest request(&factory_); 1037 QuicStreamRequest request(&factory_);
1007 EXPECT_EQ(ERR_IO_PENDING, 1038 EXPECT_EQ(ERR_IO_PENDING,
1008 request.Request(host_port_pair_, 1039 request.Request(host_port_pair_,
1009 is_https_, 1040 is_https_,
1041 privacy_mode_,
1010 "GET", 1042 "GET",
1011 net_log_, 1043 net_log_,
1012 callback_.callback())); 1044 callback_.callback()));
1013 1045
1014 EXPECT_EQ(OK, callback_.WaitForResult()); 1046 EXPECT_EQ(OK, callback_.WaitForResult());
1015 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 1047 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
1016 HttpRequestInfo request_info; 1048 HttpRequestInfo request_info;
1017 EXPECT_EQ(OK, stream->InitializeStream(&request_info, 1049 EXPECT_EQ(OK, stream->InitializeStream(&request_info,
1018 DEFAULT_PRIORITY, 1050 DEFAULT_PRIORITY,
1019 net_log_, CompletionCallback())); 1051 net_log_, CompletionCallback()));
1020 1052
1021 // Change the CA cert and verify that stream saw the event. 1053 // Change the CA cert and verify that stream saw the event.
1022 factory_.OnCACertChanged(NULL); 1054 factory_.OnCACertChanged(NULL);
1023 EXPECT_EQ(ERR_CERT_DATABASE_CHANGED, 1055 EXPECT_EQ(ERR_CERT_DATABASE_CHANGED,
1024 stream->ReadResponseHeaders(callback_.callback())); 1056 stream->ReadResponseHeaders(callback_.callback()));
1025 EXPECT_FALSE(factory_.require_confirmation()); 1057 EXPECT_FALSE(factory_.require_confirmation());
1026 1058
1027 // Now attempting to request a stream to the same origin should create 1059 // Now attempting to request a stream to the same origin should create
1028 // a new session. 1060 // a new session.
1029 1061
1030 QuicStreamRequest request2(&factory_); 1062 QuicStreamRequest request2(&factory_);
1031 EXPECT_EQ(ERR_IO_PENDING, 1063 EXPECT_EQ(ERR_IO_PENDING,
1032 request2.Request(host_port_pair_, 1064 request2.Request(host_port_pair_,
1033 is_https_, 1065 is_https_,
1066 privacy_mode_,
1034 "GET", 1067 "GET",
1035 net_log_, 1068 net_log_,
1036 callback_.callback())); 1069 callback_.callback()));
1037 1070
1038 EXPECT_EQ(OK, callback_.WaitForResult()); 1071 EXPECT_EQ(OK, callback_.WaitForResult());
1039 stream = request2.ReleaseStream(); 1072 stream = request2.ReleaseStream();
1040 stream.reset(); // Will reset stream 3. 1073 stream.reset(); // Will reset stream 3.
1041 1074
1042 EXPECT_TRUE(socket_data.at_read_eof()); 1075 EXPECT_TRUE(socket_data.at_read_eof());
1043 EXPECT_TRUE(socket_data.at_write_eof()); 1076 EXPECT_TRUE(socket_data.at_write_eof());
1044 EXPECT_TRUE(socket_data2.at_read_eof()); 1077 EXPECT_TRUE(socket_data2.at_read_eof());
1045 EXPECT_TRUE(socket_data2.at_write_eof()); 1078 EXPECT_TRUE(socket_data2.at_write_eof());
1046 } 1079 }
1047 1080
1048 TEST_P(QuicStreamFactoryTest, SharedCryptoConfig) { 1081 TEST_P(QuicStreamFactoryTest, SharedCryptoConfig) {
1049 vector<string> cannoncial_suffixes; 1082 vector<string> cannoncial_suffixes;
1050 cannoncial_suffixes.push_back(string(".c.youtube.com")); 1083 cannoncial_suffixes.push_back(string(".c.youtube.com"));
1051 cannoncial_suffixes.push_back(string(".googlevideo.com")); 1084 cannoncial_suffixes.push_back(string(".googlevideo.com"));
1052 1085
1053 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) { 1086 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) {
1054 string r1_host_name("r1"); 1087 string r1_host_name("r1");
1055 string r2_host_name("r2"); 1088 string r2_host_name("r2");
1056 r1_host_name.append(cannoncial_suffixes[i]); 1089 r1_host_name.append(cannoncial_suffixes[i]);
1057 r2_host_name.append(cannoncial_suffixes[i]); 1090 r2_host_name.append(cannoncial_suffixes[i]);
1058 1091
1059 HostPortPair host_port_pair1(r1_host_name, 80); 1092 HostPortPair host_port_pair1(r1_host_name, 80);
1060 QuicCryptoClientConfig* crypto_config = 1093 QuicCryptoClientConfig* crypto_config =
1061 QuicStreamFactoryPeer::GetCryptoConfig(&factory_); 1094 QuicStreamFactoryPeer::GetCryptoConfig(&factory_);
1062 QuicSessionKey server_key1(host_port_pair1, is_https_); 1095 QuicSessionKey server_key1(host_port_pair1, is_https_, privacy_mode_);
1063 QuicCryptoClientConfig::CachedState* cached1 = 1096 QuicCryptoClientConfig::CachedState* cached1 =
1064 crypto_config->LookupOrCreate(server_key1); 1097 crypto_config->LookupOrCreate(server_key1);
1065 EXPECT_FALSE(cached1->proof_valid()); 1098 EXPECT_FALSE(cached1->proof_valid());
1066 EXPECT_TRUE(cached1->source_address_token().empty()); 1099 EXPECT_TRUE(cached1->source_address_token().empty());
1067 1100
1068 // Mutate the cached1 to have different data. 1101 // Mutate the cached1 to have different data.
1069 // TODO(rtenneti): mutate other members of CachedState. 1102 // TODO(rtenneti): mutate other members of CachedState.
1070 cached1->set_source_address_token(r1_host_name); 1103 cached1->set_source_address_token(r1_host_name);
1071 cached1->SetProofValid(); 1104 cached1->SetProofValid();
1072 1105
1073 HostPortPair host_port_pair2(r2_host_name, 80); 1106 HostPortPair host_port_pair2(r2_host_name, 80);
1074 QuicSessionKey server_key2(host_port_pair2, is_https_); 1107 QuicSessionKey server_key2(host_port_pair2, is_https_, privacy_mode_);
1075 QuicCryptoClientConfig::CachedState* cached2 = 1108 QuicCryptoClientConfig::CachedState* cached2 =
1076 crypto_config->LookupOrCreate(server_key2); 1109 crypto_config->LookupOrCreate(server_key2);
1077 EXPECT_EQ(cached1->source_address_token(), cached2->source_address_token()); 1110 EXPECT_EQ(cached1->source_address_token(), cached2->source_address_token());
1078 EXPECT_TRUE(cached2->proof_valid()); 1111 EXPECT_TRUE(cached2->proof_valid());
1079 } 1112 }
1080 } 1113 }
1081 1114
1082 TEST_P(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) { 1115 TEST_P(QuicStreamFactoryTest, CryptoConfigWhenProofIsInvalid) {
1083 vector<string> cannoncial_suffixes; 1116 vector<string> cannoncial_suffixes;
1084 cannoncial_suffixes.push_back(string(".c.youtube.com")); 1117 cannoncial_suffixes.push_back(string(".c.youtube.com"));
1085 cannoncial_suffixes.push_back(string(".googlevideo.com")); 1118 cannoncial_suffixes.push_back(string(".googlevideo.com"));
1086 1119
1087 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) { 1120 for (unsigned i = 0; i < cannoncial_suffixes.size(); ++i) {
1088 string r3_host_name("r3"); 1121 string r3_host_name("r3");
1089 string r4_host_name("r4"); 1122 string r4_host_name("r4");
1090 r3_host_name.append(cannoncial_suffixes[i]); 1123 r3_host_name.append(cannoncial_suffixes[i]);
1091 r4_host_name.append(cannoncial_suffixes[i]); 1124 r4_host_name.append(cannoncial_suffixes[i]);
1092 1125
1093 HostPortPair host_port_pair1(r3_host_name, 80); 1126 HostPortPair host_port_pair1(r3_host_name, 80);
1094 QuicCryptoClientConfig* crypto_config = 1127 QuicCryptoClientConfig* crypto_config =
1095 QuicStreamFactoryPeer::GetCryptoConfig(&factory_); 1128 QuicStreamFactoryPeer::GetCryptoConfig(&factory_);
1096 QuicSessionKey server_key1(host_port_pair1, is_https_); 1129 QuicSessionKey server_key1(host_port_pair1, is_https_, privacy_mode_);
1097 QuicCryptoClientConfig::CachedState* cached1 = 1130 QuicCryptoClientConfig::CachedState* cached1 =
1098 crypto_config->LookupOrCreate(server_key1); 1131 crypto_config->LookupOrCreate(server_key1);
1099 EXPECT_FALSE(cached1->proof_valid()); 1132 EXPECT_FALSE(cached1->proof_valid());
1100 EXPECT_TRUE(cached1->source_address_token().empty()); 1133 EXPECT_TRUE(cached1->source_address_token().empty());
1101 1134
1102 // Mutate the cached1 to have different data. 1135 // Mutate the cached1 to have different data.
1103 // TODO(rtenneti): mutate other members of CachedState. 1136 // TODO(rtenneti): mutate other members of CachedState.
1104 cached1->set_source_address_token(r3_host_name); 1137 cached1->set_source_address_token(r3_host_name);
1105 cached1->SetProofInvalid(); 1138 cached1->SetProofInvalid();
1106 1139
1107 HostPortPair host_port_pair2(r4_host_name, 80); 1140 HostPortPair host_port_pair2(r4_host_name, 80);
1108 QuicSessionKey server_key2(host_port_pair2, is_https_); 1141 QuicSessionKey server_key2(host_port_pair2, is_https_, privacy_mode_);
1109 QuicCryptoClientConfig::CachedState* cached2 = 1142 QuicCryptoClientConfig::CachedState* cached2 =
1110 crypto_config->LookupOrCreate(server_key2); 1143 crypto_config->LookupOrCreate(server_key2);
1111 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token()); 1144 EXPECT_NE(cached1->source_address_token(), cached2->source_address_token());
1112 EXPECT_TRUE(cached2->source_address_token().empty()); 1145 EXPECT_TRUE(cached2->source_address_token().empty());
1113 EXPECT_FALSE(cached2->proof_valid()); 1146 EXPECT_FALSE(cached2->proof_valid());
1114 } 1147 }
1115 } 1148 }
1116 1149
1117 } // namespace test 1150 } // namespace test
1118 } // namespace net 1151 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_stream_factory.cc ('k') | net/quic/test_tools/crypto_test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698