| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "net/base/capturing_net_log.h" | 10 #include "net/base/capturing_net_log.h" |
| 11 #include "net/base/cert_verifier.h" | 11 #include "net/base/cert_verifier.h" |
| 12 #include "net/base/mock_host_resolver.h" | 12 #include "net/base/mock_host_resolver.h" |
| 13 #include "net/base/net_log.h" | 13 #include "net/base/net_log.h" |
| 14 #include "net/base/ssl_config_service_defaults.h" | 14 #include "net/base/ssl_config_service_defaults.h" |
| 15 #include "net/base/test_completion_callback.h" | 15 #include "net/base/test_completion_callback.h" |
| 16 #include "net/http/http_auth_handler_factory.h" | 16 #include "net/http/http_auth_handler_factory.h" |
| 17 #include "net/http/http_network_session.h" | 17 #include "net/http/http_network_session.h" |
| 18 #include "net/http/http_network_session_peer.h" | 18 #include "net/http/http_network_session_peer.h" |
| 19 #include "net/http/http_request_info.h" | 19 #include "net/http/http_request_info.h" |
| 20 #include "net/http/http_server_properties_impl.h" | 20 #include "net/http/http_server_properties_impl.h" |
| 21 #include "net/http/http_stream.h" | 21 #include "net/http/http_stream.h" |
| 22 #include "net/proxy/proxy_info.h" | 22 #include "net/proxy/proxy_info.h" |
| 23 #include "net/proxy/proxy_service.h" | 23 #include "net/proxy/proxy_service.h" |
| 24 #include "net/socket/mock_client_socket_pool_manager.h" |
| 24 #include "net/socket/socket_test_util.h" | 25 #include "net/socket/socket_test_util.h" |
| 25 #include "net/spdy/spdy_session.h" | 26 #include "net/spdy/spdy_session.h" |
| 26 #include "net/spdy/spdy_session_pool.h" | 27 #include "net/spdy/spdy_session_pool.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
| 28 | 29 |
| 29 namespace net { | 30 namespace net { |
| 30 | 31 |
| 31 namespace { | 32 namespace { |
| 32 | 33 |
| 33 class MockHttpStreamFactoryImpl : public HttpStreamFactoryImpl { | 34 class MockHttpStreamFactoryImpl : public HttpStreamFactoryImpl { |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 | 275 |
| 275 TEST(HttpStreamFactoryTest, PreconnectDirect) { | 276 TEST(HttpStreamFactoryTest, PreconnectDirect) { |
| 276 for (size_t i = 0; i < arraysize(kTests); ++i) { | 277 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 277 SessionDependencies session_deps(ProxyService::CreateDirect()); | 278 SessionDependencies session_deps(ProxyService::CreateDirect()); |
| 278 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 279 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 279 HttpNetworkSessionPeer peer(session); | 280 HttpNetworkSessionPeer peer(session); |
| 280 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 281 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 281 new CapturePreconnectsTransportSocketPool( | 282 new CapturePreconnectsTransportSocketPool( |
| 282 session_deps.host_resolver.get(), | 283 session_deps.host_resolver.get(), |
| 283 session_deps.cert_verifier.get()); | 284 session_deps.cert_verifier.get()); |
| 284 peer.SetTransportSocketPool(transport_conn_pool); | |
| 285 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 285 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 286 new CapturePreconnectsSSLSocketPool( | 286 new CapturePreconnectsSSLSocketPool( |
| 287 session_deps.host_resolver.get(), | 287 session_deps.host_resolver.get(), |
| 288 session_deps.cert_verifier.get()); | 288 session_deps.cert_verifier.get()); |
| 289 peer.SetSSLSocketPool(ssl_conn_pool); | 289 MockClientSocketPoolManager* mock_pool_manager = |
| 290 new MockClientSocketPoolManager; |
| 291 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 292 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 293 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 290 PreconnectHelper(kTests[i], session); | 294 PreconnectHelper(kTests[i], session); |
| 291 if (kTests[i].ssl) | 295 if (kTests[i].ssl) |
| 292 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 296 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 293 else | 297 else |
| 294 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 298 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
| 295 } | 299 } |
| 296 } | 300 } |
| 297 | 301 |
| 298 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { | 302 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { |
| 299 for (size_t i = 0; i < arraysize(kTests); ++i) { | 303 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 300 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); | 304 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); |
| 301 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 305 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 302 HttpNetworkSessionPeer peer(session); | 306 HttpNetworkSessionPeer peer(session); |
| 303 HostPortPair proxy_host("http_proxy", 80); | 307 HostPortPair proxy_host("http_proxy", 80); |
| 304 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 308 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
| 305 new CapturePreconnectsHttpProxySocketPool( | 309 new CapturePreconnectsHttpProxySocketPool( |
| 306 session_deps.host_resolver.get(), | 310 session_deps.host_resolver.get(), |
| 307 session_deps.cert_verifier.get()); | 311 session_deps.cert_verifier.get()); |
| 308 peer.SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | |
| 309 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 312 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 310 new CapturePreconnectsSSLSocketPool( | 313 new CapturePreconnectsSSLSocketPool( |
| 311 session_deps.host_resolver.get(), | 314 session_deps.host_resolver.get(), |
| 312 session_deps.cert_verifier.get()); | 315 session_deps.cert_verifier.get()); |
| 313 peer.SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 316 MockClientSocketPoolManager* mock_pool_manager = |
| 317 new MockClientSocketPoolManager; |
| 318 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
| 319 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 320 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 314 PreconnectHelper(kTests[i], session); | 321 PreconnectHelper(kTests[i], session); |
| 315 if (kTests[i].ssl) | 322 if (kTests[i].ssl) |
| 316 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 323 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 317 else | 324 else |
| 318 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); | 325 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); |
| 319 } | 326 } |
| 320 } | 327 } |
| 321 | 328 |
| 322 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { | 329 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { |
| 323 for (size_t i = 0; i < arraysize(kTests); ++i) { | 330 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 324 SessionDependencies session_deps( | 331 SessionDependencies session_deps( |
| 325 ProxyService::CreateFixed("socks4://socks_proxy:1080")); | 332 ProxyService::CreateFixed("socks4://socks_proxy:1080")); |
| 326 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 333 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 327 HttpNetworkSessionPeer peer(session); | 334 HttpNetworkSessionPeer peer(session); |
| 328 HostPortPair proxy_host("socks_proxy", 1080); | 335 HostPortPair proxy_host("socks_proxy", 1080); |
| 329 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = | 336 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = |
| 330 new CapturePreconnectsSOCKSSocketPool( | 337 new CapturePreconnectsSOCKSSocketPool( |
| 331 session_deps.host_resolver.get(), | 338 session_deps.host_resolver.get(), |
| 332 session_deps.cert_verifier.get()); | 339 session_deps.cert_verifier.get()); |
| 333 peer.SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); | |
| 334 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 340 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 335 new CapturePreconnectsSSLSocketPool( | 341 new CapturePreconnectsSSLSocketPool( |
| 336 session_deps.host_resolver.get(), | 342 session_deps.host_resolver.get(), |
| 337 session_deps.cert_verifier.get()); | 343 session_deps.cert_verifier.get()); |
| 338 peer.SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 344 MockClientSocketPoolManager* mock_pool_manager = |
| 345 new MockClientSocketPoolManager; |
| 346 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); |
| 347 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 348 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 339 PreconnectHelper(kTests[i], session); | 349 PreconnectHelper(kTests[i], session); |
| 340 if (kTests[i].ssl) | 350 if (kTests[i].ssl) |
| 341 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 351 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 342 else | 352 else |
| 343 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); | 353 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); |
| 344 } | 354 } |
| 345 } | 355 } |
| 346 | 356 |
| 347 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { | 357 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { |
| 348 for (size_t i = 0; i < arraysize(kTests); ++i) { | 358 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 349 SessionDependencies session_deps(ProxyService::CreateDirect()); | 359 SessionDependencies session_deps(ProxyService::CreateDirect()); |
| 350 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 360 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
| 351 HttpNetworkSessionPeer peer(session); | 361 HttpNetworkSessionPeer peer(session); |
| 352 | 362 |
| 353 // Set an existing SpdySession in the pool. | 363 // Set an existing SpdySession in the pool. |
| 354 HostPortPair host_port_pair("www.google.com", 443); | 364 HostPortPair host_port_pair("www.google.com", 443); |
| 355 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); | 365 HostPortProxyPair pair(host_port_pair, ProxyServer::Direct()); |
| 356 scoped_refptr<SpdySession> spdy_session = | 366 scoped_refptr<SpdySession> spdy_session = |
| 357 session->spdy_session_pool()->Get(pair, BoundNetLog()); | 367 session->spdy_session_pool()->Get(pair, BoundNetLog()); |
| 358 | 368 |
| 359 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 369 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 360 new CapturePreconnectsTransportSocketPool( | 370 new CapturePreconnectsTransportSocketPool( |
| 361 session_deps.host_resolver.get(), | 371 session_deps.host_resolver.get(), |
| 362 session_deps.cert_verifier.get()); | 372 session_deps.cert_verifier.get()); |
| 363 peer.SetTransportSocketPool(transport_conn_pool); | |
| 364 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 373 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 365 new CapturePreconnectsSSLSocketPool( | 374 new CapturePreconnectsSSLSocketPool( |
| 366 session_deps.host_resolver.get(), | 375 session_deps.host_resolver.get(), |
| 367 session_deps.cert_verifier.get()); | 376 session_deps.cert_verifier.get()); |
| 368 peer.SetSSLSocketPool(ssl_conn_pool); | 377 MockClientSocketPoolManager* mock_pool_manager = |
| 378 new MockClientSocketPoolManager; |
| 379 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 380 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 381 peer.SetClientSocketPoolManager(mock_pool_manager); |
| 369 PreconnectHelper(kTests[i], session); | 382 PreconnectHelper(kTests[i], session); |
| 370 // We shouldn't be preconnecting if we have an existing session, which is | 383 // We shouldn't be preconnecting if we have an existing session, which is |
| 371 // the case for https://www.google.com. | 384 // the case for https://www.google.com. |
| 372 if (kTests[i].ssl) | 385 if (kTests[i].ssl) |
| 373 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); | 386 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); |
| 374 else | 387 else |
| 375 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 388 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
| 376 } | 389 } |
| 377 } | 390 } |
| 378 | 391 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 const ProxyRetryInfoMap& retry_info = | 428 const ProxyRetryInfoMap& retry_info = |
| 416 session->proxy_service()->proxy_retry_info(); | 429 session->proxy_service()->proxy_retry_info(); |
| 417 EXPECT_EQ(1u, retry_info.size()); | 430 EXPECT_EQ(1u, retry_info.size()); |
| 418 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99"); | 431 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99"); |
| 419 EXPECT_TRUE(iter != retry_info.end()); | 432 EXPECT_TRUE(iter != retry_info.end()); |
| 420 } | 433 } |
| 421 | 434 |
| 422 } // namespace | 435 } // namespace |
| 423 | 436 |
| 424 } // namespace net | 437 } // namespace net |
| OLD | NEW |