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

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: Address comments 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 4117 matching lines...) Expand 10 before | Expand all | Expand 10 after
4128 ASSERT_TRUE(response); 4128 ASSERT_TRUE(response);
4129 ASSERT_TRUE(response->headers); 4129 ASSERT_TRUE(response->headers);
4130 EXPECT_EQ(407, response->headers->response_code()); 4130 EXPECT_EQ(407, response->headers->response_code());
4131 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); 4131 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4132 EXPECT_TRUE(response->auth_challenge); 4132 EXPECT_TRUE(response->auth_challenge);
4133 4133
4134 trans.reset(); 4134 trans.reset();
4135 session->CloseAllConnections(); 4135 session->CloseAllConnections();
4136 } 4136 }
4137 4137
4138 // A more nuanced test than GenerateAuthToken test which asserts that
4139 // ERR_INVALID_AUTH_CREDENTIALS does not cause the auth scheme to be
4140 // unnecessarily invalidated, and that if the server co-operates, the
4141 // authentication handshake can continue with the same scheme but with a
4142 // different identity.
4143 TEST_F(HttpNetworkTransactionTest, NonPermanentGenerateAuthTokenError) {
4144 HttpRequestInfo request;
4145 request.method = "GET";
4146 request.url = GURL("http://www.example.org/");
4147
4148 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory(
4149 new HttpAuthHandlerMock::Factory());
4150 auth_handler_factory->set_do_init_from_challenge(true);
4151
4152 // First handler. Uses default credentials, but barfs at generate auth token.
4153 std::unique_ptr<HttpAuthHandlerMock> mock_handler(new HttpAuthHandlerMock());
4154 mock_handler->set_allows_default_credentials(true);
4155 mock_handler->set_allows_explicit_credentials(true);
4156 mock_handler->set_connection_based(true);
4157 mock_handler->SetGenerateExpectation(true, ERR_INVALID_AUTH_CREDENTIALS);
4158 auth_handler_factory->AddMockHandler(mock_handler.release(),
4159 HttpAuth::AUTH_SERVER);
4160
4161 // Add another handler for the second challenge. It supports default
4162 // credentials, but they shouldn't be used, since they were already tried.
4163 mock_handler.reset(new HttpAuthHandlerMock());
4164 mock_handler->set_allows_default_credentials(true);
4165 mock_handler->set_allows_explicit_credentials(true);
4166 mock_handler->set_connection_based(true);
4167 auth_handler_factory->AddMockHandler(mock_handler.release(),
4168 HttpAuth::AUTH_SERVER);
4169 session_deps_.http_auth_handler_factory = std::move(auth_handler_factory);
4170
4171 std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
4172
4173 MockWrite data_writes1[] = {
4174 MockWrite("GET / HTTP/1.1\r\n"
4175 "Host: www.example.org\r\n"
4176 "Connection: keep-alive\r\n\r\n"),
4177 };
4178
4179 MockRead data_reads1[] = {
4180 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4181 "WWW-Authenticate: Mock\r\n"
4182 "Connection: keep-alive\r\n\r\n"),
4183 };
4184
4185 // Identical to data_writes1[]. The AuthHandler encounters a
4186 // ERR_INVALID_AUTH_CREDENTIALS during the GenerateAuthToken stage, so the
4187 // transaction procceds without an authorization header.
4188 MockWrite data_writes2[] = {
4189 MockWrite("GET / HTTP/1.1\r\n"
4190 "Host: www.example.org\r\n"
4191 "Connection: keep-alive\r\n\r\n"),
4192 };
4193
4194 MockRead data_reads2[] = {
4195 MockRead("HTTP/1.1 401 Authentication Required\r\n"
4196 "WWW-Authenticate: Mock\r\n"
4197 "Connection: keep-alive\r\n\r\n"),
4198 };
4199
4200 MockWrite data_writes3[] = {
4201 MockWrite("GET / HTTP/1.1\r\n"
4202 "Host: www.example.org\r\n"
4203 "Connection: keep-alive\r\n"
4204 "Authorization: auth_token\r\n\r\n"),
4205 };
4206
4207 MockRead data_reads3[] = {
4208 MockRead("HTTP/1.1 200 OK\r\n"
4209 "Content-Length: 5\r\n"
4210 "Content-Type: text/plain\r\n"
4211 "Connection: keep-alive\r\n\r\n"
4212 "Hello"),
4213 };
4214
4215 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1),
4216 data_writes1, arraysize(data_writes1));
4217 session_deps_.socket_factory->AddSocketDataProvider(&data1);
4218
4219 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2),
4220 data_writes2, arraysize(data_writes2));
4221 session_deps_.socket_factory->AddSocketDataProvider(&data2);
4222
4223 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3),
4224 data_writes3, arraysize(data_writes3));
4225 session_deps_.socket_factory->AddSocketDataProvider(&data3);
4226
4227 std::unique_ptr<HttpNetworkTransaction> trans(
4228 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
4229
4230 TestCompletionCallback callback;
4231 int rv = trans->Start(&request, callback.callback(), NetLogWithSource());
4232 EXPECT_THAT(callback.GetResult(rv), IsOk());
4233
4234 const HttpResponseInfo* response = trans->GetResponseInfo();
4235 ASSERT_TRUE(response);
4236 ASSERT_TRUE(response->headers);
4237 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion());
4238
4239 // The following three tests assert that an authentication challenge was
4240 // received and that the stack is ready to respond to the challenge using
4241 // ambient credentials.
4242 EXPECT_EQ(401, response->headers->response_code());
4243 EXPECT_TRUE(trans->IsReadyToRestartForAuth());
4244 EXPECT_FALSE(response->auth_challenge);
4245
4246 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4247 EXPECT_THAT(callback.GetResult(rv), IsOk());
4248 response = trans->GetResponseInfo();
4249 ASSERT_TRUE(response);
4250 ASSERT_TRUE(response->headers);
4251
4252 // The following three tests assert that an authentication challenge was
4253 // received and that the stack needs explicit credentials before it is ready
4254 // to respond to the challenge.
4255 EXPECT_EQ(401, response->headers->response_code());
4256 EXPECT_FALSE(trans->IsReadyToRestartForAuth());
4257 EXPECT_TRUE(response->auth_challenge);
4258
4259 rv = trans->RestartWithAuth(AuthCredentials(), callback.callback());
4260 EXPECT_THAT(callback.GetResult(rv), IsOk());
4261 response = trans->GetResponseInfo();
4262 ASSERT_TRUE(response);
4263 ASSERT_TRUE(response->headers);
4264 EXPECT_EQ(200, response->headers->response_code());
4265
4266 trans.reset();
4267 session->CloseAllConnections();
4268 }
4269
4138 // Test the load timing for HTTPS requests with an HTTP proxy. 4270 // Test the load timing for HTTPS requests with an HTTP proxy.
4139 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { 4271 TEST_F(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) {
4140 HttpRequestInfo request1; 4272 HttpRequestInfo request1;
4141 request1.method = "GET"; 4273 request1.method = "GET";
4142 request1.url = GURL("https://www.example.org/1"); 4274 request1.url = GURL("https://www.example.org/1");
4143 4275
4144 HttpRequestInfo request2; 4276 HttpRequestInfo request2;
4145 request2.method = "GET"; 4277 request2.method = "GET";
4146 request2.url = GURL("https://www.example.org/2"); 4278 request2.url = GURL("https://www.example.org/2");
4147 4279
(...skipping 7240 matching lines...) Expand 10 before | Expand all | Expand 10 after
11388 11520
11389 struct TestConfig { 11521 struct TestConfig {
11390 const char* const proxy_url; 11522 const char* const proxy_url;
11391 AuthTiming proxy_auth_timing; 11523 AuthTiming proxy_auth_timing;
11392 int proxy_auth_rv; 11524 int proxy_auth_rv;
11393 const char* const server_url; 11525 const char* const server_url;
11394 AuthTiming server_auth_timing; 11526 AuthTiming server_auth_timing;
11395 int server_auth_rv; 11527 int server_auth_rv;
11396 int num_auth_rounds; 11528 int num_auth_rounds;
11397 int first_ssl_round; 11529 int first_ssl_round;
11398 TestRound rounds[3]; 11530 TestRound rounds[4];
11399 } test_configs[] = { 11531 } test_configs[] = {
11400 // Non-authenticating HTTP server with a direct connection. 11532 // Non-authenticating HTTP server with a direct connection.
11401 {NULL, 11533 {NULL,
11402 AUTH_NONE, 11534 AUTH_NONE,
11403 OK, 11535 OK,
11404 kServer, 11536 kServer,
11405 AUTH_NONE, 11537 AUTH_NONE,
11406 OK, 11538 OK,
11407 1, 11539 1,
11408 kNoSSL, 11540 kNoSSL,
(...skipping 10 matching lines...) Expand all
11419 {TestRound(kGet, kServerChallenge, OK), 11551 {TestRound(kGet, kServerChallenge, OK),
11420 TestRound(kGetAuth, kSuccess, OK)}}, 11552 TestRound(kGetAuth, kSuccess, OK)}},
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 ERR_INVALID_AUTH_CREDENTIALS, 11558 ERR_INVALID_AUTH_CREDENTIALS,
11427 2, 11559 2,
11428 kNoSSL, 11560 kNoSSL,
11429 {TestRound(kGet, kServerChallenge, OK), 11561 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
mmenke 2016/10/10 21:06:09 Should we still have a test that hard fails here?
mmenke 2016/10/10 21:06:09 More typically, we'd see another TestRound(kGet, k
asanka 2016/10/11 19:47:26 The test fixture will need some minor tweaking, bu
11430 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11431 {NULL, 11562 {NULL,
11432 AUTH_NONE, 11563 AUTH_NONE,
11433 OK, 11564 OK,
11565 kServer,
11566 AUTH_SYNC,
11567 ERR_UNSUPPORTED_AUTH_SCHEME,
11568 2,
11569 kNoSSL,
11570 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
mmenke 2016/10/10 21:06:10 More typically, we'd see another TestRound(kGet, k
asanka 2016/10/11 19:47:26 Added another round. The new test round verifies t
11571 {NULL,
11572 AUTH_NONE,
11573 OK,
11574 kServer,
11575 AUTH_SYNC,
11576 ERR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS,
11577 2,
11578 kNoSSL,
11579 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11580 {NULL,
11581 AUTH_NONE,
11582 OK,
11434 kServer, 11583 kServer,
11435 AUTH_ASYNC, 11584 AUTH_ASYNC,
11436 OK, 11585 OK,
11437 2, 11586 2,
11438 kNoSSL, 11587 kNoSSL,
11439 {TestRound(kGet, kServerChallenge, OK), 11588 {TestRound(kGet, kServerChallenge, OK),
11440 TestRound(kGetAuth, kSuccess, OK)}}, 11589 TestRound(kGetAuth, kSuccess, OK)}},
11441 {NULL, 11590 {NULL,
11442 AUTH_NONE, 11591 AUTH_NONE,
11443 OK, 11592 OK,
11444 kServer, 11593 kServer,
11445 AUTH_ASYNC, 11594 AUTH_ASYNC,
11446 ERR_INVALID_AUTH_CREDENTIALS, 11595 ERR_INVALID_AUTH_CREDENTIALS,
11447 2, 11596 2,
11448 kNoSSL, 11597 kNoSSL,
11449 {TestRound(kGet, kServerChallenge, OK), 11598 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11450 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11451 // Non-authenticating HTTP server through a non-authenticating proxy. 11599 // Non-authenticating HTTP server through a non-authenticating proxy.
11452 {kProxy, 11600 {kProxy,
11453 AUTH_NONE, 11601 AUTH_NONE,
11454 OK, 11602 OK,
11455 kServer, 11603 kServer,
11456 AUTH_NONE, 11604 AUTH_NONE,
11457 OK, 11605 OK,
11458 1, 11606 1,
11459 kNoSSL, 11607 kNoSSL,
11460 {TestRound(kGetProxy, kSuccess, OK)}}, 11608 {TestRound(kGetProxy, kSuccess, OK)}},
(...skipping 10 matching lines...) Expand all
11471 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11619 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11472 {kProxy, 11620 {kProxy,
11473 AUTH_NONE, 11621 AUTH_NONE,
11474 OK, 11622 OK,
11475 kServer, 11623 kServer,
11476 AUTH_SYNC, 11624 AUTH_SYNC,
11477 ERR_INVALID_AUTH_CREDENTIALS, 11625 ERR_INVALID_AUTH_CREDENTIALS,
11478 2, 11626 2,
11479 kNoSSL, 11627 kNoSSL,
11480 {TestRound(kGetProxy, kServerChallenge, OK), 11628 {TestRound(kGetProxy, kServerChallenge, OK),
11481 TestRound(kGetAuthThroughProxy, kFailure, 11629 TestRound(kGetProxy, kSuccess, OK)}},
11482 ERR_INVALID_AUTH_CREDENTIALS)}},
11483 {kProxy, 11630 {kProxy,
11484 AUTH_NONE, 11631 AUTH_NONE,
11485 OK, 11632 OK,
11486 kServer, 11633 kServer,
11487 AUTH_ASYNC, 11634 AUTH_ASYNC,
11488 OK, 11635 OK,
11489 2, 11636 2,
11490 kNoSSL, 11637 kNoSSL,
11491 {TestRound(kGetProxy, kServerChallenge, OK), 11638 {TestRound(kGetProxy, kServerChallenge, OK),
11492 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, 11639 TestRound(kGetAuthThroughProxy, kSuccess, OK)}},
11493 {kProxy, 11640 {kProxy,
11494 AUTH_NONE, 11641 AUTH_NONE,
11495 OK, 11642 OK,
11496 kServer, 11643 kServer,
11497 AUTH_ASYNC, 11644 AUTH_ASYNC,
11498 ERR_INVALID_AUTH_CREDENTIALS, 11645 ERR_INVALID_AUTH_CREDENTIALS,
11499 2, 11646 2,
11500 kNoSSL, 11647 kNoSSL,
11501 {TestRound(kGetProxy, kServerChallenge, OK), 11648 {TestRound(kGetProxy, kServerChallenge, OK),
11502 TestRound(kGetAuthThroughProxy, kFailure, 11649 TestRound(kGetProxy, kSuccess, OK)}},
11503 ERR_INVALID_AUTH_CREDENTIALS)}},
11504 // Non-authenticating HTTP server through an authenticating proxy. 11650 // Non-authenticating HTTP server through an authenticating proxy.
11505 {kProxy, 11651 {kProxy,
11506 AUTH_SYNC, 11652 AUTH_SYNC,
11507 OK, 11653 OK,
11508 kServer, 11654 kServer,
11509 AUTH_NONE, 11655 AUTH_NONE,
11510 OK, 11656 OK,
11511 2, 11657 2,
11512 kNoSSL, 11658 kNoSSL,
11513 {TestRound(kGetProxy, kProxyChallenge, OK), 11659 {TestRound(kGetProxy, kProxyChallenge, OK),
11514 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11660 TestRound(kGetProxyAuth, kSuccess, OK)}},
11515 {kProxy, 11661 {kProxy,
11516 AUTH_SYNC, 11662 AUTH_SYNC,
11517 ERR_INVALID_AUTH_CREDENTIALS, 11663 ERR_INVALID_AUTH_CREDENTIALS,
11518 kServer, 11664 kServer,
11519 AUTH_NONE, 11665 AUTH_NONE,
11520 OK, 11666 OK,
11521 2, 11667 2,
11522 kNoSSL, 11668 kNoSSL,
11523 {TestRound(kGetProxy, kProxyChallenge, OK), 11669 {TestRound(kGetProxy, kProxyChallenge, OK),
11524 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11670 TestRound(kGetProxy, kSuccess, OK)}},
11525 {kProxy, 11671 {kProxy,
11526 AUTH_ASYNC, 11672 AUTH_ASYNC,
11527 OK, 11673 OK,
11528 kServer, 11674 kServer,
11529 AUTH_NONE, 11675 AUTH_NONE,
11530 OK, 11676 OK,
11531 2, 11677 2,
11532 kNoSSL, 11678 kNoSSL,
11533 {TestRound(kGetProxy, kProxyChallenge, OK), 11679 {TestRound(kGetProxy, kProxyChallenge, OK),
11534 TestRound(kGetProxyAuth, kSuccess, OK)}}, 11680 TestRound(kGetProxyAuth, kSuccess, OK)}},
11535 {kProxy, 11681 {kProxy,
11536 AUTH_ASYNC, 11682 AUTH_ASYNC,
11537 ERR_INVALID_AUTH_CREDENTIALS, 11683 ERR_INVALID_AUTH_CREDENTIALS,
11538 kServer, 11684 kServer,
11539 AUTH_NONE, 11685 AUTH_NONE,
11540 OK, 11686 OK,
11541 2, 11687 2,
11542 kNoSSL, 11688 kNoSSL,
11543 {TestRound(kGetProxy, kProxyChallenge, OK), 11689 {TestRound(kGetProxy, kProxyChallenge, OK),
11544 TestRound(kGetProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11690 TestRound(kGetProxy, kSuccess, OK)}},
11545 // Authenticating HTTP server through an authenticating proxy. 11691 // Authenticating HTTP server through an authenticating proxy.
11546 {kProxy, 11692 {kProxy,
11547 AUTH_SYNC, 11693 AUTH_SYNC,
11548 OK, 11694 OK,
11549 kServer, 11695 kServer,
11550 AUTH_SYNC, 11696 AUTH_SYNC,
11551 OK, 11697 OK,
11552 3, 11698 3,
11553 kNoSSL, 11699 kNoSSL,
11554 {TestRound(kGetProxy, kProxyChallenge, OK), 11700 {TestRound(kGetProxy, kProxyChallenge, OK),
11555 TestRound(kGetProxyAuth, kServerChallenge, OK), 11701 TestRound(kGetProxyAuth, kServerChallenge, OK),
11556 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11702 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11557 {kProxy, 11703 {kProxy,
11558 AUTH_SYNC, 11704 AUTH_SYNC,
11559 OK, 11705 OK,
11560 kServer, 11706 kServer,
11561 AUTH_SYNC, 11707 AUTH_SYNC,
11562 ERR_INVALID_AUTH_CREDENTIALS, 11708 ERR_INVALID_AUTH_CREDENTIALS,
11563 3, 11709 3,
11564 kNoSSL, 11710 kNoSSL,
11565 {TestRound(kGetProxy, kProxyChallenge, OK), 11711 {TestRound(kGetProxy, kProxyChallenge, OK),
11566 TestRound(kGetProxyAuth, kServerChallenge, OK), 11712 TestRound(kGetProxyAuth, kServerChallenge, OK),
11567 TestRound(kGetAuthWithProxyAuth, kFailure, 11713 TestRound(kGetProxyAuth, kSuccess, OK)}},
11568 ERR_INVALID_AUTH_CREDENTIALS)}},
11569 {kProxy, 11714 {kProxy,
11570 AUTH_ASYNC, 11715 AUTH_ASYNC,
11571 OK, 11716 OK,
11572 kServer, 11717 kServer,
11573 AUTH_SYNC, 11718 AUTH_SYNC,
11574 OK, 11719 OK,
11575 3, 11720 3,
11576 kNoSSL, 11721 kNoSSL,
11577 {TestRound(kGetProxy, kProxyChallenge, OK), 11722 {TestRound(kGetProxy, kProxyChallenge, OK),
11578 TestRound(kGetProxyAuth, kServerChallenge, OK), 11723 TestRound(kGetProxyAuth, kServerChallenge, OK),
11579 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11724 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11580 {kProxy, 11725 {kProxy,
11581 AUTH_ASYNC, 11726 AUTH_ASYNC,
11582 OK, 11727 OK,
11583 kServer, 11728 kServer,
11584 AUTH_SYNC, 11729 AUTH_SYNC,
11585 ERR_INVALID_AUTH_CREDENTIALS, 11730 ERR_INVALID_AUTH_CREDENTIALS,
11586 3, 11731 3,
11587 kNoSSL, 11732 kNoSSL,
11588 {TestRound(kGetProxy, kProxyChallenge, OK), 11733 {TestRound(kGetProxy, kProxyChallenge, OK),
11589 TestRound(kGetProxyAuth, kServerChallenge, OK), 11734 TestRound(kGetProxyAuth, kServerChallenge, OK),
11590 TestRound(kGetAuthWithProxyAuth, kFailure, 11735 TestRound(kGetProxyAuth, kSuccess, OK)}},
11591 ERR_INVALID_AUTH_CREDENTIALS)}},
11592 {kProxy, 11736 {kProxy,
11593 AUTH_SYNC, 11737 AUTH_SYNC,
11594 OK, 11738 OK,
11595 kServer, 11739 kServer,
11596 AUTH_ASYNC, 11740 AUTH_ASYNC,
11597 OK, 11741 OK,
11598 3, 11742 3,
11599 kNoSSL, 11743 kNoSSL,
11600 {TestRound(kGetProxy, kProxyChallenge, OK), 11744 {TestRound(kGetProxy, kProxyChallenge, OK),
11601 TestRound(kGetProxyAuth, kServerChallenge, OK), 11745 TestRound(kGetProxyAuth, kServerChallenge, OK),
11602 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11746 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11603 {kProxy, 11747 {kProxy,
11604 AUTH_SYNC, 11748 AUTH_SYNC,
11605 OK, 11749 OK,
11606 kServer, 11750 kServer,
11607 AUTH_ASYNC, 11751 AUTH_ASYNC,
11608 ERR_INVALID_AUTH_CREDENTIALS, 11752 ERR_INVALID_AUTH_CREDENTIALS,
11609 3, 11753 3,
11610 kNoSSL, 11754 kNoSSL,
11611 {TestRound(kGetProxy, kProxyChallenge, OK), 11755 {TestRound(kGetProxy, kProxyChallenge, OK),
11612 TestRound(kGetProxyAuth, kServerChallenge, OK), 11756 TestRound(kGetProxyAuth, kServerChallenge, OK),
11613 TestRound(kGetAuthWithProxyAuth, kFailure, 11757 TestRound(kGetProxyAuth, kSuccess, OK)}},
11614 ERR_INVALID_AUTH_CREDENTIALS)}},
11615 {kProxy, 11758 {kProxy,
11616 AUTH_ASYNC, 11759 AUTH_ASYNC,
11617 OK, 11760 OK,
11618 kServer, 11761 kServer,
11619 AUTH_ASYNC, 11762 AUTH_ASYNC,
11620 OK, 11763 OK,
11621 3, 11764 3,
11622 kNoSSL, 11765 kNoSSL,
11623 {TestRound(kGetProxy, kProxyChallenge, OK), 11766 {TestRound(kGetProxy, kProxyChallenge, OK),
11624 TestRound(kGetProxyAuth, kServerChallenge, OK), 11767 TestRound(kGetProxyAuth, kServerChallenge, OK),
11625 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, 11768 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}},
11626 {kProxy, 11769 {kProxy,
11627 AUTH_ASYNC, 11770 AUTH_ASYNC,
11628 OK, 11771 OK,
11629 kServer, 11772 kServer,
11630 AUTH_ASYNC, 11773 AUTH_ASYNC,
11631 ERR_INVALID_AUTH_CREDENTIALS, 11774 ERR_INVALID_AUTH_CREDENTIALS,
11632 3, 11775 3,
11633 kNoSSL, 11776 kNoSSL,
11634 {TestRound(kGetProxy, kProxyChallenge, OK), 11777 {TestRound(kGetProxy, kProxyChallenge, OK),
11635 TestRound(kGetProxyAuth, kServerChallenge, OK), 11778 TestRound(kGetProxyAuth, kServerChallenge, OK),
11636 TestRound(kGetAuthWithProxyAuth, kFailure, 11779 TestRound(kGetProxyAuth, kSuccess, OK)}},
11637 ERR_INVALID_AUTH_CREDENTIALS)}},
11638 // Non-authenticating HTTPS server with a direct connection. 11780 // Non-authenticating HTTPS server with a direct connection.
11639 {NULL, 11781 {NULL,
11640 AUTH_NONE, 11782 AUTH_NONE,
11641 OK, 11783 OK,
11642 kSecureServer, 11784 kSecureServer,
11643 AUTH_NONE, 11785 AUTH_NONE,
11644 OK, 11786 OK,
11645 1, 11787 1,
11646 0, 11788 0,
11647 {TestRound(kGet, kSuccess, OK)}}, 11789 {TestRound(kGet, kSuccess, OK)}},
11648 // Authenticating HTTPS server with a direct connection. 11790 // Authenticating HTTPS server with a direct connection.
11649 {NULL, 11791 {NULL,
11650 AUTH_NONE, 11792 AUTH_NONE,
11651 OK, 11793 OK,
11652 kSecureServer, 11794 kSecureServer,
11653 AUTH_SYNC, 11795 AUTH_SYNC,
11654 OK, 11796 OK,
11655 2, 11797 2,
11656 0, 11798 0,
11657 {TestRound(kGet, kServerChallenge, OK), 11799 {TestRound(kGet, kServerChallenge, OK),
11658 TestRound(kGetAuth, kSuccess, OK)}}, 11800 TestRound(kGetAuth, kSuccess, OK)}},
11659 {NULL, 11801 {NULL,
11660 AUTH_NONE, 11802 AUTH_NONE,
11661 OK, 11803 OK,
11662 kSecureServer, 11804 kSecureServer,
11663 AUTH_SYNC, 11805 AUTH_SYNC,
11664 ERR_INVALID_AUTH_CREDENTIALS, 11806 ERR_INVALID_AUTH_CREDENTIALS,
11665 2, 11807 2,
11666 0, 11808 0,
11667 {TestRound(kGet, kServerChallenge, OK), 11809 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11668 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11669 {NULL, 11810 {NULL,
11670 AUTH_NONE, 11811 AUTH_NONE,
11671 OK, 11812 OK,
11672 kSecureServer, 11813 kSecureServer,
11673 AUTH_ASYNC, 11814 AUTH_ASYNC,
11674 OK, 11815 OK,
11675 2, 11816 2,
11676 0, 11817 0,
11677 {TestRound(kGet, kServerChallenge, OK), 11818 {TestRound(kGet, kServerChallenge, OK),
11678 TestRound(kGetAuth, kSuccess, OK)}}, 11819 TestRound(kGetAuth, kSuccess, OK)}},
11679 {NULL, 11820 {NULL,
11680 AUTH_NONE, 11821 AUTH_NONE,
11681 OK, 11822 OK,
11682 kSecureServer, 11823 kSecureServer,
11683 AUTH_ASYNC, 11824 AUTH_ASYNC,
11684 ERR_INVALID_AUTH_CREDENTIALS, 11825 ERR_INVALID_AUTH_CREDENTIALS,
11685 2, 11826 2,
11686 0, 11827 0,
11687 {TestRound(kGet, kServerChallenge, OK), 11828 {TestRound(kGet, kServerChallenge, OK), TestRound(kGet, kSuccess, OK)}},
11688 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}},
11689 // Non-authenticating HTTPS server with a non-authenticating proxy. 11829 // Non-authenticating HTTPS server with a non-authenticating proxy.
11690 {kProxy, 11830 {kProxy,
11691 AUTH_NONE, 11831 AUTH_NONE,
11692 OK, 11832 OK,
11693 kSecureServer, 11833 kSecureServer,
11694 AUTH_NONE, 11834 AUTH_NONE,
11695 OK, 11835 OK,
11696 1, 11836 1,
11697 0, 11837 0,
11698 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, 11838 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
(...skipping 10 matching lines...) Expand all
11709 TestRound(kGetAuth, kSuccess, OK)}}, 11849 TestRound(kGetAuth, kSuccess, OK)}},
11710 {kProxy, 11850 {kProxy,
11711 AUTH_NONE, 11851 AUTH_NONE,
11712 OK, 11852 OK,
11713 kSecureServer, 11853 kSecureServer,
11714 AUTH_SYNC, 11854 AUTH_SYNC,
11715 ERR_INVALID_AUTH_CREDENTIALS, 11855 ERR_INVALID_AUTH_CREDENTIALS,
11716 2, 11856 2,
11717 0, 11857 0,
11718 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11858 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11719 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11859 TestRound(kGet, kSuccess, OK)}},
11720 {kProxy, 11860 {kProxy,
11721 AUTH_NONE, 11861 AUTH_NONE,
11722 OK, 11862 OK,
11723 kSecureServer, 11863 kSecureServer,
11724 AUTH_ASYNC, 11864 AUTH_ASYNC,
11725 OK, 11865 OK,
11726 2, 11866 2,
11727 0, 11867 0,
11728 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11868 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11729 TestRound(kGetAuth, kSuccess, OK)}}, 11869 TestRound(kGetAuth, kSuccess, OK)}},
11730 {kProxy, 11870 {kProxy,
11731 AUTH_NONE, 11871 AUTH_NONE,
11732 OK, 11872 OK,
11733 kSecureServer, 11873 kSecureServer,
11734 AUTH_ASYNC, 11874 AUTH_ASYNC,
11735 ERR_INVALID_AUTH_CREDENTIALS, 11875 ERR_INVALID_AUTH_CREDENTIALS,
11736 2, 11876 2,
11737 0, 11877 0,
11738 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), 11878 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge),
11739 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11879 TestRound(kGet, kSuccess, OK)}},
11740 // Non-Authenticating HTTPS server through an authenticating proxy. 11880 // Non-Authenticating HTTPS server through an authenticating proxy.
11741 {kProxy, 11881 {kProxy,
11742 AUTH_SYNC, 11882 AUTH_SYNC,
11743 OK, 11883 OK,
11744 kSecureServer, 11884 kSecureServer,
11745 AUTH_NONE, 11885 AUTH_NONE,
11746 OK, 11886 OK,
11747 2, 11887 2,
11748 1, 11888 1,
11749 {TestRound(kConnect, kProxyChallenge, OK), 11889 {TestRound(kConnect, kProxyChallenge, OK),
11750 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11890 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11751 {kProxy, 11891 {kProxy,
11752 AUTH_SYNC, 11892 AUTH_SYNC,
11753 ERR_INVALID_AUTH_CREDENTIALS, 11893 ERR_INVALID_AUTH_CREDENTIALS,
11754 kSecureServer, 11894 kSecureServer,
11755 AUTH_NONE, 11895 AUTH_NONE,
11756 OK, 11896 OK,
11757 2, 11897 2,
11758 kNoSSL, 11898 kNoSSL,
11759 {TestRound(kConnect, kProxyChallenge, OK), 11899 {TestRound(kConnect, kProxyChallenge, OK),
11760 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11900 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11901 {kProxy,
11902 AUTH_SYNC,
11903 ERR_UNSUPPORTED_AUTH_SCHEME,
11904 kSecureServer,
11905 AUTH_NONE,
11906 OK,
11907 2,
11908 kNoSSL,
11909 {TestRound(kConnect, kProxyChallenge, OK),
11910 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11911 {kProxy,
11912 AUTH_SYNC,
11913 ERR_UNEXPECTED,
11914 kSecureServer,
11915 AUTH_NONE,
11916 OK,
11917 2,
11918 kNoSSL,
11919 {TestRound(kConnect, kProxyChallenge, OK),
11920 TestRound(kConnect, kProxyConnected, ERR_UNEXPECTED)}},
11761 {kProxy, 11921 {kProxy,
11762 AUTH_ASYNC, 11922 AUTH_ASYNC,
11763 OK, 11923 OK,
11764 kSecureServer, 11924 kSecureServer,
11765 AUTH_NONE, 11925 AUTH_NONE,
11766 OK, 11926 OK,
11767 2, 11927 2,
11768 1, 11928 1,
11769 {TestRound(kConnect, kProxyChallenge, OK), 11929 {TestRound(kConnect, kProxyChallenge, OK),
11770 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, 11930 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}},
11771 {kProxy, 11931 {kProxy,
11772 AUTH_ASYNC, 11932 AUTH_ASYNC,
11773 ERR_INVALID_AUTH_CREDENTIALS, 11933 ERR_INVALID_AUTH_CREDENTIALS,
11774 kSecureServer, 11934 kSecureServer,
11775 AUTH_NONE, 11935 AUTH_NONE,
11776 OK, 11936 OK,
11777 2, 11937 2,
11778 kNoSSL, 11938 kNoSSL,
11779 {TestRound(kConnect, kProxyChallenge, OK), 11939 {TestRound(kConnect, kProxyChallenge, OK),
11780 TestRound(kConnectProxyAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11940 TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}},
11781 // Authenticating HTTPS server through an authenticating proxy. 11941 // Authenticating HTTPS server through an authenticating proxy.
11782 {kProxy, 11942 {kProxy,
11783 AUTH_SYNC, 11943 AUTH_SYNC,
11784 OK, 11944 OK,
11785 kSecureServer, 11945 kSecureServer,
11786 AUTH_SYNC, 11946 AUTH_SYNC,
11787 OK, 11947 OK,
11788 3, 11948 3,
11789 1, 11949 1,
11790 {TestRound(kConnect, kProxyChallenge, OK), 11950 {TestRound(kConnect, kProxyChallenge, OK),
11791 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11951 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11792 &kServerChallenge), 11952 &kServerChallenge),
11793 TestRound(kGetAuth, kSuccess, OK)}}, 11953 TestRound(kGetAuth, kSuccess, OK)}},
11794 {kProxy, 11954 {kProxy,
11795 AUTH_SYNC, 11955 AUTH_SYNC,
11796 OK, 11956 OK,
11797 kSecureServer, 11957 kSecureServer,
11798 AUTH_SYNC, 11958 AUTH_SYNC,
11799 ERR_INVALID_AUTH_CREDENTIALS, 11959 ERR_INVALID_AUTH_CREDENTIALS,
11800 3, 11960 3,
11801 1, 11961 1,
11802 {TestRound(kConnect, kProxyChallenge, OK), 11962 {TestRound(kConnect, kProxyChallenge, OK),
11803 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11963 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11804 &kServerChallenge), 11964 &kServerChallenge),
11805 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11965 TestRound(kGet, kSuccess, OK)}},
11806 {kProxy, 11966 {kProxy,
11807 AUTH_ASYNC, 11967 AUTH_ASYNC,
11808 OK, 11968 OK,
11809 kSecureServer, 11969 kSecureServer,
11810 AUTH_SYNC, 11970 AUTH_SYNC,
11811 OK, 11971 OK,
11812 3, 11972 3,
11813 1, 11973 1,
11814 {TestRound(kConnect, kProxyChallenge, OK), 11974 {TestRound(kConnect, kProxyChallenge, OK),
11815 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11975 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11816 &kServerChallenge), 11976 &kServerChallenge),
11817 TestRound(kGetAuth, kSuccess, OK)}}, 11977 TestRound(kGetAuth, kSuccess, OK)}},
11818 {kProxy, 11978 {kProxy,
11819 AUTH_ASYNC, 11979 AUTH_ASYNC,
11820 OK, 11980 OK,
11821 kSecureServer, 11981 kSecureServer,
11822 AUTH_SYNC, 11982 AUTH_SYNC,
11823 ERR_INVALID_AUTH_CREDENTIALS, 11983 ERR_INVALID_AUTH_CREDENTIALS,
11824 3, 11984 3,
11825 1, 11985 1,
11826 {TestRound(kConnect, kProxyChallenge, OK), 11986 {TestRound(kConnect, kProxyChallenge, OK),
11827 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11987 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11828 &kServerChallenge), 11988 &kServerChallenge),
11829 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 11989 TestRound(kGet, kSuccess, OK)}},
11830 {kProxy, 11990 {kProxy,
11831 AUTH_SYNC, 11991 AUTH_SYNC,
11832 OK, 11992 OK,
11833 kSecureServer, 11993 kSecureServer,
11834 AUTH_ASYNC, 11994 AUTH_ASYNC,
11835 OK, 11995 OK,
11836 3, 11996 3,
11837 1, 11997 1,
11838 {TestRound(kConnect, kProxyChallenge, OK), 11998 {TestRound(kConnect, kProxyChallenge, OK),
11839 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 11999 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11840 &kServerChallenge), 12000 &kServerChallenge),
11841 TestRound(kGetAuth, kSuccess, OK)}}, 12001 TestRound(kGetAuth, kSuccess, OK)}},
11842 {kProxy, 12002 {kProxy,
11843 AUTH_SYNC, 12003 AUTH_SYNC,
11844 OK, 12004 OK,
11845 kSecureServer, 12005 kSecureServer,
11846 AUTH_ASYNC, 12006 AUTH_ASYNC,
11847 ERR_INVALID_AUTH_CREDENTIALS, 12007 ERR_INVALID_AUTH_CREDENTIALS,
11848 3, 12008 3,
11849 1, 12009 1,
11850 {TestRound(kConnect, kProxyChallenge, OK), 12010 {TestRound(kConnect, kProxyChallenge, OK),
11851 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12011 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11852 &kServerChallenge), 12012 &kServerChallenge),
11853 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12013 TestRound(kGet, kSuccess, OK)}},
11854 {kProxy, 12014 {kProxy,
11855 AUTH_ASYNC, 12015 AUTH_ASYNC,
11856 OK, 12016 OK,
11857 kSecureServer, 12017 kSecureServer,
11858 AUTH_ASYNC, 12018 AUTH_ASYNC,
11859 OK, 12019 OK,
11860 3, 12020 3,
11861 1, 12021 1,
11862 {TestRound(kConnect, kProxyChallenge, OK), 12022 {TestRound(kConnect, kProxyChallenge, OK),
11863 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12023 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11864 &kServerChallenge), 12024 &kServerChallenge),
11865 TestRound(kGetAuth, kSuccess, OK)}}, 12025 TestRound(kGetAuth, kSuccess, OK)}},
11866 {kProxy, 12026 {kProxy,
11867 AUTH_ASYNC, 12027 AUTH_ASYNC,
11868 OK, 12028 OK,
11869 kSecureServer, 12029 kSecureServer,
11870 AUTH_ASYNC, 12030 AUTH_ASYNC,
11871 ERR_INVALID_AUTH_CREDENTIALS, 12031 ERR_INVALID_AUTH_CREDENTIALS,
11872 3, 12032 3,
11873 1, 12033 1,
11874 {TestRound(kConnect, kProxyChallenge, OK), 12034 {TestRound(kConnect, kProxyChallenge, OK),
11875 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, 12035 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet,
11876 &kServerChallenge), 12036 &kServerChallenge),
11877 TestRound(kGetAuth, kFailure, ERR_INVALID_AUTH_CREDENTIALS)}}, 12037 TestRound(kGet, kSuccess, OK)}},
11878 }; 12038 };
11879 12039
11880 for (size_t i = 0; i < arraysize(test_configs); ++i) { 12040 for (size_t i = 0; i < arraysize(test_configs); ++i) {
12041 SCOPED_TRACE(::testing::Message() << "Test config " << i);
11881 HttpAuthHandlerMock::Factory* auth_factory( 12042 HttpAuthHandlerMock::Factory* auth_factory(
11882 new HttpAuthHandlerMock::Factory()); 12043 new HttpAuthHandlerMock::Factory());
11883 session_deps_.http_auth_handler_factory.reset(auth_factory); 12044 session_deps_.http_auth_handler_factory.reset(auth_factory);
11884 SSLInfo empty_ssl_info; 12045 SSLInfo empty_ssl_info;
11885 const TestConfig& test_config = test_configs[i]; 12046 const TestConfig& test_config = test_configs[i];
11886 12047
11887 // Set up authentication handlers as necessary. 12048 // Set up authentication handlers as necessary.
11888 if (test_config.proxy_auth_timing != AUTH_NONE) { 12049 if (test_config.proxy_auth_timing != AUTH_NONE) {
11889 for (int n = 0; n < 2; n++) { 12050 for (int n = 0; n < 2; n++) {
11890 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); 12051 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock());
(...skipping 3978 matching lines...) Expand 10 before | Expand all | Expand 10 after
15869 base::RunLoop().RunUntilIdle(); 16030 base::RunLoop().RunUntilIdle();
15870 16031
15871 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); 16032 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy);
15872 HttpRequestHeaders headers; 16033 HttpRequestHeaders headers;
15873 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 16034 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
15874 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); 16035 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding));
15875 } 16036 }
15876 #endif // !defined(OS_IOS) 16037 #endif // !defined(OS_IOS)
15877 16038
15878 } // namespace net 16039 } // 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