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

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

Issue 2382293004: [net/auth] Don't abort network transaction over non-permanent auth errors. (Closed)
Patch Set: Moar tests. 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 4118 matching lines...) Expand 10 before | Expand all | Expand 10 after
4129 ASSERT_TRUE(response); 4129 ASSERT_TRUE(response);
4130 ASSERT_TRUE(response->headers); 4130 ASSERT_TRUE(response->headers);
4131 EXPECT_EQ(407, response->headers->response_code()); 4131 EXPECT_EQ(407, response->headers->response_code());
4132 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); 4132 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4133 EXPECT_TRUE(response->auth_challenge); 4133 EXPECT_TRUE(response->auth_challenge);
4134 4134
4135 trans.reset(); 4135 trans.reset();
4136 session->CloseAllConnections(); 4136 session->CloseAllConnections();
4137 } 4137 }
4138 4138
4139 // A more nuanced test than GenerateAuthToken test which asserts that
4140 // ERR_INVALID_AUTH_CREDENTIALS does not cause the auth scheme to be
4141 // unnecessarily invalidated, and that if the server co-operates, the
4142 // authentication handshake can continue with the same scheme but with a
4143 // different identity.
4144 TEST_F(HttpNetworkTransactionTest, NonPermanentGenerateAuthTokenError) {
4145 HttpRequestInfo request;
4146 request.method = "GET";
4147 request.url = GURL("http://www.example.org/");
4148
4149 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory(
4150 new HttpAuthHandlerMock::Factory());
4151 auth_handler_factory->set_do_init_from_challenge(true);
4152
4153 // First handler. Uses default credentials, but barfs at generate auth token.
4154 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock());
4155 mock_handler->set_allows_default_credentials(true);
4156 mock_handler->set_allows_explicit_credentials(true);
4157 mock_handler->set_connection_based(true);
4158 mock_handler->SetGenerateExpectation(true, ERR_INVALID_AUTH_CREDENTIALS);
4159 auth_handler_factory->AddMockHandler(mock_handler.release(),
4160 HttpAuth::AUTH_SERVER);
4161
4162 // Add another handler for the second challenge. It supports default
4163 // credentials, but they shouldn't be used, since they were already tried.
4164 mock_handler.reset(new HttpAuthHandlerMock());
4165 mock_handler->set_allows_default_credentials(true);
4166 mock_handler->set_allows_explicit_credentials(true);
4167 mock_handler->set_connection_based(true);
4168 auth_handler_factory->AddMockHandler(mock_handler.release(),
4169 HttpAuth::AUTH_SERVER);
4170 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory);
4171
4172 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
4173
4174 MockWrite data_writes1[] = {
4175 MockWrite("GET / HTTP/1.1\r\n"
4176 "Host: www.example.org\r\n"
4177 "Connection: keep-alive\r\n\r\n"),
4178 };
4179
4180 MockRead data_reads1[] = {
4181 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4182 "WWW-Authenticate: Mock\r\n"
4183 "Connection: keep-alive\r\n\r\n"),
4184 };
4185
4186 // Identical to data_writes1[]. The AuthHandler encounters a
4187 // ERR_INVALID_AUTH_CREDENTIALS during the GenerateAuthToken stage, so the
4188 // transaction procceds without an authorization header.
4189 MockWrite data_writes2[] = {
4190 MockWrite("GET / HTTP/1.1\r\n"
4191 "Host: www.example.org\r\n"
4192 "Connection: keep-alive\r\n\r\n"),
4193 };
4194
4195 MockRead data_reads2[] = {
4196 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4197 "WWW-Authenticate: Mock\r\n"
4198 "Connection: keep-alive\r\n\r\n"),
4199 };
4200
4201 MockWrite data_writes3[] = {
4202 MockWrite("GET / HTTP/1.1\r\n"
4203 "Host: www.example.org\r\n"
4204 "Connection: keep-alive\r\n"
4205 "Authorization: auth_token\r\n\r\n"),
4206 };
4207
4208 MockRead data_reads3[] = {
4209 MockRead("HTTP/1.1 200 OK\r\n"
4210 "Content-Length: 5\r\n"
4211 "Content-Type: text/plain\r\n"
4212 "Connection: keep-alive\r\n\r\n"
4213 "Hello"),
4214 };
4215
4216 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1),
4217 data_writes1, arraysize(data_writes1));
4218 session_deps_.socket_factory->AddSocketDataProvider(&data1);
4219
4220 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2),
4221 data_writes2, arraysize(data_writes2));
4222 session_deps_.socket_factory->AddSocketDataProvider(&data2);
4223
4224 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3),
4225 data_writes3, arraysize(data_writes3));
4226 session_deps_.socket_factory->AddSocketDataProvider(&data3);
4227
4228 std::unique_ptr<HttpNetworkTransaction> trans(
4229 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4230
4231 TestCompletionCallback callback;
4232 int rv = trans->Start(&request, callback.callback(), NetLogWithSource());
4233 EXPECT_THAT(callback.GetResult(rv), IsOk());
4234
4235 const HttpResponseInfo* response = trans->GetResponseInfo();
4236 ASSERT_TRUE(response);
4237 ASSERT_TRUE(response->headers);
4238 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion());
4239
4240 // The following three tests assert that an authentication challenge was
4241 // received and that the stack is ready to respond to the challenge using
4242 // ambient credentials.
4243 EXPECT_EQ(401, response->headers->response_code());
4244 EXPECT_TRUE(trans->IsReadyToRestartForAuth());
4245 EXPECT_FALSE(response->auth_challenge);
4246
4247 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4248 EXPECT_THAT(callback.GetResult(rv), IsOk());
4249 response = trans->GetResponseInfo();
4250 ASSERT_TRUE(response);
4251 ASSERT_TRUE(response->headers);
4252
4253 // The following three tests assert that an authentication challenge was
4254 // received and that the stack needs explicit credentials before it is ready
4255 // to respond to the challenge.
4256 EXPECT_EQ(401, response->headers->response_code());
4257 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4258 EXPECT_TRUE(response->auth_challenge);
4259
4260 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4261 EXPECT_THAT(callback.GetResult(rv), IsOk());
4262 response = trans->GetResponseInfo();
4263 ASSERT_TRUE(response);
4264 ASSERT_TRUE(response->headers);
4265 EXPECT_EQ(200, response->headers->response_code());
4266
4267 trans.reset();
4268 session->CloseAllConnections();
4269 }
4270
4139 // Test the load timing for HTTPS requests with an HTTP proxy. 4271 // Test the load timing for HTTPS requests with an HTTP proxy.
4140 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { 4272 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) {
4141 HttpRequestInfo request1; 4273 HttpRequestInfo request1;
4142 request1.method = "GET"; 4274 request1.method = "GET";
4143 request1.url = GURL("https://www.example.org/1"); 4275 request1.url = GURL("https://www.example.org/1");
4144 4276
4145 HttpRequestInfo request2; 4277 HttpRequestInfo request2;
4146 request2.method = "GET"; 4278 request2.method = "GET";
4147 request2.url = GURL("https://www.example.org/2"); 4279 request2.url = GURL("https://www.example.org/2");
4148 4280
(...skipping 7249 matching lines...) Expand 10 before | Expand all | Expand 10 after
11398 11530
11399 struct TestConfig { 11531 struct TestConfig {
11400 const char* const proxy_url; 11532 const char* const proxy_url;
11401 AuthTiming proxy_auth_timing; 11533 AuthTiming proxy_auth_timing;
11402 int proxy_auth_rv; 11534 int proxy_auth_rv;
11403 const char* const server_url; 11535 const char* const server_url;
11404 AuthTiming server_auth_timing; 11536 AuthTiming server_auth_timing;
11405 int server_auth_rv; 11537 int server_auth_rv;
11406 int num_auth_rounds; 11538 int num_auth_rounds;
11407 int first_ssl_round; 11539 int first_ssl_round;
11408 TestRound rounds[3]; 11540 TestRound rounds[4];
11409 } test_configs[] = { 11541 } test_configs[] = {
11410 // Non-authenticating HTTP server with a direct connection. 11542 // Non-authenticating HTTP server with a direct connection.
11411 {NULL, 11543 {NULL,
11412 AUTH_NONE, 11544 AUTH_NONE,
11413 OK, 11545 OK,
11414 kServer, 11546 kServer,
11415 AUTH_NONE, 11547 AUTH_NONE,
11416 OK, 11548 OK,
11417 1, 11549 1,
11418 kNoSSL, 11550 kNoSSL,
11419 {TestRound(kGet, kSuccess, OK)}}, 11551 {TestRound(kGet, kSuccess, OK)}},
11420 // Authenticating HTTP server with a direct connection. 11552 // Authenticating HTTP server with a direct connection.
11421 {NULL, 11553 {NULL,
11422 AUTH_NONE, 11554 AUTH_NONE,
11423 OK, 11555 OK,
11424 kServer, 11556 kServer,
11425 AUTH_SYNC, 11557 AUTH_SYNC,
11426 OK, 11558 OK,
11427 2, 11559 2,
11428 kNoSSL, 11560 kNoSSL,
11429 {TestRound(kGet, kServerChallenge, OK), 11561 {TestRound(kGet, kServerChallenge, OK),
11430 TestRound(kGetAuth, kSuccess, OK)}}, 11562 TestRound(kGetAuth, kSuccess, OK)}},
11431 {NULL, 11563 {NULL,
11432 AUTH_NONE, 11564 AUTH_NONE,
11433 OK, 11565 OK,
11434 kServer, 11566 kServer,
11435 AUTH_SYNC, 11567 AUTH_SYNC,
11436 ERR_INVALID_AUTH_CREDENTIALS, 11568 ERR_INVALID_AUTH_CREDENTIALS,
11569 3,
11570 kNoSSL,
11571 {TestRound(kGet, kServerChallenge, OK),
11572 TestRound(kGet, kServerChallenge, OK),
11573 TestRound(kGetAuth, kSuccess, OK)}},
11574 {NULL,
11575 AUTH_NONE,
11576 OK,
11577 kServer,
11578 AUTH_SYNC,
11579 ERR_UNSUPPORTED_AUTH_SCHEME,
11580 2,
11581 kNoSSL,
11582 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11583 {NULL,
11584 AUTH_NONE,
11585 OK,
11586 kServer,
11587 AUTH_SYNC,
11588 ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS,
11589 2,
11590 kNoSSL,
11591 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11592 {kProxy,
11593 AUTH_SYNC,
11594 ERR_FAILED,
11595 kServer,
11596 AUTH_NONE,
11597 OK,
11598 2,
11599 kNoSSL,
11600 {TestRound(kGetProxy, kProxyChallenge, OK),
11601 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11602 {kProxy,
11603 AUTH_ASYNC,
11604 ERR_FAILED,
11605 kServer,
11606 AUTH_NONE,
11607 OK,
11608 2,
11609 kNoSSL,
11610 {TestRound(kGetProxy, kProxyChallenge, OK),
11611 TestRound(kGetProxy, kFailure, ERR_FAILED)}},
11612 {NULL,
11613 AUTH_NONE,
11614 OK,
11615 kServer,
11616 AUTH_SYNC,
11617 ERR_FAILED,
11437 2, 11618 2,
11438 kNoSSL, 11619 kNoSSL,
11439 {TestRound(kGet, kServerChallenge, OK), 11620 {TestRound(kGet, kServerChallenge, OK),
11440 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11621 TestRound(kGet, kFailure, ERR_FAILED)}},
11441 {NULL, 11622 {NULL,
11442 AUTH_NONE, 11623 AUTH_NONE,
11443 OK, 11624 OK,
11625 kServer,
11626 AUTH_ASYNC,
11627 ERR_FAILED,
11628 2,
11629 kNoSSL,
11630 {TestRound(kGet, kServerChallenge, OK),
11631 TestRound(kGet, kFailure, ERR_FAILED)}},
11632 {NULL,
11633 AUTH_NONE,
11634 OK,
11444 kServer, 11635 kServer,
11445 AUTH_ASYNC, 11636 AUTH_ASYNC,
11446 OK, 11637 OK,
11447 2, 11638 2,
11448 kNoSSL, 11639 kNoSSL,
11449 {TestRound(kGet, kServerChallenge, OK), 11640 {TestRound(kGet, kServerChallenge, OK),
11450 TestRound(kGetAuth, kSuccess, OK)}}, 11641 TestRound(kGetAuth, kSuccess, OK)}},
11451 {NULL, 11642 {NULL,
11452 AUTH_NONE, 11643 AUTH_NONE,
11453 OK, 11644 OK,
11454 kServer, 11645 kServer,
11455 AUTH_ASYNC, 11646 AUTH_ASYNC,
11456 ERR_INVALID_AUTH_CREDENTIALS, 11647 ERR_INVALID_AUTH_CREDENTIALS,
11457 2, 11648 3,
11458 kNoSSL, 11649 kNoSSL,
11459 {TestRound(kGet, kServerChallenge, OK), 11650 {TestRound(kGet, kServerChallenge, OK),
11460 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11651 // The second round uses a HttpAuthHandlerMock that always succeeds.
11652 TestRound(kGet, kServerChallenge, OK),
11653 TestRound(kGetAuth, kSuccess, OK)}},
11461 // Non-authenticating HTTP server through a non-authenticating proxy. 11654 // Non-authenticating HTTP server through a non-authenticating proxy.
11462 {kProxy, 11655 {kProxy,
11463 AUTH_NONE, 11656 AUTH_NONE,
11464 OK, 11657 OK,
11465 kServer, 11658 kServer,
11466 AUTH_NONE, 11659 AUTH_NONE,
11467 OK, 11660 OK,
11468 1, 11661 1,
11469 kNoSSL, 11662 kNoSSL,
11470 {TestRound(kGetProxy, kSuccess, OK)}}, 11663 {TestRound(kGetProxy, kSuccess, OK)}},
11471 // Authenticating HTTP server through a non-authenticating proxy. 11664 // Authenticating HTTP server through a non-authenticating proxy.
11472 {kProxy, 11665 {kProxy,
11473 AUTH_NONE, 11666 AUTH_NONE,
11474 OK, 11667 OK,
11475 kServer, 11668 kServer,
11476 AUTH_SYNC, 11669 AUTH_SYNC,
11477 OK, 11670 OK,
11478 2, 11671 2,
11479 kNoSSL, 11672 kNoSSL,
11480 {TestRound(kGetProxy, kServerChallenge, OK), 11673 {TestRound(kGetProxy, kServerChallenge, OK),
11481 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11674 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11482 {kProxy, 11675 {kProxy,
11483 AUTH_NONE, 11676 AUTH_NONE,
11484 OK, 11677 OK,
11485 kServer, 11678 kServer,
11486 AUTH_SYNC, 11679 AUTH_SYNC,
11487 ERR_INVALID_AUTH_CREDENTIALS, 11680 ERR_INVALID_AUTH_CREDENTIALS,
11488 2, 11681 3,
11489 kNoSSL, 11682 kNoSSL,
11490 {TestRound(kGetProxy, kServerChallenge, OK), 11683 {TestRound(kGetProxy, kServerChallenge, OK),
11491 TestRound(kGetAuthThroughProxy, kFailure, 11684 TestRound(kGetProxy, kServerChallenge, OK),
11492 ERR_INVALID_AUTH_CREDENTIALS)}}, 11685 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11493 {kProxy, 11686 {kProxy,
11494 AUTH_NONE, 11687 AUTH_NONE,
11495 OK, 11688 OK,
11496 kServer, 11689 kServer,
11497 AUTH_ASYNC, 11690 AUTH_ASYNC,
11498 OK, 11691 OK,
11499 2, 11692 2,
11500 kNoSSL, 11693 kNoSSL,
11501 {TestRound(kGetProxy, kServerChallenge, OK), 11694 {TestRound(kGetProxy, kServerChallenge, OK),
11502 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11695 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11503 {kProxy, 11696 {kProxy,
11504 AUTH_NONE, 11697 AUTH_NONE,
11505 OK, 11698 OK,
11506 kServer, 11699 kServer,
11507 AUTH_ASYNC, 11700 AUTH_ASYNC,
11508 ERR_INVALID_AUTH_CREDENTIALS, 11701 ERR_INVALID_AUTH_CREDENTIALS,
11509 2, 11702 2,
11510 kNoSSL, 11703 kNoSSL,
11511 {TestRound(kGetProxy, kServerChallenge, OK), 11704 {TestRound(kGetProxy, kServerChallenge, OK),
11512 TestRound(kGetAuthThroughProxy, kFailure, 11705 TestRound(kGetProxy, kSuccess, OK)}},
11513 ERR_INVALID_AUTH_CREDENTIALS)}},
11514 // Non-authenticating HTTP server through an authenticating proxy. 11706 // Non-authenticating HTTP server through an authenticating proxy.
11515 {kProxy, 11707 {kProxy,
11516 AUTH_SYNC, 11708 AUTH_SYNC,
11517 OK, 11709 OK,
11518 kServer, 11710 kServer,
11519 AUTH_NONE, 11711 AUTH_NONE,
11520 OK, 11712 OK,
11521 2, 11713 2,
11522 kNoSSL, 11714 kNoSSL,
11523 {TestRound(kGetProxy, kProxyChallenge, OK), 11715 {TestRound(kGetProxy, kProxyChallenge, OK),
11524 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11716 TestRound(kGetProxyAuth, kSuccess, OK)}},
11525 {kProxy, 11717 {kProxy,
11526 AUTH_SYNC, 11718 AUTH_SYNC,
11527 ERR_INVALID_AUTH_CREDENTIALS, 11719 ERR_INVALID_AUTH_CREDENTIALS,
11528 kServer, 11720 kServer,
11529 AUTH_NONE, 11721 AUTH_NONE,
11530 OK, 11722 OK,
11531 2, 11723 2,
11532 kNoSSL, 11724 kNoSSL,
11533 {TestRound(kGetProxy, kProxyChallenge, OK), 11725 {TestRound(kGetProxy, kProxyChallenge, OK),
11534 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11726 TestRound(kGetProxy, kSuccess, OK)}},
11535 {kProxy, 11727 {kProxy,
11536 AUTH_ASYNC, 11728 AUTH_ASYNC,
11537 OK, 11729 OK,
11538 kServer, 11730 kServer,
11539 AUTH_NONE, 11731 AUTH_NONE,
11540 OK, 11732 OK,
11541 2, 11733 2,
11542 kNoSSL, 11734 kNoSSL,
11543 {TestRound(kGetProxy, kProxyChallenge, OK), 11735 {TestRound(kGetProxy, kProxyChallenge, OK),
11544 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11736 TestRound(kGetProxyAuth, kSuccess, OK)}},
11545 {kProxy, 11737 {kProxy,
11546 AUTH_ASYNC, 11738 AUTH_ASYNC,
11547 ERR_INVALID_AUTH_CREDENTIALS, 11739 ERR_INVALID_AUTH_CREDENTIALS,
11548 kServer, 11740 kServer,
11549 AUTH_NONE, 11741 AUTH_NONE,
11550 OK, 11742 OK,
11551 2, 11743 2,
11552 kNoSSL, 11744 kNoSSL,
11553 {TestRound(kGetProxy, kProxyChallenge, OK), 11745 {TestRound(kGetProxy, kProxyChallenge, OK),
11554 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11746 TestRound(kGetProxy, kSuccess, OK)}},
11555 // Authenticating HTTP server through an authenticating proxy. 11747 // Authenticating HTTP server through an authenticating proxy.
11556 {kProxy, 11748 {kProxy,
11557 AUTH_SYNC, 11749 AUTH_SYNC,
11558 OK, 11750 OK,
11559 kServer, 11751 kServer,
11560 AUTH_SYNC, 11752 AUTH_SYNC,
11561 OK, 11753 OK,
11562 3, 11754 3,
11563 kNoSSL, 11755 kNoSSL,
11564 {TestRound(kGetProxy, kProxyChallenge, OK), 11756 {TestRound(kGetProxy, kProxyChallenge, OK),
11565 TestRound(kGetProxyAuth, kServerChallenge, OK), 11757 TestRound(kGetProxyAuth, kServerChallenge, OK),
11566 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11758 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11567 {kProxy, 11759 {kProxy,
11568 AUTH_SYNC, 11760 AUTH_SYNC,
11569 OK, 11761 OK,
11570 kServer, 11762 kServer,
11571 AUTH_SYNC, 11763 AUTH_SYNC,
11572 ERR_INVALID_AUTH_CREDENTIALS, 11764 ERR_INVALID_AUTH_CREDENTIALS,
11573 3, 11765 3,
11574 kNoSSL, 11766 kNoSSL,
11575 {TestRound(kGetProxy, kProxyChallenge, OK), 11767 {TestRound(kGetProxy, kProxyChallenge, OK),
11576 TestRound(kGetProxyAuth, kServerChallenge, OK), 11768 TestRound(kGetProxyAuth, kServerChallenge, OK),
11577 TestRound(kGetAuthWithProxyAuth, kFailure, 11769 TestRound(kGetProxyAuth, kSuccess, OK)}},
11578 ERR_INVALID_AUTH_CREDENTIALS)}},
11579 {kProxy, 11770 {kProxy,
11580 AUTH_ASYNC, 11771 AUTH_ASYNC,
11581 OK, 11772 OK,
11582 kServer, 11773 kServer,
11583 AUTH_SYNC, 11774 AUTH_SYNC,
11584 OK, 11775 OK,
11585 3, 11776 3,
11586 kNoSSL, 11777 kNoSSL,
11587 {TestRound(kGetProxy, kProxyChallenge, OK), 11778 {TestRound(kGetProxy, kProxyChallenge, OK),
11588 TestRound(kGetProxyAuth, kServerChallenge, OK), 11779 TestRound(kGetProxyAuth, kServerChallenge, OK),
11589 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11780 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11590 {kProxy, 11781 {kProxy,
11591 AUTH_ASYNC, 11782 AUTH_ASYNC,
11592 OK, 11783 OK,
11593 kServer, 11784 kServer,
11594 AUTH_SYNC, 11785 AUTH_SYNC,
11595 ERR_INVALID_AUTH_CREDENTIALS, 11786 ERR_INVALID_AUTH_CREDENTIALS,
11596 3, 11787 3,
11597 kNoSSL, 11788 kNoSSL,
11598 {TestRound(kGetProxy, kProxyChallenge, OK), 11789 {TestRound(kGetProxy, kProxyChallenge, OK),
11599 TestRound(kGetProxyAuth, kServerChallenge, OK), 11790 TestRound(kGetProxyAuth, kServerChallenge, OK),
11600 TestRound(kGetAuthWithProxyAuth, kFailure, 11791 TestRound(kGetProxyAuth, kSuccess, OK)}},
11601 ERR_INVALID_AUTH_CREDENTIALS)}},
11602 {kProxy, 11792 {kProxy,
11603 AUTH_SYNC, 11793 AUTH_SYNC,
11604 OK, 11794 OK,
11605 kServer, 11795 kServer,
11606 AUTH_ASYNC, 11796 AUTH_ASYNC,
11607 OK, 11797 OK,
11608 3, 11798 3,
11609 kNoSSL, 11799 kNoSSL,
11610 {TestRound(kGetProxy, kProxyChallenge, OK), 11800 {TestRound(kGetProxy, kProxyChallenge, OK),
11611 TestRound(kGetProxyAuth, kServerChallenge, OK), 11801 TestRound(kGetProxyAuth, kServerChallenge, OK),
11612 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11802 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11613 {kProxy, 11803 {kProxy,
11614 AUTH_SYNC, 11804 AUTH_SYNC,
11615 OK, 11805 OK,
11616 kServer, 11806 kServer,
11617 AUTH_ASYNC, 11807 AUTH_ASYNC,
11618 ERR_INVALID_AUTH_CREDENTIALS, 11808 ERR_INVALID_AUTH_CREDENTIALS,
11619 3, 11809 3,
11620 kNoSSL, 11810 kNoSSL,
11621 {TestRound(kGetProxy, kProxyChallenge, OK), 11811 {TestRound(kGetProxy, kProxyChallenge, OK),
11622 TestRound(kGetProxyAuth, kServerChallenge, OK), 11812 TestRound(kGetProxyAuth, kServerChallenge, OK),
11623 TestRound(kGetAuthWithProxyAuth, kFailure, 11813 TestRound(kGetProxyAuth, kSuccess, OK)}},
11624 ERR_INVALID_AUTH_CREDENTIALS)}},
11625 {kProxy, 11814 {kProxy,
11626 AUTH_ASYNC, 11815 AUTH_ASYNC,
11627 OK, 11816 OK,
11628 kServer, 11817 kServer,
11629 AUTH_ASYNC, 11818 AUTH_ASYNC,
11630 OK, 11819 OK,
11631 3, 11820 3,
11632 kNoSSL, 11821 kNoSSL,
11633 {TestRound(kGetProxy, kProxyChallenge, OK), 11822 {TestRound(kGetProxy, kProxyChallenge, OK),
11634 TestRound(kGetProxyAuth, kServerChallenge, OK), 11823 TestRound(kGetProxyAuth, kServerChallenge, OK),
11635 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11824 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11636 {kProxy, 11825 {kProxy,
11637 AUTH_ASYNC, 11826 AUTH_ASYNC,
11638 OK, 11827 OK,
11639 kServer, 11828 kServer,
11640 AUTH_ASYNC, 11829 AUTH_ASYNC,
11641 ERR_INVALID_AUTH_CREDENTIALS, 11830 ERR_INVALID_AUTH_CREDENTIALS,
11642 3, 11831 3,
11643 kNoSSL, 11832 kNoSSL,
11644 {TestRound(kGetProxy, kProxyChallenge, OK), 11833 {TestRound(kGetProxy, kProxyChallenge, OK),
11645 TestRound(kGetProxyAuth, kServerChallenge, OK), 11834 TestRound(kGetProxyAuth, kServerChallenge, OK),
11646 TestRound(kGetAuthWithProxyAuth, kFailure, 11835 TestRound(kGetProxyAuth, kSuccess, OK)}},
11647 ERR_INVALID_AUTH_CREDENTIALS)}},
11648 // Non-authenticating HTTPS server with a direct connection. 11836 // Non-authenticating HTTPS server with a direct connection.
11649 {NULL, 11837 {NULL,
11650 AUTH_NONE, 11838 AUTH_NONE,
11651 OK, 11839 OK,
11652 kSecureServer, 11840 kSecureServer,
11653 AUTH_NONE, 11841 AUTH_NONE,
11654 OK, 11842 OK,
11655 1, 11843 1,
11656 0, 11844 0,
11657 {TestRound(kGet, kSuccess, OK)}}, 11845 {TestRound(kGet, kSuccess, OK)}},
11658 // Authenticating HTTPS server with a direct connection. 11846 // Authenticating HTTPS server with a direct connection.
11659 {NULL, 11847 {NULL,
11660 AUTH_NONE, 11848 AUTH_NONE,
11661 OK, 11849 OK,
11662 kSecureServer, 11850 kSecureServer,
11663 AUTH_SYNC, 11851 AUTH_SYNC,
11664 OK, 11852 OK,
11665 2, 11853 2,
11666 0, 11854 0,
11667 {TestRound(kGet, kServerChallenge, OK), 11855 {TestRound(kGet, kServerChallenge, OK),
11668 TestRound(kGetAuth, kSuccess, OK)}}, 11856 TestRound(kGetAuth, kSuccess, OK)}},
11669 {NULL, 11857 {NULL,
11670 AUTH_NONE, 11858 AUTH_NONE,
11671 OK, 11859 OK,
11672 kSecureServer, 11860 kSecureServer,
11673 AUTH_SYNC, 11861 AUTH_SYNC,
11674 ERR_INVALID_AUTH_CREDENTIALS, 11862 ERR_INVALID_AUTH_CREDENTIALS,
11675 2, 11863 2,
11676 0, 11864 0,
11677 {TestRound(kGet, kServerChallenge, OK), 11865 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11678 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11679 {NULL, 11866 {NULL,
11680 AUTH_NONE, 11867 AUTH_NONE,
11681 OK, 11868 OK,
11682 kSecureServer, 11869 kSecureServer,
11683 AUTH_ASYNC, 11870 AUTH_ASYNC,
11684 OK, 11871 OK,
11685 2, 11872 2,
11686 0, 11873 0,
11687 {TestRound(kGet, kServerChallenge, OK), 11874 {TestRound(kGet, kServerChallenge, OK),
11688 TestRound(kGetAuth, kSuccess, OK)}}, 11875 TestRound(kGetAuth, kSuccess, OK)}},
11689 {NULL, 11876 {NULL,
11690 AUTH_NONE, 11877 AUTH_NONE,
11691 OK, 11878 OK,
11692 kSecureServer, 11879 kSecureServer,
11693 AUTH_ASYNC, 11880 AUTH_ASYNC,
11694 ERR_INVALID_AUTH_CREDENTIALS, 11881 ERR_INVALID_AUTH_CREDENTIALS,
11695 2, 11882 2,
11696 0, 11883 0,
11697 {TestRound(kGet, kServerChallenge, OK), 11884 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11698 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11699 // Non-authenticating HTTPS server with a non-authenticating proxy. 11885 // Non-authenticating HTTPS server with a non-authenticating proxy.
11700 {kProxy, 11886 {kProxy,
11701 AUTH_NONE, 11887 AUTH_NONE,
11702 OK, 11888 OK,
11703 kSecureServer, 11889 kSecureServer,
11704 AUTH_NONE, 11890 AUTH_NONE,
11705 OK, 11891 OK,
11706 1, 11892 1,
11707 0, 11893 0,
11708 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 11894 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
(...skipping 10 matching lines...) Expand all
11719 TestRound(kGetAuth, kSuccess, OK)}}, 11905 TestRound(kGetAuth, kSuccess, OK)}},
11720 {kProxy, 11906 {kProxy,
11721 AUTH_NONE, 11907 AUTH_NONE,
11722 OK, 11908 OK,
11723 kSecureServer, 11909 kSecureServer,
11724 AUTH_SYNC, 11910 AUTH_SYNC,
11725 ERR_INVALID_AUTH_CREDENTIALS, 11911 ERR_INVALID_AUTH_CREDENTIALS,
11726 2, 11912 2,
11727 0, 11913 0,
11728 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11914 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11729 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11915 TestRound(kGet, kSuccess, OK)}},
11730 {kProxy, 11916 {kProxy,
11731 AUTH_NONE, 11917 AUTH_NONE,
11732 OK, 11918 OK,
11733 kSecureServer, 11919 kSecureServer,
11734 AUTH_ASYNC, 11920 AUTH_ASYNC,
11735 OK, 11921 OK,
11736 2, 11922 2,
11737 0, 11923 0,
11738 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11924 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11739 TestRound(kGetAuth, kSuccess, OK)}}, 11925 TestRound(kGetAuth, kSuccess, OK)}},
11740 {kProxy, 11926 {kProxy,
11741 AUTH_NONE, 11927 AUTH_NONE,
11742 OK, 11928 OK,
11743 kSecureServer, 11929 kSecureServer,
11744 AUTH_ASYNC, 11930 AUTH_ASYNC,
11745 ERR_INVALID_AUTH_CREDENTIALS, 11931 ERR_INVALID_AUTH_CREDENTIALS,
11746 2, 11932 2,
11747 0, 11933 0,
11748 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11934 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11749 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11935 TestRound(kGet, kSuccess, OK)}},
11750 // Non-Authenticating HTTPS server through an authenticating proxy. 11936 // Non-Authenticating HTTPS server through an authenticating proxy.
11751 {kProxy, 11937 {kProxy,
11752 AUTH_SYNC, 11938 AUTH_SYNC,
11753 OK, 11939 OK,
11754 kSecureServer, 11940 kSecureServer,
11755 AUTH_NONE, 11941 AUTH_NONE,
11756 OK, 11942 OK,
11757 2, 11943 2,
11758 1, 11944 1,
11759 {TestRound(kConnect, kProxyChallenge, OK), 11945 {TestRound(kConnect, kProxyChallenge, OK),
11760 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11946 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11761 {kProxy, 11947 {kProxy,
11762 AUTH_SYNC, 11948 AUTH_SYNC,
11763 ERR_INVALID_AUTH_CREDENTIALS, 11949 ERR_INVALID_AUTH_CREDENTIALS,
11764 kSecureServer, 11950 kSecureServer,
11765 AUTH_NONE, 11951 AUTH_NONE,
11766 OK, 11952 OK,
11767 2, 11953 2,
11768 kNoSSL, 11954 kNoSSL,
11769 {TestRound(kConnect, kProxyChallenge, OK), 11955 {TestRound(kConnect, kProxyChallenge, OK),
11770 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11956 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11957 {kProxy,
11958 AUTH_SYNC,
11959 ERR_UNSUPPORTED_AUTH_SCHEME,
11960 kSecureServer,
11961 AUTH_NONE,
11962 OK,
11963 2,
11964 kNoSSL,
11965 {TestRound(kConnect, kProxyChallenge, OK),
11966 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11967 {kProxy,
11968 AUTH_SYNC,
11969 ERR_UNEXPECTED,
11970 kSecureServer,
11971 AUTH_NONE,
11972 OK,
11973 2,
11974 kNoSSL,
11975 {TestRound(kConnect, kProxyChallenge, OK),
11976 TestRound(kConnect, kProxyConnected, ERR_UNEXPECTED)}},
11771 {kProxy, 11977 {kProxy,
11772 AUTH_ASYNC, 11978 AUTH_ASYNC,
11773 OK, 11979 OK,
11774 kSecureServer, 11980 kSecureServer,
11775 AUTH_NONE, 11981 AUTH_NONE,
11776 OK, 11982 OK,
11777 2, 11983 2,
11778 1, 11984 1,
11779 {TestRound(kConnect, kProxyChallenge, OK), 11985 {TestRound(kConnect, kProxyChallenge, OK),
11780 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11986 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11781 {kProxy, 11987 {kProxy,
11782 AUTH_ASYNC, 11988 AUTH_ASYNC,
11783 ERR_INVALID_AUTH_CREDENTIALS, 11989 ERR_INVALID_AUTH_CREDENTIALS,
11784 kSecureServer, 11990 kSecureServer,
11785 AUTH_NONE, 11991 AUTH_NONE,
11786 OK, 11992 OK,
11787 2, 11993 2,
11788 kNoSSL, 11994 kNoSSL,
11789 {TestRound(kConnect, kProxyChallenge, OK), 11995 {TestRound(kConnect, kProxyChallenge, OK),
11790 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11996 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11791 // Authenticating HTTPS server through an authenticating proxy. 11997 // Authenticating HTTPS server through an authenticating proxy.
11792 {kProxy, 11998 {kProxy,
11793 AUTH_SYNC, 11999 AUTH_SYNC,
11794 OK, 12000 OK,
11795 kSecureServer, 12001 kSecureServer,
11796 AUTH_SYNC, 12002 AUTH_SYNC,
11797 OK, 12003 OK,
11798 3, 12004 3,
11799 1, 12005 1,
11800 {TestRound(kConnect, kProxyChallenge, OK), 12006 {TestRound(kConnect, kProxyChallenge, OK),
11801 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12007 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11802 &kServerChallenge), 12008 &kServerChallenge),
11803 TestRound(kGetAuth, kSuccess, OK)}}, 12009 TestRound(kGetAuth, kSuccess, OK)}},
11804 {kProxy, 12010 {kProxy,
11805 AUTH_SYNC, 12011 AUTH_SYNC,
11806 OK, 12012 OK,
11807 kSecureServer, 12013 kSecureServer,
11808 AUTH_SYNC, 12014 AUTH_SYNC,
11809 ERR_INVALID_AUTH_CREDENTIALS, 12015 ERR_INVALID_AUTH_CREDENTIALS,
11810 3, 12016 3,
11811 1, 12017 1,
11812 {TestRound(kConnect, kProxyChallenge, OK), 12018 {TestRound(kConnect, kProxyChallenge, OK),
11813 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12019 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11814 &kServerChallenge), 12020 &kServerChallenge),
11815 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12021 TestRound(kGet, kSuccess, OK)}},
11816 {kProxy, 12022 {kProxy,
11817 AUTH_ASYNC, 12023 AUTH_ASYNC,
11818 OK, 12024 OK,
11819 kSecureServer, 12025 kSecureServer,
11820 AUTH_SYNC, 12026 AUTH_SYNC,
11821 OK, 12027 OK,
11822 3, 12028 3,
11823 1, 12029 1,
11824 {TestRound(kConnect, kProxyChallenge, OK), 12030 {TestRound(kConnect, kProxyChallenge, OK),
11825 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12031 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11826 &kServerChallenge), 12032 &kServerChallenge),
11827 TestRound(kGetAuth, kSuccess, OK)}}, 12033 TestRound(kGetAuth, kSuccess, OK)}},
11828 {kProxy, 12034 {kProxy,
11829 AUTH_ASYNC, 12035 AUTH_ASYNC,
11830 OK, 12036 OK,
11831 kSecureServer, 12037 kSecureServer,
11832 AUTH_SYNC, 12038 AUTH_SYNC,
11833 ERR_INVALID_AUTH_CREDENTIALS, 12039 ERR_INVALID_AUTH_CREDENTIALS,
11834 3, 12040 3,
11835 1, 12041 1,
11836 {TestRound(kConnect, kProxyChallenge, OK), 12042 {TestRound(kConnect, kProxyChallenge, OK),
11837 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12043 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11838 &kServerChallenge), 12044 &kServerChallenge),
11839 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12045 TestRound(kGet, kSuccess, OK)}},
11840 {kProxy, 12046 {kProxy,
11841 AUTH_SYNC, 12047 AUTH_SYNC,
11842 OK, 12048 OK,
11843 kSecureServer, 12049 kSecureServer,
11844 AUTH_ASYNC, 12050 AUTH_ASYNC,
11845 OK, 12051 OK,
11846 3, 12052 3,
11847 1, 12053 1,
11848 {TestRound(kConnect, kProxyChallenge, OK), 12054 {TestRound(kConnect, kProxyChallenge, OK),
11849 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12055 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11850 &kServerChallenge), 12056 &kServerChallenge),
11851 TestRound(kGetAuth, kSuccess, OK)}}, 12057 TestRound(kGetAuth, kSuccess, OK)}},
11852 {kProxy, 12058 {kProxy,
11853 AUTH_SYNC, 12059 AUTH_SYNC,
11854 OK, 12060 OK,
11855 kSecureServer, 12061 kSecureServer,
11856 AUTH_ASYNC, 12062 AUTH_ASYNC,
11857 ERR_INVALID_AUTH_CREDENTIALS, 12063 ERR_INVALID_AUTH_CREDENTIALS,
11858 3, 12064 3,
11859 1, 12065 1,
11860 {TestRound(kConnect, kProxyChallenge, OK), 12066 {TestRound(kConnect, kProxyChallenge, OK),
11861 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12067 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11862 &kServerChallenge), 12068 &kServerChallenge),
11863 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12069 TestRound(kGet, kSuccess, OK)}},
11864 {kProxy, 12070 {kProxy,
11865 AUTH_ASYNC, 12071 AUTH_ASYNC,
11866 OK, 12072 OK,
11867 kSecureServer, 12073 kSecureServer,
11868 AUTH_ASYNC, 12074 AUTH_ASYNC,
11869 OK, 12075 OK,
11870 3, 12076 3,
11871 1, 12077 1,
11872 {TestRound(kConnect, kProxyChallenge, OK), 12078 {TestRound(kConnect, kProxyChallenge, OK),
11873 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12079 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11874 &kServerChallenge), 12080 &kServerChallenge),
11875 TestRound(kGetAuth, kSuccess, OK)}}, 12081 TestRound(kGetAuth, kSuccess, OK)}},
11876 {kProxy, 12082 {kProxy,
11877 AUTH_ASYNC, 12083 AUTH_ASYNC,
11878 OK, 12084 OK,
11879 kSecureServer, 12085 kSecureServer,
11880 AUTH_ASYNC, 12086 AUTH_ASYNC,
11881 ERR_INVALID_AUTH_CREDENTIALS, 12087 ERR_INVALID_AUTH_CREDENTIALS,
11882 3, 12088 3,
11883 1, 12089 1,
11884 {TestRound(kConnect, kProxyChallenge, OK), 12090 {TestRound(kConnect, kProxyChallenge, OK),
11885 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12091 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11886 &kServerChallenge), 12092 &kServerChallenge),
11887 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12093 TestRound(kGet, kSuccess, OK)}},
11888 }; 12094 };
11889 12095
11890 for (size_t i = 0; i < arraysize(test_configs); ++i) { 12096 for (size_t i = 0; i < arraysize(test_configs); ++i) {
12097 SCOPED_TRACE(::testing::Message() << "Test config " << i);
11891 HttpAuthHandlerMock::Factory* auth_factory( 12098 HttpAuthHandlerMock::Factory* auth_factory(
11892 new HttpAuthHandlerMock::Factory()); 12099 new HttpAuthHandlerMock::Factory());
11893 session_deps_.http_auth_handler_factory.reset(auth_factory); 12100 session_deps_.http_auth_handler_factory.reset(auth_factory);
11894 SSLInfo empty_ssl_info; 12101 SSLInfo empty_ssl_info;
11895 const TestConfig& test_config = test_configs[i]; 12102 const TestConfig& test_config = test_configs[i];
11896 12103
11897 // Set up authentication handlers as necessary. 12104 // Set up authentication handlers as necessary.
11898 if (test_config.proxy_auth_timing != AUTH_NONE) { 12105 if (test_config.proxy_auth_timing != AUTH_NONE) {
11899 for (int n = 0; n < 2; n++) { 12106 for (int n = 0; n < 2; n++) {
11900 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); 12107 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock());
(...skipping 16 matching lines...) Expand all
11917 GURL origin(test_config.server_url); 12124 GURL origin(test_config.server_url);
11918 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), 12125 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(),
11919 auth_challenge.end()); 12126 auth_challenge.end());
11920 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, 12127 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
11921 empty_ssl_info, origin, 12128 empty_ssl_info, origin,
11922 NetLogWithSource()); 12129 NetLogWithSource());
11923 auth_handler->SetGenerateExpectation( 12130 auth_handler->SetGenerateExpectation(
11924 test_config.server_auth_timing == AUTH_ASYNC, 12131 test_config.server_auth_timing == AUTH_ASYNC,
11925 test_config.server_auth_rv); 12132 test_config.server_auth_rv);
11926 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); 12133 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER);
12134
12135 // The second handler always succeeds. It should only be used where there
12136 // are multiple auth sessions for server auth in the same network
12137 // transaction using the same auth scheme.
12138 std::unique_ptr<HttpAuthHandlerMock> second_handler =
12139 base::MakeUnique<HttpAuthHandlerMock>();
12140 second_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER,
12141 empty_ssl_info, origin,
12142 NetLogWithSource());
12143 second_handler->SetGenerateExpectation(true, OK);
12144 auth_factory->AddMockHandler(second_handler.release(),
12145 HttpAuth::AUTH_SERVER);
11927 } 12146 }
11928 if (test_config.proxy_url) { 12147 if (test_config.proxy_url) {
11929 session_deps_.proxy_service = 12148 session_deps_.proxy_service =
11930 ProxyService::CreateFixed(test_config.proxy_url); 12149 ProxyService::CreateFixed(test_config.proxy_url);
11931 } else { 12150 } else {
11932 session_deps_.proxy_service = ProxyService::CreateDirect(); 12151 session_deps_.proxy_service = ProxyService::CreateDirect();
11933 } 12152 }
11934 12153
11935 HttpRequestInfo request; 12154 HttpRequestInfo request;
11936 request.method = "GET"; 12155 request.method = "GET";
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
11991 if (round == 0) { 12210 if (round == 0) {
11992 rv = trans.Start(&request, callback.callback(), NetLogWithSource()); 12211 rv = trans.Start(&request, callback.callback(), NetLogWithSource());
11993 } else { 12212 } else {
11994 rv = trans.RestartWithAuth( 12213 rv = trans.RestartWithAuth(
11995 AuthCredentials(kFoo, kBar), callback.callback()); 12214 AuthCredentials(kFoo, kBar), callback.callback());
11996 } 12215 }
11997 if (rv == ERR_IO_PENDING) 12216 if (rv == ERR_IO_PENDING)
11998 rv = callback.WaitForResult(); 12217 rv = callback.WaitForResult();
11999 12218
12000 // Compare results with expected data. 12219 // Compare results with expected data.
12001 EXPECT_EQ(read_write_round.expected_rv, rv); 12220 EXPECT_THAT(rv, IsError(read_write_round.expected_rv));
12002 const HttpResponseInfo* response = trans.GetResponseInfo(); 12221 const HttpResponseInfo* response = trans.GetResponseInfo();
12003 if (read_write_round.expected_rv != OK) { 12222 if (read_write_round.expected_rv != OK) {
12004 EXPECT_EQ(round + 1, test_config.num_auth_rounds); 12223 EXPECT_EQ(round + 1, test_config.num_auth_rounds);
12005 continue; 12224 continue;
12006 } 12225 }
12007 if (round + 1 < test_config.num_auth_rounds) { 12226 if (round + 1 < test_config.num_auth_rounds) {
12008 EXPECT_TRUE(response->auth_challenge); 12227 EXPECT_TRUE(response->auth_challenge);
12009 } else { 12228 } else {
12010 EXPECT_FALSE(response->auth_challenge); 12229 EXPECT_FALSE(response->auth_challenge);
12230 EXPECT_FALSE(trans.IsReadyToRestartForAuth());
12011 } 12231 }
12012 } 12232 }
12013 } 12233 }
12014 } 12234 }
12015 12235
12016 TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) { 12236 TEST_F(HttpNetworkTransactionTest, MultiRoundAuth) {
12017 // Do multi-round authentication and make sure it works correctly. 12237 // Do multi-round authentication and make sure it works correctly.
12018 HttpAuthHandlerMock::Factory* auth_factory( 12238 HttpAuthHandlerMock::Factory* auth_factory(
12019 new HttpAuthHandlerMock::Factory()); 12239 new HttpAuthHandlerMock::Factory());
12020 session_deps_.http_auth_handler_factory.reset(auth_factory); 12240 session_deps_.http_auth_handler_factory.reset(auth_factory);
(...skipping 3861 matching lines...) Expand 10 before | Expand all | Expand 10 after
15882 base::RunLoop().RunUntilIdle(); 16102 base::RunLoop().RunUntilIdle();
15883 16103
15884 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 16104 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15885 HttpRequestHeaders headers; 16105 HttpRequestHeaders headers;
15886 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 16106 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15887 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 16107 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15888 } 16108 }
15889 #endif // !defined(OS_IOS) 16109 #endif // !defined(OS_IOS)
15890 16110
15891 } // namespace net 16111 } // 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