| 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.connect_timing.dns_start.is_null()); |
| 55 EXPECT_LE(load_timing_info.connect_timing.dns_start, |
| 56 load_timing_info.connect_timing.dns_end); |
| 57 EXPECT_LE(load_timing_info.connect_timing.dns_end, |
| 58 load_timing_info.connect_timing.connect_start); |
| 59 EXPECT_LE(load_timing_info.connect_timing.connect_start, |
| 60 load_timing_info.connect_timing.ssl_start); |
| 61 EXPECT_LE(load_timing_info.connect_timing.ssl_start, |
| 62 load_timing_info.connect_timing.ssl_end); |
| 63 EXPECT_LE(load_timing_info.connect_timing.ssl_end, |
| 64 load_timing_info.connect_timing.connect_end); |
| 65 |
| 66 // None of these should be set by the socket handle. |
| 67 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 68 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 69 EXPECT_TRUE(load_timing_info.send_start.is_null()); |
| 70 EXPECT_TRUE(load_timing_info.send_end.is_null()); |
| 71 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
| 72 } |
| 73 |
| 74 // Just like TestLoadTimingInfo, except DNS times are expected to be null, for |
| 75 // tests over proxies that do DNS lookups themselves. |
| 76 void TestLoadTimingInfoNoDns(const ClientSocketHandle& handle) { |
| 77 LoadTimingInfo load_timing_info; |
| 78 EXPECT_TRUE(handle.GetLoadTimingInfo(false, &load_timing_info)); |
| 79 |
| 80 // None of these tests use a NetLog. |
| 81 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 82 |
| 83 EXPECT_FALSE(load_timing_info.socket_reused); |
| 84 |
| 85 EXPECT_TRUE(load_timing_info.connect_timing.dns_start.is_null()); |
| 86 EXPECT_TRUE(load_timing_info.connect_timing.dns_end.is_null()); |
| 87 EXPECT_FALSE(load_timing_info.connect_timing.connect_start.is_null()); |
| 88 EXPECT_LE(load_timing_info.connect_timing.connect_start, |
| 89 load_timing_info.connect_timing.ssl_start); |
| 90 EXPECT_LE(load_timing_info.connect_timing.ssl_start, |
| 91 load_timing_info.connect_timing.ssl_end); |
| 92 EXPECT_LE(load_timing_info.connect_timing.ssl_end, |
| 93 load_timing_info.connect_timing.connect_end); |
| 94 |
| 95 // None of these should be set by the socket handle. |
| 96 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 97 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 98 EXPECT_TRUE(load_timing_info.send_start.is_null()); |
| 99 EXPECT_TRUE(load_timing_info.send_end.is_null()); |
| 100 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
| 101 } |
| 102 |
| 42 class SSLClientSocketPoolTest : public testing::Test { | 103 class SSLClientSocketPoolTest : public testing::Test { |
| 43 protected: | 104 protected: |
| 44 SSLClientSocketPoolTest() | 105 SSLClientSocketPoolTest() |
| 45 : proxy_service_(ProxyService::CreateDirect()), | 106 : proxy_service_(ProxyService::CreateDirect()), |
| 46 ssl_config_service_(new SSLConfigServiceDefaults), | 107 ssl_config_service_(new SSLConfigServiceDefaults), |
| 47 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault( | 108 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault( |
| 48 &host_resolver_)), | 109 &host_resolver_)), |
| 49 session_(CreateNetworkSession()), | 110 session_(CreateNetworkSession()), |
| 50 direct_transport_socket_params_(new TransportSocketParams( | 111 direct_transport_socket_params_(new TransportSocketParams( |
| 51 HostPortPair("host", 443), MEDIUM, false, false, | 112 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, | 290 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 230 false); | 291 false); |
| 231 | 292 |
| 232 ClientSocketHandle handle; | 293 ClientSocketHandle handle; |
| 233 TestCompletionCallback callback; | 294 TestCompletionCallback callback; |
| 234 int rv = handle.Init( | 295 int rv = handle.Init( |
| 235 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 296 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 236 EXPECT_EQ(OK, rv); | 297 EXPECT_EQ(OK, rv); |
| 237 EXPECT_TRUE(handle.is_initialized()); | 298 EXPECT_TRUE(handle.is_initialized()); |
| 238 EXPECT_TRUE(handle.socket()); | 299 EXPECT_TRUE(handle.socket()); |
| 300 TestLoadTimingInfo(handle); |
| 239 } | 301 } |
| 240 | 302 |
| 241 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { | 303 TEST_F(SSLClientSocketPoolTest, BasicDirectAsync) { |
| 242 StaticSocketDataProvider data; | 304 StaticSocketDataProvider data; |
| 243 socket_factory_.AddSocketDataProvider(&data); | 305 socket_factory_.AddSocketDataProvider(&data); |
| 244 SSLSocketDataProvider ssl(ASYNC, OK); | 306 SSLSocketDataProvider ssl(ASYNC, OK); |
| 245 socket_factory_.AddSSLSocketDataProvider(&ssl); | 307 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 246 | 308 |
| 247 CreatePool(true /* tcp pool */, false, false); | 309 CreatePool(true /* tcp pool */, false, false); |
| 248 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 310 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 249 false); | 311 false); |
| 250 | 312 |
| 251 ClientSocketHandle handle; | 313 ClientSocketHandle handle; |
| 252 TestCompletionCallback callback; | 314 TestCompletionCallback callback; |
| 253 int rv = handle.Init( | 315 int rv = handle.Init( |
| 254 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 316 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 255 EXPECT_EQ(ERR_IO_PENDING, rv); | 317 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 256 EXPECT_FALSE(handle.is_initialized()); | 318 EXPECT_FALSE(handle.is_initialized()); |
| 257 EXPECT_FALSE(handle.socket()); | 319 EXPECT_FALSE(handle.socket()); |
| 258 | 320 |
| 259 EXPECT_EQ(OK, callback.WaitForResult()); | 321 EXPECT_EQ(OK, callback.WaitForResult()); |
| 260 EXPECT_TRUE(handle.is_initialized()); | 322 EXPECT_TRUE(handle.is_initialized()); |
| 261 EXPECT_TRUE(handle.socket()); | 323 EXPECT_TRUE(handle.socket()); |
| 324 TestLoadTimingInfo(handle); |
| 262 } | 325 } |
| 263 | 326 |
| 264 TEST_F(SSLClientSocketPoolTest, DirectCertError) { | 327 TEST_F(SSLClientSocketPoolTest, DirectCertError) { |
| 265 StaticSocketDataProvider data; | 328 StaticSocketDataProvider data; |
| 266 socket_factory_.AddSocketDataProvider(&data); | 329 socket_factory_.AddSocketDataProvider(&data); |
| 267 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); | 330 SSLSocketDataProvider ssl(ASYNC, ERR_CERT_COMMON_NAME_INVALID); |
| 268 socket_factory_.AddSSLSocketDataProvider(&ssl); | 331 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 269 | 332 |
| 270 CreatePool(true /* tcp pool */, false, false); | 333 CreatePool(true /* tcp pool */, false, false); |
| 271 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 334 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 272 false); | 335 false); |
| 273 | 336 |
| 274 ClientSocketHandle handle; | 337 ClientSocketHandle handle; |
| 275 TestCompletionCallback callback; | 338 TestCompletionCallback callback; |
| 276 int rv = handle.Init( | 339 int rv = handle.Init( |
| 277 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 340 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 278 EXPECT_EQ(ERR_IO_PENDING, rv); | 341 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 279 EXPECT_FALSE(handle.is_initialized()); | 342 EXPECT_FALSE(handle.is_initialized()); |
| 280 EXPECT_FALSE(handle.socket()); | 343 EXPECT_FALSE(handle.socket()); |
| 281 | 344 |
| 282 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); | 345 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, callback.WaitForResult()); |
| 283 EXPECT_TRUE(handle.is_initialized()); | 346 EXPECT_TRUE(handle.is_initialized()); |
| 284 EXPECT_TRUE(handle.socket()); | 347 EXPECT_TRUE(handle.socket()); |
| 348 TestLoadTimingInfo(handle); |
| 285 } | 349 } |
| 286 | 350 |
| 287 TEST_F(SSLClientSocketPoolTest, DirectSSLError) { | 351 TEST_F(SSLClientSocketPoolTest, DirectSSLError) { |
| 288 StaticSocketDataProvider data; | 352 StaticSocketDataProvider data; |
| 289 socket_factory_.AddSocketDataProvider(&data); | 353 socket_factory_.AddSocketDataProvider(&data); |
| 290 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); | 354 SSLSocketDataProvider ssl(ASYNC, ERR_SSL_PROTOCOL_ERROR); |
| 291 socket_factory_.AddSSLSocketDataProvider(&ssl); | 355 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 292 | 356 |
| 293 CreatePool(true /* tcp pool */, false, false); | 357 CreatePool(true /* tcp pool */, false, false); |
| 294 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 358 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 323 TestCompletionCallback callback; | 387 TestCompletionCallback callback; |
| 324 int rv = handle.Init( | 388 int rv = handle.Init( |
| 325 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 389 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 326 EXPECT_EQ(ERR_IO_PENDING, rv); | 390 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 327 EXPECT_FALSE(handle.is_initialized()); | 391 EXPECT_FALSE(handle.is_initialized()); |
| 328 EXPECT_FALSE(handle.socket()); | 392 EXPECT_FALSE(handle.socket()); |
| 329 | 393 |
| 330 EXPECT_EQ(OK, callback.WaitForResult()); | 394 EXPECT_EQ(OK, callback.WaitForResult()); |
| 331 EXPECT_TRUE(handle.is_initialized()); | 395 EXPECT_TRUE(handle.is_initialized()); |
| 332 EXPECT_TRUE(handle.socket()); | 396 EXPECT_TRUE(handle.socket()); |
| 397 TestLoadTimingInfo(handle); |
| 333 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 398 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 334 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 399 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
| 335 } | 400 } |
| 336 | 401 |
| 337 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) { | 402 TEST_F(SSLClientSocketPoolTest, DirectNoSPDY) { |
| 338 StaticSocketDataProvider data; | 403 StaticSocketDataProvider data; |
| 339 socket_factory_.AddSocketDataProvider(&data); | 404 socket_factory_.AddSocketDataProvider(&data); |
| 340 SSLSocketDataProvider ssl(ASYNC, OK); | 405 SSLSocketDataProvider ssl(ASYNC, OK); |
| 341 ssl.SetNextProto(kProtoHTTP11); | 406 ssl.SetNextProto(kProtoHTTP11); |
| 342 socket_factory_.AddSSLSocketDataProvider(&ssl); | 407 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 TestCompletionCallback callback; | 439 TestCompletionCallback callback; |
| 375 int rv = handle.Init( | 440 int rv = handle.Init( |
| 376 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 441 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 377 EXPECT_EQ(ERR_IO_PENDING, rv); | 442 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 378 EXPECT_FALSE(handle.is_initialized()); | 443 EXPECT_FALSE(handle.is_initialized()); |
| 379 EXPECT_FALSE(handle.socket()); | 444 EXPECT_FALSE(handle.socket()); |
| 380 | 445 |
| 381 EXPECT_EQ(OK, callback.WaitForResult()); | 446 EXPECT_EQ(OK, callback.WaitForResult()); |
| 382 EXPECT_TRUE(handle.is_initialized()); | 447 EXPECT_TRUE(handle.is_initialized()); |
| 383 EXPECT_TRUE(handle.socket()); | 448 EXPECT_TRUE(handle.socket()); |
| 449 TestLoadTimingInfo(handle); |
| 384 | 450 |
| 385 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 451 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 386 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 452 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
| 387 std::string proto; | 453 std::string proto; |
| 388 std::string server_protos; | 454 std::string server_protos; |
| 389 ssl_socket->GetNextProto(&proto, &server_protos); | 455 ssl_socket->GetNextProto(&proto, &server_protos); |
| 390 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 456 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 391 kProtoSPDY2); | 457 kProtoSPDY2); |
| 392 } | 458 } |
| 393 | 459 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 406 TestCompletionCallback callback; | 472 TestCompletionCallback callback; |
| 407 int rv = handle.Init( | 473 int rv = handle.Init( |
| 408 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 474 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 409 EXPECT_EQ(ERR_IO_PENDING, rv); | 475 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 410 EXPECT_FALSE(handle.is_initialized()); | 476 EXPECT_FALSE(handle.is_initialized()); |
| 411 EXPECT_FALSE(handle.socket()); | 477 EXPECT_FALSE(handle.socket()); |
| 412 | 478 |
| 413 EXPECT_EQ(OK, callback.WaitForResult()); | 479 EXPECT_EQ(OK, callback.WaitForResult()); |
| 414 EXPECT_TRUE(handle.is_initialized()); | 480 EXPECT_TRUE(handle.is_initialized()); |
| 415 EXPECT_TRUE(handle.socket()); | 481 EXPECT_TRUE(handle.socket()); |
| 482 TestLoadTimingInfo(handle); |
| 416 | 483 |
| 417 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 484 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 418 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); | 485 EXPECT_TRUE(ssl_socket->WasNpnNegotiated()); |
| 419 std::string proto; | 486 std::string proto; |
| 420 std::string server_protos; | 487 std::string server_protos; |
| 421 ssl_socket->GetNextProto(&proto, &server_protos); | 488 ssl_socket->GetNextProto(&proto, &server_protos); |
| 422 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 489 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 423 kProtoSPDY2); | 490 kProtoSPDY2); |
| 424 } | 491 } |
| 425 | 492 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 543 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
| 477 false); | 544 false); |
| 478 | 545 |
| 479 ClientSocketHandle handle; | 546 ClientSocketHandle handle; |
| 480 TestCompletionCallback callback; | 547 TestCompletionCallback callback; |
| 481 int rv = handle.Init( | 548 int rv = handle.Init( |
| 482 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 549 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 483 EXPECT_EQ(OK, rv); | 550 EXPECT_EQ(OK, rv); |
| 484 EXPECT_TRUE(handle.is_initialized()); | 551 EXPECT_TRUE(handle.is_initialized()); |
| 485 EXPECT_TRUE(handle.socket()); | 552 EXPECT_TRUE(handle.socket()); |
| 553 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
| 554 // don't go through the real logic, unlike in the HTTP proxy tests. |
| 555 TestLoadTimingInfo(handle); |
| 486 } | 556 } |
| 487 | 557 |
| 488 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { | 558 TEST_F(SSLClientSocketPoolTest, SOCKSBasicAsync) { |
| 489 StaticSocketDataProvider data; | 559 StaticSocketDataProvider data; |
| 490 socket_factory_.AddSocketDataProvider(&data); | 560 socket_factory_.AddSocketDataProvider(&data); |
| 491 SSLSocketDataProvider ssl(ASYNC, OK); | 561 SSLSocketDataProvider ssl(ASYNC, OK); |
| 492 socket_factory_.AddSSLSocketDataProvider(&ssl); | 562 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 493 | 563 |
| 494 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 564 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 495 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 565 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
| 496 false); | 566 false); |
| 497 | 567 |
| 498 ClientSocketHandle handle; | 568 ClientSocketHandle handle; |
| 499 TestCompletionCallback callback; | 569 TestCompletionCallback callback; |
| 500 int rv = handle.Init( | 570 int rv = handle.Init( |
| 501 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 571 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 502 EXPECT_EQ(ERR_IO_PENDING, rv); | 572 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 503 EXPECT_FALSE(handle.is_initialized()); | 573 EXPECT_FALSE(handle.is_initialized()); |
| 504 EXPECT_FALSE(handle.socket()); | 574 EXPECT_FALSE(handle.socket()); |
| 505 | 575 |
| 506 EXPECT_EQ(OK, callback.WaitForResult()); | 576 EXPECT_EQ(OK, callback.WaitForResult()); |
| 507 EXPECT_TRUE(handle.is_initialized()); | 577 EXPECT_TRUE(handle.is_initialized()); |
| 508 EXPECT_TRUE(handle.socket()); | 578 EXPECT_TRUE(handle.socket()); |
| 579 // SOCKS5 generally has no DNS times, but the mock SOCKS5 sockets used here |
| 580 // don't go through the real logic, unlike in the HTTP proxy tests. |
| 581 TestLoadTimingInfo(handle); |
| 509 } | 582 } |
| 510 | 583 |
| 511 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { | 584 TEST_F(SSLClientSocketPoolTest, HttpProxyFail) { |
| 512 StaticSocketDataProvider data; | 585 StaticSocketDataProvider data; |
| 513 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 586 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
| 514 socket_factory_.AddSocketDataProvider(&data); | 587 socket_factory_.AddSocketDataProvider(&data); |
| 515 | 588 |
| 516 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 589 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 517 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 590 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
| 518 false); | 591 false); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, | 646 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_HTTP, |
| 574 false); | 647 false); |
| 575 | 648 |
| 576 ClientSocketHandle handle; | 649 ClientSocketHandle handle; |
| 577 TestCompletionCallback callback; | 650 TestCompletionCallback callback; |
| 578 int rv = handle.Init( | 651 int rv = handle.Init( |
| 579 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 652 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 580 EXPECT_EQ(OK, rv); | 653 EXPECT_EQ(OK, rv); |
| 581 EXPECT_TRUE(handle.is_initialized()); | 654 EXPECT_TRUE(handle.is_initialized()); |
| 582 EXPECT_TRUE(handle.socket()); | 655 EXPECT_TRUE(handle.socket()); |
| 656 TestLoadTimingInfoNoDns(handle); |
| 583 } | 657 } |
| 584 | 658 |
| 585 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { | 659 TEST_F(SSLClientSocketPoolTest, HttpProxyBasicAsync) { |
| 586 MockWrite writes[] = { | 660 MockWrite writes[] = { |
| 587 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 661 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
| 588 "Host: host\r\n" | 662 "Host: host\r\n" |
| 589 "Proxy-Connection: keep-alive\r\n" | 663 "Proxy-Connection: keep-alive\r\n" |
| 590 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 664 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 591 }; | 665 }; |
| 592 MockRead reads[] = { | 666 MockRead reads[] = { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 607 TestCompletionCallback callback; | 681 TestCompletionCallback callback; |
| 608 int rv = handle.Init( | 682 int rv = handle.Init( |
| 609 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 683 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 610 EXPECT_EQ(ERR_IO_PENDING, rv); | 684 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 611 EXPECT_FALSE(handle.is_initialized()); | 685 EXPECT_FALSE(handle.is_initialized()); |
| 612 EXPECT_FALSE(handle.socket()); | 686 EXPECT_FALSE(handle.socket()); |
| 613 | 687 |
| 614 EXPECT_EQ(OK, callback.WaitForResult()); | 688 EXPECT_EQ(OK, callback.WaitForResult()); |
| 615 EXPECT_TRUE(handle.is_initialized()); | 689 EXPECT_TRUE(handle.is_initialized()); |
| 616 EXPECT_TRUE(handle.socket()); | 690 EXPECT_TRUE(handle.socket()); |
| 691 TestLoadTimingInfoNoDns(handle); |
| 617 } | 692 } |
| 618 | 693 |
| 619 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { | 694 TEST_F(SSLClientSocketPoolTest, NeedProxyAuth) { |
| 620 MockWrite writes[] = { | 695 MockWrite writes[] = { |
| 621 MockWrite("CONNECT host:80 HTTP/1.1\r\n" | 696 MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
| 622 "Host: host\r\n" | 697 "Host: host\r\n" |
| 623 "Proxy-Connection: keep-alive\r\n\r\n"), | 698 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 624 }; | 699 }; |
| 625 MockRead reads[] = { | 700 MockRead reads[] = { |
| 626 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 701 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; | 910 ssl.channel_id_sent = true; |
| 836 ssl.SetNextProto(kProtoSPDY2); | 911 ssl.SetNextProto(kProtoSPDY2); |
| 837 TestIPPoolingDisabled(&ssl); | 912 TestIPPoolingDisabled(&ssl); |
| 838 } | 913 } |
| 839 | 914 |
| 840 // It would be nice to also test the timeouts in SSLClientSocketPool. | 915 // It would be nice to also test the timeouts in SSLClientSocketPool. |
| 841 | 916 |
| 842 } // namespace | 917 } // namespace |
| 843 | 918 |
| 844 } // namespace net | 919 } // namespace net |
| OLD | NEW |