Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Side by Side Diff: net/http/http_proxy_client_socket_pool_unittest.cc

Issue 3112034: Attempting to re-land CL 3110006 which turned out to have ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/http/http_proxy_client_socket_pool.cc ('k') | net/http/http_stream_request.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 11 matching lines...) Expand all
22 #include "net/spdy/spdy_session_pool.h" 22 #include "net/spdy/spdy_session_pool.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace net { 25 namespace net {
26 26
27 namespace { 27 namespace {
28 28
29 const int kMaxSockets = 32; 29 const int kMaxSockets = 32;
30 const int kMaxSocketsPerGroup = 6; 30 const int kMaxSocketsPerGroup = 6;
31 31
32 class HttpProxyClientSocketPoolTest : public ClientSocketPoolTest { 32 enum HttpProxyType {
33 HTTP,
34 HTTPS
35 };
36
37 typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam;
38
39 class HttpProxyClientSocketPoolTest : public TestWithHttpParam {
33 protected: 40 protected:
34 HttpProxyClientSocketPoolTest() 41 HttpProxyClientSocketPoolTest()
35 : ignored_tcp_socket_params_(new TCPSocketParams( 42 : ssl_config_(),
43 ignored_tcp_socket_params_(new TCPSocketParams(
36 HostPortPair("proxy", 80), MEDIUM, GURL(), false)), 44 HostPortPair("proxy", 80), MEDIUM, GURL(), false)),
45 ignored_ssl_socket_params_(new SSLSocketParams(
46 ignored_tcp_socket_params_, NULL, NULL, ProxyServer::SCHEME_DIRECT,
47 "host", ssl_config_, 0, false, false)),
37 tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), 48 tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")),
38 tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, 49 tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets,
39 kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), 50 kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)),
51 ssl_socket_pool_(new MockSSLClientSocketPool(kMaxSockets,
52 kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)),
40 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()), 53 http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
41 session_(new HttpNetworkSession(new MockHostResolver, 54 session_(new HttpNetworkSession(new MockHostResolver,
42 ProxyService::CreateNull(), 55 ProxyService::CreateNull(),
43 &socket_factory_, 56 &socket_factory_,
44 new SSLConfigServiceDefaults, 57 new SSLConfigServiceDefaults,
45 new SpdySessionPool(), 58 new SpdySessionPool(),
46 http_auth_handler_factory_.get(), 59 http_auth_handler_factory_.get(),
47 NULL, 60 NULL,
48 NULL)), 61 NULL)),
49 notunnel_socket_params_(new HttpProxySocketParams(
50 ignored_tcp_socket_params_, GURL("http://host"), "",
51 HostPortPair("host", 80), NULL, false)),
52 tunnel_socket_params_(new HttpProxySocketParams(
53 ignored_tcp_socket_params_, GURL("http://host"), "",
54 HostPortPair("host", 80), session_, true)),
55 http_proxy_histograms_( 62 http_proxy_histograms_(
56 new ClientSocketPoolHistograms("HttpProxyUnitTest")), 63 new ClientSocketPoolHistograms("HttpProxyUnitTest")),
57 pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, 64 pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup,
58 http_proxy_histograms_, NULL, tcp_socket_pool_, NULL)) { 65 http_proxy_histograms_, NULL, tcp_socket_pool_, ssl_socket_pool_,
66 NULL)) {
59 } 67 }
60 68
61 void AddAuthToCache() { 69 void AddAuthToCache() {
62 const string16 kFoo(ASCIIToUTF16("foo")); 70 const string16 kFoo(ASCIIToUTF16("foo"));
63 const string16 kBar(ASCIIToUTF16("bar")); 71 const string16 kBar(ASCIIToUTF16("bar"));
64 session_->auth_cache()->Add(GURL("http://proxy/"), "MyRealm1", "Basic", 72 session_->auth_cache()->Add(GURL("http://proxy/"), "MyRealm1", "Basic",
65 "Basic realm=MyRealm1", kFoo, kBar, "/"); 73 "Basic realm=MyRealm1", kFoo, kBar, "/");
66 } 74 }
67 75
68 int StartRequest(const std::string& group_name, RequestPriority priority) { 76 scoped_refptr<TCPSocketParams> GetTcpParams() {
69 return StartRequestUsingPool( 77 if (GetParam() == HTTPS)
70 pool_, group_name, priority, tunnel_socket_params_); 78 return scoped_refptr<TCPSocketParams>();
79 return ignored_tcp_socket_params_;
71 } 80 }
72 81
82 scoped_refptr<SSLSocketParams> GetSslParams() {
83 if (GetParam() == HTTP)
84 return scoped_refptr<SSLSocketParams>();
85 return ignored_ssl_socket_params_;
86 }
87
88 // Returns the a correctly constructed HttpProxyParms
89 // for the HTTP or HTTPS proxy.
90 scoped_refptr<HttpProxySocketParams> GetParams(bool tunnel) {
91 return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams(
92 GetTcpParams(), GetSslParams(), GURL("http://host/"), "",
93 HostPortPair("host", 80), session_, tunnel));
94 }
95
96 scoped_refptr<HttpProxySocketParams> GetTunnelParams() {
97 return GetParams(true);
98 }
99
100 scoped_refptr<HttpProxySocketParams> GetNoTunnelParams() {
101 return GetParams(false);
102 }
103
104 SSLConfig ssl_config_;
105
73 scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; 106 scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_;
107 scoped_refptr<SSLSocketParams> ignored_ssl_socket_params_;
74 scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; 108 scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_;
75 MockClientSocketFactory tcp_client_socket_factory_; 109 MockClientSocketFactory tcp_client_socket_factory_;
76 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; 110 scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_;
111 scoped_refptr<MockSSLClientSocketPool> ssl_socket_pool_;
77 112
78 MockClientSocketFactory socket_factory_; 113 MockClientSocketFactory socket_factory_;
79 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; 114 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_;
80 scoped_refptr<HttpNetworkSession> session_; 115 scoped_refptr<HttpNetworkSession> session_;
81 scoped_refptr<HttpProxySocketParams> notunnel_socket_params_;
82 scoped_refptr<HttpProxySocketParams> tunnel_socket_params_;
83 scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_; 116 scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_;
84 scoped_refptr<HttpProxyClientSocketPool> pool_; 117 scoped_refptr<HttpProxyClientSocketPool> pool_;
85 }; 118 };
86 119
87 TEST_F(HttpProxyClientSocketPoolTest, NoTunnel) { 120 //-----------------------------------------------------------------------------
121 // All tests are run with three different connection types: SPDY after NPN
122 // negotiation, SPDY without SSL, and SPDY with SSL.
123 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests,
124 HttpProxyClientSocketPoolTest,
125 ::testing::Values(HTTP, HTTPS));
126
127 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
88 StaticSocketDataProvider data; 128 StaticSocketDataProvider data;
89 data.set_connect_data(MockConnect(false, 0)); 129 data.set_connect_data(MockConnect(false, 0));
90 tcp_client_socket_factory_.AddSocketDataProvider(&data); 130 tcp_client_socket_factory_.AddSocketDataProvider(&data);
91 131
92 ClientSocketHandle handle; 132 ClientSocketHandle handle;
93 int rv = handle.Init("a", notunnel_socket_params_, LOW, NULL, pool_, 133 int rv = handle.Init("a", GetNoTunnelParams(), LOW, NULL, pool_,
94 BoundNetLog()); 134 BoundNetLog());
95 EXPECT_EQ(OK, rv); 135 EXPECT_EQ(OK, rv);
96 EXPECT_TRUE(handle.is_initialized()); 136 EXPECT_TRUE(handle.is_initialized());
97 EXPECT_TRUE(handle.socket()); 137 EXPECT_TRUE(handle.socket());
98 HttpProxyClientSocket* tunnel_socket = 138 HttpProxyClientSocket* tunnel_socket =
99 static_cast<HttpProxyClientSocket*>(handle.socket()); 139 static_cast<HttpProxyClientSocket*>(handle.socket());
100 EXPECT_TRUE(tunnel_socket->IsConnected()); 140 EXPECT_TRUE(tunnel_socket->IsConnected());
101 } 141 }
102 142
103 TEST_F(HttpProxyClientSocketPoolTest, NeedAuth) { 143 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
104 MockWrite writes[] = { 144 MockWrite writes[] = {
105 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 145 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
106 "Host: host\r\n" 146 "Host: host\r\n"
107 "Proxy-Connection: keep-alive\r\n\r\n"), 147 "Proxy-Connection: keep-alive\r\n\r\n"),
108 }; 148 };
109 MockRead reads[] = { 149 MockRead reads[] = {
110 // No credentials. 150 // No credentials.
111 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), 151 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"),
112 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), 152 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"),
113 MockRead("Content-Length: 10\r\n\r\n"), 153 MockRead("Content-Length: 10\r\n\r\n"),
114 MockRead("0123456789"), 154 MockRead("0123456789"),
115 }; 155 };
116 StaticSocketDataProvider data(reads, arraysize(reads), writes, 156 StaticSocketDataProvider data(reads, arraysize(reads), writes,
117 arraysize(writes)); 157 arraysize(writes));
118 158
119 tcp_client_socket_factory_.AddSocketDataProvider(&data); 159 tcp_client_socket_factory_.AddSocketDataProvider(&data);
120 160
121 ClientSocketHandle handle; 161 ClientSocketHandle handle;
122 TestCompletionCallback callback; 162 TestCompletionCallback callback;
123 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 163 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
124 BoundNetLog()); 164 BoundNetLog());
125 EXPECT_EQ(ERR_IO_PENDING, rv); 165 EXPECT_EQ(ERR_IO_PENDING, rv);
126 EXPECT_FALSE(handle.is_initialized()); 166 EXPECT_FALSE(handle.is_initialized());
127 EXPECT_FALSE(handle.socket()); 167 EXPECT_FALSE(handle.socket());
128 168
129 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult()); 169 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, callback.WaitForResult());
130 EXPECT_TRUE(handle.is_initialized()); 170 EXPECT_TRUE(handle.is_initialized());
131 EXPECT_TRUE(handle.socket()); 171 EXPECT_TRUE(handle.socket());
132 HttpProxyClientSocket* tunnel_socket = 172 HttpProxyClientSocket* tunnel_socket =
133 static_cast<HttpProxyClientSocket*>(handle.socket()); 173 static_cast<HttpProxyClientSocket*>(handle.socket());
134 EXPECT_FALSE(tunnel_socket->IsConnected()); 174 EXPECT_FALSE(tunnel_socket->IsConnected());
135 } 175 }
136 176
137 TEST_F(HttpProxyClientSocketPoolTest, HaveAuth) { 177 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
138 MockWrite writes[] = { 178 MockWrite writes[] = {
139 MockWrite(false, 179 MockWrite(false,
140 "CONNECT host:80 HTTP/1.1\r\n" 180 "CONNECT host:80 HTTP/1.1\r\n"
141 "Host: host\r\n" 181 "Host: host\r\n"
142 "Proxy-Connection: keep-alive\r\n" 182 "Proxy-Connection: keep-alive\r\n"
143 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 183 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
144 }; 184 };
145 MockRead reads[] = { 185 MockRead reads[] = {
146 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"), 186 MockRead(false, "HTTP/1.1 200 Connection Established\r\n\r\n"),
147 }; 187 };
148 StaticSocketDataProvider data(reads, arraysize(reads), writes, 188 StaticSocketDataProvider data(reads, arraysize(reads), writes,
149 arraysize(writes)); 189 arraysize(writes));
150 data.set_connect_data(MockConnect(false, 0)); 190 data.set_connect_data(MockConnect(false, 0));
151 191
152 tcp_client_socket_factory_.AddSocketDataProvider(&data); 192 tcp_client_socket_factory_.AddSocketDataProvider(&data);
153 AddAuthToCache(); 193 AddAuthToCache();
154 194
155 ClientSocketHandle handle; 195 ClientSocketHandle handle;
156 TestCompletionCallback callback; 196 TestCompletionCallback callback;
157 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 197 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
158 BoundNetLog()); 198 BoundNetLog());
159 EXPECT_EQ(OK, rv); 199 EXPECT_EQ(OK, rv);
160 EXPECT_TRUE(handle.is_initialized()); 200 EXPECT_TRUE(handle.is_initialized());
161 EXPECT_TRUE(handle.socket()); 201 EXPECT_TRUE(handle.socket());
162 HttpProxyClientSocket* tunnel_socket = 202 HttpProxyClientSocket* tunnel_socket =
163 static_cast<HttpProxyClientSocket*>(handle.socket()); 203 static_cast<HttpProxyClientSocket*>(handle.socket());
164 EXPECT_TRUE(tunnel_socket->IsConnected()); 204 EXPECT_TRUE(tunnel_socket->IsConnected());
165 } 205 }
166 206
167 TEST_F(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { 207 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
168 MockWrite writes[] = { 208 MockWrite writes[] = {
169 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 209 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
170 "Host: host\r\n" 210 "Host: host\r\n"
171 "Proxy-Connection: keep-alive\r\n" 211 "Proxy-Connection: keep-alive\r\n"
172 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 212 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
173 }; 213 };
174 MockRead reads[] = { 214 MockRead reads[] = {
175 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), 215 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"),
176 }; 216 };
177 StaticSocketDataProvider data(reads, arraysize(reads), writes, 217 StaticSocketDataProvider data(reads, arraysize(reads), writes,
178 arraysize(writes)); 218 arraysize(writes));
179 219
180 tcp_client_socket_factory_.AddSocketDataProvider(&data); 220 tcp_client_socket_factory_.AddSocketDataProvider(&data);
181 AddAuthToCache(); 221 AddAuthToCache();
182 222
183 ClientSocketHandle handle; 223 ClientSocketHandle handle;
184 TestCompletionCallback callback; 224 TestCompletionCallback callback;
185 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 225 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
186 BoundNetLog()); 226 BoundNetLog());
187 EXPECT_EQ(ERR_IO_PENDING, rv); 227 EXPECT_EQ(ERR_IO_PENDING, rv);
188 EXPECT_FALSE(handle.is_initialized()); 228 EXPECT_FALSE(handle.is_initialized());
189 EXPECT_FALSE(handle.socket()); 229 EXPECT_FALSE(handle.socket());
190 230
191 EXPECT_EQ(OK, callback.WaitForResult()); 231 EXPECT_EQ(OK, callback.WaitForResult());
192 EXPECT_TRUE(handle.is_initialized()); 232 EXPECT_TRUE(handle.is_initialized());
193 EXPECT_TRUE(handle.socket()); 233 EXPECT_TRUE(handle.socket());
194 HttpProxyClientSocket* tunnel_socket = 234 HttpProxyClientSocket* tunnel_socket =
195 static_cast<HttpProxyClientSocket*>(handle.socket()); 235 static_cast<HttpProxyClientSocket*>(handle.socket());
196 EXPECT_TRUE(tunnel_socket->IsConnected()); 236 EXPECT_TRUE(tunnel_socket->IsConnected());
197 } 237 }
198 238
199 TEST_F(HttpProxyClientSocketPoolTest, TCPError) { 239 TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
200 StaticSocketDataProvider data; 240 StaticSocketDataProvider data;
201 data.set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); 241 data.set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED));
202 242
203 tcp_client_socket_factory_.AddSocketDataProvider(&data); 243 tcp_client_socket_factory_.AddSocketDataProvider(&data);
204 244
205 ClientSocketHandle handle; 245 ClientSocketHandle handle;
206 TestCompletionCallback callback; 246 TestCompletionCallback callback;
207 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 247 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
208 BoundNetLog()); 248 BoundNetLog());
209 EXPECT_EQ(ERR_IO_PENDING, rv); 249 EXPECT_EQ(ERR_IO_PENDING, rv);
210 EXPECT_FALSE(handle.is_initialized()); 250 EXPECT_FALSE(handle.is_initialized());
211 EXPECT_FALSE(handle.socket()); 251 EXPECT_FALSE(handle.socket());
212 252
213 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 253 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
214 EXPECT_FALSE(handle.is_initialized()); 254 EXPECT_FALSE(handle.is_initialized());
215 EXPECT_FALSE(handle.socket()); 255 EXPECT_FALSE(handle.socket());
216 } 256 }
217 257
218 TEST_F(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) { 258 TEST_P(HttpProxyClientSocketPoolTest, TunnelUnexpectedClose) {
219 MockWrite writes[] = { 259 MockWrite writes[] = {
220 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 260 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
221 "Host: host\r\n" 261 "Host: host\r\n"
222 "Proxy-Connection: keep-alive\r\n" 262 "Proxy-Connection: keep-alive\r\n"
223 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 263 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
224 }; 264 };
225 MockRead reads[] = { 265 MockRead reads[] = {
226 MockRead("HTTP/1.1 200 Conn"), 266 MockRead("HTTP/1.1 200 Conn"),
227 MockRead(true, ERR_CONNECTION_CLOSED), 267 MockRead(true, ERR_CONNECTION_CLOSED),
228 }; 268 };
229 StaticSocketDataProvider data(reads, arraysize(reads), writes, 269 StaticSocketDataProvider data(reads, arraysize(reads), writes,
230 arraysize(writes)); 270 arraysize(writes));
231 271
232 tcp_client_socket_factory_.AddSocketDataProvider(&data); 272 tcp_client_socket_factory_.AddSocketDataProvider(&data);
233 AddAuthToCache(); 273 AddAuthToCache();
234 274
235 ClientSocketHandle handle; 275 ClientSocketHandle handle;
236 TestCompletionCallback callback; 276 TestCompletionCallback callback;
237 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 277 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
238 BoundNetLog()); 278 BoundNetLog());
239 EXPECT_EQ(ERR_IO_PENDING, rv); 279 EXPECT_EQ(ERR_IO_PENDING, rv);
240 EXPECT_FALSE(handle.is_initialized()); 280 EXPECT_FALSE(handle.is_initialized());
241 EXPECT_FALSE(handle.socket()); 281 EXPECT_FALSE(handle.socket());
242 282
243 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 283 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
244 EXPECT_FALSE(handle.is_initialized()); 284 EXPECT_FALSE(handle.is_initialized());
245 EXPECT_FALSE(handle.socket()); 285 EXPECT_FALSE(handle.socket());
246 } 286 }
247 287
248 TEST_F(HttpProxyClientSocketPoolTest, TunnelSetupError) { 288 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
249 MockWrite writes[] = { 289 MockWrite writes[] = {
250 MockWrite("CONNECT host:80 HTTP/1.1\r\n" 290 MockWrite("CONNECT host:80 HTTP/1.1\r\n"
251 "Host: host\r\n" 291 "Host: host\r\n"
252 "Proxy-Connection: keep-alive\r\n" 292 "Proxy-Connection: keep-alive\r\n"
253 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 293 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
254 }; 294 };
255 MockRead reads[] = { 295 MockRead reads[] = {
256 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), 296 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"),
257 }; 297 };
258 StaticSocketDataProvider data(reads, arraysize(reads), writes, 298 StaticSocketDataProvider data(reads, arraysize(reads), writes,
259 arraysize(writes)); 299 arraysize(writes));
260 300
261 tcp_client_socket_factory_.AddSocketDataProvider(&data); 301 tcp_client_socket_factory_.AddSocketDataProvider(&data);
262 AddAuthToCache(); 302 AddAuthToCache();
263 303
264 ClientSocketHandle handle; 304 ClientSocketHandle handle;
265 TestCompletionCallback callback; 305 TestCompletionCallback callback;
266 int rv = handle.Init("a", tunnel_socket_params_, LOW, &callback, pool_, 306 int rv = handle.Init("a", GetTunnelParams(), LOW, &callback, pool_,
267 BoundNetLog()); 307 BoundNetLog());
268 EXPECT_EQ(ERR_IO_PENDING, rv); 308 EXPECT_EQ(ERR_IO_PENDING, rv);
269 EXPECT_FALSE(handle.is_initialized()); 309 EXPECT_FALSE(handle.is_initialized());
270 EXPECT_FALSE(handle.socket()); 310 EXPECT_FALSE(handle.socket());
271 311
272 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback.WaitForResult()); 312 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback.WaitForResult());
273 EXPECT_FALSE(handle.is_initialized()); 313 EXPECT_FALSE(handle.is_initialized());
274 EXPECT_FALSE(handle.socket()); 314 EXPECT_FALSE(handle.socket());
275 } 315 }
276 316
277 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. 317 // It would be nice to also test the timeouts in HttpProxyClientSocketPool.
278 318
279 } // namespace 319 } // namespace
280 320
281 } // namespace net 321 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_proxy_client_socket_pool.cc ('k') | net/http/http_stream_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698