OLD | NEW |
---|---|
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/http/http_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_client_socket_pool.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/run_loop.h" | |
9 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
11 #include "base/time/time.h" | 12 #include "base/time/time.h" |
12 #include "net/base/auth.h" | 13 #include "net/base/auth.h" |
13 #include "net/base/load_timing_info.h" | 14 #include "net/base/load_timing_info.h" |
14 #include "net/base/load_timing_info_test_util.h" | 15 #include "net/base/load_timing_info_test_util.h" |
15 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
16 #include "net/base/test_completion_callback.h" | 17 #include "net/base/test_completion_callback.h" |
17 #include "net/cert/cert_verifier.h" | 18 #include "net/cert/cert_verifier.h" |
18 #include "net/dns/mock_host_resolver.h" | 19 #include "net/dns/mock_host_resolver.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
123 &http_proxy_histograms_, | 124 &http_proxy_histograms_, |
124 &host_resolver_, | 125 &host_resolver_, |
125 &transport_socket_pool_, | 126 &transport_socket_pool_, |
126 NULL, | 127 NULL, |
127 NULL) { | 128 NULL) { |
128 scoped_refptr<SSLConfigService> ssl_config_service( | 129 scoped_refptr<SSLConfigService> ssl_config_service( |
129 new SSLConfigServiceDefaults); | 130 new SSLConfigServiceDefaults); |
130 ssl_config_service->GetSSLConfig(&ssl_config_); | 131 ssl_config_service->GetSSLConfig(&ssl_config_); |
131 } | 132 } |
132 | 133 |
133 void CreatePool(bool transport_pool, bool http_proxy_pool, bool socks_pool) { | 134 void CreatePool(bool transport_pool, |
135 bool http_proxy_pool, | |
136 bool socks_pool, | |
137 bool enable_ssl_connect_job_waiting) { | |
Ryan Sleevi
2014/07/25 01:36:37
Why make this an argument to CreatePool? You could
mshelley
2014/07/26 00:58:27
Done.
| |
134 ssl_histograms_.reset(new ClientSocketPoolHistograms("SSLUnitTest")); | 138 ssl_histograms_.reset(new ClientSocketPoolHistograms("SSLUnitTest")); |
135 pool_.reset(new SSLClientSocketPool( | 139 pool_.reset(new SSLClientSocketPool( |
136 kMaxSockets, | 140 kMaxSockets, |
137 kMaxSocketsPerGroup, | 141 kMaxSocketsPerGroup, |
138 ssl_histograms_.get(), | 142 ssl_histograms_.get(), |
139 NULL /* host_resolver */, | 143 NULL /* host_resolver */, |
140 NULL /* cert_verifier */, | 144 NULL /* cert_verifier */, |
141 NULL /* server_bound_cert_service */, | 145 NULL /* server_bound_cert_service */, |
142 NULL /* transport_security_state */, | 146 NULL /* transport_security_state */, |
143 NULL /* cert_transparency_verifier */, | 147 NULL /* cert_transparency_verifier */, |
144 std::string() /* ssl_session_cache_shard */, | 148 std::string() /* ssl_session_cache_shard */, |
145 &socket_factory_, | 149 &socket_factory_, |
146 transport_pool ? &transport_socket_pool_ : NULL, | 150 transport_pool ? &transport_socket_pool_ : NULL, |
147 socks_pool ? &socks_socket_pool_ : NULL, | 151 socks_pool ? &socks_socket_pool_ : NULL, |
148 http_proxy_pool ? &http_proxy_socket_pool_ : NULL, | 152 http_proxy_pool ? &http_proxy_socket_pool_ : NULL, |
149 NULL, | 153 NULL, |
154 enable_ssl_connect_job_waiting, | |
150 NULL)); | 155 NULL)); |
151 } | 156 } |
152 | 157 |
153 scoped_refptr<SSLSocketParams> SSLParams(ProxyServer::Scheme proxy, | 158 scoped_refptr<SSLSocketParams> SSLParams(ProxyServer::Scheme proxy, |
154 bool want_spdy_over_npn) { | 159 bool want_spdy_over_npn) { |
155 return make_scoped_refptr(new SSLSocketParams( | 160 return make_scoped_refptr(new SSLSocketParams( |
156 proxy == ProxyServer::SCHEME_DIRECT ? direct_transport_socket_params_ | 161 proxy == ProxyServer::SCHEME_DIRECT ? direct_transport_socket_params_ |
157 : NULL, | 162 : NULL, |
158 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL, | 163 proxy == ProxyServer::SCHEME_SOCKS5 ? socks_socket_params_ : NULL, |
159 proxy == ProxyServer::SCHEME_HTTP ? http_proxy_socket_params_ : NULL, | 164 proxy == ProxyServer::SCHEME_HTTP ? http_proxy_socket_params_ : NULL, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
222 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_; | 227 scoped_ptr<ClientSocketPoolHistograms> ssl_histograms_; |
223 scoped_ptr<SSLClientSocketPool> pool_; | 228 scoped_ptr<SSLClientSocketPool> pool_; |
224 }; | 229 }; |
225 | 230 |
226 INSTANTIATE_TEST_CASE_P( | 231 INSTANTIATE_TEST_CASE_P( |
227 NextProto, | 232 NextProto, |
228 SSLClientSocketPoolTest, | 233 SSLClientSocketPoolTest, |
229 testing::Values(kProtoDeprecatedSPDY2, | 234 testing::Values(kProtoDeprecatedSPDY2, |
230 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); | 235 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); |
231 | 236 |
237 // Tests that the final socket will connect even if all sockets | |
238 // prior to it fail. | |
Ryan Sleevi
2014/07/25 01:36:37
More detail is needed in this comment, explaining
mshelley
2014/07/26 00:58:28
Done.
| |
239 TEST_P(SSLClientSocketPoolTest, AllSocketsFailButLast) { | |
240 StaticSocketDataProvider data1; | |
241 StaticSocketDataProvider data2; | |
242 StaticSocketDataProvider data3; | |
243 StaticSocketDataProvider data4; | |
244 socket_factory_.AddSocketDataProvider(&data1); | |
245 socket_factory_.AddSocketDataProvider(&data2); | |
246 socket_factory_.AddSocketDataProvider(&data3); | |
247 socket_factory_.AddSocketDataProvider(&data4); | |
248 socket_factory_.AddSocketDataProvider(&data4); | |
249 socket_factory_.AddSocketDataProvider(&data4); | |
250 socket_factory_.AddSocketDataProvider(&data4); | |
251 socket_factory_.AddSocketDataProvider(&data4); | |
252 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | |
253 ssl.is_in_session_cache = false; | |
254 SSLSocketDataProvider ssl2(ASYNC, ERR_SSL_PROTOCOL_ERROR); | |
255 ssl2.is_in_session_cache = true; | |
256 SSLSocketDataProvider ssl3(ASYNC, ERR_SSL_PROTOCOL_ERROR); | |
257 ssl3.is_in_session_cache = true; | |
258 SSLSocketDataProvider ssl4(ASYNC, OK); | |
259 ssl4.is_in_session_cache = true; | |
260 | |
261 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
262 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
263 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
264 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
265 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
266 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
267 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
268 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
269 | |
270 CreatePool(true, false, false, true); | |
271 | |
272 scoped_refptr<SSLSocketParams> params1 = | |
273 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
274 scoped_refptr<SSLSocketParams> params2 = | |
275 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
276 scoped_refptr<SSLSocketParams> params3 = | |
277 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
278 scoped_refptr<SSLSocketParams> params4 = | |
279 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
280 ClientSocketHandle handle1; | |
281 ClientSocketHandle handle2; | |
282 ClientSocketHandle handle3; | |
283 ClientSocketHandle handle4; | |
284 TestCompletionCallback callback1; | |
285 TestCompletionCallback callback2; | |
286 TestCompletionCallback callback3; | |
287 TestCompletionCallback callback4; | |
288 | |
289 handle1.Init( | |
290 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
291 handle2.Init( | |
292 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
293 handle3.Init( | |
294 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
295 handle4.Init( | |
296 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
297 | |
298 base::RunLoop().RunUntilIdle(); | |
299 | |
300 std::vector<MockSSLClientSocket*> sockets = | |
301 socket_factory_.ssl_client_sockets(); | |
302 | |
303 // Only the last socket should have connected. | |
304 EXPECT_FALSE(handle1.socket()); | |
305 EXPECT_FALSE(handle2.socket()); | |
306 EXPECT_FALSE(handle3.socket()); | |
307 EXPECT_TRUE(handle4.socket()->IsConnected()); | |
308 } | |
309 | |
310 // Tests that sockets will still connect in parellel if the | |
Ryan Sleevi
2014/07/25 01:36:37
parallel
mshelley
2014/07/26 00:58:27
Done.
| |
311 // EnableSSLConnectJobWaiting flag is not enabled. | |
312 TEST_P(SSLClientSocketPoolTest, SocketsConnectWithoutFlag) { | |
313 StaticSocketDataProvider data1; | |
314 StaticSocketDataProvider data2; | |
315 StaticSocketDataProvider data3; | |
316 socket_factory_.AddSocketDataProvider(&data1); | |
317 socket_factory_.AddSocketDataProvider(&data2); | |
318 socket_factory_.AddSocketDataProvider(&data3); | |
319 | |
320 SSLSocketDataProvider ssl(ASYNC, OK); | |
321 ssl.is_in_session_cache = false; | |
322 ssl.should_block_on_connect = true; | |
323 SSLSocketDataProvider ssl2(ASYNC, OK); | |
324 ssl2.is_in_session_cache = true; | |
325 ssl2.should_block_on_connect = true; | |
326 SSLSocketDataProvider ssl3(ASYNC, OK); | |
327 ssl3.is_in_session_cache = true; | |
328 ssl3.should_block_on_connect = true; | |
329 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
330 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
331 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
332 | |
333 CreatePool(true, false, false, false); | |
334 | |
335 scoped_refptr<SSLSocketParams> params1 = | |
336 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
337 scoped_refptr<SSLSocketParams> params2 = | |
338 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
339 scoped_refptr<SSLSocketParams> params3 = | |
340 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
341 ClientSocketHandle handle1; | |
342 ClientSocketHandle handle2; | |
343 ClientSocketHandle handle3; | |
344 TestCompletionCallback callback1; | |
345 TestCompletionCallback callback2; | |
346 TestCompletionCallback callback3; | |
347 | |
348 handle1.Init( | |
349 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
350 handle2.Init( | |
351 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
352 handle3.Init( | |
353 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
354 | |
355 base::RunLoop().RunUntilIdle(); | |
356 | |
357 std::vector<MockSSLClientSocket*> sockets = | |
358 socket_factory_.ssl_client_sockets(); | |
359 | |
360 // All sockets should have started their connections. | |
361 for (std::vector<MockSSLClientSocket*>::iterator it = sockets.begin(); | |
362 it != sockets.end(); | |
363 ++it) { | |
364 EXPECT_TRUE((*it)->IsConnected()); | |
365 (*it)->RestartPausedConnect(); | |
Ryan Sleevi
2014/07/25 01:36:37
This is... Surprising. I'm not sure I understand w
mshelley
2014/07/26 00:58:27
The idea here was to confirm that every socket sta
| |
366 } | |
367 | |
368 callback3.WaitForResult(); | |
Ryan Sleevi
2014/07/25 01:36:37
Mention why you don't check callback1/2
mshelley
2014/07/26 00:58:27
I was assuming that since 1/2 begin before 3, they
| |
369 | |
370 EXPECT_TRUE(handle1.socket()->IsConnected()); | |
371 EXPECT_TRUE(handle2.socket()->IsConnected()); | |
372 EXPECT_TRUE(handle3.socket()->IsConnected()); | |
373 } | |
374 | |
375 // Tests that the pool deleting an SSLConnectJob will not cause a crash, | |
376 // or prevent pending sockets from connecting. | |
377 TEST_P(SSLClientSocketPoolTest, DeletedSSLConnectJob) { | |
378 StaticSocketDataProvider data1; | |
379 StaticSocketDataProvider data2; | |
380 StaticSocketDataProvider data3; | |
381 socket_factory_.AddSocketDataProvider(&data1); | |
382 socket_factory_.AddSocketDataProvider(&data2); | |
383 socket_factory_.AddSocketDataProvider(&data3); | |
384 | |
385 SSLSocketDataProvider ssl(ASYNC, OK); | |
386 ssl.is_in_session_cache = false; | |
387 ssl.should_block_on_connect = true; | |
388 SSLSocketDataProvider ssl2(ASYNC, OK); | |
389 ssl2.is_in_session_cache = false; | |
390 SSLSocketDataProvider ssl3(ASYNC, OK); | |
391 ssl3.is_in_session_cache = false; | |
392 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
393 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
394 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
395 | |
396 CreatePool(true, false, false, true); | |
397 | |
398 scoped_refptr<SSLSocketParams> params1 = | |
399 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
400 scoped_refptr<SSLSocketParams> params2 = | |
401 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
402 scoped_refptr<SSLSocketParams> params3 = | |
403 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
404 ClientSocketHandle handle1; | |
405 ClientSocketHandle handle2; | |
406 ClientSocketHandle handle3; | |
407 TestCompletionCallback callback1; | |
408 TestCompletionCallback callback2; | |
409 TestCompletionCallback callback3; | |
410 | |
411 handle1.Init( | |
412 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
413 handle2.Init( | |
414 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
415 handle3.Init( | |
416 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
417 | |
418 // Allow the connections to proceed until the first socket has started | |
419 // connecting. | |
420 base::RunLoop().RunUntilIdle(); | |
421 | |
422 std::vector<MockSSLClientSocket*> sockets = | |
423 socket_factory_.ssl_client_sockets(); | |
424 | |
425 pool_->CancelRequest("b", &handle2); | |
426 | |
427 sockets[0]->RestartPausedConnect(); | |
428 | |
429 callback3.WaitForResult(); | |
430 | |
431 EXPECT_TRUE(handle1.socket()->IsConnected()); | |
432 EXPECT_FALSE(handle2.socket()); | |
433 EXPECT_TRUE(handle3.socket()->IsConnected()); | |
434 } | |
435 | |
436 // Tests that all pending sockets still connect when the pool deletes a pending | |
437 // SSLConnectJob which immediately followed a failed leading connection. | |
438 TEST_P(SSLClientSocketPoolTest, DeletedSocketAfterFail) { | |
439 StaticSocketDataProvider data1; | |
440 StaticSocketDataProvider data2; | |
441 StaticSocketDataProvider data3; | |
442 socket_factory_.AddSocketDataProvider(&data1); | |
443 socket_factory_.AddSocketDataProvider(&data2); | |
444 socket_factory_.AddSocketDataProvider(&data3); | |
445 | |
446 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | |
447 ssl.is_in_session_cache = false; | |
448 ssl.should_block_on_connect = true; | |
449 SSLSocketDataProvider ssl2(ASYNC, OK); | |
450 ssl2.is_in_session_cache = false; | |
451 SSLSocketDataProvider ssl3(ASYNC, OK); | |
452 ssl3.is_in_session_cache = false; | |
453 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
454 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
455 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
456 | |
457 CreatePool(true, false, false, true); | |
458 | |
459 scoped_refptr<SSLSocketParams> params1 = | |
460 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
461 scoped_refptr<SSLSocketParams> params2 = | |
462 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
463 scoped_refptr<SSLSocketParams> params3 = | |
464 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
465 ClientSocketHandle handle1; | |
466 ClientSocketHandle handle2; | |
467 ClientSocketHandle handle3; | |
468 TestCompletionCallback callback1; | |
469 TestCompletionCallback callback2; | |
470 TestCompletionCallback callback3; | |
471 | |
472 handle1.Init( | |
473 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
474 handle2.Init( | |
475 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
476 handle3.Init( | |
477 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
478 | |
479 // Allow the connections to proceed until the first socket has started | |
480 // connecting. | |
481 base::RunLoop().RunUntilIdle(); | |
482 | |
483 std::vector<MockSSLClientSocket*> sockets = | |
484 socket_factory_.ssl_client_sockets(); | |
485 | |
486 pool_->CancelRequest("b", &handle2); | |
487 | |
488 sockets[0]->RestartPausedConnect(); | |
489 | |
490 callback3.WaitForResult(); | |
491 | |
492 EXPECT_TRUE(handle1.socket()->IsConnected()); | |
493 EXPECT_FALSE(handle2.socket()); | |
494 EXPECT_TRUE(handle3.socket()->IsConnected()); | |
495 } | |
496 | |
497 // Make sure that sockets still connect after the leader socket's | |
498 // connection fails. | |
499 TEST_P(SSLClientSocketPoolTest, SimultaneousConnectJobsFail) { | |
500 StaticSocketDataProvider data1; | |
501 StaticSocketDataProvider data2; | |
502 StaticSocketDataProvider data3; | |
503 StaticSocketDataProvider data4; | |
504 StaticSocketDataProvider data5; | |
505 socket_factory_.AddSocketDataProvider(&data1); | |
506 socket_factory_.AddSocketDataProvider(&data2); | |
507 socket_factory_.AddSocketDataProvider(&data3); | |
508 socket_factory_.AddSocketDataProvider(&data4); | |
509 socket_factory_.AddSocketDataProvider(&data5); | |
510 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | |
511 ssl.is_in_session_cache = false; | |
512 ssl.should_block_on_connect = true; | |
513 SSLSocketDataProvider ssl2(ASYNC, OK); | |
514 ssl2.is_in_session_cache = false; | |
515 ssl2.should_block_on_connect = true; | |
516 SSLSocketDataProvider ssl3(ASYNC, OK); | |
517 ssl3.is_in_session_cache = false; | |
518 SSLSocketDataProvider ssl4(ASYNC, OK); | |
519 ssl4.is_in_session_cache = false; | |
520 SSLSocketDataProvider ssl5(ASYNC, OK); | |
521 ssl5.is_in_session_cache = false; | |
522 | |
523 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
524 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
525 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
526 socket_factory_.AddSSLSocketDataProvider(&ssl4); | |
527 socket_factory_.AddSSLSocketDataProvider(&ssl5); | |
528 | |
529 CreatePool(true, false, false, true); | |
530 scoped_refptr<SSLSocketParams> params1 = | |
531 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
532 scoped_refptr<SSLSocketParams> params2 = | |
533 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
534 scoped_refptr<SSLSocketParams> params3 = | |
535 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
536 scoped_refptr<SSLSocketParams> params4 = | |
537 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
538 ClientSocketHandle handle1; | |
539 ClientSocketHandle handle2; | |
540 ClientSocketHandle handle3; | |
541 ClientSocketHandle handle4; | |
542 TestCompletionCallback callback1; | |
543 TestCompletionCallback callback2; | |
544 TestCompletionCallback callback3; | |
545 TestCompletionCallback callback4; | |
546 handle1.Init( | |
547 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
548 handle2.Init( | |
549 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
550 handle3.Init( | |
551 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
552 handle4.Init( | |
553 "b", params4, MEDIUM, callback4.callback(), pool_.get(), BoundNetLog()); | |
554 | |
555 base::RunLoop().RunUntilIdle(); | |
556 | |
557 std::vector<MockSSLClientSocket*> sockets = | |
558 socket_factory_.ssl_client_sockets(); | |
559 | |
560 // The first socket's connection should have failed, and no other sockets | |
561 // should have connected yet. | |
562 for (std::vector<MockSSLClientSocket*>::iterator it = sockets.begin(); | |
563 it != sockets.end(); | |
564 ++it) { | |
565 EXPECT_FALSE((*it)->IsConnected()); | |
566 } | |
567 | |
568 // Allow the first socket to resume it's connection process. | |
569 sockets[0]->RestartPausedConnect(); | |
570 | |
571 base::RunLoop().RunUntilIdle(); | |
572 | |
573 // The second socket should have connected. | |
574 EXPECT_TRUE(sockets[1]->IsConnected()); | |
575 | |
576 // Allow the second socket to continue its connection. | |
577 sockets[1]->RestartPausedConnect(); | |
578 | |
579 callback4.WaitForResult(); | |
580 | |
581 // Pending connections should ultimately succeed. | |
582 for (std::vector<MockSSLClientSocket*>::iterator it = ++sockets.begin(); | |
583 it != sockets.end(); | |
584 ++it) { | |
585 EXPECT_TRUE((*it)->IsConnected()); | |
586 } | |
587 } | |
588 | |
589 // Make sure that no sockets connect before the "leader" socket, | |
590 // given that the leader has a successful connection. | |
591 TEST_P(SSLClientSocketPoolTest, SimultaneousConnectJobsSuccess) { | |
592 StaticSocketDataProvider data1; | |
593 StaticSocketDataProvider data2; | |
594 StaticSocketDataProvider data3; | |
595 socket_factory_.AddSocketDataProvider(&data1); | |
596 socket_factory_.AddSocketDataProvider(&data2); | |
597 socket_factory_.AddSocketDataProvider(&data3); | |
598 | |
599 SSLSocketDataProvider ssl(ASYNC, OK); | |
600 ssl.is_in_session_cache = false; | |
601 ssl.should_block_on_connect = true; | |
602 SSLSocketDataProvider ssl2(ASYNC, OK); | |
603 ssl2.is_in_session_cache = false; | |
604 SSLSocketDataProvider ssl3(ASYNC, OK); | |
605 ssl3.is_in_session_cache = false; | |
606 socket_factory_.AddSSLSocketDataProvider(&ssl); | |
607 socket_factory_.AddSSLSocketDataProvider(&ssl2); | |
608 socket_factory_.AddSSLSocketDataProvider(&ssl3); | |
609 | |
610 CreatePool(true, false, false, true); | |
611 | |
612 scoped_refptr<SSLSocketParams> params1 = | |
613 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
614 scoped_refptr<SSLSocketParams> params2 = | |
615 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
616 scoped_refptr<SSLSocketParams> params3 = | |
617 SSLParams(ProxyServer::SCHEME_DIRECT, false); | |
618 ClientSocketHandle handle1; | |
619 ClientSocketHandle handle2; | |
620 ClientSocketHandle handle3; | |
621 TestCompletionCallback callback1; | |
622 TestCompletionCallback callback2; | |
623 TestCompletionCallback callback3; | |
624 | |
625 handle1.Init( | |
626 "b", params1, MEDIUM, callback1.callback(), pool_.get(), BoundNetLog()); | |
627 handle2.Init( | |
628 "b", params2, MEDIUM, callback2.callback(), pool_.get(), BoundNetLog()); | |
629 handle3.Init( | |
630 "b", params3, MEDIUM, callback3.callback(), pool_.get(), BoundNetLog()); | |
631 | |
632 // Allow the connections to proceed until the first socket has finished | |
633 // connecting. | |
634 base::RunLoop().RunUntilIdle(); | |
635 | |
636 std::vector<MockSSLClientSocket*> sockets = | |
637 socket_factory_.ssl_client_sockets(); | |
638 | |
639 EXPECT_TRUE(sockets[0]->IsConnected()); | |
640 for (std::vector<MockSSLClientSocket*>::iterator it = ++sockets.begin(); | |
641 it != sockets.end(); | |
642 ++it) { | |
643 EXPECT_FALSE((*it)->IsConnected()); | |
644 } | |
645 | |
646 sockets[0]->RestartPausedConnect(); | |
647 | |
648 callback3.WaitForResult(); | |
649 | |
650 EXPECT_TRUE(handle1.socket()->IsConnected()); | |
651 EXPECT_TRUE(handle2.socket()->IsConnected()); | |
652 EXPECT_TRUE(handle3.socket()->IsConnected()); | |
653 } | |
654 | |
232 TEST_P(SSLClientSocketPoolTest, TCPFail) { | 655 TEST_P(SSLClientSocketPoolTest, TCPFail) { |
233 StaticSocketDataProvider data; | 656 StaticSocketDataProvider data; |
234 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 657 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
235 socket_factory_.AddSocketDataProvider(&data); | 658 socket_factory_.AddSocketDataProvider(&data); |
236 | 659 |
237 CreatePool(true /* tcp pool */, false, false); | 660 CreatePool(true /* tcp pool */, false, false, false); |
238 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 661 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
239 false); | 662 false); |
240 | 663 |
241 ClientSocketHandle handle; | 664 ClientSocketHandle handle; |
242 int rv = handle.Init("a", params, MEDIUM, CompletionCallback(), pool_.get(), | 665 int rv = handle.Init("a", params, MEDIUM, CompletionCallback(), pool_.get(), |
243 BoundNetLog()); | 666 BoundNetLog()); |
244 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); | 667 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); |
245 EXPECT_FALSE(handle.is_initialized()); | 668 EXPECT_FALSE(handle.is_initialized()); |
246 EXPECT_FALSE(handle.socket()); | 669 EXPECT_FALSE(handle.socket()); |
247 EXPECT_FALSE(handle.is_ssl_error()); | 670 EXPECT_FALSE(handle.is_ssl_error()); |
248 } | 671 } |
249 | 672 |
250 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) { | 673 TEST_P(SSLClientSocketPoolTest, TCPFailAsync) { |
251 StaticSocketDataProvider data; | 674 StaticSocketDataProvider data; |
252 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 675 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
253 socket_factory_.AddSocketDataProvider(&data); | 676 socket_factory_.AddSocketDataProvider(&data); |
254 | 677 |
255 CreatePool(true /* tcp pool */, false, false); | 678 CreatePool(true /* tcp pool */, false, false, false); |
256 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 679 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
257 false); | 680 false); |
258 | 681 |
259 ClientSocketHandle handle; | 682 ClientSocketHandle handle; |
260 TestCompletionCallback callback; | 683 TestCompletionCallback callback; |
261 int rv = handle.Init( | 684 int rv = handle.Init( |
262 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 685 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
263 EXPECT_EQ(ERR_IO_PENDING, rv); | 686 EXPECT_EQ(ERR_IO_PENDING, rv); |
264 EXPECT_FALSE(handle.is_initialized()); | 687 EXPECT_FALSE(handle.is_initialized()); |
265 EXPECT_FALSE(handle.socket()); | 688 EXPECT_FALSE(handle.socket()); |
266 | 689 |
267 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 690 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
268 EXPECT_FALSE(handle.is_initialized()); | 691 EXPECT_FALSE(handle.is_initialized()); |
269 EXPECT_FALSE(handle.socket()); | 692 EXPECT_FALSE(handle.socket()); |
270 EXPECT_FALSE(handle.is_ssl_error()); | 693 EXPECT_FALSE(handle.is_ssl_error()); |
271 } | 694 } |
272 | 695 |
273 TEST_P(SSLClientSocketPoolTest, BasicDirect) { | 696 TEST_P(SSLClientSocketPoolTest, BasicDirect) { |
274 StaticSocketDataProvider data; | 697 StaticSocketDataProvider data; |
275 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 698 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
276 socket_factory_.AddSocketDataProvider(&data); | 699 socket_factory_.AddSocketDataProvider(&data); |
277 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 700 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
278 socket_factory_.AddSSLSocketDataProvider(&ssl); | 701 socket_factory_.AddSSLSocketDataProvider(&ssl); |
279 | 702 |
280 CreatePool(true /* tcp pool */, false, false); | 703 CreatePool(true /* tcp pool */, false, false, false); |
281 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 704 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
282 false); | 705 false); |
283 | 706 |
284 ClientSocketHandle handle; | 707 ClientSocketHandle handle; |
285 TestCompletionCallback callback; | 708 TestCompletionCallback callback; |
286 int rv = handle.Init( | 709 int rv = handle.Init( |
287 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 710 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
288 EXPECT_EQ(OK, rv); | 711 EXPECT_EQ(OK, rv); |
289 EXPECT_TRUE(handle.is_initialized()); | 712 EXPECT_TRUE(handle.is_initialized()); |
290 EXPECT_TRUE(handle.socket()); | 713 EXPECT_TRUE(handle.socket()); |
291 TestLoadTimingInfo(handle); | 714 TestLoadTimingInfo(handle); |
292 } | 715 } |
293 | 716 |
294 // Make sure that SSLConnectJob passes on its priority to its | 717 // Make sure that SSLConnectJob passes on its priority to its |
295 // socket request on Init (for the DIRECT case). | 718 // socket request on Init (for the DIRECT case). |
296 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) { | 719 TEST_P(SSLClientSocketPoolTest, SetSocketRequestPriorityOnInitDirect) { |
297 CreatePool(true /* tcp pool */, false, false); | 720 CreatePool(true /* tcp pool */, false, false, false); |
298 scoped_refptr<SSLSocketParams> params = | 721 scoped_refptr<SSLSocketParams> params = |
299 SSLParams(ProxyServer::SCHEME_DIRECT, false); | 722 SSLParams(ProxyServer::SCHEME_DIRECT, false); |
300 | 723 |
301 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 724 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
302 RequestPriority priority = static_cast<RequestPriority>(i); | 725 RequestPriority priority = static_cast<RequestPriority>(i); |
303 StaticSocketDataProvider data; | 726 StaticSocketDataProvider data; |
304 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 727 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
305 socket_factory_.AddSocketDataProvider(&data); | 728 socket_factory_.AddSocketDataProvider(&data); |
306 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 729 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
307 socket_factory_.AddSSLSocketDataProvider(&ssl); | 730 socket_factory_.AddSSLSocketDataProvider(&ssl); |
308 | 731 |
309 ClientSocketHandle handle; | 732 ClientSocketHandle handle; |
310 TestCompletionCallback callback; | 733 TestCompletionCallback callback; |
311 EXPECT_EQ(OK, handle.Init("a", params, priority, callback.callback(), | 734 EXPECT_EQ(OK, handle.Init("a", params, priority, callback.callback(), |
312 pool_.get(), BoundNetLog())); | 735 pool_.get(), BoundNetLog())); |
313 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 736 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
314 handle.socket()->Disconnect(); | 737 handle.socket()->Disconnect(); |
315 } | 738 } |
316 } | 739 } |
317 | 740 |
318 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) { | 741 TEST_P(SSLClientSocketPoolTest, BasicDirectAsync) { |
319 StaticSocketDataProvider data; | 742 StaticSocketDataProvider data; |
320 socket_factory_.AddSocketDataProvider(&data); | 743 socket_factory_.AddSocketDataProvider(&data); |
321 SSLSocketDataProvider ssl(ASYNC, OK); | 744 SSLSocketDataProvider ssl(ASYNC, OK); |
322 socket_factory_.AddSSLSocketDataProvider(&ssl); | 745 socket_factory_.AddSSLSocketDataProvider(&ssl); |
323 | 746 |
324 CreatePool(true /* tcp pool */, false, false); | 747 CreatePool(true /* tcp pool */, false, false, false); |
325 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 748 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
326 false); | 749 false); |
327 | 750 |
328 ClientSocketHandle handle; | 751 ClientSocketHandle handle; |
329 TestCompletionCallback callback; | 752 TestCompletionCallback callback; |
330 int rv = handle.Init( | 753 int rv = handle.Init( |
331 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 754 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
332 EXPECT_EQ(ERR_IO_PENDING, rv); | 755 EXPECT_EQ(ERR_IO_PENDING, rv); |
333 EXPECT_FALSE(handle.is_initialized()); | 756 EXPECT_FALSE(handle.is_initialized()); |
334 EXPECT_FALSE(handle.socket()); | 757 EXPECT_FALSE(handle.socket()); |
335 | 758 |
336 EXPECT_EQ(OK, callback.WaitForResult()); | 759 EXPECT_EQ(OK, callback.WaitForResult()); |
337 EXPECT_TRUE(handle.is_initialized()); | 760 EXPECT_TRUE(handle.is_initialized()); |
338 EXPECT_TRUE(handle.socket()); | 761 EXPECT_TRUE(handle.socket()); |
339 TestLoadTimingInfo(handle); | 762 TestLoadTimingInfo(handle); |
340 } | 763 } |
341 | 764 |
342 TEST_P(SSLClientSocketPoolTest, DirectCertError) { | 765 TEST_P(SSLClientSocketPoolTest, DirectCertError) { |
343 StaticSocketDataProvider data; | 766 StaticSocketDataProvider data; |
344 socket_factory_.AddSocketDataProvider(&data); | 767 socket_factory_.AddSocketDataProvider(&data); |
345 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); | 768 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); |
346 socket_factory_.AddSSLSocketDataProvider(&ssl); | 769 socket_factory_.AddSSLSocketDataProvider(&ssl); |
347 | 770 |
348 CreatePool(true /* tcp pool */, false, false); | 771 CreatePool(true /* tcp pool */, false, false, false); |
349 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 772 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
350 false); | 773 false); |
351 | 774 |
352 ClientSocketHandle handle; | 775 ClientSocketHandle handle; |
353 TestCompletionCallback callback; | 776 TestCompletionCallback callback; |
354 int rv = handle.Init( | 777 int rv = handle.Init( |
355 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 778 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
356 EXPECT_EQ(ERR_IO_PENDING, rv); | 779 EXPECT_EQ(ERR_IO_PENDING, rv); |
357 EXPECT_FALSE(handle.is_initialized()); | 780 EXPECT_FALSE(handle.is_initialized()); |
358 EXPECT_FALSE(handle.socket()); | 781 EXPECT_FALSE(handle.socket()); |
359 | 782 |
360 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); | 783 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); |
361 EXPECT_TRUE(handle.is_initialized()); | 784 EXPECT_TRUE(handle.is_initialized()); |
362 EXPECT_TRUE(handle.socket()); | 785 EXPECT_TRUE(handle.socket()); |
363 TestLoadTimingInfo(handle); | 786 TestLoadTimingInfo(handle); |
364 } | 787 } |
365 | 788 |
366 TEST_P(SSLClientSocketPoolTest, DirectSSLError) { | 789 TEST_P(SSLClientSocketPoolTest, DirectSSLError) { |
367 StaticSocketDataProvider data; | 790 StaticSocketDataProvider data; |
368 socket_factory_.AddSocketDataProvider(&data); | 791 socket_factory_.AddSocketDataProvider(&data); |
369 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 792 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
370 socket_factory_.AddSSLSocketDataProvider(&ssl); | 793 socket_factory_.AddSSLSocketDataProvider(&ssl); |
371 | 794 |
372 CreatePool(true /* tcp pool */, false, false); | 795 CreatePool(true /* tcp pool */, false, false, false); |
373 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 796 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
374 false); | 797 false); |
375 | 798 |
376 ClientSocketHandle handle; | 799 ClientSocketHandle handle; |
377 TestCompletionCallback callback; | 800 TestCompletionCallback callback; |
378 int rv = handle.Init( | 801 int rv = handle.Init( |
379 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 802 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
380 EXPECT_EQ(ERR_IO_PENDING, rv); | 803 EXPECT_EQ(ERR_IO_PENDING, rv); |
381 EXPECT_FALSE(handle.is_initialized()); | 804 EXPECT_FALSE(handle.is_initialized()); |
382 EXPECT_FALSE(handle.socket()); | 805 EXPECT_FALSE(handle.socket()); |
383 | 806 |
384 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); | 807 EXPECT_EQ(ERR_SSL_PROTOCOL_ERROR, callback.WaitForResult()); |
385 EXPECT_FALSE(handle.is_initialized()); | 808 EXPECT_FALSE(handle.is_initialized()); |
386 EXPECT_FALSE(handle.socket()); | 809 EXPECT_FALSE(handle.socket()); |
387 EXPECT_TRUE(handle.is_ssl_error()); | 810 EXPECT_TRUE(handle.is_ssl_error()); |
388 } | 811 } |
389 | 812 |
390 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) { | 813 TEST_P(SSLClientSocketPoolTest, DirectWithNPN) { |
391 StaticSocketDataProvider data; | 814 StaticSocketDataProvider data; |
392 socket_factory_.AddSocketDataProvider(&data); | 815 socket_factory_.AddSocketDataProvider(&data); |
393 SSLSocketDataProvider ssl(ASYNC, OK); | 816 SSLSocketDataProvider ssl(ASYNC, OK); |
394 ssl.SetNextProto(kProtoHTTP11); | 817 ssl.SetNextProto(kProtoHTTP11); |
395 socket_factory_.AddSSLSocketDataProvider(&ssl); | 818 socket_factory_.AddSSLSocketDataProvider(&ssl); |
396 | 819 |
397 CreatePool(true /* tcp pool */, false, false); | 820 CreatePool(true /* tcp pool */, false, false, false); |
398 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 821 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
399 false); | 822 false); |
400 | 823 |
401 ClientSocketHandle handle; | 824 ClientSocketHandle handle; |
402 TestCompletionCallback callback; | 825 TestCompletionCallback callback; |
403 int rv = handle.Init( | 826 int rv = handle.Init( |
404 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 827 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
405 EXPECT_EQ(ERR_IO_PENDING, rv); | 828 EXPECT_EQ(ERR_IO_PENDING, rv); |
406 EXPECT_FALSE(handle.is_initialized()); | 829 EXPECT_FALSE(handle.is_initialized()); |
407 EXPECT_FALSE(handle.socket()); | 830 EXPECT_FALSE(handle.socket()); |
408 | 831 |
409 EXPECT_EQ(OK, callback.WaitForResult()); | 832 EXPECT_EQ(OK, callback.WaitForResult()); |
410 EXPECT_TRUE(handle.is_initialized()); | 833 EXPECT_TRUE(handle.is_initialized()); |
411 EXPECT_TRUE(handle.socket()); | 834 EXPECT_TRUE(handle.socket()); |
412 TestLoadTimingInfo(handle); | 835 TestLoadTimingInfo(handle); |
413 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 836 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
414 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 837 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
415 } | 838 } |
416 | 839 |
417 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) { | 840 TEST_P(SSLClientSocketPoolTest, DirectNoSPDY) { |
418 StaticSocketDataProvider data; | 841 StaticSocketDataProvider data; |
419 socket_factory_.AddSocketDataProvider(&data); | 842 socket_factory_.AddSocketDataProvider(&data); |
420 SSLSocketDataProvider ssl(ASYNC, OK); | 843 SSLSocketDataProvider ssl(ASYNC, OK); |
421 ssl.SetNextProto(kProtoHTTP11); | 844 ssl.SetNextProto(kProtoHTTP11); |
422 socket_factory_.AddSSLSocketDataProvider(&ssl); | 845 socket_factory_.AddSSLSocketDataProvider(&ssl); |
423 | 846 |
424 CreatePool(true /* tcp pool */, false, false); | 847 CreatePool(true /* tcp pool */, false, false, false); |
425 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 848 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
426 true); | 849 true); |
427 | 850 |
428 ClientSocketHandle handle; | 851 ClientSocketHandle handle; |
429 TestCompletionCallback callback; | 852 TestCompletionCallback callback; |
430 int rv = handle.Init( | 853 int rv = handle.Init( |
431 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 854 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
432 EXPECT_EQ(ERR_IO_PENDING, rv); | 855 EXPECT_EQ(ERR_IO_PENDING, rv); |
433 EXPECT_FALSE(handle.is_initialized()); | 856 EXPECT_FALSE(handle.is_initialized()); |
434 EXPECT_FALSE(handle.socket()); | 857 EXPECT_FALSE(handle.socket()); |
435 | 858 |
436 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); | 859 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); |
437 EXPECT_FALSE(handle.is_initialized()); | 860 EXPECT_FALSE(handle.is_initialized()); |
438 EXPECT_FALSE(handle.socket()); | 861 EXPECT_FALSE(handle.socket()); |
439 EXPECT_TRUE(handle.is_ssl_error()); | 862 EXPECT_TRUE(handle.is_ssl_error()); |
440 } | 863 } |
441 | 864 |
442 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) { | 865 TEST_P(SSLClientSocketPoolTest, DirectGotSPDY) { |
443 StaticSocketDataProvider data; | 866 StaticSocketDataProvider data; |
444 socket_factory_.AddSocketDataProvider(&data); | 867 socket_factory_.AddSocketDataProvider(&data); |
445 SSLSocketDataProvider ssl(ASYNC, OK); | 868 SSLSocketDataProvider ssl(ASYNC, OK); |
446 ssl.SetNextProto(GetParam()); | 869 ssl.SetNextProto(GetParam()); |
447 socket_factory_.AddSSLSocketDataProvider(&ssl); | 870 socket_factory_.AddSSLSocketDataProvider(&ssl); |
448 | 871 |
449 CreatePool(true /* tcp pool */, false, false); | 872 CreatePool(true /* tcp pool */, false, false, false); |
450 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 873 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
451 true); | 874 true); |
452 | 875 |
453 ClientSocketHandle handle; | 876 ClientSocketHandle handle; |
454 TestCompletionCallback callback; | 877 TestCompletionCallback callback; |
455 int rv = handle.Init( | 878 int rv = handle.Init( |
456 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 879 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
457 EXPECT_EQ(ERR_IO_PENDING, rv); | 880 EXPECT_EQ(ERR_IO_PENDING, rv); |
458 EXPECT_FALSE(handle.is_initialized()); | 881 EXPECT_FALSE(handle.is_initialized()); |
459 EXPECT_FALSE(handle.socket()); | 882 EXPECT_FALSE(handle.socket()); |
(...skipping 11 matching lines...) Expand all Loading... | |
471 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); | 894 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); |
472 } | 895 } |
473 | 896 |
474 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) { | 897 TEST_P(SSLClientSocketPoolTest, DirectGotBonusSPDY) { |
475 StaticSocketDataProvider data; | 898 StaticSocketDataProvider data; |
476 socket_factory_.AddSocketDataProvider(&data); | 899 socket_factory_.AddSocketDataProvider(&data); |
477 SSLSocketDataProvider ssl(ASYNC, OK); | 900 SSLSocketDataProvider ssl(ASYNC, OK); |
478 ssl.SetNextProto(GetParam()); | 901 ssl.SetNextProto(GetParam()); |
479 socket_factory_.AddSSLSocketDataProvider(&ssl); | 902 socket_factory_.AddSSLSocketDataProvider(&ssl); |
480 | 903 |
481 CreatePool(true /* tcp pool */, false, false); | 904 CreatePool(true /* tcp pool */, false, false, false); |
482 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 905 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
483 true); | 906 true); |
484 | 907 |
485 ClientSocketHandle handle; | 908 ClientSocketHandle handle; |
486 TestCompletionCallback callback; | 909 TestCompletionCallback callback; |
487 int rv = handle.Init( | 910 int rv = handle.Init( |
488 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 911 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
489 EXPECT_EQ(ERR_IO_PENDING, rv); | 912 EXPECT_EQ(ERR_IO_PENDING, rv); |
490 EXPECT_FALSE(handle.is_initialized()); | 913 EXPECT_FALSE(handle.is_initialized()); |
491 EXPECT_FALSE(handle.socket()); | 914 EXPECT_FALSE(handle.socket()); |
492 | 915 |
493 EXPECT_EQ(OK, callback.WaitForResult()); | 916 EXPECT_EQ(OK, callback.WaitForResult()); |
494 EXPECT_TRUE(handle.is_initialized()); | 917 EXPECT_TRUE(handle.is_initialized()); |
495 EXPECT_TRUE(handle.socket()); | 918 EXPECT_TRUE(handle.socket()); |
496 TestLoadTimingInfo(handle); | 919 TestLoadTimingInfo(handle); |
497 | 920 |
498 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 921 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
499 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 922 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
500 std::string proto; | 923 std::string proto; |
501 std::string server_protos; | 924 std::string server_protos; |
502 ssl_socket->GetNextProto(&proto, &server_protos); | 925 ssl_socket->GetNextProto(&proto, &server_protos); |
503 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); | 926 EXPECT_EQ(GetParam(), SSLClientSocket::NextProtoFromString(proto)); |
504 } | 927 } |
505 | 928 |
506 TEST_P(SSLClientSocketPoolTest, SOCKSFail) { | 929 TEST_P(SSLClientSocketPoolTest, SOCKSFail) { |
507 StaticSocketDataProvider data; | 930 StaticSocketDataProvider data; |
508 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 931 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
509 socket_factory_.AddSocketDataProvider(&data); | 932 socket_factory_.AddSocketDataProvider(&data); |
510 | 933 |
511 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 934 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
512 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 935 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
513 false); | 936 false); |
514 | 937 |
515 ClientSocketHandle handle; | 938 ClientSocketHandle handle; |
516 TestCompletionCallback callback; | 939 TestCompletionCallback callback; |
517 int rv = handle.Init( | 940 int rv = handle.Init( |
518 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 941 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
519 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); | 942 EXPECT_EQ(ERR_CONNECTION_FAILED, rv); |
520 EXPECT_FALSE(handle.is_initialized()); | 943 EXPECT_FALSE(handle.is_initialized()); |
521 EXPECT_FALSE(handle.socket()); | 944 EXPECT_FALSE(handle.socket()); |
522 EXPECT_FALSE(handle.is_ssl_error()); | 945 EXPECT_FALSE(handle.is_ssl_error()); |
523 } | 946 } |
524 | 947 |
525 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) { | 948 TEST_P(SSLClientSocketPoolTest, SOCKSFailAsync) { |
526 StaticSocketDataProvider data; | 949 StaticSocketDataProvider data; |
527 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 950 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
528 socket_factory_.AddSocketDataProvider(&data); | 951 socket_factory_.AddSocketDataProvider(&data); |
529 | 952 |
530 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 953 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
531 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 954 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
532 false); | 955 false); |
533 | 956 |
534 ClientSocketHandle handle; | 957 ClientSocketHandle handle; |
535 TestCompletionCallback callback; | 958 TestCompletionCallback callback; |
536 int rv = handle.Init( | 959 int rv = handle.Init( |
537 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 960 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
538 EXPECT_EQ(ERR_IO_PENDING, rv); | 961 EXPECT_EQ(ERR_IO_PENDING, rv); |
539 EXPECT_FALSE(handle.is_initialized()); | 962 EXPECT_FALSE(handle.is_initialized()); |
540 EXPECT_FALSE(handle.socket()); | 963 EXPECT_FALSE(handle.socket()); |
541 | 964 |
542 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); | 965 EXPECT_EQ(ERR_CONNECTION_FAILED, callback.WaitForResult()); |
543 EXPECT_FALSE(handle.is_initialized()); | 966 EXPECT_FALSE(handle.is_initialized()); |
544 EXPECT_FALSE(handle.socket()); | 967 EXPECT_FALSE(handle.socket()); |
545 EXPECT_FALSE(handle.is_ssl_error()); | 968 EXPECT_FALSE(handle.is_ssl_error()); |
546 } | 969 } |
547 | 970 |
548 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) { | 971 TEST_P(SSLClientSocketPoolTest, SOCKSBasic) { |
549 StaticSocketDataProvider data; | 972 StaticSocketDataProvider data; |
550 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 973 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
551 socket_factory_.AddSocketDataProvider(&data); | 974 socket_factory_.AddSocketDataProvider(&data); |
552 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 975 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
553 socket_factory_.AddSSLSocketDataProvider(&ssl); | 976 socket_factory_.AddSSLSocketDataProvider(&ssl); |
554 | 977 |
555 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 978 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
556 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 979 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
557 false); | 980 false); |
558 | 981 |
559 ClientSocketHandle handle; | 982 ClientSocketHandle handle; |
560 TestCompletionCallback callback; | 983 TestCompletionCallback callback; |
561 int rv = handle.Init( | 984 int rv = handle.Init( |
562 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 985 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
563 EXPECT_EQ(OK, rv); | 986 EXPECT_EQ(OK, rv); |
564 EXPECT_TRUE(handle.is_initialized()); | 987 EXPECT_TRUE(handle.is_initialized()); |
565 EXPECT_TRUE(handle.socket()); | 988 EXPECT_TRUE(handle.socket()); |
566 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | 989 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
567 // don't go through the real logic, unlike in the HTTP proxy tests. | 990 // don't go through the real logic, unlike in the HTTP proxy tests. |
568 TestLoadTimingInfo(handle); | 991 TestLoadTimingInfo(handle); |
569 } | 992 } |
570 | 993 |
571 // Make sure that SSLConnectJob passes on its priority to its | 994 // Make sure that SSLConnectJob passes on its priority to its |
572 // transport socket on Init (for the SOCKS_PROXY case). | 995 // transport socket on Init (for the SOCKS_PROXY case). |
573 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) { | 996 TEST_P(SSLClientSocketPoolTest, SetTransportPriorityOnInitSOCKS) { |
574 StaticSocketDataProvider data; | 997 StaticSocketDataProvider data; |
575 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 998 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
576 socket_factory_.AddSocketDataProvider(&data); | 999 socket_factory_.AddSocketDataProvider(&data); |
577 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 1000 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
578 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1001 socket_factory_.AddSSLSocketDataProvider(&ssl); |
579 | 1002 |
580 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1003 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
581 scoped_refptr<SSLSocketParams> params = | 1004 scoped_refptr<SSLSocketParams> params = |
582 SSLParams(ProxyServer::SCHEME_SOCKS5, false); | 1005 SSLParams(ProxyServer::SCHEME_SOCKS5, false); |
583 | 1006 |
584 ClientSocketHandle handle; | 1007 ClientSocketHandle handle; |
585 TestCompletionCallback callback; | 1008 TestCompletionCallback callback; |
586 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), | 1009 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), |
587 pool_.get(), BoundNetLog())); | 1010 pool_.get(), BoundNetLog())); |
588 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); | 1011 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); |
589 } | 1012 } |
590 | 1013 |
591 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) { | 1014 TEST_P(SSLClientSocketPoolTest, SOCKSBasicAsync) { |
592 StaticSocketDataProvider data; | 1015 StaticSocketDataProvider data; |
593 socket_factory_.AddSocketDataProvider(&data); | 1016 socket_factory_.AddSocketDataProvider(&data); |
594 SSLSocketDataProvider ssl(ASYNC, OK); | 1017 SSLSocketDataProvider ssl(ASYNC, OK); |
595 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1018 socket_factory_.AddSSLSocketDataProvider(&ssl); |
596 | 1019 |
597 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1020 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
598 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 1021 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
599 false); | 1022 false); |
600 | 1023 |
601 ClientSocketHandle handle; | 1024 ClientSocketHandle handle; |
602 TestCompletionCallback callback; | 1025 TestCompletionCallback callback; |
603 int rv = handle.Init( | 1026 int rv = handle.Init( |
604 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1027 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
605 EXPECT_EQ(ERR_IO_PENDING, rv); | 1028 EXPECT_EQ(ERR_IO_PENDING, rv); |
606 EXPECT_FALSE(handle.is_initialized()); | 1029 EXPECT_FALSE(handle.is_initialized()); |
607 EXPECT_FALSE(handle.socket()); | 1030 EXPECT_FALSE(handle.socket()); |
608 | 1031 |
609 EXPECT_EQ(OK, callback.WaitForResult()); | 1032 EXPECT_EQ(OK, callback.WaitForResult()); |
610 EXPECT_TRUE(handle.is_initialized()); | 1033 EXPECT_TRUE(handle.is_initialized()); |
611 EXPECT_TRUE(handle.socket()); | 1034 EXPECT_TRUE(handle.socket()); |
612 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | 1035 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
613 // don't go through the real logic, unlike in the HTTP proxy tests. | 1036 // don't go through the real logic, unlike in the HTTP proxy tests. |
614 TestLoadTimingInfo(handle); | 1037 TestLoadTimingInfo(handle); |
615 } | 1038 } |
616 | 1039 |
617 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) { | 1040 TEST_P(SSLClientSocketPoolTest, HttpProxyFail) { |
618 StaticSocketDataProvider data; | 1041 StaticSocketDataProvider data; |
619 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 1042 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
620 socket_factory_.AddSocketDataProvider(&data); | 1043 socket_factory_.AddSocketDataProvider(&data); |
621 | 1044 |
622 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1045 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
623 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 1046 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
624 false); | 1047 false); |
625 | 1048 |
626 ClientSocketHandle handle; | 1049 ClientSocketHandle handle; |
627 TestCompletionCallback callback; | 1050 TestCompletionCallback callback; |
628 int rv = handle.Init( | 1051 int rv = handle.Init( |
629 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1052 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
630 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 1053 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
631 EXPECT_FALSE(handle.is_initialized()); | 1054 EXPECT_FALSE(handle.is_initialized()); |
632 EXPECT_FALSE(handle.socket()); | 1055 EXPECT_FALSE(handle.socket()); |
633 EXPECT_FALSE(handle.is_ssl_error()); | 1056 EXPECT_FALSE(handle.is_ssl_error()); |
634 } | 1057 } |
635 | 1058 |
636 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) { | 1059 TEST_P(SSLClientSocketPoolTest, HttpProxyFailAsync) { |
637 StaticSocketDataProvider data; | 1060 StaticSocketDataProvider data; |
638 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); | 1061 data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_FAILED)); |
639 socket_factory_.AddSocketDataProvider(&data); | 1062 socket_factory_.AddSocketDataProvider(&data); |
640 | 1063 |
641 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1064 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
642 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 1065 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
643 false); | 1066 false); |
644 | 1067 |
645 ClientSocketHandle handle; | 1068 ClientSocketHandle handle; |
646 TestCompletionCallback callback; | 1069 TestCompletionCallback callback; |
647 int rv = handle.Init( | 1070 int rv = handle.Init( |
648 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1071 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
649 EXPECT_EQ(ERR_IO_PENDING, rv); | 1072 EXPECT_EQ(ERR_IO_PENDING, rv); |
650 EXPECT_FALSE(handle.is_initialized()); | 1073 EXPECT_FALSE(handle.is_initialized()); |
651 EXPECT_FALSE(handle.socket()); | 1074 EXPECT_FALSE(handle.socket()); |
(...skipping 16 matching lines...) Expand all Loading... | |
668 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 1091 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
669 }; | 1092 }; |
670 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 1093 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
671 arraysize(writes)); | 1094 arraysize(writes)); |
672 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 1095 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
673 socket_factory_.AddSocketDataProvider(&data); | 1096 socket_factory_.AddSocketDataProvider(&data); |
674 AddAuthToCache(); | 1097 AddAuthToCache(); |
675 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 1098 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
676 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1099 socket_factory_.AddSSLSocketDataProvider(&ssl); |
677 | 1100 |
678 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1101 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
679 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 1102 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
680 false); | 1103 false); |
681 | 1104 |
682 ClientSocketHandle handle; | 1105 ClientSocketHandle handle; |
683 TestCompletionCallback callback; | 1106 TestCompletionCallback callback; |
684 int rv = handle.Init( | 1107 int rv = handle.Init( |
685 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1108 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
686 EXPECT_EQ(OK, rv); | 1109 EXPECT_EQ(OK, rv); |
687 EXPECT_TRUE(handle.is_initialized()); | 1110 EXPECT_TRUE(handle.is_initialized()); |
688 EXPECT_TRUE(handle.socket()); | 1111 EXPECT_TRUE(handle.socket()); |
(...skipping 14 matching lines...) Expand all Loading... | |
703 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 1126 MockRead(SYNCHRONOUS, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
704 }; | 1127 }; |
705 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 1128 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
706 arraysize(writes)); | 1129 arraysize(writes)); |
707 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 1130 data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
708 socket_factory_.AddSocketDataProvider(&data); | 1131 socket_factory_.AddSocketDataProvider(&data); |
709 AddAuthToCache(); | 1132 AddAuthToCache(); |
710 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 1133 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
711 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1134 socket_factory_.AddSSLSocketDataProvider(&ssl); |
712 | 1135 |
713 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1136 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
714 scoped_refptr<SSLSocketParams> params = | 1137 scoped_refptr<SSLSocketParams> params = |
715 SSLParams(ProxyServer::SCHEME_HTTP, false); | 1138 SSLParams(ProxyServer::SCHEME_HTTP, false); |
716 | 1139 |
717 ClientSocketHandle handle; | 1140 ClientSocketHandle handle; |
718 TestCompletionCallback callback; | 1141 TestCompletionCallback callback; |
719 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), | 1142 EXPECT_EQ(OK, handle.Init("a", params, HIGHEST, callback.callback(), |
720 pool_.get(), BoundNetLog())); | 1143 pool_.get(), BoundNetLog())); |
721 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); | 1144 EXPECT_EQ(HIGHEST, transport_socket_pool_.last_request_priority()); |
722 } | 1145 } |
723 | 1146 |
724 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) { | 1147 TEST_P(SSLClientSocketPoolTest, HttpProxyBasicAsync) { |
725 MockWrite writes[] = { | 1148 MockWrite writes[] = { |
726 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 1149 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
727 "Host: host\r\n" | 1150 "Host: host\r\n" |
728 "Proxy-Connection: keep-alive\r\n" | 1151 "Proxy-Connection: keep-alive\r\n" |
729 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 1152 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
730 }; | 1153 }; |
731 MockRead reads[] = { | 1154 MockRead reads[] = { |
732 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 1155 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
733 }; | 1156 }; |
734 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 1157 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
735 arraysize(writes)); | 1158 arraysize(writes)); |
736 socket_factory_.AddSocketDataProvider(&data); | 1159 socket_factory_.AddSocketDataProvider(&data); |
737 AddAuthToCache(); | 1160 AddAuthToCache(); |
738 SSLSocketDataProvider ssl(ASYNC, OK); | 1161 SSLSocketDataProvider ssl(ASYNC, OK); |
739 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1162 socket_factory_.AddSSLSocketDataProvider(&ssl); |
740 | 1163 |
741 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1164 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
742 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 1165 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
743 false); | 1166 false); |
744 | 1167 |
745 ClientSocketHandle handle; | 1168 ClientSocketHandle handle; |
746 TestCompletionCallback callback; | 1169 TestCompletionCallback callback; |
747 int rv = handle.Init( | 1170 int rv = handle.Init( |
748 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1171 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
749 EXPECT_EQ(ERR_IO_PENDING, rv); | 1172 EXPECT_EQ(ERR_IO_PENDING, rv); |
750 EXPECT_FALSE(handle.is_initialized()); | 1173 EXPECT_FALSE(handle.is_initialized()); |
751 EXPECT_FALSE(handle.socket()); | 1174 EXPECT_FALSE(handle.socket()); |
(...skipping 15 matching lines...) Expand all Loading... | |
767 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1190 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
768 MockRead("Content-Length: 10\r\n\r\n"), | 1191 MockRead("Content-Length: 10\r\n\r\n"), |
769 MockRead("0123456789"), | 1192 MockRead("0123456789"), |
770 }; | 1193 }; |
771 StaticSocketDataProvider data(reads, arraysize(reads), writes, | 1194 StaticSocketDataProvider data(reads, arraysize(reads), writes, |
772 arraysize(writes)); | 1195 arraysize(writes)); |
773 socket_factory_.AddSocketDataProvider(&data); | 1196 socket_factory_.AddSocketDataProvider(&data); |
774 SSLSocketDataProvider ssl(ASYNC, OK); | 1197 SSLSocketDataProvider ssl(ASYNC, OK); |
775 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1198 socket_factory_.AddSSLSocketDataProvider(&ssl); |
776 | 1199 |
777 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 1200 CreatePool(false, true /* http proxy pool */, true /* socks pool */, false); |
778 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 1201 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
779 false); | 1202 false); |
780 | 1203 |
781 ClientSocketHandle handle; | 1204 ClientSocketHandle handle; |
782 TestCompletionCallback callback; | 1205 TestCompletionCallback callback; |
783 int rv = handle.Init( | 1206 int rv = handle.Init( |
784 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 1207 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
785 EXPECT_EQ(ERR_IO_PENDING, rv); | 1208 EXPECT_EQ(ERR_IO_PENDING, rv); |
786 EXPECT_FALSE(handle.is_initialized()); | 1209 EXPECT_FALSE(handle.is_initialized()); |
787 EXPECT_FALSE(handle.socket()); | 1210 EXPECT_FALSE(handle.socket()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
836 MockRead(ASYNC, ERR_IO_PENDING), | 1259 MockRead(ASYNC, ERR_IO_PENDING), |
837 }; | 1260 }; |
838 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 1261 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
839 socket_factory_.AddSocketDataProvider(&data); | 1262 socket_factory_.AddSocketDataProvider(&data); |
840 SSLSocketDataProvider ssl(ASYNC, OK); | 1263 SSLSocketDataProvider ssl(ASYNC, OK); |
841 ssl.cert = X509Certificate::CreateFromBytes( | 1264 ssl.cert = X509Certificate::CreateFromBytes( |
842 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); | 1265 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); |
843 ssl.SetNextProto(GetParam()); | 1266 ssl.SetNextProto(GetParam()); |
844 socket_factory_.AddSSLSocketDataProvider(&ssl); | 1267 socket_factory_.AddSSLSocketDataProvider(&ssl); |
845 | 1268 |
846 CreatePool(true /* tcp pool */, false, false); | 1269 CreatePool(true /* tcp pool */, false, false, false); |
847 base::WeakPtr<SpdySession> spdy_session = | 1270 base::WeakPtr<SpdySession> spdy_session = |
848 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); | 1271 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); |
849 | 1272 |
850 EXPECT_TRUE( | 1273 EXPECT_TRUE( |
851 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); | 1274 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); |
852 EXPECT_FALSE( | 1275 EXPECT_FALSE( |
853 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); | 1276 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); |
854 EXPECT_TRUE( | 1277 EXPECT_TRUE( |
855 HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key)); | 1278 HasSpdySession(session_->spdy_session_pool(), test_hosts[2].key)); |
856 | 1279 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
893 PRIVACY_MODE_DISABLED); | 1316 PRIVACY_MODE_DISABLED); |
894 } | 1317 } |
895 | 1318 |
896 MockRead reads[] = { | 1319 MockRead reads[] = { |
897 MockRead(ASYNC, ERR_IO_PENDING), | 1320 MockRead(ASYNC, ERR_IO_PENDING), |
898 }; | 1321 }; |
899 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 1322 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
900 socket_factory_.AddSocketDataProvider(&data); | 1323 socket_factory_.AddSocketDataProvider(&data); |
901 socket_factory_.AddSSLSocketDataProvider(ssl); | 1324 socket_factory_.AddSSLSocketDataProvider(ssl); |
902 | 1325 |
903 CreatePool(true /* tcp pool */, false, false); | 1326 CreatePool(true /* tcp pool */, false, false, false); |
904 base::WeakPtr<SpdySession> spdy_session = | 1327 base::WeakPtr<SpdySession> spdy_session = |
905 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); | 1328 CreateSecureSpdySession(session_, test_hosts[0].key, BoundNetLog()); |
906 | 1329 |
907 EXPECT_TRUE( | 1330 EXPECT_TRUE( |
908 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); | 1331 HasSpdySession(session_->spdy_session_pool(), test_hosts[0].key)); |
909 EXPECT_FALSE( | 1332 EXPECT_FALSE( |
910 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); | 1333 HasSpdySession(session_->spdy_session_pool(), test_hosts[1].key)); |
911 | 1334 |
912 session_->spdy_session_pool()->CloseAllSessions(); | 1335 session_->spdy_session_pool()->CloseAllSessions(); |
913 } | 1336 } |
(...skipping 15 matching lines...) Expand all Loading... | |
929 ssl.channel_id_sent = true; | 1352 ssl.channel_id_sent = true; |
930 ssl.SetNextProto(GetParam()); | 1353 ssl.SetNextProto(GetParam()); |
931 TestIPPoolingDisabled(&ssl); | 1354 TestIPPoolingDisabled(&ssl); |
932 } | 1355 } |
933 | 1356 |
934 // It would be nice to also test the timeouts in SSLClientSocketPool. | 1357 // It would be nice to also test the timeouts in SSLClientSocketPool. |
935 | 1358 |
936 } // namespace | 1359 } // namespace |
937 | 1360 |
938 } // namespace net | 1361 } // namespace net |
OLD | NEW |