Index: net/http/http_network_transaction_unittest.cc |
=================================================================== |
--- net/http/http_network_transaction_unittest.cc (revision 93497) |
+++ net/http/http_network_transaction_unittest.cc (working copy) |
@@ -8684,6 +8684,37 @@ |
} |
} |
+void IPPoolingPreloadHostCache(MockCachingHostResolver* host_resolver, |
+ SpdySessionPoolPeer* pool_peer) { |
+ const int kTestPort = 443; |
+ struct TestHosts { |
+ std::string name; |
+ std::string iplist; |
+ } test_hosts[] = { |
+ { "www.google.com", "127.0.0.1"}, |
+ }; |
+ |
+ // Preload cache entries into HostCache. |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) { |
+ host_resolver->rules()->AddIPLiteralRule(test_hosts[i].name, |
+ test_hosts[i].iplist, ""); |
+ |
+ AddressList addresses; |
+ // This test requires that the HostResolver cache be populated. Normal |
+ // code would have done this already, but we do it manually. |
+ HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); |
+ host_resolver->Resolve( |
+ info, &addresses, NULL, NULL, BoundNetLog()); |
+ |
+ // Setup a HostPortProxyPair |
+ HostPortProxyPair pair = HostPortProxyPair( |
+ HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct()); |
+ |
+ const addrinfo* address = addresses.head(); |
+ pool_peer->AddAlias(address, pair); |
+ } |
+} |
+ |
TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { |
HttpStreamFactory::set_use_alternate_protocols(true); |
HttpStreamFactory::set_next_protos(kExpectedNPNString); |
@@ -8702,6 +8733,7 @@ |
session_deps.http_auth_handler_factory.get(); |
params.net_log = session_deps.net_log; |
scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); |
+ SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
SSLSocketDataProvider ssl(true, OK); |
ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
@@ -8761,6 +8793,8 @@ |
AddressList ignored; |
host_resolver.Resolve(resolve_info, &ignored, NULL, NULL, BoundNetLog()); |
+ IPPoolingPreloadHostCache(&host_resolver, &pool_peer); |
+ |
HttpRequestInfo request2; |
request2.method = "GET"; |
request2.url = GURL("https://www.gmail.com/"); |
@@ -8820,6 +8854,10 @@ |
return host_resolver_.RemoveObserver(observer); |
} |
+ MockCachingHostResolver* GetMockHostResolver() { |
+ return &host_resolver_; |
+ } |
+ |
private: |
MockCachingHostResolver host_resolver_; |
const HostPortPair host_port_; |
@@ -8844,6 +8882,7 @@ |
session_deps.http_auth_handler_factory.get(); |
params.net_log = session_deps.net_log; |
scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); |
+ SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
SSLSocketDataProvider ssl(true, OK); |
ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
@@ -8908,6 +8947,8 @@ |
request2.load_flags = 0; |
HttpNetworkTransaction trans2(session); |
+ IPPoolingPreloadHostCache(host_resolver.GetMockHostResolver(), &pool_peer); |
+ |
rv = trans2.Start(&request2, &callback, BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_EQ(OK, callback.WaitForResult()); |