Index: google_apis/gaia/oauth2_token_service_unittest.cc |
diff --git a/google_apis/gaia/oauth2_token_service_unittest.cc b/google_apis/gaia/oauth2_token_service_unittest.cc |
index 138ba86ba3b5d3cbd1ffca8fc00df28326ed38c2..924ae4cd0ee0a5d4f7195b1fefa241c7fad130e6 100644 |
--- a/google_apis/gaia/oauth2_token_service_unittest.cc |
+++ b/google_apis/gaia/oauth2_token_service_unittest.cc |
@@ -6,6 +6,7 @@ |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
+#include "google_apis/gaia/fake_oauth2_token_service_delegate.h" |
#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" |
@@ -43,9 +44,8 @@ class RetryingTestingOAuth2TokenServiceConsumer |
class TestOAuth2TokenService : public OAuth2TokenService { |
public: |
- explicit TestOAuth2TokenService(net::TestURLRequestContextGetter* getter) |
- : request_context_getter_(getter) { |
- } |
+ explicit TestOAuth2TokenService(FakeOAuth2TokenServiceDelegate* delegate) |
+ : OAuth2TokenService(delegate) {} |
void CancelAllRequestsForTest() { CancelAllRequests(); } |
@@ -53,49 +53,17 @@ class TestOAuth2TokenService : public OAuth2TokenService { |
CancelRequestsForAccount(account_id); |
} |
- // For testing: set the refresh token to be used. |
- void set_refresh_token(const std::string& account_id, |
- const std::string& refresh_token) { |
- if (refresh_token.empty()) |
- refresh_tokens_.erase(account_id); |
- else |
- refresh_tokens_[account_id] = refresh_token; |
- } |
- |
- bool RefreshTokenIsAvailable(const std::string& account_id) const override { |
- std::map<std::string, std::string>::const_iterator it = |
- refresh_tokens_.find(account_id); |
- |
- return it != refresh_tokens_.end(); |
- }; |
- |
- private: |
- // OAuth2TokenService implementation. |
- net::URLRequestContextGetter* GetRequestContext() override { |
- return request_context_getter_.get(); |
+ FakeOAuth2TokenServiceDelegate* GetFakeOAuth2TokenServiceDelegate() { |
+ return static_cast<FakeOAuth2TokenServiceDelegate*>(GetDelegate()); |
} |
- |
- OAuth2AccessTokenFetcher* CreateAccessTokenFetcher( |
- const std::string& account_id, |
- net::URLRequestContextGetter* getter, |
- OAuth2AccessTokenConsumer* consumer) override { |
- std::map<std::string, std::string>::const_iterator it = |
- refresh_tokens_.find(account_id); |
- DCHECK(it != refresh_tokens_.end()); |
- std::string refresh_token(it->second); |
- return new OAuth2AccessTokenFetcherImpl(consumer, getter, refresh_token); |
- }; |
- |
- std::map<std::string, std::string> refresh_tokens_; |
- scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
}; |
class OAuth2TokenServiceTest : public testing::Test { |
public: |
void SetUp() override { |
- oauth2_service_.reset( |
- new TestOAuth2TokenService(new net::TestURLRequestContextGetter( |
- message_loop_.task_runner()))); |
+ oauth2_service_.reset(new TestOAuth2TokenService( |
+ new FakeOAuth2TokenServiceDelegate(new net::TestURLRequestContextGetter( |
+ message_loop_.task_runner())))); |
account_id_ = "test_user@gmail.com"; |
} |
@@ -123,7 +91,8 @@ TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
} |
TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request( |
oauth2_service_->StartRequest(account_id_, |
OAuth2TokenService::ScopeSet(), |
@@ -143,7 +112,8 @@ TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
} |
TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request( |
oauth2_service_->StartRequest(account_id_, |
OAuth2TokenService::ScopeSet(), |
@@ -172,7 +142,8 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
OAuth2TokenService::ScopeSet scopes2; |
scopes2.insert("s3"); |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request( |
@@ -218,7 +189,8 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
} |
TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request( |
@@ -257,7 +229,8 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
} |
TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request( |
@@ -296,7 +269,8 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
} |
TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request( |
oauth2_service_->StartRequest(account_id_, |
@@ -318,7 +292,8 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
} |
TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
@@ -340,7 +315,8 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
} |
TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
@@ -363,7 +339,8 @@ TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
// We have a valid refresh token; the first request is successful. |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
base::RunLoop().RunUntilIdle(); |
@@ -377,7 +354,8 @@ TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
EXPECT_EQ("token", consumer_.last_token_); |
// The refresh token is no longer available; subsequent requests fail. |
- oauth2_service_->set_refresh_token(account_id_, ""); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, ""); |
request = oauth2_service_->StartRequest(account_id_, |
OAuth2TokenService::ScopeSet(), &consumer_); |
base::RunLoop().RunUntilIdle(); |
@@ -387,7 +365,8 @@ TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
TEST_F(OAuth2TokenServiceTest, |
ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
- oauth2_service_->set_refresh_token(account_id_, "first refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "first refreshToken"); |
OAuth2TokenService::ScopeSet scopes; |
scopes.insert("s1"); |
scopes.insert("s2"); |
@@ -402,7 +381,8 @@ TEST_F(OAuth2TokenServiceTest, |
ASSERT_TRUE(fetcher1); |
// Note |request| is still pending when the refresh token changes. |
- oauth2_service_->set_refresh_token(account_id_, "second refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "second refreshToken"); |
// A 2nd request (using the new refresh token) that occurs and completes |
// while the 1st request is in flight is successful. |
@@ -428,7 +408,8 @@ TEST_F(OAuth2TokenServiceTest, |
} |
TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
base::RunLoop().RunUntilIdle(); |
@@ -443,7 +424,8 @@ TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
} |
TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get(), |
account_id_); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
@@ -471,7 +453,8 @@ TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
OAuth2TokenService::ScopeSet scopes; |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request( |
@@ -501,7 +484,8 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
EXPECT_EQ("token", consumer_.last_token_); |
// Invalidating the token should return a new token on the next request. |
- oauth2_service_->InvalidateToken(account_id_, scopes, consumer_.last_token_); |
+ oauth2_service_->InvalidateAccessToken(account_id_, scopes, |
+ consumer_.last_token_); |
scoped_ptr<OAuth2TokenService::Request> request3( |
oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
base::RunLoop().RunUntilIdle(); |
@@ -518,12 +502,14 @@ TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
} |
TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request( |
oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
&consumer_)); |
- oauth2_service_->set_refresh_token("account_id_2", "refreshToken2"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ "account_id_2", "refreshToken2"); |
scoped_ptr<OAuth2TokenService::Request> request2( |
oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
&consumer_)); |
@@ -546,14 +532,16 @@ TEST_F(OAuth2TokenServiceTest, CancelRequestsForAccount) { |
scope_set_1.end()); |
scope_set_2.insert("scope3"); |
- oauth2_service_->set_refresh_token(account_id_, "refreshToken"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, "refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request1( |
oauth2_service_->StartRequest(account_id_, scope_set_1, &consumer_)); |
scoped_ptr<OAuth2TokenService::Request> request2( |
oauth2_service_->StartRequest(account_id_, scope_set_2, &consumer_)); |
std::string account_id_2("account_id_2"); |
- oauth2_service_->set_refresh_token(account_id_2, "refreshToken2"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_2, "refreshToken2"); |
scoped_ptr<OAuth2TokenService::Request> request3( |
oauth2_service_->StartRequest(account_id_2, scope_set_1, &consumer_)); |
@@ -582,7 +570,8 @@ TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { |
scope_set.insert("scope2"); |
std::string refresh_token("refreshToken"); |
- oauth2_service_->set_refresh_token(account_id_, refresh_token); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ account_id_, refresh_token); |
scoped_ptr<OAuth2TokenService::Request> request1( |
oauth2_service_->StartRequestForClient(account_id_, |
@@ -648,3 +637,41 @@ TEST_F(OAuth2TokenServiceTest, RequestParametersOrderTest) { |
} |
} |
} |
+ |
+TEST_F(OAuth2TokenServiceTest, UpdateClearsCache) { |
+ std::string kEmail = "test@gmail.com"; |
+ std::set<std::string> scope_list; |
+ scope_list.insert("scope"); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ kEmail, "refreshToken"); |
+ scoped_ptr<OAuth2TokenService::Request> request( |
+ oauth2_service_->StartRequest(kEmail, scope_list, &consumer_)); |
+ base::RunLoop().RunUntilIdle(); |
+ net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ fetcher->set_response_code(net::HTTP_OK); |
+ fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_errors_); |
+ EXPECT_EQ("token", consumer_.last_token_); |
+ EXPECT_EQ(1, (int)oauth2_service_->token_cache_.size()); |
+ |
+ // Signs out and signs in |
+ oauth2_service_->RevokeAllCredentials(); |
+ |
+ EXPECT_EQ(0, (int)oauth2_service_->token_cache_.size()); |
+ oauth2_service_->GetFakeOAuth2TokenServiceDelegate()->UpdateCredentials( |
+ kEmail, "refreshToken"); |
+ request = oauth2_service_->StartRequest(kEmail, scope_list, &consumer_); |
+ base::RunLoop().RunUntilIdle(); |
+ fetcher = factory_.GetFetcherByID(0); |
+ // ASSERT_TRUE(fetcher); |
+ fetcher->set_response_code(net::HTTP_OK); |
+ fetcher->SetResponseString(GetValidTokenResponse("another token", 3600)); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_errors_); |
+ EXPECT_EQ("another token", consumer_.last_token_); |
+ EXPECT_EQ(1, (int)oauth2_service_->token_cache_.size()); |
+} |