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

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

Issue 517693002: Add embedder-specific headers to HTTP CONNECT tunnel request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments from mef and mmenke Created 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 #include "net/base/proxy_delegate.h"
12 #include "net/base/test_completion_callback.h" 13 #include "net/base/test_completion_callback.h"
13 #include "net/http/http_network_session.h" 14 #include "net/http/http_network_session.h"
14 #include "net/http/http_proxy_client_socket.h" 15 #include "net/http/http_proxy_client_socket.h"
15 #include "net/http/http_response_headers.h" 16 #include "net/http/http_response_headers.h"
16 #include "net/socket/client_socket_handle.h" 17 #include "net/socket/client_socket_handle.h"
17 #include "net/socket/client_socket_pool_histograms.h" 18 #include "net/socket/client_socket_pool_histograms.h"
18 #include "net/socket/next_proto.h" 19 #include "net/socket/next_proto.h"
19 #include "net/socket/socket_test_util.h" 20 #include "net/socket/socket_test_util.h"
20 #include "net/spdy/spdy_protocol.h" 21 #include "net/spdy/spdy_protocol.h"
21 #include "net/spdy/spdy_test_util_common.h" 22 #include "net/spdy/spdy_test_util_common.h"
(...skipping 29 matching lines...) Expand all
51 52
52 HttpProxyType proxy_type; 53 HttpProxyType proxy_type;
53 NextProto protocol; 54 NextProto protocol;
54 }; 55 };
55 56
56 typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam; 57 typedef ::testing::TestWithParam<HttpProxyType> TestWithHttpParam;
57 58
58 const char kHttpProxyHost[] = "httpproxy.example.com"; 59 const char kHttpProxyHost[] = "httpproxy.example.com";
59 const char kHttpsProxyHost[] = "httpsproxy.example.com"; 60 const char kHttpsProxyHost[] = "httpsproxy.example.com";
60 61
62 class TestProxyDelegate : public ProxyDelegate {
63 public:
64 TestProxyDelegate()
65 : on_before_tunnel_request_called_(false),
66 on_tunnel_headers_received_called_(false) {
67 }
68
69 virtual ~TestProxyDelegate() OVERRIDE {
70 }
71
72 bool on_before_tunnel_request_called() const {
73 return on_before_tunnel_request_called_;
74 }
75
76 bool on_tunnel_headers_received_called() const {
77 return on_tunnel_headers_received_called_;
78 }
79
80 void VerifyOnTunnelHeadersReceived(const std::string& origin,
81 const std::string& proxy_server,
82 const std::string& status_line) const {
83 EXPECT_TRUE(on_tunnel_headers_received_called_);
84 EXPECT_TRUE(HostPortPair::FromString(origin).Equals(
85 on_tunnel_headers_received_origin_));
86 EXPECT_TRUE(HostPortPair::FromString(proxy_server).Equals(
87 on_tunnel_headers_received_proxy_server_));
88 EXPECT_EQ(status_line, on_tunnel_headers_received_status_line_);
89 }
90
91 // ProxyDelegate:
92 virtual void OnResolveProxy(const GURL& url,
93 int load_flags,
94 const ProxyService& proxy_service,
95 ProxyInfo* result) OVERRIDE {
96 }
97
98 virtual void OnFallback(const ProxyServer& bad_proxy,
99 int net_error) OVERRIDE {
100 }
101
102 virtual void OnBeforeSendHeaders(URLRequest* request,
103 const ProxyInfo& proxy_info,
104 HttpRequestHeaders* headers) OVERRIDE {
105 }
106
107 virtual void OnBeforeTunnelRequest(
108 const net::HostPortPair& proxy_server,
109 net::HttpRequestHeaders* extra_headers) OVERRIDE {
110 on_before_tunnel_request_called_ = true;
111 if (extra_headers) {
112 extra_headers->SetHeader("Foo", proxy_server.ToString());
113 }
114 }
115
116 virtual void OnTunnelHeadersReceived(
117 const net::HostPortPair& origin,
118 const net::HostPortPair& proxy_server,
119 const net::HttpResponseHeaders& response_headers) OVERRIDE {
120 on_tunnel_headers_received_called_ = true;
121 on_tunnel_headers_received_origin_ = origin;
122 on_tunnel_headers_received_proxy_server_ = proxy_server;
123 on_tunnel_headers_received_status_line_ = response_headers.GetStatusLine();
124 }
125
126 private:
127 bool on_before_tunnel_request_called_;
128 bool on_tunnel_headers_received_called_;
129 HostPortPair on_tunnel_headers_received_origin_;
130 HostPortPair on_tunnel_headers_received_proxy_server_;
131 std::string on_tunnel_headers_received_status_line_;
132 };
133
134
61 class HttpProxyClientSocketPoolTest 135 class HttpProxyClientSocketPoolTest
62 : public ::testing::TestWithParam<HttpProxyClientSocketPoolTestParams> { 136 : public ::testing::TestWithParam<HttpProxyClientSocketPoolTestParams> {
63 protected: 137 protected:
64 HttpProxyClientSocketPoolTest() 138 HttpProxyClientSocketPoolTest()
65 : session_deps_(GetParam().protocol), 139 : session_deps_(GetParam().protocol),
66 tcp_histograms_("MockTCP"), 140 tcp_histograms_("MockTCP"),
67 transport_socket_pool_( 141 transport_socket_pool_(
68 kMaxSockets, 142 kMaxSockets,
69 kMaxSocketsPerGroup, 143 kMaxSocketsPerGroup,
70 &tcp_histograms_, 144 &tcp_histograms_,
(...skipping 17 matching lines...) Expand all
88 BoundNetLog().net_log()), 162 BoundNetLog().net_log()),
89 session_(CreateNetworkSession()), 163 session_(CreateNetworkSession()),
90 http_proxy_histograms_("HttpProxyUnitTest"), 164 http_proxy_histograms_("HttpProxyUnitTest"),
91 spdy_util_(GetParam().protocol), 165 spdy_util_(GetParam().protocol),
92 pool_(kMaxSockets, 166 pool_(kMaxSockets,
93 kMaxSocketsPerGroup, 167 kMaxSocketsPerGroup,
94 &http_proxy_histograms_, 168 &http_proxy_histograms_,
95 NULL, 169 NULL,
96 &transport_socket_pool_, 170 &transport_socket_pool_,
97 &ssl_socket_pool_, 171 &ssl_socket_pool_,
172 NULL,
98 NULL) {} 173 NULL) {}
99 174
100 virtual ~HttpProxyClientSocketPoolTest() { 175 virtual ~HttpProxyClientSocketPoolTest() {
101 } 176 }
102 177
103 void AddAuthToCache() { 178 void AddAuthToCache() {
104 const base::string16 kFoo(base::ASCIIToUTF16("foo")); 179 const base::string16 kFoo(base::ASCIIToUTF16("foo"));
105 const base::string16 kBar(base::ASCIIToUTF16("bar")); 180 const base::string16 kBar(base::ASCIIToUTF16("bar"));
106 GURL proxy_url(GetParam().proxy_type == HTTP ? 181 GURL proxy_url(GetParam().proxy_type == HTTP ?
107 (std::string("http://") + kHttpProxyHost) : 182 (std::string("http://") + kHttpProxyHost) :
(...skipping 29 matching lines...) Expand all
137 HostPortPair(kHttpsProxyHost, 443), 212 HostPortPair(kHttpsProxyHost, 443),
138 SSLConfig(), 213 SSLConfig(),
139 PRIVACY_MODE_DISABLED, 214 PRIVACY_MODE_DISABLED,
140 0, 215 0,
141 false, 216 false,
142 false); 217 false);
143 } 218 }
144 219
145 // Returns the a correctly constructed HttpProxyParms 220 // Returns the a correctly constructed HttpProxyParms
146 // for the HTTP or HTTPS proxy. 221 // for the HTTP or HTTPS proxy.
147 scoped_refptr<HttpProxySocketParams> CreateParams(bool tunnel) { 222 scoped_refptr<HttpProxySocketParams> CreateParams(
223 bool tunnel,
224 ProxyDelegate* proxy_delegate) {
148 return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams( 225 return scoped_refptr<HttpProxySocketParams>(new HttpProxySocketParams(
149 CreateHttpProxyParams(), 226 CreateHttpProxyParams(),
150 CreateHttpsProxyParams(), 227 CreateHttpsProxyParams(),
151 GURL(tunnel ? "https://www.google.com/" : "http://www.google.com"), 228 GURL(tunnel ? "https://www.google.com/" : "http://www.google.com"),
152 std::string(), 229 std::string(),
153 HostPortPair("www.google.com", tunnel ? 443 : 80), 230 HostPortPair("www.google.com", tunnel ? 443 : 80),
154 session_->http_auth_cache(), 231 session_->http_auth_cache(),
155 session_->http_auth_handler_factory(), 232 session_->http_auth_handler_factory(),
156 session_->spdy_session_pool(), 233 session_->spdy_session_pool(),
157 tunnel)); 234 tunnel,
235 proxy_delegate));
158 } 236 }
159 237
160 scoped_refptr<HttpProxySocketParams> CreateTunnelParams() { 238 scoped_refptr<HttpProxySocketParams> CreateTunnelParams(
161 return CreateParams(true); 239 ProxyDelegate* proxy_delegate) {
240 return CreateParams(true, proxy_delegate);
162 } 241 }
163 242
164 scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams() { 243 scoped_refptr<HttpProxySocketParams> CreateNoTunnelParams(
165 return CreateParams(false); 244 ProxyDelegate* proxy_delegate) {
245 return CreateParams(false, proxy_delegate);
166 } 246 }
167 247
168 DeterministicMockClientSocketFactory* socket_factory() { 248 DeterministicMockClientSocketFactory* socket_factory() {
169 return session_deps_.deterministic_socket_factory.get(); 249 return session_deps_.deterministic_socket_factory.get();
170 } 250 }
171 251
172 void Initialize(MockRead* reads, size_t reads_count, 252 void Initialize(MockRead* reads, size_t reads_count,
173 MockWrite* writes, size_t writes_count, 253 MockWrite* writes, size_t writes_count,
174 MockRead* spdy_reads, size_t spdy_reads_count, 254 MockRead* spdy_reads, size_t spdy_reads_count,
175 MockWrite* spdy_writes, size_t spdy_writes_count) { 255 MockWrite* spdy_writes, size_t spdy_writes_count) {
(...skipping 25 matching lines...) Expand all
201 281
202 HttpNetworkSession* CreateNetworkSession() { 282 HttpNetworkSession* CreateNetworkSession() {
203 return SpdySessionDependencies::SpdyCreateSessionDeterministic( 283 return SpdySessionDependencies::SpdyCreateSessionDeterministic(
204 &session_deps_); 284 &session_deps_);
205 } 285 }
206 286
207 RequestPriority GetLastTransportRequestPriority() const { 287 RequestPriority GetLastTransportRequestPriority() const {
208 return transport_socket_pool_.last_request_priority(); 288 return transport_socket_pool_.last_request_priority();
209 } 289 }
210 290
291
mef 2014/09/10 15:05:25 nit: spurious nl.
bengr 2014/09/10 19:18:59 Done.
211 private: 292 private:
212 SpdySessionDependencies session_deps_; 293 SpdySessionDependencies session_deps_;
213 294
214 ClientSocketPoolHistograms tcp_histograms_; 295 ClientSocketPoolHistograms tcp_histograms_;
215 MockTransportClientSocketPool transport_socket_pool_; 296 MockTransportClientSocketPool transport_socket_pool_;
216 ClientSocketPoolHistograms ssl_histograms_; 297 ClientSocketPoolHistograms ssl_histograms_;
217 MockHostResolver host_resolver_; 298 MockHostResolver host_resolver_;
218 scoped_ptr<CertVerifier> cert_verifier_; 299 scoped_ptr<CertVerifier> cert_verifier_;
219 SSLClientSocketPool ssl_socket_pool_; 300 SSLClientSocketPool ssl_socket_pool_;
220 301
(...skipping 28 matching lines...) Expand all
249 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY31), 330 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY31),
250 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY31), 331 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY31),
251 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY31), 332 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY31),
252 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY4), 333 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY4),
253 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY4), 334 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY4),
254 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY4))); 335 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY4)));
255 336
256 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { 337 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
257 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 338 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
258 339
259 int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(), 340 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
260 &pool_, BoundNetLog()); 341 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW,
342 CompletionCallback(), &pool_, BoundNetLog());
261 EXPECT_EQ(OK, rv); 343 EXPECT_EQ(OK, rv);
262 EXPECT_TRUE(handle_.is_initialized()); 344 EXPECT_TRUE(handle_.is_initialized());
263 ASSERT_TRUE(handle_.socket()); 345 ASSERT_TRUE(handle_.socket());
264 HttpProxyClientSocket* tunnel_socket = 346 HttpProxyClientSocket* tunnel_socket =
265 static_cast<HttpProxyClientSocket*>(handle_.socket()); 347 static_cast<HttpProxyClientSocket*>(handle_.socket());
266 EXPECT_TRUE(tunnel_socket->IsConnected()); 348 EXPECT_TRUE(tunnel_socket->IsConnected());
349 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called());
350 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called());
267 } 351 }
268 352
269 // Make sure that HttpProxyConnectJob passes on its priority to its 353 // Make sure that HttpProxyConnectJob passes on its priority to its
270 // (non-SSL) socket request on Init. 354 // (non-SSL) socket request on Init.
271 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { 355 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
272 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 356 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
273 EXPECT_EQ(OK, 357 EXPECT_EQ(OK,
274 handle_.Init("a", CreateNoTunnelParams(), HIGHEST, 358 handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST,
275 CompletionCallback(), &pool_, BoundNetLog())); 359 CompletionCallback(), &pool_, BoundNetLog()));
276 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); 360 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority());
277 } 361 }
278 362
279 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { 363 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
280 MockWrite writes[] = { 364 MockWrite writes[] = {
281 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n" 365 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
282 "Host: www.google.com\r\n" 366 "Host: www.google.com\r\n"
283 "Proxy-Connection: keep-alive\r\n\r\n"), 367 "Proxy-Connection: keep-alive\r\n\r\n"),
284 }; 368 };
(...skipping 21 matching lines...) Expand all
306 MockRead spdy_reads[] = { 390 MockRead spdy_reads[] = {
307 CreateMockRead(*resp, 1, ASYNC), 391 CreateMockRead(*resp, 1, ASYNC),
308 MockRead(ASYNC, 0, 3) 392 MockRead(ASYNC, 0, 3)
309 }; 393 };
310 394
311 Initialize(reads, arraysize(reads), writes, arraysize(writes), 395 Initialize(reads, arraysize(reads), writes, arraysize(writes),
312 spdy_reads, arraysize(spdy_reads), spdy_writes, 396 spdy_reads, arraysize(spdy_reads), spdy_writes,
313 arraysize(spdy_writes)); 397 arraysize(spdy_writes));
314 398
315 data_->StopAfter(4); 399 data_->StopAfter(4);
316 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 400 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
317 &pool_, BoundNetLog()); 401 callback_.callback(), &pool_, BoundNetLog());
318 EXPECT_EQ(ERR_IO_PENDING, rv); 402 EXPECT_EQ(ERR_IO_PENDING, rv);
319 EXPECT_FALSE(handle_.is_initialized()); 403 EXPECT_FALSE(handle_.is_initialized());
320 EXPECT_FALSE(handle_.socket()); 404 EXPECT_FALSE(handle_.socket());
321 405
322 data_->RunFor(GetParam().proxy_type == SPDY ? 2 : 4); 406 data_->RunFor(GetParam().proxy_type == SPDY ? 2 : 4);
323 rv = callback_.WaitForResult(); 407 rv = callback_.WaitForResult();
324 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); 408 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv);
325 EXPECT_TRUE(handle_.is_initialized()); 409 EXPECT_TRUE(handle_.is_initialized());
326 ASSERT_TRUE(handle_.socket()); 410 ASSERT_TRUE(handle_.socket());
327 ProxyClientSocket* tunnel_socket = 411 ProxyClientSocket* tunnel_socket =
(...skipping 10 matching lines...) Expand all
338 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { 422 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
339 // It's pretty much impossible to make the SPDY case behave synchronously 423 // It's pretty much impossible to make the SPDY case behave synchronously
340 // so we skip this test for SPDY 424 // so we skip this test for SPDY
341 if (GetParam().proxy_type == SPDY) 425 if (GetParam().proxy_type == SPDY)
342 return; 426 return;
343 MockWrite writes[] = { 427 MockWrite writes[] = {
344 MockWrite(SYNCHRONOUS, 0, 428 MockWrite(SYNCHRONOUS, 0,
345 "CONNECT www.google.com:443 HTTP/1.1\r\n" 429 "CONNECT www.google.com:443 HTTP/1.1\r\n"
346 "Host: www.google.com\r\n" 430 "Host: www.google.com\r\n"
347 "Proxy-Connection: keep-alive\r\n" 431 "Proxy-Connection: keep-alive\r\n"
348 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 432 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n"
433 "Foo: httpproxy.example.com:80\r\n\r\n"),
349 }; 434 };
350 MockRead reads[] = { 435 MockRead reads[] = {
351 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), 436 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
352 }; 437 };
353 438
354 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, 439 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0,
355 NULL, 0); 440 NULL, 0);
356 AddAuthToCache(); 441 AddAuthToCache();
357 442
358 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 443 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
359 &pool_, BoundNetLog()); 444 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW,
445 callback_.callback(), &pool_, BoundNetLog());
360 EXPECT_EQ(OK, rv); 446 EXPECT_EQ(OK, rv);
361 EXPECT_TRUE(handle_.is_initialized()); 447 EXPECT_TRUE(handle_.is_initialized());
362 ASSERT_TRUE(handle_.socket()); 448 ASSERT_TRUE(handle_.socket());
363 HttpProxyClientSocket* tunnel_socket = 449 HttpProxyClientSocket* tunnel_socket =
364 static_cast<HttpProxyClientSocket*>(handle_.socket()); 450 static_cast<HttpProxyClientSocket*>(handle_.socket());
365 EXPECT_TRUE(tunnel_socket->IsConnected()); 451 EXPECT_TRUE(tunnel_socket->IsConnected());
452 proxy_delegate->VerifyOnTunnelHeadersReceived(
453 "www.google.com:443",
454 "httpproxy.example.com:80",
455 "HTTP/1.1 200 Connection Established");
366 } 456 }
367 457
368 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { 458 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
369 MockWrite writes[] = { 459 MockWrite writes[] = {
370 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n" 460 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
371 "Host: www.google.com\r\n" 461 "Host: www.google.com\r\n"
372 "Proxy-Connection: keep-alive\r\n" 462 "Proxy-Connection: keep-alive\r\n"
373 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 463 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
374 }; 464 };
375 MockRead reads[] = { 465 MockRead reads[] = {
376 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), 466 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
377 }; 467 };
378 468
379 scoped_ptr<SpdyFrame> req( 469 scoped_ptr<SpdyFrame> req(
380 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW)); 470 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW));
381 MockWrite spdy_writes[] = { 471 MockWrite spdy_writes[] = {
382 CreateMockWrite(*req, 0, ASYNC) 472 CreateMockWrite(*req, 0, ASYNC)
383 }; 473 };
384 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 474 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
385 MockRead spdy_reads[] = { 475 MockRead spdy_reads[] = {
386 CreateMockRead(*resp, 1, ASYNC), 476 CreateMockRead(*resp, 1, ASYNC),
387 MockRead(ASYNC, 0, 2) 477 MockRead(ASYNC, 0, 2)
388 }; 478 };
389 479
390 Initialize(reads, arraysize(reads), writes, arraysize(writes), 480 Initialize(reads, arraysize(reads), writes, arraysize(writes),
391 spdy_reads, arraysize(spdy_reads), spdy_writes, 481 spdy_reads, arraysize(spdy_reads), spdy_writes,
392 arraysize(spdy_writes)); 482 arraysize(spdy_writes));
393 AddAuthToCache(); 483 AddAuthToCache();
394 484
395 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 485 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
396 &pool_, BoundNetLog()); 486 callback_.callback(), &pool_, BoundNetLog());
397 EXPECT_EQ(ERR_IO_PENDING, rv); 487 EXPECT_EQ(ERR_IO_PENDING, rv);
398 EXPECT_FALSE(handle_.is_initialized()); 488 EXPECT_FALSE(handle_.is_initialized());
399 EXPECT_FALSE(handle_.socket()); 489 EXPECT_FALSE(handle_.socket());
400 490
401 data_->RunFor(2); 491 data_->RunFor(2);
402 EXPECT_EQ(OK, callback_.WaitForResult()); 492 EXPECT_EQ(OK, callback_.WaitForResult());
403 EXPECT_TRUE(handle_.is_initialized()); 493 EXPECT_TRUE(handle_.is_initialized());
404 ASSERT_TRUE(handle_.socket()); 494 ASSERT_TRUE(handle_.socket());
405 HttpProxyClientSocket* tunnel_socket = 495 HttpProxyClientSocket* tunnel_socket =
406 static_cast<HttpProxyClientSocket*>(handle_.socket()); 496 static_cast<HttpProxyClientSocket*>(handle_.socket());
(...skipping 18 matching lines...) Expand all
425 CreateMockRead(*resp, 1, ASYNC), 515 CreateMockRead(*resp, 1, ASYNC),
426 MockRead(ASYNC, 0, 2) 516 MockRead(ASYNC, 0, 2)
427 }; 517 };
428 518
429 Initialize(NULL, 0, NULL, 0, 519 Initialize(NULL, 0, NULL, 0,
430 spdy_reads, arraysize(spdy_reads), 520 spdy_reads, arraysize(spdy_reads),
431 spdy_writes, arraysize(spdy_writes)); 521 spdy_writes, arraysize(spdy_writes));
432 AddAuthToCache(); 522 AddAuthToCache();
433 523
434 EXPECT_EQ(ERR_IO_PENDING, 524 EXPECT_EQ(ERR_IO_PENDING,
435 handle_.Init("a", CreateTunnelParams(), MEDIUM, 525 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM,
436 callback_.callback(), &pool_, BoundNetLog())); 526 callback_.callback(), &pool_, BoundNetLog()));
437 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); 527 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority());
438 528
439 data_->RunFor(2); 529 data_->RunFor(2);
440 EXPECT_EQ(OK, callback_.WaitForResult()); 530 EXPECT_EQ(OK, callback_.WaitForResult());
441 } 531 }
442 532
443 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { 533 TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
444 if (GetParam().proxy_type == SPDY) return; 534 if (GetParam().proxy_type == SPDY) return;
445 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 535 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
446 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); 536 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED));
447 537
448 socket_factory()->AddSocketDataProvider(data_.get()); 538 socket_factory()->AddSocketDataProvider(data_.get());
449 539
450 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 540 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
451 &pool_, BoundNetLog()); 541 callback_.callback(), &pool_, BoundNetLog());
452 EXPECT_EQ(ERR_IO_PENDING, rv); 542 EXPECT_EQ(ERR_IO_PENDING, rv);
453 EXPECT_FALSE(handle_.is_initialized()); 543 EXPECT_FALSE(handle_.is_initialized());
454 EXPECT_FALSE(handle_.socket()); 544 EXPECT_FALSE(handle_.socket());
455 545
456 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); 546 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult());
457 547
458 EXPECT_FALSE(handle_.is_initialized()); 548 EXPECT_FALSE(handle_.is_initialized());
459 EXPECT_FALSE(handle_.socket()); 549 EXPECT_FALSE(handle_.socket());
460 } 550 }
461 551
462 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { 552 TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
463 if (GetParam().proxy_type == HTTP) return; 553 if (GetParam().proxy_type == HTTP) return;
464 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 554 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
465 data_->set_connect_data(MockConnect(ASYNC, OK)); 555 data_->set_connect_data(MockConnect(ASYNC, OK));
466 socket_factory()->AddSocketDataProvider(data_.get()); 556 socket_factory()->AddSocketDataProvider(data_.get());
467 557
468 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, 558 ssl_data_.reset(new SSLSocketDataProvider(ASYNC,
469 ERR_CERT_AUTHORITY_INVALID)); 559 ERR_CERT_AUTHORITY_INVALID));
470 if (GetParam().proxy_type == SPDY) { 560 if (GetParam().proxy_type == SPDY) {
471 InitializeSpdySsl(); 561 InitializeSpdySsl();
472 } 562 }
473 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); 563 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
474 564
475 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 565 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
476 &pool_, BoundNetLog()); 566 callback_.callback(), &pool_, BoundNetLog());
477 EXPECT_EQ(ERR_IO_PENDING, rv); 567 EXPECT_EQ(ERR_IO_PENDING, rv);
478 EXPECT_FALSE(handle_.is_initialized()); 568 EXPECT_FALSE(handle_.is_initialized());
479 EXPECT_FALSE(handle_.socket()); 569 EXPECT_FALSE(handle_.socket());
480 570
481 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); 571 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult());
482 572
483 EXPECT_FALSE(handle_.is_initialized()); 573 EXPECT_FALSE(handle_.is_initialized());
484 EXPECT_FALSE(handle_.socket()); 574 EXPECT_FALSE(handle_.socket());
485 } 575 }
486 576
487 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { 577 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
488 if (GetParam().proxy_type == HTTP) return; 578 if (GetParam().proxy_type == HTTP) return;
489 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 579 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
490 data_->set_connect_data(MockConnect(ASYNC, OK)); 580 data_->set_connect_data(MockConnect(ASYNC, OK));
491 socket_factory()->AddSocketDataProvider(data_.get()); 581 socket_factory()->AddSocketDataProvider(data_.get());
492 582
493 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, 583 ssl_data_.reset(new SSLSocketDataProvider(ASYNC,
494 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); 584 ERR_SSL_CLIENT_AUTH_CERT_NEEDED));
495 if (GetParam().proxy_type == SPDY) { 585 if (GetParam().proxy_type == SPDY) {
496 InitializeSpdySsl(); 586 InitializeSpdySsl();
497 } 587 }
498 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); 588 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
499 589
500 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 590 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
501 &pool_, BoundNetLog()); 591 callback_.callback(), &pool_, BoundNetLog());
502 EXPECT_EQ(ERR_IO_PENDING, rv); 592 EXPECT_EQ(ERR_IO_PENDING, rv);
503 EXPECT_FALSE(handle_.is_initialized()); 593 EXPECT_FALSE(handle_.is_initialized());
504 EXPECT_FALSE(handle_.socket()); 594 EXPECT_FALSE(handle_.socket());
505 595
506 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); 596 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult());
507 597
508 EXPECT_FALSE(handle_.is_initialized()); 598 EXPECT_FALSE(handle_.is_initialized());
509 EXPECT_FALSE(handle_.socket()); 599 EXPECT_FALSE(handle_.socket());
510 } 600 }
511 601
(...skipping 16 matching lines...) Expand all
528 }; 618 };
529 MockRead spdy_reads[] = { 619 MockRead spdy_reads[] = {
530 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), 620 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1),
531 }; 621 };
532 622
533 Initialize(reads, arraysize(reads), writes, arraysize(writes), 623 Initialize(reads, arraysize(reads), writes, arraysize(writes),
534 spdy_reads, arraysize(spdy_reads), spdy_writes, 624 spdy_reads, arraysize(spdy_reads), spdy_writes,
535 arraysize(spdy_writes)); 625 arraysize(spdy_writes));
536 AddAuthToCache(); 626 AddAuthToCache();
537 627
538 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 628 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
539 &pool_, BoundNetLog()); 629 callback_.callback(), &pool_, BoundNetLog());
540 EXPECT_EQ(ERR_IO_PENDING, rv); 630 EXPECT_EQ(ERR_IO_PENDING, rv);
541 EXPECT_FALSE(handle_.is_initialized()); 631 EXPECT_FALSE(handle_.is_initialized());
542 EXPECT_FALSE(handle_.socket()); 632 EXPECT_FALSE(handle_.socket());
543 633
544 data_->RunFor(3); 634 data_->RunFor(3);
545 if (GetParam().proxy_type == SPDY) { 635 if (GetParam().proxy_type == SPDY) {
546 // SPDY cannot process a headers block unless it's complete and so it 636 // SPDY cannot process a headers block unless it's complete and so it
547 // returns ERR_CONNECTION_CLOSED in this case. 637 // returns ERR_CONNECTION_CLOSED in this case.
548 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); 638 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult());
549 } else { 639 } else {
(...skipping 17 matching lines...) Expand all
567 "Proxy-Connection: keep-alive\r\n\r\n"), 657 "Proxy-Connection: keep-alive\r\n\r\n"),
568 }; 658 };
569 MockRead reads[] = { 659 MockRead reads[] = {
570 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), 660 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"),
571 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"), 661 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"),
572 }; 662 };
573 663
574 Initialize(reads, arraysize(reads), writes, arraysize(writes), 664 Initialize(reads, arraysize(reads), writes, arraysize(writes),
575 NULL, 0, NULL, 0); 665 NULL, 0, NULL, 0);
576 666
577 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 667 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
578 &pool_, BoundNetLog()); 668 callback_.callback(), &pool_, BoundNetLog());
579 EXPECT_EQ(ERR_IO_PENDING, rv); 669 EXPECT_EQ(ERR_IO_PENDING, rv);
580 EXPECT_FALSE(handle_.is_initialized()); 670 EXPECT_FALSE(handle_.is_initialized());
581 EXPECT_FALSE(handle_.socket()); 671 EXPECT_FALSE(handle_.socket());
582 672
583 data_->RunFor(2); 673 data_->RunFor(2);
584 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); 674 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult());
585 } 675 }
586 676
587 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { 677 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
588 MockWrite writes[] = { 678 MockWrite writes[] = {
(...skipping 18 matching lines...) Expand all
607 MockRead spdy_reads[] = { 697 MockRead spdy_reads[] = {
608 CreateMockRead(*resp, 1, ASYNC), 698 CreateMockRead(*resp, 1, ASYNC),
609 MockRead(ASYNC, 0, 3), 699 MockRead(ASYNC, 0, 3),
610 }; 700 };
611 701
612 Initialize(reads, arraysize(reads), writes, arraysize(writes), 702 Initialize(reads, arraysize(reads), writes, arraysize(writes),
613 spdy_reads, arraysize(spdy_reads), spdy_writes, 703 spdy_reads, arraysize(spdy_reads), spdy_writes,
614 arraysize(spdy_writes)); 704 arraysize(spdy_writes));
615 AddAuthToCache(); 705 AddAuthToCache();
616 706
617 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 707 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
618 &pool_, BoundNetLog()); 708 callback_.callback(), &pool_, BoundNetLog());
619 EXPECT_EQ(ERR_IO_PENDING, rv); 709 EXPECT_EQ(ERR_IO_PENDING, rv);
620 EXPECT_FALSE(handle_.is_initialized()); 710 EXPECT_FALSE(handle_.is_initialized());
621 EXPECT_FALSE(handle_.socket()); 711 EXPECT_FALSE(handle_.socket());
622 712
623 data_->RunFor(2); 713 data_->RunFor(2);
624 714
625 rv = callback_.WaitForResult(); 715 rv = callback_.WaitForResult();
626 // All Proxy CONNECT responses are not trustworthy 716 // All Proxy CONNECT responses are not trustworthy
627 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); 717 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv);
628 EXPECT_FALSE(handle_.is_initialized()); 718 EXPECT_FALSE(handle_.is_initialized());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 MockRead spdy_reads[] = { 759 MockRead spdy_reads[] = {
670 CreateMockRead(*resp, 1, ASYNC), 760 CreateMockRead(*resp, 1, ASYNC),
671 MockRead(ASYNC, 0, 2), 761 MockRead(ASYNC, 0, 2),
672 }; 762 };
673 763
674 Initialize(reads, arraysize(reads), writes, arraysize(writes), 764 Initialize(reads, arraysize(reads), writes, arraysize(writes),
675 spdy_reads, arraysize(spdy_reads), spdy_writes, 765 spdy_reads, arraysize(spdy_reads), spdy_writes,
676 arraysize(spdy_writes)); 766 arraysize(spdy_writes));
677 AddAuthToCache(); 767 AddAuthToCache();
678 768
679 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 769 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
680 &pool_, BoundNetLog()); 770 callback_.callback(), &pool_, BoundNetLog());
681 EXPECT_EQ(ERR_IO_PENDING, rv); 771 EXPECT_EQ(ERR_IO_PENDING, rv);
682 EXPECT_FALSE(handle_.is_initialized()); 772 EXPECT_FALSE(handle_.is_initialized());
683 EXPECT_FALSE(handle_.socket()); 773 EXPECT_FALSE(handle_.socket());
684 774
685 data_->RunFor(2); 775 data_->RunFor(2);
686 776
687 rv = callback_.WaitForResult(); 777 rv = callback_.WaitForResult();
688 778
689 if (GetParam().proxy_type == HTTP) { 779 if (GetParam().proxy_type == HTTP) {
690 // We don't trust 302 responses to CONNECT from HTTP proxies. 780 // We don't trust 302 responses to CONNECT from HTTP proxies.
(...skipping 22 matching lines...) Expand all
713 EXPECT_TRUE(headers->IsRedirect(&location)); 803 EXPECT_TRUE(headers->IsRedirect(&location));
714 EXPECT_EQ(location, redirectTarget); 804 EXPECT_EQ(location, redirectTarget);
715 } 805 }
716 } 806 }
717 807
718 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. 808 // It would be nice to also test the timeouts in HttpProxyClientSocketPool.
719 809
720 } // namespace 810 } // namespace
721 811
722 } // namespace net 812 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698