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

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

Issue 8898036: base::Bind: Convert proxy_resolving_client_socket.[cc,h] and deps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; 209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_;
210 HttpServerPropertiesImpl http_server_properties_; 210 HttpServerPropertiesImpl http_server_properties_;
211 const scoped_refptr<HttpNetworkSession> session_; 211 const scoped_refptr<HttpNetworkSession> session_;
212 ClientSocketPoolHistograms http_proxy_histograms_; 212 ClientSocketPoolHistograms http_proxy_histograms_;
213 213
214 protected: 214 protected:
215 scoped_ptr<SSLSocketDataProvider> ssl_data_; 215 scoped_ptr<SSLSocketDataProvider> ssl_data_;
216 scoped_refptr<DeterministicSocketData> data_; 216 scoped_refptr<DeterministicSocketData> data_;
217 HttpProxyClientSocketPool pool_; 217 HttpProxyClientSocketPool pool_;
218 ClientSocketHandle handle_; 218 ClientSocketHandle handle_;
219 TestOldCompletionCallback callback_; 219 TestCompletionCallback callback_;
220 }; 220 };
221 221
222 //----------------------------------------------------------------------------- 222 //-----------------------------------------------------------------------------
223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) 223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY)
224 // and SPDY. 224 // and SPDY.
225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, 225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests,
226 HttpProxyClientSocketPoolTest, 226 HttpProxyClientSocketPoolTest,
227 ::testing::Values(HTTP, HTTPS, SPDY)); 227 ::testing::Values(HTTP, HTTPS, SPDY));
228 228
229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { 229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) {
230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0); 230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0);
231 231
232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, NULL, &pool_, 232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, CompletionCallback(),
233 BoundNetLog()); 233 &pool_, BoundNetLog());
234 EXPECT_EQ(OK, rv); 234 EXPECT_EQ(OK, rv);
235 EXPECT_TRUE(handle_.is_initialized()); 235 EXPECT_TRUE(handle_.is_initialized());
236 ASSERT_TRUE(handle_.socket()); 236 ASSERT_TRUE(handle_.socket());
237 HttpProxyClientSocket* tunnel_socket = 237 HttpProxyClientSocket* tunnel_socket =
238 static_cast<HttpProxyClientSocket*>(handle_.socket()); 238 static_cast<HttpProxyClientSocket*>(handle_.socket());
239 EXPECT_TRUE(tunnel_socket->IsConnected()); 239 EXPECT_TRUE(tunnel_socket->IsConnected());
240 } 240 }
241 241
242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { 242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) {
243 MockWrite writes[] = { 243 MockWrite writes[] = {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 MockRead spdy_reads[] = { 277 MockRead spdy_reads[] = {
278 CreateMockWrite(*resp, 1, true), 278 CreateMockWrite(*resp, 1, true),
279 MockRead(true, 0, 3) 279 MockRead(true, 0, 3)
280 }; 280 };
281 281
282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), 282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
283 spdy_reads, arraysize(spdy_reads), spdy_writes, 283 spdy_reads, arraysize(spdy_reads), spdy_writes,
284 arraysize(spdy_writes)); 284 arraysize(spdy_writes));
285 285
286 data_->StopAfter(4); 286 data_->StopAfter(4);
287 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 287 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
288 BoundNetLog()); 288 &pool_, BoundNetLog());
289 EXPECT_EQ(ERR_IO_PENDING, rv); 289 EXPECT_EQ(ERR_IO_PENDING, rv);
290 EXPECT_FALSE(handle_.is_initialized()); 290 EXPECT_FALSE(handle_.is_initialized());
291 EXPECT_FALSE(handle_.socket()); 291 EXPECT_FALSE(handle_.socket());
292 292
293 data_->RunFor(GetParam() == SPDY ? 2 : 4); 293 data_->RunFor(GetParam() == SPDY ? 2 : 4);
294 rv = callback_.WaitForResult(); 294 rv = callback_.WaitForResult();
295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); 295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv);
296 EXPECT_TRUE(handle_.is_initialized()); 296 EXPECT_TRUE(handle_.is_initialized());
297 ASSERT_TRUE(handle_.socket()); 297 ASSERT_TRUE(handle_.socket());
298 if (GetParam() != SPDY) { 298 if (GetParam() != SPDY) {
299 HttpProxyClientSocket* tunnel_socket = 299 HttpProxyClientSocket* tunnel_socket =
300 static_cast<HttpProxyClientSocket*>(handle_.socket()); 300 static_cast<HttpProxyClientSocket*>(handle_.socket());
301 EXPECT_FALSE(tunnel_socket->IsConnected()); 301 EXPECT_FALSE(tunnel_socket->IsConnected());
302 EXPECT_FALSE(tunnel_socket->using_spdy()); 302 EXPECT_FALSE(tunnel_socket->using_spdy());
303 } 303 }
304 } 304 }
305 305
306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { 306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) {
307 // It's pretty much impossible to make the SPDY case becave synchronously 307 // It's pretty much impossible to make the SPDY case behave synchronously
308 // so we skip this test for SPDY 308 // so we skip this test for SPDY
309 if (GetParam() == SPDY) 309 if (GetParam() == SPDY)
310 return; 310 return;
311 MockWrite writes[] = { 311 MockWrite writes[] = {
312 MockWrite(false, 0, 312 MockWrite(false, 0,
313 "CONNECT www.google.com:443 HTTP/1.1\r\n" 313 "CONNECT www.google.com:443 HTTP/1.1\r\n"
314 "Host: www.google.com\r\n" 314 "Host: www.google.com\r\n"
315 "Proxy-Connection: keep-alive\r\n" 315 "Proxy-Connection: keep-alive\r\n"
316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), 316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"),
317 }; 317 };
318 MockRead reads[] = { 318 MockRead reads[] = {
319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), 319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"),
320 }; 320 };
321 321
322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0, 322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0,
323 NULL, 0); 323 NULL, 0);
324 AddAuthToCache(); 324 AddAuthToCache();
325 325
326 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 326 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
327 BoundNetLog()); 327 &pool_, BoundNetLog());
328 EXPECT_EQ(OK, rv); 328 EXPECT_EQ(OK, rv);
329 EXPECT_TRUE(handle_.is_initialized()); 329 EXPECT_TRUE(handle_.is_initialized());
330 ASSERT_TRUE(handle_.socket()); 330 ASSERT_TRUE(handle_.socket());
331 HttpProxyClientSocket* tunnel_socket = 331 HttpProxyClientSocket* tunnel_socket =
332 static_cast<HttpProxyClientSocket*>(handle_.socket()); 332 static_cast<HttpProxyClientSocket*>(handle_.socket());
333 EXPECT_TRUE(tunnel_socket->IsConnected()); 333 EXPECT_TRUE(tunnel_socket->IsConnected());
334 } 334 }
335 335
336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { 336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) {
337 MockWrite writes[] = { 337 MockWrite writes[] = {
(...skipping 15 matching lines...) Expand all
353 MockRead spdy_reads[] = { 353 MockRead spdy_reads[] = {
354 CreateMockRead(*resp, 1, true), 354 CreateMockRead(*resp, 1, true),
355 MockRead(true, 0, 2) 355 MockRead(true, 0, 2)
356 }; 356 };
357 357
358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), 358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
359 spdy_reads, arraysize(spdy_reads), spdy_writes, 359 spdy_reads, arraysize(spdy_reads), spdy_writes,
360 arraysize(spdy_writes)); 360 arraysize(spdy_writes));
361 AddAuthToCache(); 361 AddAuthToCache();
362 362
363 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 363 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
364 BoundNetLog()); 364 &pool_, BoundNetLog());
365 EXPECT_EQ(ERR_IO_PENDING, rv); 365 EXPECT_EQ(ERR_IO_PENDING, rv);
366 EXPECT_FALSE(handle_.is_initialized()); 366 EXPECT_FALSE(handle_.is_initialized());
367 EXPECT_FALSE(handle_.socket()); 367 EXPECT_FALSE(handle_.socket());
368 368
369 data_->RunFor(2); 369 data_->RunFor(2);
370 EXPECT_EQ(OK, callback_.WaitForResult()); 370 EXPECT_EQ(OK, callback_.WaitForResult());
371 EXPECT_TRUE(handle_.is_initialized()); 371 EXPECT_TRUE(handle_.is_initialized());
372 ASSERT_TRUE(handle_.socket()); 372 ASSERT_TRUE(handle_.socket());
373 HttpProxyClientSocket* tunnel_socket = 373 HttpProxyClientSocket* tunnel_socket =
374 static_cast<HttpProxyClientSocket*>(handle_.socket()); 374 static_cast<HttpProxyClientSocket*>(handle_.socket());
375 EXPECT_TRUE(tunnel_socket->IsConnected()); 375 EXPECT_TRUE(tunnel_socket->IsConnected());
376 } 376 }
377 377
378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { 378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) {
379 if (GetParam() == SPDY) return; 379 if (GetParam() == SPDY) return;
380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); 380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); 381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED));
382 382
383 socket_factory().AddSocketDataProvider(data_.get()); 383 socket_factory().AddSocketDataProvider(data_.get());
384 384
385 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 385 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
386 BoundNetLog()); 386 &pool_, BoundNetLog());
387 EXPECT_EQ(ERR_IO_PENDING, rv); 387 EXPECT_EQ(ERR_IO_PENDING, rv);
388 EXPECT_FALSE(handle_.is_initialized()); 388 EXPECT_FALSE(handle_.is_initialized());
389 EXPECT_FALSE(handle_.socket()); 389 EXPECT_FALSE(handle_.socket());
390 390
391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); 391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult());
392 392
393 EXPECT_FALSE(handle_.is_initialized()); 393 EXPECT_FALSE(handle_.is_initialized());
394 EXPECT_FALSE(handle_.socket()); 394 EXPECT_FALSE(handle_.socket());
395 } 395 }
396 396
397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { 397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) {
398 if (GetParam() == HTTP) return; 398 if (GetParam() == HTTP) return;
399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); 399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
400 data_->set_connect_data(MockConnect(true, OK)); 400 data_->set_connect_data(MockConnect(true, OK));
401 socket_factory().AddSocketDataProvider(data_.get()); 401 socket_factory().AddSocketDataProvider(data_.get());
402 402
403 ssl_data_.reset(new SSLSocketDataProvider(true, 403 ssl_data_.reset(new SSLSocketDataProvider(true,
404 ERR_CERT_AUTHORITY_INVALID)); 404 ERR_CERT_AUTHORITY_INVALID));
405 if (GetParam() == SPDY) { 405 if (GetParam() == SPDY) {
406 InitializeSpdySsl(); 406 InitializeSpdySsl();
407 } 407 }
408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); 408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get());
409 409
410 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 410 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
411 BoundNetLog()); 411 &pool_, BoundNetLog());
412 EXPECT_EQ(ERR_IO_PENDING, rv); 412 EXPECT_EQ(ERR_IO_PENDING, rv);
413 EXPECT_FALSE(handle_.is_initialized()); 413 EXPECT_FALSE(handle_.is_initialized());
414 EXPECT_FALSE(handle_.socket()); 414 EXPECT_FALSE(handle_.socket());
415 415
416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); 416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult());
417 417
418 EXPECT_FALSE(handle_.is_initialized()); 418 EXPECT_FALSE(handle_.is_initialized());
419 EXPECT_FALSE(handle_.socket()); 419 EXPECT_FALSE(handle_.socket());
420 } 420 }
421 421
422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { 422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) {
423 if (GetParam() == HTTP) return; 423 if (GetParam() == HTTP) return;
424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); 424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0);
425 data_->set_connect_data(MockConnect(true, OK)); 425 data_->set_connect_data(MockConnect(true, OK));
426 socket_factory().AddSocketDataProvider(data_.get()); 426 socket_factory().AddSocketDataProvider(data_.get());
427 427
428 ssl_data_.reset(new SSLSocketDataProvider(true, 428 ssl_data_.reset(new SSLSocketDataProvider(true,
429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); 429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED));
430 if (GetParam() == SPDY) { 430 if (GetParam() == SPDY) {
431 InitializeSpdySsl(); 431 InitializeSpdySsl();
432 } 432 }
433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); 433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get());
434 434
435 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 435 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
436 BoundNetLog()); 436 &pool_, BoundNetLog());
437 EXPECT_EQ(ERR_IO_PENDING, rv); 437 EXPECT_EQ(ERR_IO_PENDING, rv);
438 EXPECT_FALSE(handle_.is_initialized()); 438 EXPECT_FALSE(handle_.is_initialized());
439 EXPECT_FALSE(handle_.socket()); 439 EXPECT_FALSE(handle_.socket());
440 440
441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); 441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult());
442 442
443 EXPECT_FALSE(handle_.is_initialized()); 443 EXPECT_FALSE(handle_.is_initialized());
444 EXPECT_FALSE(handle_.socket()); 444 EXPECT_FALSE(handle_.socket());
445 } 445 }
446 446
(...skipping 16 matching lines...) Expand all
463 }; 463 };
464 MockRead spdy_reads[] = { 464 MockRead spdy_reads[] = {
465 MockRead(true, ERR_CONNECTION_CLOSED, 1), 465 MockRead(true, ERR_CONNECTION_CLOSED, 1),
466 }; 466 };
467 467
468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), 468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
469 spdy_reads, arraysize(spdy_reads), spdy_writes, 469 spdy_reads, arraysize(spdy_reads), spdy_writes,
470 arraysize(spdy_writes)); 470 arraysize(spdy_writes));
471 AddAuthToCache(); 471 AddAuthToCache();
472 472
473 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 473 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
474 BoundNetLog()); 474 &pool_, BoundNetLog());
475 EXPECT_EQ(ERR_IO_PENDING, rv); 475 EXPECT_EQ(ERR_IO_PENDING, rv);
476 EXPECT_FALSE(handle_.is_initialized()); 476 EXPECT_FALSE(handle_.is_initialized());
477 EXPECT_FALSE(handle_.socket()); 477 EXPECT_FALSE(handle_.socket());
478 478
479 data_->RunFor(3); 479 data_->RunFor(3);
480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); 480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult());
481 EXPECT_FALSE(handle_.is_initialized()); 481 EXPECT_FALSE(handle_.is_initialized());
482 EXPECT_FALSE(handle_.socket()); 482 EXPECT_FALSE(handle_.socket());
483 } 483 }
484 484
(...skipping 19 matching lines...) Expand all
504 MockRead spdy_reads[] = { 504 MockRead spdy_reads[] = {
505 CreateMockRead(*resp, 1, true), 505 CreateMockRead(*resp, 1, true),
506 MockRead(true, 0, 3), 506 MockRead(true, 0, 3),
507 }; 507 };
508 508
509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), 509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes),
510 spdy_reads, arraysize(spdy_reads), spdy_writes, 510 spdy_reads, arraysize(spdy_reads), spdy_writes,
511 arraysize(spdy_writes)); 511 arraysize(spdy_writes));
512 AddAuthToCache(); 512 AddAuthToCache();
513 513
514 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, 514 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(),
515 BoundNetLog()); 515 &pool_, BoundNetLog());
516 EXPECT_EQ(ERR_IO_PENDING, rv); 516 EXPECT_EQ(ERR_IO_PENDING, rv);
517 EXPECT_FALSE(handle_.is_initialized()); 517 EXPECT_FALSE(handle_.is_initialized());
518 EXPECT_FALSE(handle_.socket()); 518 EXPECT_FALSE(handle_.socket());
519 519
520 data_->RunFor(2); 520 data_->RunFor(2);
521 521
522 rv = callback_.WaitForResult(); 522 rv = callback_.WaitForResult();
523 if (GetParam() == HTTP) { 523 if (GetParam() == HTTP) {
524 // HTTP Proxy CONNECT responses are not trustworthy 524 // HTTP Proxy CONNECT responses are not trustworthy
525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); 525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv);
526 EXPECT_FALSE(handle_.is_initialized()); 526 EXPECT_FALSE(handle_.is_initialized());
527 EXPECT_FALSE(handle_.socket()); 527 EXPECT_FALSE(handle_.socket());
528 } else { 528 } else {
529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy 529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy
530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); 530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv);
531 EXPECT_TRUE(handle_.is_initialized()); 531 EXPECT_TRUE(handle_.is_initialized());
532 EXPECT_TRUE(handle_.socket()); 532 EXPECT_TRUE(handle_.socket());
533 } 533 }
534 } 534 }
535 535
536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. 536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool.
537 537
538 } // namespace net 538 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698