Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(855)

Side by Side Diff: google_apis/gaia/oauth2_token_service_request_unittest.cc

Issue 299943003: Refactor ProfileOAuth2TokenServiceRequest into OAuth2TokenServiceRequest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove useless return value from Invalidate. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #include "chrome/browser/signin/profile_oauth2_token_service_request.h" 4
5 #include "google_apis/gaia/oauth2_token_service_request.h"
5 6
6 #include <set> 7 #include <set>
7 #include <string> 8 #include <string>
8 #include <vector> 9 #include <vector>
9 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
10 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 11 #include "google_apis/gaia/fake_oauth2_token_service.h"
11 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
12 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
13 #include "chrome/test/base/testing_profile.h"
14 #include "content/public/test/test_browser_thread.h"
15 #include "google_apis/gaia/google_service_auth_error.h" 12 #include "google_apis/gaia/google_service_auth_error.h"
16 #include "google_apis/gaia/oauth2_token_service.h" 13 #include "google_apis/gaia/oauth2_token_service.h"
17 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
18 15
19 namespace { 16 namespace {
20 17
21 const char kAccessToken[] = "access_token"; 18 const char kAccessToken[] = "access_token";
22 const char kAccountId[] = "test_user@gmail.com"; 19 const char kAccountId[] = "test_user@gmail.com";
23 const char kRefreshToken[] = "refresh_token"; 20 const char kScope[] = "SCOPE";
24 21
25 class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer { 22 class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer {
26 public: 23 public:
27 TestingOAuth2TokenServiceConsumer(); 24 TestingOAuth2TokenServiceConsumer();
28 virtual ~TestingOAuth2TokenServiceConsumer(); 25 virtual ~TestingOAuth2TokenServiceConsumer();
29 26
30 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, 27 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
31 const std::string& access_token, 28 const std::string& access_token,
32 const base::Time& expiration_time) OVERRIDE; 29 const base::Time& expiration_time) OVERRIDE;
33 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, 30 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
34 const GoogleServiceAuthError& error) OVERRIDE; 31 const GoogleServiceAuthError& error) OVERRIDE;
35 32
33 int num_get_token_success_;
34 int num_get_token_failure_;
36 std::string last_token_; 35 std::string last_token_;
37 int number_of_successful_tokens_;
38 GoogleServiceAuthError last_error_; 36 GoogleServiceAuthError last_error_;
39 int number_of_errors_;
40 }; 37 };
41 38
42 TestingOAuth2TokenServiceConsumer::TestingOAuth2TokenServiceConsumer() 39 TestingOAuth2TokenServiceConsumer::TestingOAuth2TokenServiceConsumer()
43 : OAuth2TokenService::Consumer("test"), 40 : OAuth2TokenService::Consumer("test"),
44 number_of_successful_tokens_(0), 41 num_get_token_success_(0),
45 last_error_(GoogleServiceAuthError::AuthErrorNone()), 42 num_get_token_failure_(0),
46 number_of_errors_(0) { 43 last_error_(GoogleServiceAuthError::AuthErrorNone()) {
47 } 44 }
48 45
49 TestingOAuth2TokenServiceConsumer::~TestingOAuth2TokenServiceConsumer() { 46 TestingOAuth2TokenServiceConsumer::~TestingOAuth2TokenServiceConsumer() {
50 } 47 }
51 48
52 void TestingOAuth2TokenServiceConsumer::OnGetTokenSuccess( 49 void TestingOAuth2TokenServiceConsumer::OnGetTokenSuccess(
53 const OAuth2TokenService::Request* request, 50 const OAuth2TokenService::Request* request,
54 const std::string& token, 51 const std::string& token,
55 const base::Time& expiration_date) { 52 const base::Time& expiration_date) {
56 last_token_ = token; 53 last_token_ = token;
57 ++number_of_successful_tokens_; 54 ++num_get_token_success_;
58 } 55 }
59 56
60 void TestingOAuth2TokenServiceConsumer::OnGetTokenFailure( 57 void TestingOAuth2TokenServiceConsumer::OnGetTokenFailure(
61 const OAuth2TokenService::Request* request, 58 const OAuth2TokenService::Request* request,
62 const GoogleServiceAuthError& error) { 59 const GoogleServiceAuthError& error) {
63 last_error_ = error; 60 last_error_ = error;
64 ++number_of_errors_; 61 ++num_get_token_failure_;
65 } 62 }
66 63
67 class ProfileOAuth2TokenServiceRequestTest : public testing::Test { 64 // A mock implementation of an OAuth2TokenService.
65 //
66 // Use SetResponse to vary the response to token requests.
67 class MockOAuth2TokenService : public FakeOAuth2TokenService {
68 public:
69 MockOAuth2TokenService();
70 virtual ~MockOAuth2TokenService();
71
72 void SetResponse(const GoogleServiceAuthError& error,
73 const std::string& access_token,
74 const base::Time& expiration);
75
76 int num_invalidate_token() const { return num_invalidate_token_; }
77
78 const std::string& last_token_invalidated() const {
79 return last_token_invalidated_;
80 }
81
82 protected:
83 virtual void FetchOAuth2Token(RequestImpl* request,
84 const std::string& account_id,
85 net::URLRequestContextGetter* getter,
86 const std::string& client_id,
87 const std::string& client_secret,
88 const ScopeSet& scopes) OVERRIDE;
89
90 virtual void InvalidateOAuth2Token(const std::string& account_id,
91 const std::string& client_id,
92 const ScopeSet& scopes,
93 const std::string& access_token) OVERRIDE;
94
95 private:
96 GoogleServiceAuthError response_error_;
97 std::string response_access_token_;
98 base::Time response_expiration_;
99 int num_invalidate_token_;
100 std::string last_token_invalidated_;
101 };
102
103 MockOAuth2TokenService::MockOAuth2TokenService()
104 : response_error_(GoogleServiceAuthError::AuthErrorNone()),
105 response_access_token_(kAccessToken),
106 response_expiration_(base::Time::Max()),
107 num_invalidate_token_(0) {
108 }
109
110 MockOAuth2TokenService::~MockOAuth2TokenService() {
111 }
112
113 void MockOAuth2TokenService::SetResponse(const GoogleServiceAuthError& error,
114 const std::string& access_token,
115 const base::Time& expiration) {
116 response_error_ = error;
117 response_access_token_ = access_token;
118 response_expiration_ = expiration;
119 }
120
121 void MockOAuth2TokenService::FetchOAuth2Token(
122 RequestImpl* request,
123 const std::string& account_id,
124 net::URLRequestContextGetter* getter,
125 const std::string& client_id,
126 const std::string& client_secret,
127 const ScopeSet& scopes) {
128 base::MessageLoop::current()->PostTask(
129 FROM_HERE,
130 base::Bind(&OAuth2TokenService::RequestImpl::InformConsumer,
131 request->AsWeakPtr(),
132 response_error_,
133 response_access_token_,
134 response_expiration_));
135 }
136
137 void MockOAuth2TokenService::InvalidateOAuth2Token(
138 const std::string& account_id,
139 const std::string& client_id,
140 const ScopeSet& scopes,
141 const std::string& access_token) {
142 ++num_invalidate_token_;
143 last_token_invalidated_ = access_token;
144 }
145
146 class OAuth2TokenServiceRequestTest : public testing::Test {
68 public: 147 public:
69 virtual void SetUp() OVERRIDE; 148 virtual void SetUp() OVERRIDE;
70 149
71 protected: 150 protected:
151 class Provider : public OAuth2TokenServiceRequest::TokenServiceProvider {
152 public:
153 Provider(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
154 OAuth2TokenService* token_service);
155
156 virtual scoped_refptr<base::SingleThreadTaskRunner>
157 GetTokenServiceTaskRunner() OVERRIDE;
158 virtual OAuth2TokenService* GetTokenService() OVERRIDE;
159
160 private:
161 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
162 OAuth2TokenService* token_service_;
163 };
164
72 base::MessageLoop ui_loop_; 165 base::MessageLoop ui_loop_;
73 scoped_ptr<content::TestBrowserThread> ui_thread_; 166 OAuth2TokenService::ScopeSet scopes_;
74 167 scoped_ptr<MockOAuth2TokenService> oauth2_service_;
75 scoped_ptr<Profile> profile_; 168 scoped_ptr<OAuth2TokenServiceRequest::TokenServiceProvider> provider_;
76 TestingOAuth2TokenServiceConsumer consumer_; 169 TestingOAuth2TokenServiceConsumer consumer_;
77 FakeProfileOAuth2TokenService* oauth2_service_;
78
79 scoped_ptr<ProfileOAuth2TokenServiceRequest> request_;
80 }; 170 };
81 171
82 void ProfileOAuth2TokenServiceRequestTest::SetUp() { 172 void OAuth2TokenServiceRequestTest::SetUp() {
83 ui_thread_.reset(new content::TestBrowserThread(content::BrowserThread::UI, 173 scopes_.insert(kScope);
84 &ui_loop_)); 174 oauth2_service_.reset(new MockOAuth2TokenService);
85 TestingProfile::Builder builder; 175 oauth2_service_->AddAccount(kAccountId);
86 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), 176 provider_.reset(
87 &BuildFakeProfileOAuth2TokenService); 177 new Provider(base::MessageLoopProxy::current(), oauth2_service_.get()));
88 profile_ = builder.Build(); 178 }
89 179
90 oauth2_service_ = (FakeProfileOAuth2TokenService*) 180 OAuth2TokenServiceRequestTest::Provider::Provider(
91 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); 181 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
92 } 182 OAuth2TokenService* token_service)
93 183 : task_runner_(task_runner), token_service_(token_service) {
94 TEST_F(ProfileOAuth2TokenServiceRequestTest, 184 }
95 Failure) { 185
96 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 186 scoped_refptr<base::SingleThreadTaskRunner>
97 ProfileOAuth2TokenServiceRequest::CreateAndStart( 187 OAuth2TokenServiceRequestTest::Provider::GetTokenServiceTaskRunner() {
98 profile_.get(), 188 return task_runner_;
99 std::string(), 189 }
100 OAuth2TokenService::ScopeSet(), 190
101 &consumer_)); 191 OAuth2TokenService* OAuth2TokenServiceRequestTest::Provider::GetTokenService() {
102 oauth2_service_->IssueErrorForAllPendingRequests( 192 return token_service_;
103 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); 193 }
104 ui_loop_.RunUntilIdle(); 194
105 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 195 TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Failure) {
106 EXPECT_EQ(1, consumer_.number_of_errors_); 196 oauth2_service_->SetResponse(
107 } 197 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE),
108 198 std::string(),
109 TEST_F(ProfileOAuth2TokenServiceRequestTest, Success) { 199 base::Time());
110 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); 200 scoped_ptr<OAuth2TokenServiceRequest> request(
111 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 201 OAuth2TokenServiceRequest::CreateAndStart(
112 ProfileOAuth2TokenServiceRequest::CreateAndStart( 202 provider_.get(), kAccountId, scopes_, &consumer_));
113 profile_.get(), 203 ui_loop_.RunUntilIdle();
114 kAccountId, 204 EXPECT_EQ(0, consumer_.num_get_token_success_);
115 OAuth2TokenService::ScopeSet(), 205 EXPECT_EQ(1, consumer_.num_get_token_failure_);
116 &consumer_)); 206 EXPECT_EQ(GoogleServiceAuthError::SERVICE_UNAVAILABLE,
117 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, 207 consumer_.last_error_.state());
118 base::Time::Max()); 208 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
119 ui_loop_.RunUntilIdle(); 209 }
120 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 210
211 TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Success) {
212 scoped_ptr<OAuth2TokenServiceRequest> request(
213 OAuth2TokenServiceRequest::CreateAndStart(
214 provider_.get(), kAccountId, scopes_, &consumer_));
215 ui_loop_.RunUntilIdle();
216 EXPECT_EQ(1, consumer_.num_get_token_success_);
217 EXPECT_EQ(0, consumer_.num_get_token_failure_);
121 EXPECT_EQ(kAccessToken, consumer_.last_token_); 218 EXPECT_EQ(kAccessToken, consumer_.last_token_);
122 EXPECT_EQ(0, consumer_.number_of_errors_); 219 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
123 } 220 }
124 221
125 TEST_F(ProfileOAuth2TokenServiceRequestTest, 222 TEST_F(OAuth2TokenServiceRequestTest,
126 RequestDeletionBeforeServiceComplete) { 223 CreateAndStart_DestroyRequestBeforeCompletes) {
127 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); 224 scoped_ptr<OAuth2TokenServiceRequest> request(
128 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 225 OAuth2TokenServiceRequest::CreateAndStart(
129 ProfileOAuth2TokenServiceRequest::CreateAndStart( 226 provider_.get(), kAccountId, scopes_, &consumer_));
130 profile_.get(),
131 kAccountId,
132 OAuth2TokenService::ScopeSet(),
133 &consumer_));
134 request.reset(); 227 request.reset();
135 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, 228 ui_loop_.RunUntilIdle();
136 base::Time::Max()); 229 EXPECT_EQ(0, consumer_.num_get_token_success_);
137 ui_loop_.RunUntilIdle(); 230 EXPECT_EQ(0, consumer_.num_get_token_failure_);
138 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 231 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
139 EXPECT_EQ(0, consumer_.number_of_errors_); 232 }
140 } 233
141 234 TEST_F(OAuth2TokenServiceRequestTest,
142 TEST_F(ProfileOAuth2TokenServiceRequestTest, 235 CreateAndStart_DestroyRequestAfterCompletes) {
143 RequestDeletionAfterServiceComplete) { 236 scoped_ptr<OAuth2TokenServiceRequest> request(
144 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); 237 OAuth2TokenServiceRequest::CreateAndStart(
145 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 238 provider_.get(), kAccountId, scopes_, &consumer_));
146 ProfileOAuth2TokenServiceRequest::CreateAndStart(
147 profile_.get(),
148 kAccountId,
149 OAuth2TokenService::ScopeSet(),
150 &consumer_));
151 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken,
152 base::Time::Max());
153 ui_loop_.RunUntilIdle(); 239 ui_loop_.RunUntilIdle();
154 request.reset(); 240 request.reset();
155 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 241 EXPECT_EQ(1, consumer_.num_get_token_success_);
156 EXPECT_EQ(0, consumer_.number_of_errors_); 242 EXPECT_EQ(0, consumer_.num_get_token_failure_);
243 EXPECT_EQ(kAccessToken, consumer_.last_token_);
244 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
245 }
246
247 TEST_F(OAuth2TokenServiceRequestTest, InvalidateToken) {
248 OAuth2TokenServiceRequest::InvalidateToken(
249 provider_.get(), kAccountId, scopes_, kAccessToken);
250 ui_loop_.RunUntilIdle();
251 EXPECT_EQ(0, consumer_.num_get_token_success_);
252 EXPECT_EQ(0, consumer_.num_get_token_failure_);
253 EXPECT_EQ(kAccessToken, oauth2_service_->last_token_invalidated());
254 EXPECT_EQ(1, oauth2_service_->num_invalidate_token());
157 } 255 }
158 256
159 } // namespace 257 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698