Chromium Code Reviews| Index: chrome/browser/signin/oauth2_token_service_unittest.cc |
| diff --git a/chrome/browser/signin/oauth2_token_service_unittest.cc b/chrome/browser/signin/oauth2_token_service_unittest.cc |
| index 730c30365c6d8d4a32e7501e22b1c7e89ad6e326..aa817d585ca355c2c1c9917d986304d3e05487b3 100644 |
| --- a/chrome/browser/signin/oauth2_token_service_unittest.cc |
| +++ b/chrome/browser/signin/oauth2_token_service_unittest.cc |
| @@ -16,6 +16,7 @@ |
| #include "google_apis/gaia/gaia_constants.h" |
| #include "google_apis/gaia/google_service_auth_error.h" |
| #include "google_apis/gaia/oauth2_access_token_consumer.h" |
| +#include "google_apis/gaia/oauth2_access_token_fetcher.h" |
| #include "net/http/http_status_code.h" |
| #include "net/url_request/test_url_fetcher_factory.h" |
| #include "net/url_request/url_request_status.h" |
| @@ -84,6 +85,10 @@ class OAuth2TokenServiceTest : public TokenServiceTestHarness { |
| BrowserThread::IO)))); |
| } |
| + virtual void TearDown() OVERRIDE { |
| + OAuth2AccessTokenFetcher::ResetLastFetcherIdForTest(); |
| + } |
| + |
| protected: |
| net::TestURLFetcherFactory factory_; |
| scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
| @@ -108,7 +113,7 @@ TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| fetcher->SetResponseString(std::string()); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -126,7 +131,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -155,7 +160,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -170,7 +175,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
| base::RunLoop().RunUntilIdle(); |
| // No new network fetcher. |
| - EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
| + EXPECT_EQ(1U, factory_.GetFetcherCount()); |
| EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| EXPECT_EQ("token", consumer_.last_token_); |
| @@ -181,8 +186,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| - fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + fetcher = factory_.GetFetcherByID(1); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -201,7 +207,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -217,8 +223,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| // Network failure. |
| - fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + fetcher = factory_.GetFetcherByID(1); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| fetcher->SetResponseString(std::string()); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -236,7 +243,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -251,8 +258,9 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
| EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| - fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + fetcher = factory_.GetFetcherByID(1); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -270,7 +278,7 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| request.reset(); |
| @@ -340,7 +348,7 @@ TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
| oauth2_service_->set_refresh_token(""); |
| request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); |
| base::RunLoop().RunUntilIdle(); |
| - EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
| + EXPECT_EQ(1U, factory_.GetFetcherCount()); |
| EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(1, consumer_.number_of_errors_); |
| } |
| @@ -355,6 +363,7 @@ TEST_F(OAuth2TokenServiceTest, |
| scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| scopes, &consumer_)); |
| base::RunLoop().RunUntilIdle(); |
| + ASSERT_EQ(1U, factory_.GetFetcherCount()); |
| net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
| // Note |request| is still pending when the refresh token changes. |
| @@ -367,7 +376,8 @@ TEST_F(OAuth2TokenServiceTest, |
| oauth2_service_->StartRequest(scopes, &consumer2)); |
| base::RunLoop().RunUntilIdle(); |
| - net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1); |
| fetcher2->set_response_code(net::HTTP_OK); |
| fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
| fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
| @@ -415,7 +425,8 @@ TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
| EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| EXPECT_EQ(1, consumer.number_of_errors_); |
| - fetcher = factory_.GetFetcherByID(0); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + fetcher = factory_.GetFetcherByID(1); |
| ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| fetcher->SetResponseString(std::string()); |
| @@ -436,7 +447,7 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -451,7 +462,7 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
| base::RunLoop().RunUntilIdle(); |
| // No new network fetcher. |
| - EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
| + ASSERT_EQ(1U, factory_.GetFetcherCount()); |
| EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| EXPECT_EQ("token", consumer_.last_token_); |
| @@ -463,8 +474,9 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(0, consumer_.number_of_errors_); |
| - fetcher = factory_.GetFetcherByID(0); |
| - EXPECT_TRUE(fetcher); |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + fetcher = factory_.GetFetcherByID(1); |
| + ASSERT_TRUE(fetcher); |
| fetcher->set_response_code(net::HTTP_OK); |
| fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| fetcher->delegate()->OnURLFetchComplete(fetcher); |
| @@ -523,3 +535,142 @@ TEST_F(OAuth2TokenServiceTest, CancelRequestsForToken) { |
| EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| EXPECT_EQ(3, consumer_.number_of_errors_); |
| } |
| + |
| +TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { |
| + std::string client_id_1("client1"); |
| + std::string client_secret_1("secret1"); |
| + std::string client_id_2("client2"); |
| + std::string client_secret_2("secret2"); |
| + std::set<std::string> scope_set; |
| + scope_set.insert("scope1"); |
| + scope_set.insert("scope2"); |
| + |
| + std::string refresh_token("refreshToken"); |
| + oauth2_service_->set_refresh_token(refresh_token); |
| + |
| + scoped_ptr<OAuth2TokenService::Request> request1( |
| + oauth2_service_->StartRequestForClient(std::string(), |
| + client_id_1, |
| + client_secret_1, |
| + scope_set, |
| + &consumer_)); |
| + scoped_ptr<OAuth2TokenService::Request> request2( |
| + oauth2_service_->StartRequestForClient(std::string(), |
| + client_id_2, |
| + client_secret_2, |
| + scope_set, |
| + &consumer_)); |
| + // Start a request that should be duplicate of |request1|. |
| + scoped_ptr<OAuth2TokenService::Request> request3( |
| + oauth2_service_->StartRequestForClient(std::string(), |
| + client_id_1, |
| + client_secret_1, |
| + scope_set, |
| + &consumer_)); |
| + base::RunLoop().RunUntilIdle(); |
| + |
| + // Check to make sure we have started exactly two fetchers. |
| + ASSERT_EQ(2U, factory_.GetFetcherCount()); |
| + net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
| + ASSERT_TRUE(fetcher1); |
| + net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1); |
| + ASSERT_TRUE(fetcher2); |
|
Roger Tawa OOO till Jul 10th
2013/08/16 21:16:50
Lines 574 to 577 seem redundant with line 573. I
zel
2013/08/19 16:03:17
Done.
|
| + |
| + const OAuth2TokenService::PendingFetcherMap& fetchers = |
| + oauth2_service_->GetPendingFetchersForTesting(); |
| + ASSERT_EQ(2U, |
| + fetchers.find(OAuth2TokenService::FetchParameters( |
| + std::string(), |
| + client_id_1, |
| + refresh_token, |
| + scope_set))->second->GetWaitingRequestCount()); |
| + ASSERT_EQ(1U, |
| + fetchers.find(OAuth2TokenService::FetchParameters( |
| + std::string(), |
| + client_id_2, |
| + refresh_token, |
| + scope_set))->second->GetWaitingRequestCount()); |
| + |
| + fetcher1->set_response_code(net::HTTP_OK); |
| + fetcher1->SetResponseString(GetValidTokenResponse("token1", 3600)); |
| + fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
| + |
| + fetcher2->set_response_code(net::HTTP_OK); |
| + fetcher2->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| + fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
| + |
| + EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| + EXPECT_EQ(0, consumer_.number_of_errors_); |
|
Roger Tawa OOO till Jul 10th
2013/08/16 21:16:50
Don't need lines 594 to 603 for this test.
zel
2013/08/19 16:03:17
Done.
|
| +} |
| + |
| +TEST_F(OAuth2TokenServiceTest, ClientScopeSetOrderTest) { |
| + OAuth2TokenService::ScopeSet set_0; |
| + OAuth2TokenService::ScopeSet set_1; |
| + set_1.insert("1"); |
| + |
| + OAuth2TokenService::ClientScopeSet sets[] = { |
| + OAuth2TokenService::ClientScopeSet("0", "0", set_0), |
| + OAuth2TokenService::ClientScopeSet("0", "0", set_1), |
| + OAuth2TokenService::ClientScopeSet("0", "1", set_0), |
| + OAuth2TokenService::ClientScopeSet("0", "1", set_1), |
| + OAuth2TokenService::ClientScopeSet("1", "0", set_0), |
| + OAuth2TokenService::ClientScopeSet("1", "0", set_1), |
| + OAuth2TokenService::ClientScopeSet("1", "1", set_0), |
| + OAuth2TokenService::ClientScopeSet("1", "1", set_1), |
| + }; |
| + |
| + for (size_t i = 0; i < arraysize(sets); i++) { |
| + for (size_t j = 0; j < arraysize(sets); j++) { |
| + if (i == j) { |
| + EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; |
| + } else if (i < j) { |
| + EXPECT_TRUE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; |
| + } else { |
| + EXPECT_TRUE(sets[j] < sets[i]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j; |
| + } |
| + } |
| + } |
| +} |
| + |
| +TEST_F(OAuth2TokenServiceTest, FetchParametersOrderTest) { |
| + OAuth2TokenService::ScopeSet set_0; |
| + OAuth2TokenService::ScopeSet set_1; |
| + set_1.insert("1"); |
| + |
| + OAuth2TokenService::FetchParameters params[] = { |
| + OAuth2TokenService::FetchParameters("0", "0", "0", set_0), |
| + OAuth2TokenService::FetchParameters("0", "0", "0", set_1), |
| + OAuth2TokenService::FetchParameters("0", "0", "1", set_0), |
| + OAuth2TokenService::FetchParameters("0", "0", "1", set_1), |
| + OAuth2TokenService::FetchParameters("0", "1", "0", set_0), |
| + OAuth2TokenService::FetchParameters("0", "1", "0", set_1), |
| + OAuth2TokenService::FetchParameters("0", "1", "1", set_0), |
| + OAuth2TokenService::FetchParameters("0", "1", "1", set_1), |
| + OAuth2TokenService::FetchParameters("1", "0", "0", set_0), |
| + OAuth2TokenService::FetchParameters("1", "0", "0", set_1), |
| + OAuth2TokenService::FetchParameters("1", "0", "1", set_0), |
| + OAuth2TokenService::FetchParameters("1", "0", "1", set_1), |
| + OAuth2TokenService::FetchParameters("1", "1", "0", set_0), |
| + OAuth2TokenService::FetchParameters("1", "1", "0", set_1), |
| + OAuth2TokenService::FetchParameters("1", "1", "1", set_0), |
| + OAuth2TokenService::FetchParameters("1", "1", "1", set_1) |
| + }; |
| + |
| + for (size_t i = 0; i < arraysize(params); i++) { |
| + for (size_t j = 0; j < arraysize(params); j++) { |
| + if (i == j) { |
| + EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
| + } else if (i < j) { |
| + EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
| + } else { |
| + EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
| + EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
| + } |
| + } |
| + } |
| +} |