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/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/time.h" | 10 #include "base/time.h" |
11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
12 #include "net/base/auth.h" | 12 #include "net/base/auth.h" |
13 #include "net/base/cert_verifier.h" | 13 #include "net/base/cert_verifier.h" |
14 #include "net/base/load_timing_info.h" | |
14 #include "net/base/mock_host_resolver.h" | 15 #include "net/base/mock_host_resolver.h" |
15 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
16 #include "net/base/ssl_config_service_defaults.h" | 17 #include "net/base/ssl_config_service_defaults.h" |
17 #include "net/base/test_certificate_data.h" | 18 #include "net/base/test_certificate_data.h" |
18 #include "net/base/test_completion_callback.h" | 19 #include "net/base/test_completion_callback.h" |
19 #include "net/http/http_auth_handler_factory.h" | 20 #include "net/http/http_auth_handler_factory.h" |
20 #include "net/http/http_network_session.h" | 21 #include "net/http/http_network_session.h" |
21 #include "net/http/http_request_headers.h" | 22 #include "net/http/http_request_headers.h" |
22 #include "net/http/http_response_headers.h" | 23 #include "net/http/http_response_headers.h" |
23 #include "net/http/http_server_properties_impl.h" | 24 #include "net/http/http_server_properties_impl.h" |
24 #include "net/proxy/proxy_service.h" | 25 #include "net/proxy/proxy_service.h" |
25 #include "net/socket/client_socket_handle.h" | 26 #include "net/socket/client_socket_handle.h" |
26 #include "net/socket/client_socket_pool_histograms.h" | 27 #include "net/socket/client_socket_pool_histograms.h" |
27 #include "net/socket/socket_test_util.h" | 28 #include "net/socket/socket_test_util.h" |
28 #include "net/spdy/spdy_session.h" | 29 #include "net/spdy/spdy_session.h" |
29 #include "net/spdy/spdy_session_pool.h" | 30 #include "net/spdy/spdy_session_pool.h" |
30 #include "net/spdy/spdy_test_util_spdy2.h" | 31 #include "net/spdy/spdy_test_util_spdy2.h" |
31 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
32 | 33 |
33 using namespace net::test_spdy2; | 34 using namespace net::test_spdy2; |
34 | 35 |
35 namespace net { | 36 namespace net { |
36 | 37 |
37 namespace { | 38 namespace { |
38 | 39 |
39 const int kMaxSockets = 32; | 40 const int kMaxSockets = 32; |
40 const int kMaxSocketsPerGroup = 6; | 41 const int kMaxSocketsPerGroup = 6; |
41 | 42 |
43 // Make sure |handle|'s load times are set correctly. DNS and connect start | |
44 // times comes from mock client sockets in these tests, so primarily serves to | |
45 // check those times were copied, and ssl times / connect end are set correctly. | |
46 void TestLoadTimingInfo(const ClientSocketHandle& handle) { | |
47 LoadTimingInfo load_timing_info; | |
48 EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); | |
49 | |
50 EXPECT_FALSE(load_timing_info.socket_reused); | |
51 // None of these tests use a NetLog. | |
52 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | |
53 | |
54 EXPECT_FALSE(load_timing_info.dns_start.is_null()); | |
55 EXPECT_LE(load_timing_info.dns_start, load_timing_info.dns_end); | |
56 EXPECT_LE(load_timing_info.dns_end, load_timing_info.connect_start); | |
57 EXPECT_LE(load_timing_info.connect_start, load_timing_info.ssl_start); | |
58 EXPECT_LE(load_timing_info.ssl_start, load_timing_info.ssl_end); | |
59 EXPECT_LE(load_timing_info.ssl_end, load_timing_info.connect_end); | |
60 | |
61 // None of these should be set by the socket handle. | |
62 EXPECT_TRUE(load_timing_info.proxy_start.is_null()); | |
63 EXPECT_TRUE(load_timing_info.proxy_end.is_null()); | |
64 EXPECT_TRUE(load_timing_info.send_start.is_null()); | |
65 EXPECT_TRUE(load_timing_info.send_end.is_null()); | |
66 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); | |
67 } | |
68 | |
69 // Just like TestLoadTimingInfo, except DNS times are expected to be NULL, for | |
eroman
2012/12/14 04:08:35
I don't like calling times "NULL". I think it woul
mmenke
2012/12/14 13:36:12
Done (Modified other comments as well).
| |
70 // tests over proxy types that do DNS lookups themselves. | |
71 void TestLoadTimingInfoNoDns(const ClientSocketHandle& handle) { | |
72 LoadTimingInfo load_timing_info; | |
73 EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); | |
74 | |
75 // None of these tests use a NetLog. | |
76 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | |
77 | |
78 EXPECT_FALSE(load_timing_info.socket_reused); | |
79 | |
80 EXPECT_TRUE(load_timing_info.dns_start.is_null()); | |
81 EXPECT_TRUE(load_timing_info.dns_end.is_null()); | |
82 EXPECT_FALSE(load_timing_info.connect_start.is_null()); | |
83 EXPECT_LE(load_timing_info.connect_start, load_timing_info.ssl_start); | |
84 EXPECT_LE(load_timing_info.ssl_start, load_timing_info.ssl_end); | |
85 EXPECT_LE(load_timing_info.ssl_end, load_timing_info.connect_end); | |
86 | |
87 // None of these should be set by the socket handle. | |
88 EXPECT_TRUE(load_timing_info.proxy_start.is_null()); | |
89 EXPECT_TRUE(load_timing_info.proxy_end.is_null()); | |
90 EXPECT_TRUE(load_timing_info.send_start.is_null()); | |
91 EXPECT_TRUE(load_timing_info.send_end.is_null()); | |
92 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); | |
93 } | |
94 | |
42 class SSLClientSocketPoolTest : public testing::Test { | 95 class SSLClientSocketPoolTest : public testing::Test { |
43 protected: | 96 protected: |
44 SSLClientSocketPoolTest() | 97 SSLClientSocketPoolTest() |
45 : proxy_service_(ProxyService::CreateDirect()), | 98 : proxy_service_(ProxyService::CreateDirect()), |
46 ssl_config_service_(new SSLConfigServiceDefaults), | 99 ssl_config_service_(new SSLConfigServiceDefaults), |
47 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault( | 100 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault( |
48 &host_resolver_)), | 101 &host_resolver_)), |
49 session_(CreateNetworkSession()), | 102 session_(CreateNetworkSession()), |
50 direct_transport_socket_params_(new TransportSocketParams( | 103 direct_transport_socket_params_(new TransportSocketParams( |
51 HostPortPair("host", 443), MEDIUM, false, false, | 104 HostPortPair("host", 443), MEDIUM, false, false, |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
229 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 282 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
230 false); | 283 false); |
231 | 284 |
232 ClientSocketHandle handle; | 285 ClientSocketHandle handle; |
233 TestCompletionCallback callback; | 286 TestCompletionCallback callback; |
234 int rv = handle.Init( | 287 int rv = handle.Init( |
235 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 288 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
236 EXPECT_EQ(OK, rv); | 289 EXPECT_EQ(OK, rv); |
237 EXPECT_TRUE(handle.is_initialized()); | 290 EXPECT_TRUE(handle.is_initialized()); |
238 EXPECT_TRUE(handle.socket()); | 291 EXPECT_TRUE(handle.socket()); |
292 TestLoadTimingInfo(handle); | |
239 } | 293 } |
240 | 294 |
241 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { | 295 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { |
242 StaticSocketDataProvider data; | 296 StaticSocketDataProvider data; |
243 socket_factory_.AddSocketDataProvider(&data); | 297 socket_factory_.AddSocketDataProvider(&data); |
244 SSLSocketDataProvider ssl(ASYNC, OK); | 298 SSLSocketDataProvider ssl(ASYNC, OK); |
245 socket_factory_.AddSSLSocketDataProvider(&ssl); | 299 socket_factory_.AddSSLSocketDataProvider(&ssl); |
246 | 300 |
247 CreatePool(true /* tcp pool */, false, false); | 301 CreatePool(true /* tcp pool */, false, false); |
248 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 302 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
249 false); | 303 false); |
250 | 304 |
251 ClientSocketHandle handle; | 305 ClientSocketHandle handle; |
252 TestCompletionCallback callback; | 306 TestCompletionCallback callback; |
253 int rv = handle.Init( | 307 int rv = handle.Init( |
254 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 308 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
255 EXPECT_EQ(ERR_IO_PENDING, rv); | 309 EXPECT_EQ(ERR_IO_PENDING, rv); |
256 EXPECT_FALSE(handle.is_initialized()); | 310 EXPECT_FALSE(handle.is_initialized()); |
257 EXPECT_FALSE(handle.socket()); | 311 EXPECT_FALSE(handle.socket()); |
258 | 312 |
259 EXPECT_EQ(OK, callback.WaitForResult()); | 313 EXPECT_EQ(OK, callback.WaitForResult()); |
260 EXPECT_TRUE(handle.is_initialized()); | 314 EXPECT_TRUE(handle.is_initialized()); |
261 EXPECT_TRUE(handle.socket()); | 315 EXPECT_TRUE(handle.socket()); |
316 TestLoadTimingInfo(handle); | |
262 } | 317 } |
263 | 318 |
264 TEST_F(SSLClientSocketPoolTest, DirectCertError) { | 319 TEST_F(SSLClientSocketPoolTest, DirectCertError) { |
265 StaticSocketDataProvider data; | 320 StaticSocketDataProvider data; |
266 socket_factory_.AddSocketDataProvider(&data); | 321 socket_factory_.AddSocketDataProvider(&data); |
267 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); | 322 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); |
268 socket_factory_.AddSSLSocketDataProvider(&ssl); | 323 socket_factory_.AddSSLSocketDataProvider(&ssl); |
269 | 324 |
270 CreatePool(true /* tcp pool */, false, false); | 325 CreatePool(true /* tcp pool */, false, false); |
271 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 326 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
272 false); | 327 false); |
273 | 328 |
274 ClientSocketHandle handle; | 329 ClientSocketHandle handle; |
275 TestCompletionCallback callback; | 330 TestCompletionCallback callback; |
276 int rv = handle.Init( | 331 int rv = handle.Init( |
277 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 332 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
278 EXPECT_EQ(ERR_IO_PENDING, rv); | 333 EXPECT_EQ(ERR_IO_PENDING, rv); |
279 EXPECT_FALSE(handle.is_initialized()); | 334 EXPECT_FALSE(handle.is_initialized()); |
280 EXPECT_FALSE(handle.socket()); | 335 EXPECT_FALSE(handle.socket()); |
281 | 336 |
282 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); | 337 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); |
283 EXPECT_TRUE(handle.is_initialized()); | 338 EXPECT_TRUE(handle.is_initialized()); |
284 EXPECT_TRUE(handle.socket()); | 339 EXPECT_TRUE(handle.socket()); |
340 TestLoadTimingInfo(handle); | |
285 } | 341 } |
286 | 342 |
287 TEST_F(SSLClientSocketPoolTest, DirectSSLError) { | 343 TEST_F(SSLClientSocketPoolTest, DirectSSLError) { |
288 StaticSocketDataProvider data; | 344 StaticSocketDataProvider data; |
289 socket_factory_.AddSocketDataProvider(&data); | 345 socket_factory_.AddSocketDataProvider(&data); |
290 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 346 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
291 socket_factory_.AddSSLSocketDataProvider(&ssl); | 347 socket_factory_.AddSSLSocketDataProvider(&ssl); |
292 | 348 |
293 CreatePool(true /* tcp pool */, false, false); | 349 CreatePool(true /* tcp pool */, false, false); |
294 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 350 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
(...skipping 28 matching lines...) Expand all Loading... | |
323 TestCompletionCallback callback; | 379 TestCompletionCallback callback; |
324 int rv = handle.Init( | 380 int rv = handle.Init( |
325 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 381 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
326 EXPECT_EQ(ERR_IO_PENDING, rv); | 382 EXPECT_EQ(ERR_IO_PENDING, rv); |
327 EXPECT_FALSE(handle.is_initialized()); | 383 EXPECT_FALSE(handle.is_initialized()); |
328 EXPECT_FALSE(handle.socket()); | 384 EXPECT_FALSE(handle.socket()); |
329 | 385 |
330 EXPECT_EQ(OK, callback.WaitForResult()); | 386 EXPECT_EQ(OK, callback.WaitForResult()); |
331 EXPECT_TRUE(handle.is_initialized()); | 387 EXPECT_TRUE(handle.is_initialized()); |
332 EXPECT_TRUE(handle.socket()); | 388 EXPECT_TRUE(handle.socket()); |
389 TestLoadTimingInfo(handle); | |
333 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 390 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
334 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 391 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
335 } | 392 } |
336 | 393 |
337 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) { | 394 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) { |
338 StaticSocketDataProvider data; | 395 StaticSocketDataProvider data; |
339 socket_factory_.AddSocketDataProvider(&data); | 396 socket_factory_.AddSocketDataProvider(&data); |
340 SSLSocketDataProvider ssl(ASYNC, OK); | 397 SSLSocketDataProvider ssl(ASYNC, OK); |
341 ssl.SetNextProto(kProtoHTTP11); | 398 ssl.SetNextProto(kProtoHTTP11); |
342 socket_factory_.AddSSLSocketDataProvider(&ssl); | 399 socket_factory_.AddSSLSocketDataProvider(&ssl); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
374 TestCompletionCallback callback; | 431 TestCompletionCallback callback; |
375 int rv = handle.Init( | 432 int rv = handle.Init( |
376 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 433 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
377 EXPECT_EQ(ERR_IO_PENDING, rv); | 434 EXPECT_EQ(ERR_IO_PENDING, rv); |
378 EXPECT_FALSE(handle.is_initialized()); | 435 EXPECT_FALSE(handle.is_initialized()); |
379 EXPECT_FALSE(handle.socket()); | 436 EXPECT_FALSE(handle.socket()); |
380 | 437 |
381 EXPECT_EQ(OK, callback.WaitForResult()); | 438 EXPECT_EQ(OK, callback.WaitForResult()); |
382 EXPECT_TRUE(handle.is_initialized()); | 439 EXPECT_TRUE(handle.is_initialized()); |
383 EXPECT_TRUE(handle.socket()); | 440 EXPECT_TRUE(handle.socket()); |
441 TestLoadTimingInfo(handle); | |
384 | 442 |
385 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 443 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
386 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 444 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
387 std::string proto; | 445 std::string proto; |
388 std::string server_protos; | 446 std::string server_protos; |
389 ssl_socket->GetNextProto(&proto, &server_protos); | 447 ssl_socket->GetNextProto(&proto, &server_protos); |
390 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 448 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
391 kProtoSPDY2); | 449 kProtoSPDY2); |
392 } | 450 } |
393 | 451 |
(...skipping 12 matching lines...) Expand all Loading... | |
406 TestCompletionCallback callback; | 464 TestCompletionCallback callback; |
407 int rv = handle.Init( | 465 int rv = handle.Init( |
408 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 466 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
409 EXPECT_EQ(ERR_IO_PENDING, rv); | 467 EXPECT_EQ(ERR_IO_PENDING, rv); |
410 EXPECT_FALSE(handle.is_initialized()); | 468 EXPECT_FALSE(handle.is_initialized()); |
411 EXPECT_FALSE(handle.socket()); | 469 EXPECT_FALSE(handle.socket()); |
412 | 470 |
413 EXPECT_EQ(OK, callback.WaitForResult()); | 471 EXPECT_EQ(OK, callback.WaitForResult()); |
414 EXPECT_TRUE(handle.is_initialized()); | 472 EXPECT_TRUE(handle.is_initialized()); |
415 EXPECT_TRUE(handle.socket()); | 473 EXPECT_TRUE(handle.socket()); |
474 TestLoadTimingInfo(handle); | |
416 | 475 |
417 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 476 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
418 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 477 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
419 std::string proto; | 478 std::string proto; |
420 std::string server_protos; | 479 std::string server_protos; |
421 ssl_socket->GetNextProto(&proto, &server_protos); | 480 ssl_socket->GetNextProto(&proto, &server_protos); |
422 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 481 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
423 kProtoSPDY2); | 482 kProtoSPDY2); |
424 } | 483 } |
425 | 484 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
476 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 535 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
477 false); | 536 false); |
478 | 537 |
479 ClientSocketHandle handle; | 538 ClientSocketHandle handle; |
480 TestCompletionCallback callback; | 539 TestCompletionCallback callback; |
481 int rv = handle.Init( | 540 int rv = handle.Init( |
482 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 541 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
483 EXPECT_EQ(OK, rv); | 542 EXPECT_EQ(OK, rv); |
484 EXPECT_TRUE(handle.is_initialized()); | 543 EXPECT_TRUE(handle.is_initialized()); |
485 EXPECT_TRUE(handle.socket()); | 544 EXPECT_TRUE(handle.socket()); |
545 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | |
546 // don't go through the real logic, unlike in the HTTP proxy tests. | |
547 TestLoadTimingInfo(handle); | |
486 } | 548 } |
487 | 549 |
488 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { | 550 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { |
489 StaticSocketDataProvider data; | 551 StaticSocketDataProvider data; |
490 socket_factory_.AddSocketDataProvider(&data); | 552 socket_factory_.AddSocketDataProvider(&data); |
491 SSLSocketDataProvider ssl(ASYNC, OK); | 553 SSLSocketDataProvider ssl(ASYNC, OK); |
492 socket_factory_.AddSSLSocketDataProvider(&ssl); | 554 socket_factory_.AddSSLSocketDataProvider(&ssl); |
493 | 555 |
494 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 556 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
495 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 557 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
496 false); | 558 false); |
497 | 559 |
498 ClientSocketHandle handle; | 560 ClientSocketHandle handle; |
499 TestCompletionCallback callback; | 561 TestCompletionCallback callback; |
500 int rv = handle.Init( | 562 int rv = handle.Init( |
501 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 563 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
502 EXPECT_EQ(ERR_IO_PENDING, rv); | 564 EXPECT_EQ(ERR_IO_PENDING, rv); |
503 EXPECT_FALSE(handle.is_initialized()); | 565 EXPECT_FALSE(handle.is_initialized()); |
504 EXPECT_FALSE(handle.socket()); | 566 EXPECT_FALSE(handle.socket()); |
505 | 567 |
506 EXPECT_EQ(OK, callback.WaitForResult()); | 568 EXPECT_EQ(OK, callback.WaitForResult()); |
507 EXPECT_TRUE(handle.is_initialized()); | 569 EXPECT_TRUE(handle.is_initialized()); |
508 EXPECT_TRUE(handle.socket()); | 570 EXPECT_TRUE(handle.socket()); |
571 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here | |
572 // don't go through the real logic, unlike in the HTTP proxy tests. | |
573 TestLoadTimingInfo(handle); | |
509 } | 574 } |
510 | 575 |
511 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { | 576 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { |
512 StaticSocketDataProvider data; | 577 StaticSocketDataProvider data; |
513 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 578 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
514 socket_factory_.AddSocketDataProvider(&data); | 579 socket_factory_.AddSocketDataProvider(&data); |
515 | 580 |
516 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 581 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
517 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 582 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
518 false); | 583 false); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
573 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 638 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
574 false); | 639 false); |
575 | 640 |
576 ClientSocketHandle handle; | 641 ClientSocketHandle handle; |
577 TestCompletionCallback callback; | 642 TestCompletionCallback callback; |
578 int rv = handle.Init( | 643 int rv = handle.Init( |
579 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 644 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
580 EXPECT_EQ(OK, rv); | 645 EXPECT_EQ(OK, rv); |
581 EXPECT_TRUE(handle.is_initialized()); | 646 EXPECT_TRUE(handle.is_initialized()); |
582 EXPECT_TRUE(handle.socket()); | 647 EXPECT_TRUE(handle.socket()); |
648 TestLoadTimingInfoNoDns(handle); | |
583 } | 649 } |
584 | 650 |
585 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { | 651 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { |
586 MockWrite writes[] = { | 652 MockWrite writes[] = { |
587 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 653 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
588 "Host: host\r\n" | 654 "Host: host\r\n" |
589 "Proxy-Connection: keep-alive\r\n" | 655 "Proxy-Connection: keep-alive\r\n" |
590 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 656 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
591 }; | 657 }; |
592 MockRead reads[] = { | 658 MockRead reads[] = { |
(...skipping 14 matching lines...) Expand all Loading... | |
607 TestCompletionCallback callback; | 673 TestCompletionCallback callback; |
608 int rv = handle.Init( | 674 int rv = handle.Init( |
609 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 675 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
610 EXPECT_EQ(ERR_IO_PENDING, rv); | 676 EXPECT_EQ(ERR_IO_PENDING, rv); |
611 EXPECT_FALSE(handle.is_initialized()); | 677 EXPECT_FALSE(handle.is_initialized()); |
612 EXPECT_FALSE(handle.socket()); | 678 EXPECT_FALSE(handle.socket()); |
613 | 679 |
614 EXPECT_EQ(OK, callback.WaitForResult()); | 680 EXPECT_EQ(OK, callback.WaitForResult()); |
615 EXPECT_TRUE(handle.is_initialized()); | 681 EXPECT_TRUE(handle.is_initialized()); |
616 EXPECT_TRUE(handle.socket()); | 682 EXPECT_TRUE(handle.socket()); |
683 TestLoadTimingInfoNoDns(handle); | |
617 } | 684 } |
618 | 685 |
619 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { | 686 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { |
620 MockWrite writes[] = { | 687 MockWrite writes[] = { |
621 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 688 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
622 "Host: host\r\n" | 689 "Host: host\r\n" |
623 "Proxy-Connection: keep-alive\r\n\r\n"), | 690 "Proxy-Connection: keep-alive\r\n\r\n"), |
624 }; | 691 }; |
625 MockRead reads[] = { | 692 MockRead reads[] = { |
626 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 693 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
835 ssl.channel_id_sent = true; | 902 ssl.channel_id_sent = true; |
836 ssl.SetNextProto(kProtoSPDY2); | 903 ssl.SetNextProto(kProtoSPDY2); |
837 TestIPPoolingDisabled(&ssl); | 904 TestIPPoolingDisabled(&ssl); |
838 } | 905 } |
839 | 906 |
840 // It would be nice to also test the timeouts in SSLClientSocketPool. | 907 // It would be nice to also test the timeouts in SSLClientSocketPool. |
841 | 908 |
842 } // namespace | 909 } // namespace |
843 | 910 |
844 } // namespace net | 911 } // namespace net |
OLD | NEW |