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

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: Reworked HaveAuth test 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY31), 329 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY31),
250 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY31), 330 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY31),
251 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY31), 331 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY31),
252 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY4), 332 HttpProxyClientSocketPoolTestParams(HTTP, kProtoSPDY4),
253 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY4), 333 HttpProxyClientSocketPoolTestParams(HTTPS, kProtoSPDY4),
254 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY4))); 334 HttpProxyClientSocketPoolTestParams(SPDY, kProtoSPDY4)));
255 335
256 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { 336 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
257 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 337 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
258 338
259 int rv = handle_.Init("a", CreateNoTunnelParams(), LOW, CompletionCallback(), 339 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
260 &pool_, BoundNetLog()); 340 int rv = handle_.Init("a", CreateNoTunnelParams(proxy_delegate.get()), LOW,
341 CompletionCallback(), &pool_, BoundNetLog());
261 EXPECT_EQ(OK, rv); 342 EXPECT_EQ(OK, rv);
262 EXPECT_TRUE(handle_.is_initialized()); 343 EXPECT_TRUE(handle_.is_initialized());
263 ASSERT_TRUE(handle_.socket()); 344 ASSERT_TRUE(handle_.socket());
264 HttpProxyClientSocket* tunnel_socket = 345 HttpProxyClientSocket* tunnel_socket =
265 static_cast<HttpProxyClientSocket*>(handle_.socket()); 346 static_cast<HttpProxyClientSocket*>(handle_.socket());
266 EXPECT_TRUE(tunnel_socket->IsConnected()); 347 EXPECT_TRUE(tunnel_socket->IsConnected());
348 EXPECT_FALSE(proxy_delegate->on_before_tunnel_request_called());
349 EXPECT_FALSE(proxy_delegate->on_tunnel_headers_received_called());
267 } 350 }
268 351
269 // Make sure that HttpProxyConnectJob passes on its priority to its 352 // Make sure that HttpProxyConnectJob passes on its priority to its
270 // (non-SSL) socket request on Init. 353 // (non-SSL) socket request on Init.
271 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) { 354 TEST_P(HttpProxyClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
272 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0); 355 Initialize(NULL, 0, NULL, 0, NULL, 0, NULL, 0);
273 EXPECT_EQ(OK, 356 EXPECT_EQ(OK,
274 handle_.Init("a", CreateNoTunnelParams(), HIGHEST, 357 handle_.Init("a", CreateNoTunnelParams(NULL), HIGHEST,
275 CompletionCallback(), &pool_, BoundNetLog())); 358 CompletionCallback(), &pool_, BoundNetLog()));
276 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority()); 359 EXPECT_EQ(HIGHEST, GetLastTransportRequestPriority());
277 } 360 }
278 361
279 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { 362 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
280 MockWrite writes[] = { 363 MockWrite writes[] = {
281 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n" 364 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
282 "Host: www.google.com\r\n" 365 "Host: www.google.com\r\n"
283 "Proxy-Connection: keep-alive\r\n\r\n"), 366 "Proxy-Connection: keep-alive\r\n\r\n"),
284 }; 367 };
(...skipping 21 matching lines...) Expand all
306 MockRead spdy_reads[] = { 389 MockRead spdy_reads[] = {
307 CreateMockRead(*resp, 1, ASYNC), 390 CreateMockRead(*resp, 1, ASYNC),
308 MockRead(ASYNC, 0, 3) 391 MockRead(ASYNC, 0, 3)
309 }; 392 };
310 393
311 Initialize(reads, arraysize(reads), writes, arraysize(writes), 394 Initialize(reads, arraysize(reads), writes, arraysize(writes),
312 spdy_reads, arraysize(spdy_reads), spdy_writes, 395 spdy_reads, arraysize(spdy_reads), spdy_writes,
313 arraysize(spdy_writes)); 396 arraysize(spdy_writes));
314 397
315 data_->StopAfter(4); 398 data_->StopAfter(4);
316 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 399 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
317 &pool_, BoundNetLog()); 400 callback_.callback(), &pool_, BoundNetLog());
318 EXPECT_EQ(ERR_IO_PENDING, rv); 401 EXPECT_EQ(ERR_IO_PENDING, rv);
319 EXPECT_FALSE(handle_.is_initialized()); 402 EXPECT_FALSE(handle_.is_initialized());
320 EXPECT_FALSE(handle_.socket()); 403 EXPECT_FALSE(handle_.socket());
321 404
322 data_->RunFor(GetParam().proxy_type == SPDY ? 2 : 4); 405 data_->RunFor(GetParam().proxy_type == SPDY ? 2 : 4);
323 rv = callback_.WaitForResult(); 406 rv = callback_.WaitForResult();
324 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); 407 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv);
325 EXPECT_TRUE(handle_.is_initialized()); 408 EXPECT_TRUE(handle_.is_initialized());
326 ASSERT_TRUE(handle_.socket()); 409 ASSERT_TRUE(handle_.socket());
327 ProxyClientSocket* tunnel_socket = 410 ProxyClientSocket* tunnel_socket =
328 static_cast<ProxyClientSocket*>(handle_.socket()); 411 static_cast<ProxyClientSocket*>(handle_.socket());
329 if (GetParam().proxy_type == SPDY) { 412 if (GetParam().proxy_type == SPDY) {
330 EXPECT_TRUE(tunnel_socket->IsConnected()); 413 EXPECT_TRUE(tunnel_socket->IsConnected());
331 EXPECT_TRUE(tunnel_socket->IsUsingSpdy()); 414 EXPECT_TRUE(tunnel_socket->IsUsingSpdy());
332 } else { 415 } else {
333 EXPECT_FALSE(tunnel_socket->IsConnected()); 416 EXPECT_FALSE(tunnel_socket->IsConnected());
334 EXPECT_FALSE(tunnel_socket->IsUsingSpdy()); 417 EXPECT_FALSE(tunnel_socket->IsUsingSpdy());
335 } 418 }
336 } 419 }
337 420
338 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { 421 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
339 // It's pretty much impossible to make the SPDY case behave synchronously 422 // It's pretty much impossible to make the SPDY case behave synchronously
340 // so we skip this test for SPDY 423 // so we skip this test for SPDY
341 if (GetParam().proxy_type == SPDY) 424 if (GetParam().proxy_type == SPDY)
342 return; 425 return;
426 std::string proxy_host_port =
427 GetParam().proxy_type == HTTP ?
428 (kHttpProxyHost + std::string(":80")) :
429 (kHttpsProxyHost + std::string(":443"));
430 std::string request =
431 "CONNECT www.google.com:443 HTTP/1.1\r\n"
432 "Host: www.google.com\r\n"
433 "Proxy-Connection: keep-alive\r\n"
434 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n"
435 "Foo: " + proxy_host_port + "\r\n\r\n";
343 MockWrite writes[] = { 436 MockWrite writes[] = {
344 MockWrite(SYNCHRONOUS, 0, 437 MockWrite(SYNCHRONOUS, 0, request.c_str()),
345 "CONNECT www.google.com:443 HTTP/1.1\r\n"
346 "Host: www.google.com\r\n"
347 "Proxy-Connection: keep-alive\r\n"
348 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
349 }; 438 };
350 MockRead reads[] = { 439 MockRead reads[] = {
351 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), 440 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
352 }; 441 };
353 442
354 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0, 443 Initialize(reads, arraysize(reads), writes, arraysize(writes), NULL, 0,
355 NULL, 0); 444 NULL, 0);
356 AddAuthToCache(); 445 AddAuthToCache();
357 446
358 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 447 scoped_ptr<TestProxyDelegate> proxy_delegate(new TestProxyDelegate());
359 &pool_, BoundNetLog()); 448 int rv = handle_.Init("a", CreateTunnelParams(proxy_delegate.get()), LOW,
449 callback_.callback(), &pool_, BoundNetLog());
360 EXPECT_EQ(OK, rv); 450 EXPECT_EQ(OK, rv);
361 EXPECT_TRUE(handle_.is_initialized()); 451 EXPECT_TRUE(handle_.is_initialized());
362 ASSERT_TRUE(handle_.socket()); 452 ASSERT_TRUE(handle_.socket());
363 HttpProxyClientSocket* tunnel_socket = 453 HttpProxyClientSocket* tunnel_socket =
364 static_cast<HttpProxyClientSocket*>(handle_.socket()); 454 static_cast<HttpProxyClientSocket*>(handle_.socket());
365 EXPECT_TRUE(tunnel_socket->IsConnected()); 455 EXPECT_TRUE(tunnel_socket->IsConnected());
456 proxy_delegate->VerifyOnTunnelHeadersReceived(
457 "www.google.com:443",
458 proxy_host_port.c_str(),
459 "HTTP/1.1 200 Connection Established");
366 } 460 }
367 461
368 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { 462 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
369 MockWrite writes[] = { 463 MockWrite writes[] = {
370 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n" 464 MockWrite(ASYNC, 0, "CONNECT www.google.com:443 HTTP/1.1\r\n"
371 "Host: www.google.com\r\n" 465 "Host: www.google.com\r\n"
372 "Proxy-Connection: keep-alive\r\n" 466 "Proxy-Connection: keep-alive\r\n"
373 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 467 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
374 }; 468 };
375 MockRead reads[] = { 469 MockRead reads[] = {
376 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), 470 MockRead(ASYNC, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
377 }; 471 };
378 472
379 scoped_ptr<SpdyFrame> req( 473 scoped_ptr<SpdyFrame> req(
380 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW)); 474 spdy_util_.ConstructSpdyConnect(kAuthHeaders, kAuthHeadersSize, 1, LOW));
381 MockWrite spdy_writes[] = { 475 MockWrite spdy_writes[] = {
382 CreateMockWrite(*req, 0, ASYNC) 476 CreateMockWrite(*req, 0, ASYNC)
383 }; 477 };
384 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 478 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
385 MockRead spdy_reads[] = { 479 MockRead spdy_reads[] = {
386 CreateMockRead(*resp, 1, ASYNC), 480 CreateMockRead(*resp, 1, ASYNC),
387 MockRead(ASYNC, 0, 2) 481 MockRead(ASYNC, 0, 2)
388 }; 482 };
389 483
390 Initialize(reads, arraysize(reads), writes, arraysize(writes), 484 Initialize(reads, arraysize(reads), writes, arraysize(writes),
391 spdy_reads, arraysize(spdy_reads), spdy_writes, 485 spdy_reads, arraysize(spdy_reads), spdy_writes,
392 arraysize(spdy_writes)); 486 arraysize(spdy_writes));
393 AddAuthToCache(); 487 AddAuthToCache();
394 488
395 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 489 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
396 &pool_, BoundNetLog()); 490 callback_.callback(), &pool_, BoundNetLog());
397 EXPECT_EQ(ERR_IO_PENDING, rv); 491 EXPECT_EQ(ERR_IO_PENDING, rv);
398 EXPECT_FALSE(handle_.is_initialized()); 492 EXPECT_FALSE(handle_.is_initialized());
399 EXPECT_FALSE(handle_.socket()); 493 EXPECT_FALSE(handle_.socket());
400 494
401 data_->RunFor(2); 495 data_->RunFor(2);
402 EXPECT_EQ(OK, callback_.WaitForResult()); 496 EXPECT_EQ(OK, callback_.WaitForResult());
403 EXPECT_TRUE(handle_.is_initialized()); 497 EXPECT_TRUE(handle_.is_initialized());
404 ASSERT_TRUE(handle_.socket()); 498 ASSERT_TRUE(handle_.socket());
405 HttpProxyClientSocket* tunnel_socket = 499 HttpProxyClientSocket* tunnel_socket =
406 static_cast<HttpProxyClientSocket*>(handle_.socket()); 500 static_cast<HttpProxyClientSocket*>(handle_.socket());
(...skipping 18 matching lines...) Expand all
425 CreateMockRead(*resp, 1, ASYNC), 519 CreateMockRead(*resp, 1, ASYNC),
426 MockRead(ASYNC, 0, 2) 520 MockRead(ASYNC, 0, 2)
427 }; 521 };
428 522
429 Initialize(NULL, 0, NULL, 0, 523 Initialize(NULL, 0, NULL, 0,
430 spdy_reads, arraysize(spdy_reads), 524 spdy_reads, arraysize(spdy_reads),
431 spdy_writes, arraysize(spdy_writes)); 525 spdy_writes, arraysize(spdy_writes));
432 AddAuthToCache(); 526 AddAuthToCache();
433 527
434 EXPECT_EQ(ERR_IO_PENDING, 528 EXPECT_EQ(ERR_IO_PENDING,
435 handle_.Init("a", CreateTunnelParams(), MEDIUM, 529 handle_.Init("a", CreateTunnelParams(NULL), MEDIUM,
436 callback_.callback(), &pool_, BoundNetLog())); 530 callback_.callback(), &pool_, BoundNetLog()));
437 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority()); 531 EXPECT_EQ(MEDIUM, GetLastTransportRequestPriority());
438 532
439 data_->RunFor(2); 533 data_->RunFor(2);
440 EXPECT_EQ(OK, callback_.WaitForResult()); 534 EXPECT_EQ(OK, callback_.WaitForResult());
441 } 535 }
442 536
443 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { 537 TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
444 if (GetParam().proxy_type == SPDY) return; 538 if (GetParam().proxy_type == SPDY) return;
445 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 539 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
446 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED)); 540 data_->set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_CLOSED));
447 541
448 socket_factory()->AddSocketDataProvider(data_.get()); 542 socket_factory()->AddSocketDataProvider(data_.get());
449 543
450 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 544 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
451 &pool_, BoundNetLog()); 545 callback_.callback(), &pool_, BoundNetLog());
452 EXPECT_EQ(ERR_IO_PENDING, rv); 546 EXPECT_EQ(ERR_IO_PENDING, rv);
453 EXPECT_FALSE(handle_.is_initialized()); 547 EXPECT_FALSE(handle_.is_initialized());
454 EXPECT_FALSE(handle_.socket()); 548 EXPECT_FALSE(handle_.socket());
455 549
456 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); 550 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult());
457 551
458 EXPECT_FALSE(handle_.is_initialized()); 552 EXPECT_FALSE(handle_.is_initialized());
459 EXPECT_FALSE(handle_.socket()); 553 EXPECT_FALSE(handle_.socket());
460 } 554 }
461 555
462 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { 556 TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
463 if (GetParam().proxy_type == HTTP) return; 557 if (GetParam().proxy_type == HTTP) return;
464 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 558 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
465 data_->set_connect_data(MockConnect(ASYNC, OK)); 559 data_->set_connect_data(MockConnect(ASYNC, OK));
466 socket_factory()->AddSocketDataProvider(data_.get()); 560 socket_factory()->AddSocketDataProvider(data_.get());
467 561
468 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, 562 ssl_data_.reset(new SSLSocketDataProvider(ASYNC,
469 ERR_CERT_AUTHORITY_INVALID)); 563 ERR_CERT_AUTHORITY_INVALID));
470 if (GetParam().proxy_type == SPDY) { 564 if (GetParam().proxy_type == SPDY) {
471 InitializeSpdySsl(); 565 InitializeSpdySsl();
472 } 566 }
473 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); 567 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
474 568
475 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 569 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
476 &pool_, BoundNetLog()); 570 callback_.callback(), &pool_, BoundNetLog());
477 EXPECT_EQ(ERR_IO_PENDING, rv); 571 EXPECT_EQ(ERR_IO_PENDING, rv);
478 EXPECT_FALSE(handle_.is_initialized()); 572 EXPECT_FALSE(handle_.is_initialized());
479 EXPECT_FALSE(handle_.socket()); 573 EXPECT_FALSE(handle_.socket());
480 574
481 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); 575 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult());
482 576
483 EXPECT_FALSE(handle_.is_initialized()); 577 EXPECT_FALSE(handle_.is_initialized());
484 EXPECT_FALSE(handle_.socket()); 578 EXPECT_FALSE(handle_.socket());
485 } 579 }
486 580
487 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { 581 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
488 if (GetParam().proxy_type == HTTP) return; 582 if (GetParam().proxy_type == HTTP) return;
489 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0)); 583 data_.reset(new DeterministicSocketData(NULL, 0, NULL, 0));
490 data_->set_connect_data(MockConnect(ASYNC, OK)); 584 data_->set_connect_data(MockConnect(ASYNC, OK));
491 socket_factory()->AddSocketDataProvider(data_.get()); 585 socket_factory()->AddSocketDataProvider(data_.get());
492 586
493 ssl_data_.reset(new SSLSocketDataProvider(ASYNC, 587 ssl_data_.reset(new SSLSocketDataProvider(ASYNC,
494 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); 588 ERR_SSL_CLIENT_AUTH_CERT_NEEDED));
495 if (GetParam().proxy_type == SPDY) { 589 if (GetParam().proxy_type == SPDY) {
496 InitializeSpdySsl(); 590 InitializeSpdySsl();
497 } 591 }
498 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get()); 592 socket_factory()->AddSSLSocketDataProvider(ssl_data_.get());
499 593
500 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 594 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
501 &pool_, BoundNetLog()); 595 callback_.callback(), &pool_, BoundNetLog());
502 EXPECT_EQ(ERR_IO_PENDING, rv); 596 EXPECT_EQ(ERR_IO_PENDING, rv);
503 EXPECT_FALSE(handle_.is_initialized()); 597 EXPECT_FALSE(handle_.is_initialized());
504 EXPECT_FALSE(handle_.socket()); 598 EXPECT_FALSE(handle_.socket());
505 599
506 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); 600 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult());
507 601
508 EXPECT_FALSE(handle_.is_initialized()); 602 EXPECT_FALSE(handle_.is_initialized());
509 EXPECT_FALSE(handle_.socket()); 603 EXPECT_FALSE(handle_.socket());
510 } 604 }
511 605
(...skipping 16 matching lines...) Expand all
528 }; 622 };
529 MockRead spdy_reads[] = { 623 MockRead spdy_reads[] = {
530 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1), 624 MockRead(ASYNC, ERR_CONNECTION_CLOSED, 1),
531 }; 625 };
532 626
533 Initialize(reads, arraysize(reads), writes, arraysize(writes), 627 Initialize(reads, arraysize(reads), writes, arraysize(writes),
534 spdy_reads, arraysize(spdy_reads), spdy_writes, 628 spdy_reads, arraysize(spdy_reads), spdy_writes,
535 arraysize(spdy_writes)); 629 arraysize(spdy_writes));
536 AddAuthToCache(); 630 AddAuthToCache();
537 631
538 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 632 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
539 &pool_, BoundNetLog()); 633 callback_.callback(), &pool_, BoundNetLog());
540 EXPECT_EQ(ERR_IO_PENDING, rv); 634 EXPECT_EQ(ERR_IO_PENDING, rv);
541 EXPECT_FALSE(handle_.is_initialized()); 635 EXPECT_FALSE(handle_.is_initialized());
542 EXPECT_FALSE(handle_.socket()); 636 EXPECT_FALSE(handle_.socket());
543 637
544 data_->RunFor(3); 638 data_->RunFor(3);
545 if (GetParam().proxy_type == SPDY) { 639 if (GetParam().proxy_type == SPDY) {
546 // SPDY cannot process a headers block unless it's complete and so it 640 // SPDY cannot process a headers block unless it's complete and so it
547 // returns ERR_CONNECTION_CLOSED in this case. 641 // returns ERR_CONNECTION_CLOSED in this case.
548 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); 642 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult());
549 } else { 643 } else {
(...skipping 17 matching lines...) Expand all
567 "Proxy-Connection: keep-alive\r\n\r\n"), 661 "Proxy-Connection: keep-alive\r\n\r\n"),
568 }; 662 };
569 MockRead reads[] = { 663 MockRead reads[] = {
570 MockRead(ASYNC, 1, "HTTP/1.1 100 Continue\r\n\r\n"), 664 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"), 665 MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"),
572 }; 666 };
573 667
574 Initialize(reads, arraysize(reads), writes, arraysize(writes), 668 Initialize(reads, arraysize(reads), writes, arraysize(writes),
575 NULL, 0, NULL, 0); 669 NULL, 0, NULL, 0);
576 670
577 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 671 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
578 &pool_, BoundNetLog()); 672 callback_.callback(), &pool_, BoundNetLog());
579 EXPECT_EQ(ERR_IO_PENDING, rv); 673 EXPECT_EQ(ERR_IO_PENDING, rv);
580 EXPECT_FALSE(handle_.is_initialized()); 674 EXPECT_FALSE(handle_.is_initialized());
581 EXPECT_FALSE(handle_.socket()); 675 EXPECT_FALSE(handle_.socket());
582 676
583 data_->RunFor(2); 677 data_->RunFor(2);
584 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult()); 678 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, callback_.WaitForResult());
585 } 679 }
586 680
587 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) { 681 TEST_P(HttpProxyClientSocketPoolTest, TunnelSetupError) {
588 MockWrite writes[] = { 682 MockWrite writes[] = {
(...skipping 18 matching lines...) Expand all
607 MockRead spdy_reads[] = { 701 MockRead spdy_reads[] = {
608 CreateMockRead(*resp, 1, ASYNC), 702 CreateMockRead(*resp, 1, ASYNC),
609 MockRead(ASYNC, 0, 3), 703 MockRead(ASYNC, 0, 3),
610 }; 704 };
611 705
612 Initialize(reads, arraysize(reads), writes, arraysize(writes), 706 Initialize(reads, arraysize(reads), writes, arraysize(writes),
613 spdy_reads, arraysize(spdy_reads), spdy_writes, 707 spdy_reads, arraysize(spdy_reads), spdy_writes,
614 arraysize(spdy_writes)); 708 arraysize(spdy_writes));
615 AddAuthToCache(); 709 AddAuthToCache();
616 710
617 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 711 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
618 &pool_, BoundNetLog()); 712 callback_.callback(), &pool_, BoundNetLog());
619 EXPECT_EQ(ERR_IO_PENDING, rv); 713 EXPECT_EQ(ERR_IO_PENDING, rv);
620 EXPECT_FALSE(handle_.is_initialized()); 714 EXPECT_FALSE(handle_.is_initialized());
621 EXPECT_FALSE(handle_.socket()); 715 EXPECT_FALSE(handle_.socket());
622 716
623 data_->RunFor(2); 717 data_->RunFor(2);
624 718
625 rv = callback_.WaitForResult(); 719 rv = callback_.WaitForResult();
626 // All Proxy CONNECT responses are not trustworthy 720 // All Proxy CONNECT responses are not trustworthy
627 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); 721 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv);
628 EXPECT_FALSE(handle_.is_initialized()); 722 EXPECT_FALSE(handle_.is_initialized());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 MockRead spdy_reads[] = { 763 MockRead spdy_reads[] = {
670 CreateMockRead(*resp, 1, ASYNC), 764 CreateMockRead(*resp, 1, ASYNC),
671 MockRead(ASYNC, 0, 2), 765 MockRead(ASYNC, 0, 2),
672 }; 766 };
673 767
674 Initialize(reads, arraysize(reads), writes, arraysize(writes), 768 Initialize(reads, arraysize(reads), writes, arraysize(writes),
675 spdy_reads, arraysize(spdy_reads), spdy_writes, 769 spdy_reads, arraysize(spdy_reads), spdy_writes,
676 arraysize(spdy_writes)); 770 arraysize(spdy_writes));
677 AddAuthToCache(); 771 AddAuthToCache();
678 772
679 int rv = handle_.Init("a", CreateTunnelParams(), LOW, callback_.callback(), 773 int rv = handle_.Init("a", CreateTunnelParams(NULL), LOW,
680 &pool_, BoundNetLog()); 774 callback_.callback(), &pool_, BoundNetLog());
681 EXPECT_EQ(ERR_IO_PENDING, rv); 775 EXPECT_EQ(ERR_IO_PENDING, rv);
682 EXPECT_FALSE(handle_.is_initialized()); 776 EXPECT_FALSE(handle_.is_initialized());
683 EXPECT_FALSE(handle_.socket()); 777 EXPECT_FALSE(handle_.socket());
684 778
685 data_->RunFor(2); 779 data_->RunFor(2);
686 780
687 rv = callback_.WaitForResult(); 781 rv = callback_.WaitForResult();
688 782
689 if (GetParam().proxy_type == HTTP) { 783 if (GetParam().proxy_type == HTTP) {
690 // We don't trust 302 responses to CONNECT from HTTP proxies. 784 // We don't trust 302 responses to CONNECT from HTTP proxies.
(...skipping 22 matching lines...) Expand all
713 EXPECT_TRUE(headers->IsRedirect(&location)); 807 EXPECT_TRUE(headers->IsRedirect(&location));
714 EXPECT_EQ(location, redirectTarget); 808 EXPECT_EQ(location, redirectTarget);
715 } 809 }
716 } 810 }
717 811
718 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. 812 // It would be nice to also test the timeouts in HttpProxyClientSocketPool.
719 813
720 } // namespace 814 } // namespace
721 815
722 } // namespace net 816 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_proxy_client_socket_pool.cc ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698