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

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