Index: google_apis/gaia/oauth2_token_service_request_unittest.cc |
diff --git a/chrome/browser/signin/profile_oauth2_token_service_request_unittest.cc b/google_apis/gaia/oauth2_token_service_request_unittest.cc |
similarity index 21% |
rename from chrome/browser/signin/profile_oauth2_token_service_request_unittest.cc |
rename to google_apis/gaia/oauth2_token_service_request_unittest.cc |
index 0ada8e84fb0281d16e9f6631af31f035f813a04b..b6a62a38f0b1fccbe7344a350720f98b7999413a 100644 |
--- a/chrome/browser/signin/profile_oauth2_token_service_request_unittest.cc |
+++ b/google_apis/gaia/oauth2_token_service_request_unittest.cc |
@@ -1,17 +1,14 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/signin/profile_oauth2_token_service_request.h" |
+ |
+#include "google_apis/gaia/oauth2_token_service_request.h" |
#include <set> |
#include <string> |
#include <vector> |
#include "base/threading/thread.h" |
-#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
-#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
-#include "chrome/test/base/testing_profile.h" |
-#include "content/public/test/test_browser_thread.h" |
+#include "google_apis/gaia/fake_oauth2_token_service.h" |
#include "google_apis/gaia/google_service_auth_error.h" |
#include "google_apis/gaia/oauth2_token_service.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -20,7 +17,6 @@ namespace { |
const char kAccessToken[] = "access_token"; |
const char kAccountId[] = "test_user@gmail.com"; |
-const char kRefreshToken[] = "refresh_token"; |
class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer { |
public: |
@@ -33,17 +29,17 @@ class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer { |
virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
const GoogleServiceAuthError& error) OVERRIDE; |
+ int num_get_token_success_; |
+ int num_get_token_failure_; |
std::string last_token_; |
- int number_of_successful_tokens_; |
GoogleServiceAuthError last_error_; |
- int number_of_errors_; |
}; |
TestingOAuth2TokenServiceConsumer::TestingOAuth2TokenServiceConsumer() |
: OAuth2TokenService::Consumer("test"), |
- number_of_successful_tokens_(0), |
- last_error_(GoogleServiceAuthError::AuthErrorNone()), |
- number_of_errors_(0) { |
+ num_get_token_success_(0), |
+ num_get_token_failure_(0), |
+ last_error_(GoogleServiceAuthError::AuthErrorNone()) { |
} |
TestingOAuth2TokenServiceConsumer::~TestingOAuth2TokenServiceConsumer() { |
@@ -54,106 +50,237 @@ void TestingOAuth2TokenServiceConsumer::OnGetTokenSuccess( |
const std::string& token, |
const base::Time& expiration_date) { |
last_token_ = token; |
- ++number_of_successful_tokens_; |
+ ++num_get_token_success_; |
} |
void TestingOAuth2TokenServiceConsumer::OnGetTokenFailure( |
const OAuth2TokenService::Request* request, |
const GoogleServiceAuthError& error) { |
last_error_ = error; |
- ++number_of_errors_; |
+ ++num_get_token_failure_; |
+} |
+ |
+// A mock implementation of an OAuth2TokenService. |
+// |
+// Use SetResponse to vary the response to token requests. |
+class MockOAuth2TokenService : public FakeOAuth2TokenService { |
+ public: |
+ MockOAuth2TokenService(); |
+ virtual ~MockOAuth2TokenService(); |
+ |
+ void SetResponse(const GoogleServiceAuthError& error, |
+ const std::string& access_token, |
+ const base::Time& expiration); |
+ int num_invalidate_token() const; |
msarda
2014/05/30 14:37:31
Simple accessor methods should be inlined.
maniscalco
2014/05/30 17:48:08
Done.
|
+ const std::string& last_token_invalidated() const; |
+ |
+ protected: |
+ virtual void FetchOAuth2Token(RequestImpl* request, |
+ const std::string& account_id, |
+ net::URLRequestContextGetter* getter, |
+ const std::string& client_id, |
+ const std::string& client_secret, |
+ const ScopeSet& scopes) OVERRIDE; |
+ |
+ virtual void InvalidateOAuth2Token(const std::string& account_id, |
+ const std::string& client_id, |
+ const ScopeSet& scopes, |
+ const std::string& access_token) OVERRIDE; |
+ |
+ private: |
+ GoogleServiceAuthError response_error_; |
+ std::string response_access_token_; |
+ base::Time response_expiration_; |
+ int num_invalidate_token_; |
+ std::string last_token_invalidated_; |
+}; |
+ |
+MockOAuth2TokenService::MockOAuth2TokenService() |
+ : response_error_(GoogleServiceAuthError::AuthErrorNone()), |
+ response_access_token_(kAccessToken), |
+ response_expiration_(base::Time::Max()), |
+ num_invalidate_token_(0) { |
+} |
+ |
+MockOAuth2TokenService::~MockOAuth2TokenService() { |
+} |
+ |
+void MockOAuth2TokenService::SetResponse(const GoogleServiceAuthError& error, |
+ const std::string& access_token, |
+ const base::Time& expiration) { |
+ response_error_ = error; |
+ response_access_token_ = access_token; |
+ response_expiration_ = expiration; |
+} |
+ |
+int MockOAuth2TokenService::num_invalidate_token() const { |
+ return num_invalidate_token_; |
+} |
+ |
+const std::string& MockOAuth2TokenService::last_token_invalidated() const { |
+ return last_token_invalidated_; |
+} |
+ |
+void MockOAuth2TokenService::FetchOAuth2Token( |
+ RequestImpl* request, |
+ const std::string& account_id, |
+ net::URLRequestContextGetter* getter, |
+ const std::string& client_id, |
+ const std::string& client_secret, |
+ const ScopeSet& scopes) { |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&OAuth2TokenService::RequestImpl::InformConsumer, |
+ request->AsWeakPtr(), |
+ response_error_, |
+ response_access_token_, |
+ response_expiration_)); |
} |
-class ProfileOAuth2TokenServiceRequestTest : public testing::Test { |
+void MockOAuth2TokenService::InvalidateOAuth2Token( |
+ const std::string& account_id, |
+ const std::string& client_id, |
+ const ScopeSet& scopes, |
+ const std::string& access_token) { |
+ ++num_invalidate_token_; |
+ last_token_invalidated_ = access_token; |
+} |
+ |
+class OAuth2TokenServiceRequestTest : public testing::Test { |
public: |
virtual void SetUp() OVERRIDE; |
protected: |
- base::MessageLoop ui_loop_; |
- scoped_ptr<content::TestBrowserThread> ui_thread_; |
+ class Provider : public OAuth2TokenServiceRequest::TokenServiceProvider { |
+ public: |
+ Provider(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
+ OAuth2TokenService* token_service); |
- scoped_ptr<Profile> profile_; |
- TestingOAuth2TokenServiceConsumer consumer_; |
- FakeProfileOAuth2TokenService* oauth2_service_; |
+ virtual scoped_refptr<base::SingleThreadTaskRunner> |
+ GetTokenServiceTaskRunner() OVERRIDE; |
+ virtual OAuth2TokenService* GetTokenService() OVERRIDE; |
+ |
+ private: |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ OAuth2TokenService* token_service_; |
+ }; |
- scoped_ptr<ProfileOAuth2TokenServiceRequest> request_; |
+ base::MessageLoop ui_loop_; |
+ scoped_ptr<MockOAuth2TokenService> oauth2_service_; |
+ scoped_ptr<OAuth2TokenServiceRequest::TokenServiceProvider> provider_; |
+ TestingOAuth2TokenServiceConsumer consumer_; |
}; |
-void ProfileOAuth2TokenServiceRequestTest::SetUp() { |
- ui_thread_.reset(new content::TestBrowserThread(content::BrowserThread::UI, |
- &ui_loop_)); |
- TestingProfile::Builder builder; |
- builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), |
- &BuildFakeProfileOAuth2TokenService); |
- profile_ = builder.Build(); |
+void OAuth2TokenServiceRequestTest::SetUp() { |
+ oauth2_service_.reset(new MockOAuth2TokenService); |
+ oauth2_service_->AddAccount(kAccountId); |
+ provider_.reset( |
+ new Provider(base::MessageLoopProxy::current(), oauth2_service_.get())); |
+} |
- oauth2_service_ = (FakeProfileOAuth2TokenService*) |
- ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); |
+OAuth2TokenServiceRequestTest::Provider::Provider( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
+ OAuth2TokenService* token_service) |
+ : task_runner_(task_runner), token_service_(token_service) { |
} |
-TEST_F(ProfileOAuth2TokenServiceRequestTest, |
- Failure) { |
- scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
- ProfileOAuth2TokenServiceRequest::CreateAndStart( |
- profile_.get(), |
- std::string(), |
- OAuth2TokenService::ScopeSet(), |
- &consumer_)); |
- oauth2_service_->IssueErrorForAllPendingRequests( |
- GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); |
+scoped_refptr<base::SingleThreadTaskRunner> |
+OAuth2TokenServiceRequestTest::Provider::GetTokenServiceTaskRunner() { |
+ return task_runner_; |
+} |
+ |
+OAuth2TokenService* OAuth2TokenServiceRequestTest::Provider::GetTokenService() { |
+ return token_service_; |
+} |
+ |
+TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Failure) { |
+ oauth2_service_->SetResponse( |
+ GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE), |
+ std::string(), |
+ base::Time()); |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStart(provider_.get(), |
+ kAccountId, |
+ OAuth2TokenService::ScopeSet(), |
+ &consumer_)); |
ui_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
- EXPECT_EQ(1, consumer_.number_of_errors_); |
+ EXPECT_EQ(0, consumer_.num_get_token_success_); |
+ EXPECT_EQ(1, consumer_.num_get_token_failure_); |
+ EXPECT_EQ(GoogleServiceAuthError::SERVICE_UNAVAILABLE, |
+ consumer_.last_error_.state()); |
+ EXPECT_EQ(0, oauth2_service_->num_invalidate_token()); |
} |
-TEST_F(ProfileOAuth2TokenServiceRequestTest, Success) { |
- oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
- scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
- ProfileOAuth2TokenServiceRequest::CreateAndStart( |
- profile_.get(), |
- kAccountId, |
- OAuth2TokenService::ScopeSet(), |
- &consumer_)); |
- oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
- base::Time::Max()); |
+TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Success) { |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStart(provider_.get(), |
+ kAccountId, |
+ OAuth2TokenService::ScopeSet(), |
+ &consumer_)); |
ui_loop_.RunUntilIdle(); |
- EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
+ EXPECT_EQ(1, consumer_.num_get_token_success_); |
+ EXPECT_EQ(0, consumer_.num_get_token_failure_); |
EXPECT_EQ(kAccessToken, consumer_.last_token_); |
- EXPECT_EQ(0, consumer_.number_of_errors_); |
+ EXPECT_EQ(0, oauth2_service_->num_invalidate_token()); |
} |
-TEST_F(ProfileOAuth2TokenServiceRequestTest, |
- RequestDeletionBeforeServiceComplete) { |
- oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
- scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
- ProfileOAuth2TokenServiceRequest::CreateAndStart( |
- profile_.get(), |
- kAccountId, |
- OAuth2TokenService::ScopeSet(), |
- &consumer_)); |
+TEST_F(OAuth2TokenServiceRequestTest, |
+ CreateAndStart_DestroyRequestBeforeCompletes) { |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStart(provider_.get(), |
+ kAccountId, |
+ OAuth2TokenService::ScopeSet(), |
+ &consumer_)); |
request.reset(); |
- oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
- base::Time::Max()); |
ui_loop_.RunUntilIdle(); |
- EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
- EXPECT_EQ(0, consumer_.number_of_errors_); |
+ EXPECT_EQ(0, consumer_.num_get_token_success_); |
+ EXPECT_EQ(0, consumer_.num_get_token_failure_); |
+ EXPECT_EQ(0, oauth2_service_->num_invalidate_token()); |
+} |
+ |
+TEST_F(OAuth2TokenServiceRequestTest, |
+ CreateAndStart_DestroyRequestAfterCompletes) { |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStart(provider_.get(), |
+ kAccountId, |
+ OAuth2TokenService::ScopeSet(), |
+ &consumer_)); |
+ ui_loop_.RunUntilIdle(); |
+ request.reset(); |
+ EXPECT_EQ(1, consumer_.num_get_token_success_); |
+ EXPECT_EQ(0, consumer_.num_get_token_failure_); |
+ EXPECT_EQ(kAccessToken, consumer_.last_token_); |
+ EXPECT_EQ(0, oauth2_service_->num_invalidate_token()); |
} |
-TEST_F(ProfileOAuth2TokenServiceRequestTest, |
- RequestDeletionAfterServiceComplete) { |
- oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); |
- scoped_ptr<ProfileOAuth2TokenServiceRequest> request( |
- ProfileOAuth2TokenServiceRequest::CreateAndStart( |
- profile_.get(), |
+TEST_F(OAuth2TokenServiceRequestTest, CreateAndStartInvalidate) { |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStartInvalidate( |
+ provider_.get(), |
kAccountId, |
OAuth2TokenService::ScopeSet(), |
- &consumer_)); |
- oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, |
- base::Time::Max()); |
+ kAccessToken)); |
ui_loop_.RunUntilIdle(); |
+ EXPECT_EQ(0, consumer_.num_get_token_success_); |
+ EXPECT_EQ(0, consumer_.num_get_token_failure_); |
+ EXPECT_EQ(kAccessToken, oauth2_service_->last_token_invalidated()); |
+ EXPECT_EQ(1, oauth2_service_->num_invalidate_token()); |
+} |
+ |
+TEST_F(OAuth2TokenServiceRequestTest, |
+ CreateAndStartInvalidate_DestroyBeforeCompletes) { |
+ scoped_ptr<OAuth2TokenServiceRequest> request( |
+ OAuth2TokenServiceRequest::CreateAndStartInvalidate( |
+ provider_.get(), |
+ kAccountId, |
+ OAuth2TokenService::ScopeSet(), |
+ kAccessToken)); |
request.reset(); |
- EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
- EXPECT_EQ(0, consumer_.number_of_errors_); |
+ ui_loop_.RunUntilIdle(); |
+ EXPECT_EQ(0, consumer_.num_get_token_success_); |
+ EXPECT_EQ(0, consumer_.num_get_token_failure_); |
+ EXPECT_EQ(kAccessToken, oauth2_service_->last_token_invalidated()); |
+ EXPECT_EQ(1, oauth2_service_->num_invalidate_token()); |
} |
} // namespace |