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

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

Issue 2432873003: [Merge-54][net/auth] Don't abort network transaction over non-permanent auth errors. (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « net/http/http_auth_controller_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 4049 matching lines...) Expand 10 before | Expand all | Expand 10 after
4060 ASSERT_TRUE(response); 4060 ASSERT_TRUE(response);
4061 ASSERT_TRUE(response->headers); 4061 ASSERT_TRUE(response->headers);
4062 EXPECT_EQ(407, response->headers->response_code()); 4062 EXPECT_EQ(407, response->headers->response_code());
4063 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); 4063 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4064 EXPECT_TRUE(response->auth_challenge); 4064 EXPECT_TRUE(response->auth_challenge);
4065 4065
4066 trans.reset(); 4066 trans.reset();
4067 session->CloseAllConnections(); 4067 session->CloseAllConnections();
4068 } 4068 }
4069 4069
4070 // A more nuanced test than GenerateAuthToken test which asserts that
4071 // ERR_INVALID_AUTH_CREDENTIALS does not cause the auth scheme to be
4072 // unnecessarily invalidated, and that if the server co-operates, the
4073 // authentication handshake can continue with the same scheme but with a
4074 // different identity.
4075 TEST_F(HttpNetworkTransactionTest, NonPermanentGenerateAuthTokenError) {
4076 HttpRequestInfo request;
4077 request.method = "GET";
4078 request.url = GURL("http://www.example.org/");
4079
4080 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory(
4081 new HttpAuthHandlerMock::Factory());
4082 auth_handler_factory->set_do_init_from_challenge(true);
4083
4084 // First handler. Uses default credentials, but barfs at generate auth token.
4085 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock());
4086 mock_handler->set_allows_default_credentials(true);
4087 mock_handler->set_allows_explicit_credentials(true);
4088 mock_handler->set_connection_based(true);
4089 mock_handler->SetGenerateExpectation(true, ERR_INVALID_AUTH_CREDENTIALS);
4090 auth_handler_factory->AddMockHandler(mock_handler.release(),
4091 HttpAuth::AUTH_SERVER);
4092
4093 // Add another handler for the second challenge. It supports default
4094 // credentials, but they shouldn't be used, since they were already tried.
4095 mock_handler.reset(new HttpAuthHandlerMock());
4096 mock_handler->set_allows_default_credentials(true);
4097 mock_handler->set_allows_explicit_credentials(true);
4098 mock_handler->set_connection_based(true);
4099 auth_handler_factory->AddMockHandler(mock_handler.release(),
4100 HttpAuth::AUTH_SERVER);
4101 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory);
4102
4103 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
4104
4105 MockWrite data_writes1[] = {
4106 MockWrite("GET / HTTP/1.1\r\n"
4107 "Host: www.example.org\r\n"
4108 "Connection: keep-alive\r\n\r\n"),
4109 };
4110
4111 MockRead data_reads1[] = {
4112 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4113 "WWW-Authenticate: Mock\r\n"
4114 "Connection: keep-alive\r\n\r\n"),
4115 };
4116
4117 // Identical to data_writes1[]. The AuthHandler encounters a
4118 // ERR_INVALID_AUTH_CREDENTIALS during the GenerateAuthToken stage, so the
4119 // transaction procceds without an authorization header.
4120 MockWrite data_writes2[] = {
4121 MockWrite("GET / HTTP/1.1\r\n"
4122 "Host: www.example.org\r\n"
4123 "Connection: keep-alive\r\n\r\n"),
4124 };
4125
4126 MockRead data_reads2[] = {
4127 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4128 "WWW-Authenticate: Mock\r\n"
4129 "Connection: keep-alive\r\n\r\n"),
4130 };
4131
4132 MockWrite data_writes3[] = {
4133 MockWrite("GET / HTTP/1.1\r\n"
4134 "Host: www.example.org\r\n"
4135 "Connection: keep-alive\r\n"
4136 "Authorization: auth_token\r\n\r\n"),
4137 };
4138
4139 MockRead data_reads3[] = {
4140 MockRead("HTTP/1.1 200 OK\r\n"
4141 "Content-Length: 5\r\n"
4142 "Content-Type: text/plain\r\n"
4143 "Connection: keep-alive\r\n\r\n"
4144 "Hello"),
4145 };
4146
4147 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1),
4148 data_writes1, arraysize(data_writes1));
4149 session_deps_.socket_factory->AddSocketDataProvider(&data1);
4150
4151 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2),
4152 data_writes2, arraysize(data_writes2));
4153 session_deps_.socket_factory->AddSocketDataProvider(&data2);
4154
4155 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3),
4156 data_writes3, arraysize(data_writes3));
4157 session_deps_.socket_factory->AddSocketDataProvider(&data3);
4158
4159 std::unique_ptr<HttpNetworkTransaction> trans(
4160 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4161
4162 TestCompletionCallback callback;
4163 int rv = trans->Start(&request, callback.callback(), NetLogWithSource());
4164 EXPECT_THAT(callback.GetResult(rv), IsOk());
4165
4166 const HttpResponseInfo* response = trans->GetResponseInfo();
4167 ASSERT_TRUE(response);
4168 ASSERT_TRUE(response->headers);
4169 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion());
4170
4171 // The following three tests assert that an authentication challenge was
4172 // received and that the stack is ready to respond to the challenge using
4173 // ambient credentials.
4174 EXPECT_EQ(401, response->headers->response_code());
4175 EXPECT_TRUE(trans->IsReadyToRestartForAuth());
4176 EXPECT_FALSE(response->auth_challenge);
4177
4178 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4179 EXPECT_THAT(callback.GetResult(rv), IsOk());
4180 response = trans->GetResponseInfo();
4181 ASSERT_TRUE(response);
4182 ASSERT_TRUE(response->headers);
4183
4184 // The following three tests assert that an authentication challenge was
4185 // received and that the stack needs explicit credentials before it is ready
4186 // to respond to the challenge.
4187 EXPECT_EQ(401, response->headers->response_code());
4188 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4189 EXPECT_TRUE(response->auth_challenge);
4190
4191 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4192 EXPECT_THAT(callback.GetResult(rv), IsOk());
4193 response = trans->GetResponseInfo();
4194 ASSERT_TRUE(response);
4195 ASSERT_TRUE(response->headers);
4196 EXPECT_EQ(200, response->headers->response_code());
4197
4198 trans.reset();
4199 session->CloseAllConnections();
4200 }
4201
4070 // Test the load timing for HTTPS requests with an HTTP proxy. 4202 // Test the load timing for HTTPS requests with an HTTP proxy.
4071 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { 4203 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) {
4072 HttpRequestInfo request1; 4204 HttpRequestInfo request1;
4073 request1.method = "GET"; 4205 request1.method = "GET";
4074 request1.url = GURL("https://www.example.org/1"); 4206 request1.url = GURL("https://www.example.org/1");
4075 4207
4076 HttpRequestInfo request2; 4208 HttpRequestInfo request2;
4077 request2.method = "GET"; 4209 request2.method = "GET";
4078 request2.url = GURL("https://www.example.org/2"); 4210 request2.url = GURL("https://www.example.org/2");
4079 4211
(...skipping 7260 matching lines...) Expand 10 before | Expand all | Expand 10 after
11340 11472
11341 struct TestConfig { 11473 struct TestConfig {
11342 const char* const proxy_url; 11474 const char* const proxy_url;
11343 AuthTiming proxy_auth_timing; 11475 AuthTiming proxy_auth_timing;
11344 int proxy_auth_rv; 11476 int proxy_auth_rv;
11345 const char* const server_url; 11477 const char* const server_url;
11346 AuthTiming server_auth_timing; 11478 AuthTiming server_auth_timing;
11347 int server_auth_rv; 11479 int server_auth_rv;
11348 int num_auth_rounds; 11480 int num_auth_rounds;
11349 int first_ssl_round; 11481 int first_ssl_round;
11350 TestRound rounds[3]; 11482 TestRound rounds[4];
11351 } test_configs[] = { 11483 } test_configs[] = {
11352 // Non-authenticating HTTP server with a direct connection. 11484 // Non-authenticating HTTP server with a direct connection.
11353 {NULL, 11485 {NULL,
11354 AUTH_NONE, 11486 AUTH_NONE,
11355 OK, 11487 OK,
11356 kServer, 11488 kServer,
11357 AUTH_NONE, 11489 AUTH_NONE,
11358 OK, 11490 OK,
11359 1, 11491 1,
11360 kNoSSL, 11492 kNoSSL,
11361 {TestRound(kGet, kSuccess, OK)}}, 11493 {TestRound(kGet, kSuccess, OK)}},
11362 // Authenticating HTTP server with a direct connection. 11494 // Authenticating HTTP server with a direct connection.
11363 {NULL, 11495 {NULL,
11364 AUTH_NONE, 11496 AUTH_NONE,
11365 OK, 11497 OK,
11366 kServer, 11498 kServer,
11367 AUTH_SYNC, 11499 AUTH_SYNC,
11368 OK, 11500 OK,
11369 2, 11501 2,
11370 kNoSSL, 11502 kNoSSL,
11371 {TestRound(kGet, kServerChallenge, OK), 11503 {TestRound(kGet, kServerChallenge, OK),
11372 TestRound(kGetAuth, kSuccess, OK)}}, 11504 TestRound(kGetAuth, kSuccess, OK)}},
11373 {NULL, 11505 {NULL,
11374 AUTH_NONE, 11506 AUTH_NONE,
11375 OK, 11507 OK,
11376 kServer, 11508 kServer,
11377 AUTH_SYNC, 11509 AUTH_SYNC,
11378 ERR_INVALID_AUTH_CREDENTIALS, 11510 ERR_INVALID_AUTH_CREDENTIALS,
11511 3,
11512 kNoSSL,
11513 {TestRound(kGet, kServerChallenge, OK),
11514 TestRound(kGet, kServerChallenge, OK),
11515 TestRound(kGetAuth, kSuccess, OK)}},
11516 {NULL,
11517 AUTH_NONE,
11518 OK,
11519 kServer,
11520 AUTH_SYNC,
11521 ERR_UNSUPPORTED_AUTH_SCHEME,
11522 2,
11523 kNoSSL,
11524 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11525 {NULL,
11526 AUTH_NONE,
11527 OK,
11528 kServer,
11529 AUTH_SYNC,
11530 ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS,
11531 2,
11532 kNoSSL,
11533 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11534 {kProxy,
11535 AUTH_SYNC,
11536 ERR_FAILED,
11537 kServer,
11538 AUTH_NONE,
11539 OK,
11540 2,
11541 kNoSSL,
11542 {TestRound(kGetProxy, kProxyChallenge, OK),
11543 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11544 {kProxy,
11545 AUTH_ASYNC,
11546 ERR_FAILED,
11547 kServer,
11548 AUTH_NONE,
11549 OK,
11550 2,
11551 kNoSSL,
11552 {TestRound(kGetProxy, kProxyChallenge, OK),
11553 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11554 {NULL,
11555 AUTH_NONE,
11556 OK,
11557 kServer,
11558 AUTH_SYNC,
11559 ERR_FAILED,
11379 2, 11560 2,
11380 kNoSSL, 11561 kNoSSL,
11381 {TestRound(kGet, kServerChallenge, OK), 11562 {TestRound(kGet, kServerChallenge, OK),
11382 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11563 TestRound(kGet, kFailure, ERR_FAILED)}},
11383 {NULL, 11564 {NULL,
11384 AUTH_NONE, 11565 AUTH_NONE,
11385 OK, 11566 OK,
11567 kServer,
11568 AUTH_ASYNC,
11569 ERR_FAILED,
11570 2,
11571 kNoSSL,
11572 {TestRound(kGet, kServerChallenge, OK),
11573 TestRound(kGet, kFailure, ERR_FAILED)}},
11574 {NULL,
11575 AUTH_NONE,
11576 OK,
11386 kServer, 11577 kServer,
11387 AUTH_ASYNC, 11578 AUTH_ASYNC,
11388 OK, 11579 OK,
11389 2, 11580 2,
11390 kNoSSL, 11581 kNoSSL,
11391 {TestRound(kGet, kServerChallenge, OK), 11582 {TestRound(kGet, kServerChallenge, OK),
11392 TestRound(kGetAuth, kSuccess, OK)}}, 11583 TestRound(kGetAuth, kSuccess, OK)}},
11393 {NULL, 11584 {NULL,
11394 AUTH_NONE, 11585 AUTH_NONE,
11395 OK, 11586 OK,
11396 kServer, 11587 kServer,
11397 AUTH_ASYNC, 11588 AUTH_ASYNC,
11398 ERR_INVALID_AUTH_CREDENTIALS, 11589 ERR_INVALID_AUTH_CREDENTIALS,
11399 2, 11590 3,
11400 kNoSSL, 11591 kNoSSL,
11401 {TestRound(kGet, kServerChallenge, OK), 11592 {TestRound(kGet, kServerChallenge, OK),
11402 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11593 // The second round uses a HttpAuthHandlerMock that always succeeds.
11594 TestRound(kGet, kServerChallenge, OK),
11595 TestRound(kGetAuth, kSuccess, OK)}},
11403 // Non-authenticating HTTP server through a non-authenticating proxy. 11596 // Non-authenticating HTTP server through a non-authenticating proxy.
11404 {kProxy, 11597 {kProxy,
11405 AUTH_NONE, 11598 AUTH_NONE,
11406 OK, 11599 OK,
11407 kServer, 11600 kServer,
11408 AUTH_NONE, 11601 AUTH_NONE,
11409 OK, 11602 OK,
11410 1, 11603 1,
11411 kNoSSL, 11604 kNoSSL,
11412 {TestRound(kGetProxy, kSuccess, OK)}}, 11605 {TestRound(kGetProxy, kSuccess, OK)}},
11413 // Authenticating HTTP server through a non-authenticating proxy. 11606 // Authenticating HTTP server through a non-authenticating proxy.
11414 {kProxy, 11607 {kProxy,
11415 AUTH_NONE, 11608 AUTH_NONE,
11416 OK, 11609 OK,
11417 kServer, 11610 kServer,
11418 AUTH_SYNC, 11611 AUTH_SYNC,
11419 OK, 11612 OK,
11420 2, 11613 2,
11421 kNoSSL, 11614 kNoSSL,
11422 {TestRound(kGetProxy, kServerChallenge, OK), 11615 {TestRound(kGetProxy, kServerChallenge, OK),
11423 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11616 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11424 {kProxy, 11617 {kProxy,
11425 AUTH_NONE, 11618 AUTH_NONE,
11426 OK, 11619 OK,
11427 kServer, 11620 kServer,
11428 AUTH_SYNC, 11621 AUTH_SYNC,
11429 ERR_INVALID_AUTH_CREDENTIALS, 11622 ERR_INVALID_AUTH_CREDENTIALS,
11430 2, 11623 3,
11431 kNoSSL, 11624 kNoSSL,
11432 {TestRound(kGetProxy, kServerChallenge, OK), 11625 {TestRound(kGetProxy, kServerChallenge, OK),
11433 TestRound(kGetAuthThroughProxy, kFailure, 11626 TestRound(kGetProxy, kServerChallenge, OK),
11434 ERR_INVALID_AUTH_CREDENTIALS)}}, 11627 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11435 {kProxy, 11628 {kProxy,
11436 AUTH_NONE, 11629 AUTH_NONE,
11437 OK, 11630 OK,
11438 kServer, 11631 kServer,
11439 AUTH_ASYNC, 11632 AUTH_ASYNC,
11440 OK, 11633 OK,
11441 2, 11634 2,
11442 kNoSSL, 11635 kNoSSL,
11443 {TestRound(kGetProxy, kServerChallenge, OK), 11636 {TestRound(kGetProxy, kServerChallenge, OK),
11444 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11637 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11445 {kProxy, 11638 {kProxy,
11446 AUTH_NONE, 11639 AUTH_NONE,
11447 OK, 11640 OK,
11448 kServer, 11641 kServer,
11449 AUTH_ASYNC, 11642 AUTH_ASYNC,
11450 ERR_INVALID_AUTH_CREDENTIALS, 11643 ERR_INVALID_AUTH_CREDENTIALS,
11451 2, 11644 2,
11452 kNoSSL, 11645 kNoSSL,
11453 {TestRound(kGetProxy, kServerChallenge, OK), 11646 {TestRound(kGetProxy, kServerChallenge, OK),
11454 TestRound(kGetAuthThroughProxy, kFailure, 11647 TestRound(kGetProxy, kSuccess, OK)}},
11455 ERR_INVALID_AUTH_CREDENTIALS)}},
11456 // Non-authenticating HTTP server through an authenticating proxy. 11648 // Non-authenticating HTTP server through an authenticating proxy.
11457 {kProxy, 11649 {kProxy,
11458 AUTH_SYNC, 11650 AUTH_SYNC,
11459 OK, 11651 OK,
11460 kServer, 11652 kServer,
11461 AUTH_NONE, 11653 AUTH_NONE,
11462 OK, 11654 OK,
11463 2, 11655 2,
11464 kNoSSL, 11656 kNoSSL,
11465 {TestRound(kGetProxy, kProxyChallenge, OK), 11657 {TestRound(kGetProxy, kProxyChallenge, OK),
11466 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11658 TestRound(kGetProxyAuth, kSuccess, OK)}},
11467 {kProxy, 11659 {kProxy,
11468 AUTH_SYNC, 11660 AUTH_SYNC,
11469 ERR_INVALID_AUTH_CREDENTIALS, 11661 ERR_INVALID_AUTH_CREDENTIALS,
11470 kServer, 11662 kServer,
11471 AUTH_NONE, 11663 AUTH_NONE,
11472 OK, 11664 OK,
11473 2, 11665 2,
11474 kNoSSL, 11666 kNoSSL,
11475 {TestRound(kGetProxy, kProxyChallenge, OK), 11667 {TestRound(kGetProxy, kProxyChallenge, OK),
11476 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11668 TestRound(kGetProxy, kSuccess, OK)}},
11477 {kProxy, 11669 {kProxy,
11478 AUTH_ASYNC, 11670 AUTH_ASYNC,
11479 OK, 11671 OK,
11480 kServer, 11672 kServer,
11481 AUTH_NONE, 11673 AUTH_NONE,
11482 OK, 11674 OK,
11483 2, 11675 2,
11484 kNoSSL, 11676 kNoSSL,
11485 {TestRound(kGetProxy, kProxyChallenge, OK), 11677 {TestRound(kGetProxy, kProxyChallenge, OK),
11486 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11678 TestRound(kGetProxyAuth, kSuccess, OK)}},
11487 {kProxy, 11679 {kProxy,
11488 AUTH_ASYNC, 11680 AUTH_ASYNC,
11489 ERR_INVALID_AUTH_CREDENTIALS, 11681 ERR_INVALID_AUTH_CREDENTIALS,
11490 kServer, 11682 kServer,
11491 AUTH_NONE, 11683 AUTH_NONE,
11492 OK, 11684 OK,
11493 2, 11685 2,
11494 kNoSSL, 11686 kNoSSL,
11495 {TestRound(kGetProxy, kProxyChallenge, OK), 11687 {TestRound(kGetProxy, kProxyChallenge, OK),
11496 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11688 TestRound(kGetProxy, kSuccess, OK)}},
11497 // Authenticating HTTP server through an authenticating proxy. 11689 // Authenticating HTTP server through an authenticating proxy.
11498 {kProxy, 11690 {kProxy,
11499 AUTH_SYNC, 11691 AUTH_SYNC,
11500 OK, 11692 OK,
11501 kServer, 11693 kServer,
11502 AUTH_SYNC, 11694 AUTH_SYNC,
11503 OK, 11695 OK,
11504 3, 11696 3,
11505 kNoSSL, 11697 kNoSSL,
11506 {TestRound(kGetProxy, kProxyChallenge, OK), 11698 {TestRound(kGetProxy, kProxyChallenge, OK),
11507 TestRound(kGetProxyAuth, kServerChallenge, OK), 11699 TestRound(kGetProxyAuth, kServerChallenge, OK),
11508 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11700 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11509 {kProxy, 11701 {kProxy,
11510 AUTH_SYNC, 11702 AUTH_SYNC,
11511 OK, 11703 OK,
11512 kServer, 11704 kServer,
11513 AUTH_SYNC, 11705 AUTH_SYNC,
11514 ERR_INVALID_AUTH_CREDENTIALS, 11706 ERR_INVALID_AUTH_CREDENTIALS,
11515 3, 11707 3,
11516 kNoSSL, 11708 kNoSSL,
11517 {TestRound(kGetProxy, kProxyChallenge, OK), 11709 {TestRound(kGetProxy, kProxyChallenge, OK),
11518 TestRound(kGetProxyAuth, kServerChallenge, OK), 11710 TestRound(kGetProxyAuth, kServerChallenge, OK),
11519 TestRound(kGetAuthWithProxyAuth, kFailure, 11711 TestRound(kGetProxyAuth, kSuccess, OK)}},
11520 ERR_INVALID_AUTH_CREDENTIALS)}},
11521 {kProxy, 11712 {kProxy,
11522 AUTH_ASYNC, 11713 AUTH_ASYNC,
11523 OK, 11714 OK,
11524 kServer, 11715 kServer,
11525 AUTH_SYNC, 11716 AUTH_SYNC,
11526 OK, 11717 OK,
11527 3, 11718 3,
11528 kNoSSL, 11719 kNoSSL,
11529 {TestRound(kGetProxy, kProxyChallenge, OK), 11720 {TestRound(kGetProxy, kProxyChallenge, OK),
11530 TestRound(kGetProxyAuth, kServerChallenge, OK), 11721 TestRound(kGetProxyAuth, kServerChallenge, OK),
11531 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11722 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11532 {kProxy, 11723 {kProxy,
11533 AUTH_ASYNC, 11724 AUTH_ASYNC,
11534 OK, 11725 OK,
11535 kServer, 11726 kServer,
11536 AUTH_SYNC, 11727 AUTH_SYNC,
11537 ERR_INVALID_AUTH_CREDENTIALS, 11728 ERR_INVALID_AUTH_CREDENTIALS,
11538 3, 11729 3,
11539 kNoSSL, 11730 kNoSSL,
11540 {TestRound(kGetProxy, kProxyChallenge, OK), 11731 {TestRound(kGetProxy, kProxyChallenge, OK),
11541 TestRound(kGetProxyAuth, kServerChallenge, OK), 11732 TestRound(kGetProxyAuth, kServerChallenge, OK),
11542 TestRound(kGetAuthWithProxyAuth, kFailure, 11733 TestRound(kGetProxyAuth, kSuccess, OK)}},
11543 ERR_INVALID_AUTH_CREDENTIALS)}},
11544 {kProxy, 11734 {kProxy,
11545 AUTH_SYNC, 11735 AUTH_SYNC,
11546 OK, 11736 OK,
11547 kServer, 11737 kServer,
11548 AUTH_ASYNC, 11738 AUTH_ASYNC,
11549 OK, 11739 OK,
11550 3, 11740 3,
11551 kNoSSL, 11741 kNoSSL,
11552 {TestRound(kGetProxy, kProxyChallenge, OK), 11742 {TestRound(kGetProxy, kProxyChallenge, OK),
11553 TestRound(kGetProxyAuth, kServerChallenge, OK), 11743 TestRound(kGetProxyAuth, kServerChallenge, OK),
11554 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11744 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11555 {kProxy, 11745 {kProxy,
11556 AUTH_SYNC, 11746 AUTH_SYNC,
11557 OK, 11747 OK,
11558 kServer, 11748 kServer,
11559 AUTH_ASYNC, 11749 AUTH_ASYNC,
11560 ERR_INVALID_AUTH_CREDENTIALS, 11750 ERR_INVALID_AUTH_CREDENTIALS,
11561 3, 11751 3,
11562 kNoSSL, 11752 kNoSSL,
11563 {TestRound(kGetProxy, kProxyChallenge, OK), 11753 {TestRound(kGetProxy, kProxyChallenge, OK),
11564 TestRound(kGetProxyAuth, kServerChallenge, OK), 11754 TestRound(kGetProxyAuth, kServerChallenge, OK),
11565 TestRound(kGetAuthWithProxyAuth, kFailure, 11755 TestRound(kGetProxyAuth, kSuccess, OK)}},
11566 ERR_INVALID_AUTH_CREDENTIALS)}},
11567 {kProxy, 11756 {kProxy,
11568 AUTH_ASYNC, 11757 AUTH_ASYNC,
11569 OK, 11758 OK,
11570 kServer, 11759 kServer,
11571 AUTH_ASYNC, 11760 AUTH_ASYNC,
11572 OK, 11761 OK,
11573 3, 11762 3,
11574 kNoSSL, 11763 kNoSSL,
11575 {TestRound(kGetProxy, kProxyChallenge, OK), 11764 {TestRound(kGetProxy, kProxyChallenge, OK),
11576 TestRound(kGetProxyAuth, kServerChallenge, OK), 11765 TestRound(kGetProxyAuth, kServerChallenge, OK),
11577 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11766 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11578 {kProxy, 11767 {kProxy,
11579 AUTH_ASYNC, 11768 AUTH_ASYNC,
11580 OK, 11769 OK,
11581 kServer, 11770 kServer,
11582 AUTH_ASYNC, 11771 AUTH_ASYNC,
11583 ERR_INVALID_AUTH_CREDENTIALS, 11772 ERR_INVALID_AUTH_CREDENTIALS,
11584 3, 11773 3,
11585 kNoSSL, 11774 kNoSSL,
11586 {TestRound(kGetProxy, kProxyChallenge, OK), 11775 {TestRound(kGetProxy, kProxyChallenge, OK),
11587 TestRound(kGetProxyAuth, kServerChallenge, OK), 11776 TestRound(kGetProxyAuth, kServerChallenge, OK),
11588 TestRound(kGetAuthWithProxyAuth, kFailure, 11777 TestRound(kGetProxyAuth, kSuccess, OK)}},
11589 ERR_INVALID_AUTH_CREDENTIALS)}},
11590 // Non-authenticating HTTPS server with a direct connection. 11778 // Non-authenticating HTTPS server with a direct connection.
11591 {NULL, 11779 {NULL,
11592 AUTH_NONE, 11780 AUTH_NONE,
11593 OK, 11781 OK,
11594 kSecureServer, 11782 kSecureServer,
11595 AUTH_NONE, 11783 AUTH_NONE,
11596 OK, 11784 OK,
11597 1, 11785 1,
11598 0, 11786 0,
11599 {TestRound(kGet, kSuccess, OK)}}, 11787 {TestRound(kGet, kSuccess, OK)}},
11600 // Authenticating HTTPS server with a direct connection. 11788 // Authenticating HTTPS server with a direct connection.
11601 {NULL, 11789 {NULL,
11602 AUTH_NONE, 11790 AUTH_NONE,
11603 OK, 11791 OK,
11604 kSecureServer, 11792 kSecureServer,
11605 AUTH_SYNC, 11793 AUTH_SYNC,
11606 OK, 11794 OK,
11607 2, 11795 2,
11608 0, 11796 0,
11609 {TestRound(kGet, kServerChallenge, OK), 11797 {TestRound(kGet, kServerChallenge, OK),
11610 TestRound(kGetAuth, kSuccess, OK)}}, 11798 TestRound(kGetAuth, kSuccess, OK)}},
11611 {NULL, 11799 {NULL,
11612 AUTH_NONE, 11800 AUTH_NONE,
11613 OK, 11801 OK,
11614 kSecureServer, 11802 kSecureServer,
11615 AUTH_SYNC, 11803 AUTH_SYNC,
11616 ERR_INVALID_AUTH_CREDENTIALS, 11804 ERR_INVALID_AUTH_CREDENTIALS,
11617 2, 11805 2,
11618 0, 11806 0,
11619 {TestRound(kGet, kServerChallenge, OK), 11807 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11620 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11621 {NULL, 11808 {NULL,
11622 AUTH_NONE, 11809 AUTH_NONE,
11623 OK, 11810 OK,
11624 kSecureServer, 11811 kSecureServer,
11625 AUTH_ASYNC, 11812 AUTH_ASYNC,
11626 OK, 11813 OK,
11627 2, 11814 2,
11628 0, 11815 0,
11629 {TestRound(kGet, kServerChallenge, OK), 11816 {TestRound(kGet, kServerChallenge, OK),
11630 TestRound(kGetAuth, kSuccess, OK)}}, 11817 TestRound(kGetAuth, kSuccess, OK)}},
11631 {NULL, 11818 {NULL,
11632 AUTH_NONE, 11819 AUTH_NONE,
11633 OK, 11820 OK,
11634 kSecureServer, 11821 kSecureServer,
11635 AUTH_ASYNC, 11822 AUTH_ASYNC,
11636 ERR_INVALID_AUTH_CREDENTIALS, 11823 ERR_INVALID_AUTH_CREDENTIALS,
11637 2, 11824 2,
11638 0, 11825 0,
11639 {TestRound(kGet, kServerChallenge, OK), 11826 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11640 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11641 // Non-authenticating HTTPS server with a non-authenticating proxy. 11827 // Non-authenticating HTTPS server with a non-authenticating proxy.
11642 {kProxy, 11828 {kProxy,
11643 AUTH_NONE, 11829 AUTH_NONE,
11644 OK, 11830 OK,
11645 kSecureServer, 11831 kSecureServer,
11646 AUTH_NONE, 11832 AUTH_NONE,
11647 OK, 11833 OK,
11648 1, 11834 1,
11649 0, 11835 0,
11650 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 11836 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
(...skipping 10 matching lines...) Expand all
11661 TestRound(kGetAuth, kSuccess, OK)}}, 11847 TestRound(kGetAuth, kSuccess, OK)}},
11662 {kProxy, 11848 {kProxy,
11663 AUTH_NONE, 11849 AUTH_NONE,
11664 OK, 11850 OK,
11665 kSecureServer, 11851 kSecureServer,
11666 AUTH_SYNC, 11852 AUTH_SYNC,
11667 ERR_INVALID_AUTH_CREDENTIALS, 11853 ERR_INVALID_AUTH_CREDENTIALS,
11668 2, 11854 2,
11669 0, 11855 0,
11670 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11856 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11671 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11857 TestRound(kGet, kSuccess, OK)}},
11672 {kProxy, 11858 {kProxy,
11673 AUTH_NONE, 11859 AUTH_NONE,
11674 OK, 11860 OK,
11675 kSecureServer, 11861 kSecureServer,
11676 AUTH_ASYNC, 11862 AUTH_ASYNC,
11677 OK, 11863 OK,
11678 2, 11864 2,
11679 0, 11865 0,
11680 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11866 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11681 TestRound(kGetAuth, kSuccess, OK)}}, 11867 TestRound(kGetAuth, kSuccess, OK)}},
11682 {kProxy, 11868 {kProxy,
11683 AUTH_NONE, 11869 AUTH_NONE,
11684 OK, 11870 OK,
11685 kSecureServer, 11871 kSecureServer,
11686 AUTH_ASYNC, 11872 AUTH_ASYNC,
11687 ERR_INVALID_AUTH_CREDENTIALS, 11873 ERR_INVALID_AUTH_CREDENTIALS,
11688 2, 11874 2,
11689 0, 11875 0,
11690 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11876 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11691 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11877 TestRound(kGet, kSuccess, OK)}},
11692 // Non-Authenticating HTTPS server through an authenticating proxy. 11878 // Non-Authenticating HTTPS server through an authenticating proxy.
11693 {kProxy, 11879 {kProxy,
11694 AUTH_SYNC, 11880 AUTH_SYNC,
11695 OK, 11881 OK,
11696 kSecureServer, 11882 kSecureServer,
11697 AUTH_NONE, 11883 AUTH_NONE,
11698 OK, 11884 OK,
11699 2, 11885 2,
11700 1, 11886 1,
11701 {TestRound(kConnect, kProxyChallenge, OK), 11887 {TestRound(kConnect, kProxyChallenge, OK),
11702 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11888 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11703 {kProxy, 11889 {kProxy,
11704 AUTH_SYNC, 11890 AUTH_SYNC,
11705 ERR_INVALID_AUTH_CREDENTIALS, 11891 ERR_INVALID_AUTH_CREDENTIALS,
11706 kSecureServer, 11892 kSecureServer,
11707 AUTH_NONE, 11893 AUTH_NONE,
11708 OK, 11894 OK,
11709 2, 11895 2,
11710 kNoSSL, 11896 kNoSSL,
11711 {TestRound(kConnect, kProxyChallenge, OK), 11897 {TestRound(kConnect, kProxyChallenge, OK),
11712 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11898 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11899 {kProxy,
11900 AUTH_SYNC,
11901 ERR_UNSUPPORTED_AUTH_SCHEME,
11902 kSecureServer,
11903 AUTH_NONE,
11904 OK,
11905 2,
11906 kNoSSL,
11907 {TestRound(kConnect, kProxyChallenge, OK),
11908 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11909 {kProxy,
11910 AUTH_SYNC,
11911 ERR_UNEXPECTED,
11912 kSecureServer,
11913 AUTH_NONE,
11914 OK,
11915 2,
11916 kNoSSL,
11917 {TestRound(kConnect, kProxyChallenge, OK),
11918 TestRound(kConnect, kProxyConnected, ERR_UNEXPECTED)}},
11713 {kProxy, 11919 {kProxy,
11714 AUTH_ASYNC, 11920 AUTH_ASYNC,
11715 OK, 11921 OK,
11716 kSecureServer, 11922 kSecureServer,
11717 AUTH_NONE, 11923 AUTH_NONE,
11718 OK, 11924 OK,
11719 2, 11925 2,
11720 1, 11926 1,
11721 {TestRound(kConnect, kProxyChallenge, OK), 11927 {TestRound(kConnect, kProxyChallenge, OK),
11722 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11928 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11723 {kProxy, 11929 {kProxy,
11724 AUTH_ASYNC, 11930 AUTH_ASYNC,
11725 ERR_INVALID_AUTH_CREDENTIALS, 11931 ERR_INVALID_AUTH_CREDENTIALS,
11726 kSecureServer, 11932 kSecureServer,
11727 AUTH_NONE, 11933 AUTH_NONE,
11728 OK, 11934 OK,
11729 2, 11935 2,
11730 kNoSSL, 11936 kNoSSL,
11731 {TestRound(kConnect, kProxyChallenge, OK), 11937 {TestRound(kConnect, kProxyChallenge, OK),
11732 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11938 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11733 // Authenticating HTTPS server through an authenticating proxy. 11939 // Authenticating HTTPS server through an authenticating proxy.
11734 {kProxy, 11940 {kProxy,
11735 AUTH_SYNC, 11941 AUTH_SYNC,
11736 OK, 11942 OK,
11737 kSecureServer, 11943 kSecureServer,
11738 AUTH_SYNC, 11944 AUTH_SYNC,
11739 OK, 11945 OK,
11740 3, 11946 3,
11741 1, 11947 1,
11742 {TestRound(kConnect, kProxyChallenge, OK), 11948 {TestRound(kConnect, kProxyChallenge, OK),
11743 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11949 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11744 &kServerChallenge), 11950 &kServerChallenge),
11745 TestRound(kGetAuth, kSuccess, OK)}}, 11951 TestRound(kGetAuth, kSuccess, OK)}},
11746 {kProxy, 11952 {kProxy,
11747 AUTH_SYNC, 11953 AUTH_SYNC,
11748 OK, 11954 OK,
11749 kSecureServer, 11955 kSecureServer,
11750 AUTH_SYNC, 11956 AUTH_SYNC,
11751 ERR_INVALID_AUTH_CREDENTIALS, 11957 ERR_INVALID_AUTH_CREDENTIALS,
11752 3, 11958 3,
11753 1, 11959 1,
11754 {TestRound(kConnect, kProxyChallenge, OK), 11960 {TestRound(kConnect, kProxyChallenge, OK),
11755 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11961 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11756 &kServerChallenge), 11962 &kServerChallenge),
11757 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11963 TestRound(kGet, kSuccess, OK)}},
11758 {kProxy, 11964 {kProxy,
11759 AUTH_ASYNC, 11965 AUTH_ASYNC,
11760 OK, 11966 OK,
11761 kSecureServer, 11967 kSecureServer,
11762 AUTH_SYNC, 11968 AUTH_SYNC,
11763 OK, 11969 OK,
11764 3, 11970 3,
11765 1, 11971 1,
11766 {TestRound(kConnect, kProxyChallenge, OK), 11972 {TestRound(kConnect, kProxyChallenge, OK),
11767 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11973 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11768 &kServerChallenge), 11974 &kServerChallenge),
11769 TestRound(kGetAuth, kSuccess, OK)}}, 11975 TestRound(kGetAuth, kSuccess, OK)}},
11770 {kProxy, 11976 {kProxy,
11771 AUTH_ASYNC, 11977 AUTH_ASYNC,
11772 OK, 11978 OK,
11773 kSecureServer, 11979 kSecureServer,
11774 AUTH_SYNC, 11980 AUTH_SYNC,
11775 ERR_INVALID_AUTH_CREDENTIALS, 11981 ERR_INVALID_AUTH_CREDENTIALS,
11776 3, 11982 3,
11777 1, 11983 1,
11778 {TestRound(kConnect, kProxyChallenge, OK), 11984 {TestRound(kConnect, kProxyChallenge, OK),
11779 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11985 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11780 &kServerChallenge), 11986 &kServerChallenge),
11781 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11987 TestRound(kGet, kSuccess, OK)}},
11782 {kProxy, 11988 {kProxy,
11783 AUTH_SYNC, 11989 AUTH_SYNC,
11784 OK, 11990 OK,
11785 kSecureServer, 11991 kSecureServer,
11786 AUTH_ASYNC, 11992 AUTH_ASYNC,
11787 OK, 11993 OK,
11788 3, 11994 3,
11789 1, 11995 1,
11790 {TestRound(kConnect, kProxyChallenge, OK), 11996 {TestRound(kConnect, kProxyChallenge, OK),
11791 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11997 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11792 &kServerChallenge), 11998 &kServerChallenge),
11793 TestRound(kGetAuth, kSuccess, OK)}}, 11999 TestRound(kGetAuth, kSuccess, OK)}},
11794 {kProxy, 12000 {kProxy,
11795 AUTH_SYNC, 12001 AUTH_SYNC,
11796 OK, 12002 OK,
11797 kSecureServer, 12003 kSecureServer,
11798 AUTH_ASYNC, 12004 AUTH_ASYNC,
11799 ERR_INVALID_AUTH_CREDENTIALS, 12005 ERR_INVALID_AUTH_CREDENTIALS,
11800 3, 12006 3,
11801 1, 12007 1,
11802 {TestRound(kConnect, kProxyChallenge, OK), 12008 {TestRound(kConnect, kProxyChallenge, OK),
11803 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12009 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11804 &kServerChallenge), 12010 &kServerChallenge),
11805 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12011 TestRound(kGet, kSuccess, OK)}},
11806 {kProxy, 12012 {kProxy,
11807 AUTH_ASYNC, 12013 AUTH_ASYNC,
11808 OK, 12014 OK,
11809 kSecureServer, 12015 kSecureServer,
11810 AUTH_ASYNC, 12016 AUTH_ASYNC,
11811 OK, 12017 OK,
11812 3, 12018 3,
11813 1, 12019 1,
11814 {TestRound(kConnect, kProxyChallenge, OK), 12020 {TestRound(kConnect, kProxyChallenge, OK),
11815 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12021 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11816 &kServerChallenge), 12022 &kServerChallenge),
11817 TestRound(kGetAuth, kSuccess, OK)}}, 12023 TestRound(kGetAuth, kSuccess, OK)}},
11818 {kProxy, 12024 {kProxy,
11819 AUTH_ASYNC, 12025 AUTH_ASYNC,
11820 OK, 12026 OK,
11821 kSecureServer, 12027 kSecureServer,
11822 AUTH_ASYNC, 12028 AUTH_ASYNC,
11823 ERR_INVALID_AUTH_CREDENTIALS, 12029 ERR_INVALID_AUTH_CREDENTIALS,
11824 3, 12030 3,
11825 1, 12031 1,
11826 {TestRound(kConnect, kProxyChallenge, OK), 12032 {TestRound(kConnect, kProxyChallenge, OK),
11827 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12033 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11828 &kServerChallenge), 12034 &kServerChallenge),
11829 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12035 TestRound(kGet, kSuccess, OK)}},
11830 }; 12036 };
11831 12037
11832 for (size_t i = 0; i < arraysize(test_configs); ++i) { 12038 for (size_t i = 0; i < arraysize(test_configs); ++i) {
12039 SCOPED_TRACE(::testing::Message() << "Test config " << i);
11833 HttpAuthHandlerMock::Factory* auth_factory( 12040 HttpAuthHandlerMock::Factory* auth_factory(
11834 new HttpAuthHandlerMock::Factory()); 12041 new HttpAuthHandlerMock::Factory());
11835 session_deps_.http_auth_handler_factory.reset(auth_factory); 12042 session_deps_.http_auth_handler_factory.reset(auth_factory);
11836 SSLInfo empty_ssl_info; 12043 SSLInfo empty_ssl_info;
11837 const TestConfig& test_config = test_configs[i]; 12044 const TestConfig& test_config = test_configs[i];
11838 12045
11839 // Set up authentication handlers as necessary. 12046 // Set up authentication handlers as necessary.
11840 if (test_config.proxy_auth_timing != AUTH_NONE) { 12047 if (test_config.proxy_auth_timing != AUTH_NONE) {
11841 for (int n = 0; n < 2; n++) { 12048 for (int n = 0; n < 2; n++) {
11842 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); 12049 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock());
(...skipping 14 matching lines...) Expand all
11857 std::string auth_challenge = "Mock realm=server"; 12064 std::string auth_challenge = "Mock realm=server";
11858 GURL origin(test_config.server_url); 12065 GURL origin(test_config.server_url);
11859 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), 12066 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(),
11860 auth_challenge.end()); 12067 auth_challenge.end());
11861 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, 12068 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
11862 empty_ssl_info, origin, BoundNetLog()); 12069 empty_ssl_info, origin, BoundNetLog());
11863 auth_handler->SetGenerateExpectation( 12070 auth_handler->SetGenerateExpectation(
11864 test_config.server_auth_timing == AUTH_ASYNC, 12071 test_config.server_auth_timing == AUTH_ASYNC,
11865 test_config.server_auth_rv); 12072 test_config.server_auth_rv);
11866 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); 12073 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER);
12074
12075 // The second handler always succeeds. It should only be used where there
12076 // are multiple auth sessions for server auth in the same network
12077 // transaction using the same auth scheme.
12078 std::unique_ptr<HttpAuthHandlerMock> second_handler =
12079 base::MakeUnique<HttpAuthHandlerMock>();
12080 second_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
12081 empty_ssl_info, origin,
12082 NetLogWithSource());
12083 second_handler->SetGenerateExpectation(true, OK);
12084 auth_factory->AddMockHandler(second_handler.release(),
12085 HttpAuth::AUTH_SERVER);
11867 } 12086 }
11868 if (test_config.proxy_url) { 12087 if (test_config.proxy_url) {
11869 session_deps_.proxy_service = 12088 session_deps_.proxy_service =
11870 ProxyService::CreateFixed(test_config.proxy_url); 12089 ProxyService::CreateFixed(test_config.proxy_url);
11871 } else { 12090 } else {
11872 session_deps_.proxy_service = ProxyService::CreateDirect(); 12091 session_deps_.proxy_service = ProxyService::CreateDirect();
11873 } 12092 }
11874 12093
11875 HttpRequestInfo request; 12094 HttpRequestInfo request;
11876 request.method = "GET"; 12095 request.method = "GET";
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
11931 if (round == 0) { 12150 if (round == 0) {
11932 rv = trans.Start(&request, callback.callback(), BoundNetLog()); 12151 rv = trans.Start(&request, callback.callback(), BoundNetLog());
11933 } else { 12152 } else {
11934 rv = trans.RestartWithAuth( 12153 rv = trans.RestartWithAuth(
11935 AuthCredentials(kFoo, kBar), callback.callback()); 12154 AuthCredentials(kFoo, kBar), callback.callback());
11936 } 12155 }
11937 if (rv == ERR_IO_PENDING) 12156 if (rv == ERR_IO_PENDING)
11938 rv = callback.WaitForResult(); 12157 rv = callback.WaitForResult();
11939 12158
11940 // Compare results with expected data. 12159 // Compare results with expected data.
11941 EXPECT_EQ(read_write_round.expected_rv, rv); 12160 EXPECT_THAT(rv, IsError(read_write_round.expected_rv));
11942 const HttpResponseInfo* response = trans.GetResponseInfo(); 12161 const HttpResponseInfo* response = trans.GetResponseInfo();
11943 if (read_write_round.expected_rv != OK) { 12162 if (read_write_round.expected_rv != OK) {
11944 EXPECT_EQ(round + 1, test_config.num_auth_rounds); 12163 EXPECT_EQ(round + 1, test_config.num_auth_rounds);
11945 continue; 12164 continue;
11946 } 12165 }
11947 if (round + 1 < test_config.num_auth_rounds) { 12166 if (round + 1 < test_config.num_auth_rounds) {
11948 EXPECT_TRUE(response->auth_challenge); 12167 EXPECT_TRUE(response->auth_challenge);
11949 } else { 12168 } else {
11950 EXPECT_FALSE(response->auth_challenge); 12169 EXPECT_FALSE(response->auth_challenge);
12170 EXPECT_FALSE(trans.IsReadyToRestartForAuth());
11951 } 12171 }
11952 } 12172 }
11953 } 12173 }
11954 } 12174 }
11955 12175
11956 TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) { 12176 TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) {
11957 // Do multi-round authentication and make sure it works correctly. 12177 // Do multi-round authentication and make sure it works correctly.
11958 HttpAuthHandlerMock::Factory* auth_factory( 12178 HttpAuthHandlerMock::Factory* auth_factory(
11959 new HttpAuthHandlerMock::Factory()); 12179 new HttpAuthHandlerMock::Factory());
11960 session_deps_.http_auth_handler_factory.reset(auth_factory); 12180 session_deps_.http_auth_handler_factory.reset(auth_factory);
(...skipping 3873 matching lines...) Expand 10 before | Expand all | Expand 10 after
15834 base::RunLoop().RunUntilIdle(); 16054 base::RunLoop().RunUntilIdle();
15835 16055
15836 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 16056 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15837 HttpRequestHeaders headers; 16057 HttpRequestHeaders headers;
15838 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 16058 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15839 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 16059 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15840 } 16060 }
15841 #endif // !defined(OS_IOS) 16061 #endif // !defined(OS_IOS)
15842 16062
15843 } // namespace net 16063 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_auth_controller_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698