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 7095b4304ac3f428fb788967985768f3159bdbbb..8f96f131a5405e80b6b7459ce7037b0fca7fd76e 100644 |
--- a/chrome/browser/signin/oauth2_token_service_unittest.cc |
+++ b/chrome/browser/signin/oauth2_token_service_unittest.cc |
@@ -2,108 +2,78 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <string> |
+ |
#include "base/stringprintf.h" |
#include "chrome/browser/signin/oauth2_token_service.h" |
-#include "chrome/browser/signin/oauth2_token_service_factory.h" |
+#include "chrome/browser/signin/oauth2_token_service_test_util.h" |
#include "chrome/browser/signin/token_service_factory.h" |
#include "chrome/browser/signin/token_service_unittest.h" |
#include "chrome/common/chrome_notification_types.h" |
-#include "content/public/browser/browser_thread.h" |
+#include "chrome/test/base/testing_browser_process.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" |
#include "net/http/http_status_code.h" |
#include "net/url_request/test_url_fetcher_factory.h" |
#include "net/url_request/url_request_status.h" |
+#include "net/url_request/url_request_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
using content::BrowserThread; |
-static const char kValidTokenResponse[] = |
- "{" |
- " \"access_token\": \"%s\"," |
- " \"expires_in\": %d," |
- " \"token_type\": \"Bearer\"" |
- "}"; |
- |
-std::string GetValidTokenResponse(std::string token, int expiration) { |
- return base::StringPrintf(kValidTokenResponse, token.c_str(), expiration); |
-} |
- |
-// A simple testing consumer. |
-class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer { |
- public: |
- TestingOAuth2TokenServiceConsumer() |
- : number_of_correct_tokens_(0), |
- last_error_(GoogleServiceAuthError::AuthErrorNone()), |
- number_of_errors_(0) {} |
- virtual ~TestingOAuth2TokenServiceConsumer() {} |
- |
- virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
- const std::string& token, |
- const base::Time& expiration_date) OVERRIDE { |
- last_token_ = token; |
- ++number_of_correct_tokens_; |
- } |
- |
- virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
- const GoogleServiceAuthError& error) OVERRIDE { |
- last_error_ = error; |
- ++number_of_errors_; |
- } |
- |
- std::string last_token_; |
- int number_of_correct_tokens_; |
- GoogleServiceAuthError last_error_; |
- int number_of_errors_; |
-}; |
- |
// A testing consumer that retries on error. |
class RetryingTestingOAuth2TokenServiceConsumer |
- : public OAuth2TokenService::Consumer { |
+ : public TestingOAuth2TokenServiceConsumer { |
public: |
RetryingTestingOAuth2TokenServiceConsumer( |
OAuth2TokenService* oauth2_service) |
- : oauth2_service_(oauth2_service), |
- number_of_correct_tokens_(0), |
- last_error_(GoogleServiceAuthError::AuthErrorNone()), |
- number_of_errors_(0) {} |
+ : oauth2_service_(oauth2_service) {} |
virtual ~RetryingTestingOAuth2TokenServiceConsumer() {} |
- virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
- const std::string& token, |
- const base::Time& expiration_date) OVERRIDE { |
- last_token_ = token; |
- ++number_of_correct_tokens_; |
- } |
- |
virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
const GoogleServiceAuthError& error) OVERRIDE { |
- last_error_ = error; |
- ++number_of_errors_; |
+ TestingOAuth2TokenServiceConsumer::OnGetTokenFailure(request, error); |
request_.reset(oauth2_service_->StartRequest( |
std::set<std::string>(), this).release()); |
} |
OAuth2TokenService* oauth2_service_; |
scoped_ptr<OAuth2TokenService::Request> request_; |
- std::string last_token_; |
- int number_of_correct_tokens_; |
- GoogleServiceAuthError last_error_; |
- int number_of_errors_; |
+}; |
+ |
+class TestOAuth2TokenService : public OAuth2TokenService { |
+ public: |
+ explicit TestOAuth2TokenService(net::URLRequestContextGetter* getter) |
+ : OAuth2TokenService(getter) { |
+ } |
+ |
+ // For testing: set the refresh token to be used. |
+ void set_refresh_token(const std::string& refresh_token) { |
+ refresh_token_ = refresh_token; |
+ } |
+ |
+ protected: |
+ std::string GetRefreshToken() OVERRIDE { |
+ return refresh_token_; |
+ } |
+ |
+ private: |
+ std::string refresh_token_; |
}; |
class OAuth2TokenServiceTest : public TokenServiceTestHarness { |
public: |
- OAuth2TokenServiceTest() {} |
+ OAuth2TokenServiceTest() |
+ : request_context_getter_(new net::TestURLRequestContextGetter( |
+ message_loop_.message_loop_proxy())) { |
+ } |
virtual void SetUp() OVERRIDE { |
TokenServiceTestHarness::SetUp(); |
io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO, |
&message_loop_)); |
- service_->UpdateCredentials(credentials_); |
- profile_->CreateRequestContext(); |
- oauth2_service_ = OAuth2TokenServiceFactory::GetForProfile(profile_.get()); |
+ oauth2_service_.reset(new TestOAuth2TokenService(request_context_getter_)); |
} |
virtual void TearDown() OVERRIDE { |
@@ -112,8 +82,9 @@ class OAuth2TokenServiceTest : public TokenServiceTestHarness { |
protected: |
scoped_ptr<content::TestBrowserThread> io_thread_; |
+ scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
net::TestURLFetcherFactory factory_; |
- OAuth2TokenService* oauth2_service_; |
+ scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
TestingOAuth2TokenServiceConsumer consumer_; |
}; |
@@ -122,44 +93,42 @@ TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer_.number_of_errors_); |
} |
TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
- std::set<std::string>(), &consumer_)); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
+ scoped_ptr<OAuth2TokenService::Request> request( |
+ oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
fetcher->SetResponseString(std::string()); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer_.number_of_errors_); |
EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
} |
TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
- std::set<std::string>(), &consumer_)); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
+ scoped_ptr<OAuth2TokenService::Request> request( |
+ oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
} |
@@ -174,22 +143,21 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
std::set<std::string> scopes2; |
scopes2.insert("s3"); |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
scopes1, &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
@@ -201,7 +169,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
// No new network fetcher. |
EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
- EXPECT_EQ(2, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
@@ -209,34 +177,33 @@ TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
scoped_ptr<OAuth2TokenService::Request> request3( |
oauth2_service_->StartRequest(scopes2, &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(2, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(3, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token2", consumer_.last_token_); |
} |
TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
@@ -244,7 +211,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
scoped_ptr<OAuth2TokenService::Request> request2( |
oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
// Network failure. |
@@ -253,26 +220,25 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
fetcher->SetResponseString(std::string()); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer_.number_of_errors_); |
} |
TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
// First request. |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
@@ -280,7 +246,7 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
scoped_ptr<OAuth2TokenService::Request> request2( |
oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
fetcher = factory_.GetFetcherByID(0); |
@@ -288,19 +254,18 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(2, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("another token", consumer_.last_token_); |
} |
TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
EXPECT_TRUE(fetcher); |
@@ -310,13 +275,12 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
} |
TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
@@ -325,20 +289,19 @@ TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
request.reset(); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
} |
TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
@@ -353,14 +316,13 @@ TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
} |
-TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndRequest) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- |
+TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
+ // We have a valid refresh token; the first request is successful. |
+ oauth2_service_->set_refresh_token("refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
@@ -368,61 +330,22 @@ TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndRequest) { |
fetcher->set_response_code(net::HTTP_OK); |
fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("token", consumer_.last_token_); |
- // Signs out |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- std::string()); |
- service_->EraseTokensFromDB(); |
- |
+ // The refresh token is no longer available; subsequent requests fail. |
+ oauth2_service_->set_refresh_token(""); |
request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); |
message_loop_.RunUntilIdle(); |
EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer_.number_of_errors_); |
} |
-TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndSignInAndSuccess) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- std::set<std::string> scopes; |
- scopes.insert("s1"); |
- scopes.insert("s2"); |
- |
- scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
- scopes, &consumer_)); |
- message_loop_.RunUntilIdle(); |
- net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
- fetcher->set_response_code(net::HTTP_OK); |
- fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
- fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
- EXPECT_EQ(0, consumer_.number_of_errors_); |
- EXPECT_EQ("token", consumer_.last_token_); |
- |
- // Signs out and signs in |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- std::string()); |
- service_->EraseTokensFromDB(); |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- |
- request = oauth2_service_->StartRequest(scopes, &consumer_); |
- message_loop_.RunUntilIdle(); |
- fetcher = factory_.GetFetcherByID(0); |
- fetcher->set_response_code(net::HTTP_OK); |
- fetcher->SetResponseString(GetValidTokenResponse("another token", 3600)); |
- fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(2, consumer_.number_of_correct_tokens_); |
- EXPECT_EQ(0, consumer_.number_of_errors_); |
- EXPECT_EQ("another token", consumer_.last_token_); |
-} |
- |
-TEST_F(OAuth2TokenServiceTest, PendingAndSignOutAndSignInAndSuccess) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "first refreshToken"); |
+TEST_F(OAuth2TokenServiceTest, |
+ ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
+ oauth2_service_->set_refresh_token("first refreshToken"); |
std::set<std::string> scopes; |
scopes.insert("s1"); |
scopes.insert("s2"); |
@@ -432,11 +355,11 @@ TEST_F(OAuth2TokenServiceTest, PendingAndSignOutAndSignInAndSuccess) { |
message_loop_.RunUntilIdle(); |
net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
- // Note |request| is still pending. |
- service_->EraseTokensFromDB(); |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "second refreshToken"); |
+ // Note |request| is still pending when the refresh token changes. |
+ oauth2_service_->set_refresh_token("second refreshToken"); |
+ // A 2nd request (using the new refresh token) that occurs and completes |
+ // while the 1st request is in flight is successful. |
TestingOAuth2TokenServiceConsumer consumer2; |
scoped_ptr<OAuth2TokenService::Request> request2( |
oauth2_service_->StartRequest(scopes, &consumer2)); |
@@ -446,41 +369,40 @@ TEST_F(OAuth2TokenServiceTest, PendingAndSignOutAndSignInAndSuccess) { |
fetcher2->set_response_code(net::HTTP_OK); |
fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
- EXPECT_EQ(1, consumer2.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer2.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer2.number_of_errors_); |
EXPECT_EQ("second token", consumer2.last_token_); |
fetcher1->set_response_code(net::HTTP_OK); |
fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); |
fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
- EXPECT_EQ(1, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
EXPECT_EQ("first token", consumer_.last_token_); |
} |
TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer_)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer_.number_of_errors_); |
- profile_.reset(); |
+ // The destructor should cancel all in-flight fetchers. |
+ oauth2_service_.reset(NULL); |
- EXPECT_EQ(0, consumer_.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer_.number_of_errors_); |
} |
TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
- service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
- "refreshToken"); |
- RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_); |
+ oauth2_service_->set_refresh_token("refreshToken"); |
+ RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get()); |
scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
std::set<std::string>(), &consumer)); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
EXPECT_EQ(0, consumer.number_of_errors_); |
net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
@@ -488,7 +410,7 @@ TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
fetcher->SetResponseString(std::string()); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(0, consumer.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
EXPECT_EQ(1, consumer.number_of_errors_); |
fetcher = factory_.GetFetcherByID(0); |
@@ -496,6 +418,6 @@ TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
fetcher->SetResponseString(std::string()); |
fetcher->delegate()->OnURLFetchComplete(fetcher); |
- EXPECT_EQ(0, consumer.number_of_correct_tokens_); |
+ EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
EXPECT_EQ(2, consumer.number_of_errors_); |
} |