| OLD | NEW |
| 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 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 //----------------------------------------------------------------------------- | 634 //----------------------------------------------------------------------------- |
| 635 | 635 |
| 636 // Helper functions for validating that AuthChallengeInfo's are correctly | 636 // Helper functions for validating that AuthChallengeInfo's are correctly |
| 637 // configured for common cases. | 637 // configured for common cases. |
| 638 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { | 638 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { |
| 639 if (!auth_challenge) | 639 if (!auth_challenge) |
| 640 return false; | 640 return false; |
| 641 EXPECT_FALSE(auth_challenge->is_proxy); | 641 EXPECT_FALSE(auth_challenge->is_proxy); |
| 642 EXPECT_EQ("www.example.org:80", auth_challenge->challenger.ToString()); | 642 EXPECT_EQ("www.example.org:80", auth_challenge->challenger.ToString()); |
| 643 EXPECT_EQ("MyRealm1", auth_challenge->realm); | 643 EXPECT_EQ("MyRealm1", auth_challenge->realm); |
| 644 EXPECT_EQ("basic", auth_challenge->scheme); | 644 EXPECT_EQ(kBasicAuthScheme, auth_challenge->scheme); |
| 645 return true; | 645 return true; |
| 646 } | 646 } |
| 647 | 647 |
| 648 bool CheckBasicProxyAuth(const AuthChallengeInfo* auth_challenge) { | 648 bool CheckBasicProxyAuth(const AuthChallengeInfo* auth_challenge) { |
| 649 if (!auth_challenge) | 649 if (!auth_challenge) |
| 650 return false; | 650 return false; |
| 651 EXPECT_TRUE(auth_challenge->is_proxy); | 651 EXPECT_TRUE(auth_challenge->is_proxy); |
| 652 EXPECT_EQ("myproxy:70", auth_challenge->challenger.ToString()); | 652 EXPECT_EQ("myproxy:70", auth_challenge->challenger.ToString()); |
| 653 EXPECT_EQ("MyRealm1", auth_challenge->realm); | 653 EXPECT_EQ("MyRealm1", auth_challenge->realm); |
| 654 EXPECT_EQ("basic", auth_challenge->scheme); | 654 EXPECT_EQ(kBasicAuthScheme, auth_challenge->scheme); |
| 655 return true; | 655 return true; |
| 656 } | 656 } |
| 657 | 657 |
| 658 bool CheckDigestServerAuth(const AuthChallengeInfo* auth_challenge) { | 658 bool CheckDigestServerAuth(const AuthChallengeInfo* auth_challenge) { |
| 659 if (!auth_challenge) | 659 if (!auth_challenge) |
| 660 return false; | 660 return false; |
| 661 EXPECT_FALSE(auth_challenge->is_proxy); | 661 EXPECT_FALSE(auth_challenge->is_proxy); |
| 662 EXPECT_EQ("www.example.org:80", auth_challenge->challenger.ToString()); | 662 EXPECT_EQ("www.example.org:80", auth_challenge->challenger.ToString()); |
| 663 EXPECT_EQ("digestive", auth_challenge->realm); | 663 EXPECT_EQ("digestive", auth_challenge->realm); |
| 664 EXPECT_EQ("digest", auth_challenge->scheme); | 664 EXPECT_EQ(kDigestAuthScheme, auth_challenge->scheme); |
| 665 return true; | 665 return true; |
| 666 } | 666 } |
| 667 | 667 |
| 668 #if defined(NTLM_PORTABLE) | 668 #if defined(NTLM_PORTABLE) |
| 669 bool CheckNTLMServerAuth(const AuthChallengeInfo* auth_challenge) { | 669 bool CheckNTLMServerAuth(const AuthChallengeInfo* auth_challenge) { |
| 670 if (!auth_challenge) | 670 if (!auth_challenge) |
| 671 return false; | 671 return false; |
| 672 EXPECT_FALSE(auth_challenge->is_proxy); | 672 EXPECT_FALSE(auth_challenge->is_proxy); |
| 673 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); | 673 EXPECT_EQ("172.22.68.17:80", auth_challenge->challenger.ToString()); |
| 674 EXPECT_EQ(std::string(), auth_challenge->realm); | 674 EXPECT_EQ(std::string(), auth_challenge->realm); |
| 675 EXPECT_EQ("ntlm", auth_challenge->scheme); | 675 EXPECT_EQ(kNtlmAuthScheme, auth_challenge->scheme); |
| 676 return true; | 676 return true; |
| 677 } | 677 } |
| 678 #endif // defined(NTLM_PORTABLE) | 678 #endif // defined(NTLM_PORTABLE) |
| 679 | 679 |
| 680 } // namespace | 680 } // namespace |
| 681 | 681 |
| 682 TEST_P(HttpNetworkTransactionTest, Basic) { | 682 TEST_P(HttpNetworkTransactionTest, Basic) { |
| 683 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 683 scoped_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 684 scoped_ptr<HttpTransaction> trans( | 684 scoped_ptr<HttpTransaction> trans( |
| 685 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 685 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 5816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6502 rv = callback1.WaitForResult(); | 6502 rv = callback1.WaitForResult(); |
| 6503 EXPECT_EQ(OK, rv); | 6503 EXPECT_EQ(OK, rv); |
| 6504 | 6504 |
| 6505 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6505 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6506 ASSERT_TRUE(response != NULL); | 6506 ASSERT_TRUE(response != NULL); |
| 6507 ASSERT_TRUE(response->auth_challenge.get()); | 6507 ASSERT_TRUE(response->auth_challenge.get()); |
| 6508 EXPECT_FALSE(response->auth_challenge->is_proxy); | 6508 EXPECT_FALSE(response->auth_challenge->is_proxy); |
| 6509 EXPECT_EQ("www.example.org:80", | 6509 EXPECT_EQ("www.example.org:80", |
| 6510 response->auth_challenge->challenger.ToString()); | 6510 response->auth_challenge->challenger.ToString()); |
| 6511 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); | 6511 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); |
| 6512 EXPECT_EQ("basic", response->auth_challenge->scheme); | 6512 EXPECT_EQ(kBasicAuthScheme, response->auth_challenge->scheme); |
| 6513 | 6513 |
| 6514 TestCompletionCallback callback2; | 6514 TestCompletionCallback callback2; |
| 6515 | 6515 |
| 6516 rv = trans->RestartWithAuth( | 6516 rv = trans->RestartWithAuth( |
| 6517 AuthCredentials(kFoo2, kBar2), callback2.callback()); | 6517 AuthCredentials(kFoo2, kBar2), callback2.callback()); |
| 6518 EXPECT_EQ(ERR_IO_PENDING, rv); | 6518 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6519 | 6519 |
| 6520 rv = callback2.WaitForResult(); | 6520 rv = callback2.WaitForResult(); |
| 6521 EXPECT_EQ(OK, rv); | 6521 EXPECT_EQ(OK, rv); |
| 6522 | 6522 |
| (...skipping 2819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9342 EXPECT_EQ(ERR_IO_PENDING, rv); | 9342 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9343 rv = callback1.WaitForResult(); | 9343 rv = callback1.WaitForResult(); |
| 9344 EXPECT_EQ(OK, rv); | 9344 EXPECT_EQ(OK, rv); |
| 9345 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9345 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9346 ASSERT_TRUE(response != NULL); | 9346 ASSERT_TRUE(response != NULL); |
| 9347 const AuthChallengeInfo* challenge = response->auth_challenge.get(); | 9347 const AuthChallengeInfo* challenge = response->auth_challenge.get(); |
| 9348 ASSERT_FALSE(challenge == NULL); | 9348 ASSERT_FALSE(challenge == NULL); |
| 9349 EXPECT_FALSE(challenge->is_proxy); | 9349 EXPECT_FALSE(challenge->is_proxy); |
| 9350 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); | 9350 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); |
| 9351 EXPECT_EQ("first_realm", challenge->realm); | 9351 EXPECT_EQ("first_realm", challenge->realm); |
| 9352 EXPECT_EQ("basic", challenge->scheme); | 9352 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9353 | 9353 |
| 9354 // Issue the second request with an incorrect password. There should be a | 9354 // Issue the second request with an incorrect password. There should be a |
| 9355 // password prompt for second_realm waiting to be filled in after the | 9355 // password prompt for second_realm waiting to be filled in after the |
| 9356 // transaction completes. | 9356 // transaction completes. |
| 9357 TestCompletionCallback callback2; | 9357 TestCompletionCallback callback2; |
| 9358 rv = trans->RestartWithAuth( | 9358 rv = trans->RestartWithAuth( |
| 9359 AuthCredentials(kFirst, kBaz), callback2.callback()); | 9359 AuthCredentials(kFirst, kBaz), callback2.callback()); |
| 9360 EXPECT_EQ(ERR_IO_PENDING, rv); | 9360 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9361 rv = callback2.WaitForResult(); | 9361 rv = callback2.WaitForResult(); |
| 9362 EXPECT_EQ(OK, rv); | 9362 EXPECT_EQ(OK, rv); |
| 9363 response = trans->GetResponseInfo(); | 9363 response = trans->GetResponseInfo(); |
| 9364 ASSERT_TRUE(response != NULL); | 9364 ASSERT_TRUE(response != NULL); |
| 9365 challenge = response->auth_challenge.get(); | 9365 challenge = response->auth_challenge.get(); |
| 9366 ASSERT_FALSE(challenge == NULL); | 9366 ASSERT_FALSE(challenge == NULL); |
| 9367 EXPECT_FALSE(challenge->is_proxy); | 9367 EXPECT_FALSE(challenge->is_proxy); |
| 9368 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); | 9368 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); |
| 9369 EXPECT_EQ("second_realm", challenge->realm); | 9369 EXPECT_EQ("second_realm", challenge->realm); |
| 9370 EXPECT_EQ("basic", challenge->scheme); | 9370 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9371 | 9371 |
| 9372 // Issue the third request with another incorrect password. There should be | 9372 // Issue the third request with another incorrect password. There should be |
| 9373 // a password prompt for first_realm waiting to be filled in. If the password | 9373 // a password prompt for first_realm waiting to be filled in. If the password |
| 9374 // prompt is not present, it indicates that the HttpAuthCacheEntry for | 9374 // prompt is not present, it indicates that the HttpAuthCacheEntry for |
| 9375 // first_realm was not correctly removed. | 9375 // first_realm was not correctly removed. |
| 9376 TestCompletionCallback callback3; | 9376 TestCompletionCallback callback3; |
| 9377 rv = trans->RestartWithAuth( | 9377 rv = trans->RestartWithAuth( |
| 9378 AuthCredentials(kSecond, kFou), callback3.callback()); | 9378 AuthCredentials(kSecond, kFou), callback3.callback()); |
| 9379 EXPECT_EQ(ERR_IO_PENDING, rv); | 9379 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9380 rv = callback3.WaitForResult(); | 9380 rv = callback3.WaitForResult(); |
| 9381 EXPECT_EQ(OK, rv); | 9381 EXPECT_EQ(OK, rv); |
| 9382 response = trans->GetResponseInfo(); | 9382 response = trans->GetResponseInfo(); |
| 9383 ASSERT_TRUE(response != NULL); | 9383 ASSERT_TRUE(response != NULL); |
| 9384 challenge = response->auth_challenge.get(); | 9384 challenge = response->auth_challenge.get(); |
| 9385 ASSERT_FALSE(challenge == NULL); | 9385 ASSERT_FALSE(challenge == NULL); |
| 9386 EXPECT_FALSE(challenge->is_proxy); | 9386 EXPECT_FALSE(challenge->is_proxy); |
| 9387 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); | 9387 EXPECT_EQ("www.example.org:80", challenge->challenger.ToString()); |
| 9388 EXPECT_EQ("first_realm", challenge->realm); | 9388 EXPECT_EQ("first_realm", challenge->realm); |
| 9389 EXPECT_EQ("basic", challenge->scheme); | 9389 EXPECT_EQ(kBasicAuthScheme, challenge->scheme); |
| 9390 | 9390 |
| 9391 // Issue the fourth request with the correct password and username. | 9391 // Issue the fourth request with the correct password and username. |
| 9392 TestCompletionCallback callback4; | 9392 TestCompletionCallback callback4; |
| 9393 rv = trans->RestartWithAuth( | 9393 rv = trans->RestartWithAuth( |
| 9394 AuthCredentials(kFirst, kBar), callback4.callback()); | 9394 AuthCredentials(kFirst, kBar), callback4.callback()); |
| 9395 EXPECT_EQ(ERR_IO_PENDING, rv); | 9395 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9396 rv = callback4.WaitForResult(); | 9396 rv = callback4.WaitForResult(); |
| 9397 EXPECT_EQ(OK, rv); | 9397 EXPECT_EQ(OK, rv); |
| 9398 response = trans->GetResponseInfo(); | 9398 response = trans->GetResponseInfo(); |
| 9399 ASSERT_TRUE(response != NULL); | 9399 ASSERT_TRUE(response != NULL); |
| (...skipping 5967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15367 std::string response_data; | 15367 std::string response_data; |
| 15368 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 15368 EXPECT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 15369 | 15369 |
| 15370 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), | 15370 EXPECT_EQ(CountWriteBytes(data_writes, arraysize(data_writes)), |
| 15371 trans->GetTotalSentBytes()); | 15371 trans->GetTotalSentBytes()); |
| 15372 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), | 15372 EXPECT_EQ(CountReadBytes(data_reads, arraysize(data_reads)), |
| 15373 trans->GetTotalReceivedBytes()); | 15373 trans->GetTotalReceivedBytes()); |
| 15374 } | 15374 } |
| 15375 | 15375 |
| 15376 } // namespace net | 15376 } // namespace net |
| OLD | NEW |