Index: net/http/http_proxy_client_socket_pool_unittest.cc |
=================================================================== |
--- net/http/http_proxy_client_socket_pool_unittest.cc (revision 57349) |
+++ net/http/http_proxy_client_socket_pool_unittest.cc (working copy) |
@@ -29,14 +29,27 @@ |
const int kMaxSockets = 32; |
const int kMaxSocketsPerGroup = 6; |
-class HttpProxyClientSocketPoolTest : public ClientSocketPoolTest { |
+enum HttpProxyType { |
+ HTTP, |
+ HTTPS |
+}; |
+ |
+typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam; |
+ |
+class HttpProxyClientSocketPoolTest : public TestWithHttpParam { |
protected: |
HttpProxyClientSocketPoolTest() |
- : ignored_tcp_socket_params_(new TCPSocketParams( |
+ : ssl_config_(), |
+ ignored_tcp_socket_params_(new TCPSocketParams( |
HostPortPair("proxy", 80), MEDIUM, GURL(), false)), |
+ ignored_ssl_socket_params_(new SSLSocketParams( |
+ ignored_tcp_socket_params_, NULL, NULL, ProxyServer::SCHEME_DIRECT, |
+ "host", ssl_config_, 0, false, false)), |
tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), |
tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, |
kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), |
+ ssl_socket_pool_(new MockSSLClientSocketPool(kMaxSockets, |
+ kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), |
http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()), |
session_(new HttpNetworkSession(new MockHostResolver, |
ProxyService::CreateNull(), |
@@ -46,16 +59,11 @@ |
http_auth_handler_factory_.get(), |
NULL, |
NULL)), |
- notunnel_socket_params_(new HttpProxySocketParams( |
- ignored_tcp_socket_params_, GURL("http://host"), "", |
- HostPortPair("host", 80), NULL, false)), |
- tunnel_socket_params_(new HttpProxySocketParams( |
- ignored_tcp_socket_params_, GURL("http://host"), "", |
- HostPortPair("host", 80), session_, true)), |
http_proxy_histograms_( |
new ClientSocketPoolHistograms("HttpProxyUnitTest")), |
pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, |
- http_proxy_histograms_, NULL, tcp_socket_pool_, NULL)) { |
+ http_proxy_histograms_, NULL, tcp_socket_pool_, ssl_socket_pool_, |
+ NULL)) { |
} |
void AddAuthToCache() { |
@@ -65,32 +73,64 @@ |
"Basic realm=MyRealm1", kFoo, kBar, "/"); |
} |
- int StartRequest(const std::string& group_name, RequestPriority priority) { |
- return StartRequestUsingPool( |
- pool_, group_name, priority, tunnel_socket_params_); |
+ scoped_refptr<TCPSocketParams> GetTcpParams() { |
+ if (GetParam() == HTTPS) |
+ return scoped_refptr<TCPSocketParams>(); |
+ return ignored_tcp_socket_params_; |
} |
+ scoped_refptr<SSLSocketParams> GetSslParams() { |
+ if (GetParam() == HTTP) |
+ return scoped_refptr<SSLSocketParams>(); |
+ return ignored_ssl_socket_params_; |
+ } |
+ |
+ // Returns the a correctly constructed HttpProxyParms |
+ // for the HTTP or HTTPS proxy. |
+ scoped_refptr<HttpProxySocketParams> GetParams(bool tunnel) { |
+ return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams( |
+ GetTcpParams(), GetSslParams(), GURL("http://host/"), "", |
+ HostPortPair("host", 80), session_, tunnel)); |
+ } |
+ |
+ scoped_refptr<HttpProxySocketParams> GetTunnelParams() { |
+ return GetParams(true); |
+ } |
+ |
+ scoped_refptr<HttpProxySocketParams> GetNoTunnelParams() { |
+ return GetParams(false); |
+ } |
+ |
+ SSLConfig ssl_config_; |
+ |
scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; |
+ scoped_refptr<SSLSocketParams> ignored_ssl_socket_params_; |
scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; |
MockClientSocketFactory tcp_client_socket_factory_; |
scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; |
+ scoped_refptr<MockSSLClientSocketPool> ssl_socket_pool_; |
MockClientSocketFactory socket_factory_; |
scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; |
scoped_refptr<HttpNetworkSession> session_; |
- scoped_refptr<HttpProxySocketParams> notunnel_socket_params_; |
- scoped_refptr<HttpProxySocketParams> tunnel_socket_params_; |
scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_; |
scoped_refptr<HttpProxyClientSocketPool> pool_; |
}; |
-TEST_F(HttpProxyClientSocketPoolTest, NoTunnel) { |
+//----------------------------------------------------------------------------- |
+// All tests are run with three different connection types: SPDY after NPN |
+// negotiation, SPDY without SSL, and SPDY with SSL. |
+INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, |
+ HttpProxyClientSocketPoolTest, |
+ ::testing::Values(HTTP, HTTPS)); |
+ |
+TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
StaticSocketDataProvider data; |
data.set_connect_data(MockConnect(false, 0)); |
tcp_client_socket_factory_.AddSocketDataProvider(&data); |
ClientSocketHandle handle; |
- int rv = handle.Init("a", notunnel_socket_params_, LOW, NULL, pool_, |
+ int rv = handle.Init("a", GetNoTunnelParams(), LOW, NULL, pool_, |
BoundNetLog()); |
EXPECT_EQ(OK, rv); |
EXPECT_TRUE(handle.is_initialized()); |
@@ -100,7 +140,7 @@ |
EXPECT_TRUE(tunnel_socket->IsConnected()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, NeedAuth) { |
+TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
MockWrite writes[] = { |
MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
"Host: host\r\n" |
@@ -120,7 +160,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_FALSE(handle.is_initialized()); |
@@ -134,7 +174,7 @@ |
EXPECT_FALSE(tunnel_socket->IsConnected()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, HaveAuth) { |
+TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { |
MockWrite writes[] = { |
MockWrite(false, |
"CONNECT host:80 HTTP/1.1\r\n" |
@@ -154,7 +194,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(OK, rv); |
EXPECT_TRUE(handle.is_initialized()); |
@@ -164,7 +204,7 @@ |
EXPECT_TRUE(tunnel_socket->IsConnected()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
+TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
MockWrite writes[] = { |
MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
"Host: host\r\n" |
@@ -182,7 +222,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_FALSE(handle.is_initialized()); |
@@ -196,7 +236,7 @@ |
EXPECT_TRUE(tunnel_socket->IsConnected()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, TCPError) { |
+TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
StaticSocketDataProvider data; |
data.set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); |
@@ -204,7 +244,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_FALSE(handle.is_initialized()); |
@@ -215,7 +255,7 @@ |
EXPECT_FALSE(handle.socket()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) { |
+TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) { |
MockWrite writes[] = { |
MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
"Host: host\r\n" |
@@ -234,7 +274,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_FALSE(handle.is_initialized()); |
@@ -245,7 +285,7 @@ |
EXPECT_FALSE(handle.socket()); |
} |
-TEST_F(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
+TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { |
MockWrite writes[] = { |
MockWrite("CONNECT host:80 HTTP/1.1\r\n" |
"Host: host\r\n" |
@@ -263,7 +303,7 @@ |
ClientSocketHandle handle; |
TestCompletionCallback callback; |
- int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, |
+ int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_, |
BoundNetLog()); |
EXPECT_EQ(ERR_IO_PENDING, rv); |
EXPECT_FALSE(handle.is_initialized()); |