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 |