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

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: Update comments referring to ProfileOAuth2TokenServiceRequest. 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";
24 20
25 class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer { 21 class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer {
26 public: 22 public:
27 TestingOAuth2TokenServiceConsumer(); 23 TestingOAuth2TokenServiceConsumer();
28 virtual ~TestingOAuth2TokenServiceConsumer(); 24 virtual ~TestingOAuth2TokenServiceConsumer();
29 25
30 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, 26 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
31 const std::string& access_token, 27 const std::string& access_token,
32 const base::Time& expiration_time) OVERRIDE; 28 const base::Time& expiration_time) OVERRIDE;
33 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request, 29 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
34 const GoogleServiceAuthError& error) OVERRIDE; 30 const GoogleServiceAuthError& error) OVERRIDE;
35 31
32 int num_get_token_success_;
33 int num_get_token_failure_;
36 std::string last_token_; 34 std::string last_token_;
37 int number_of_successful_tokens_;
38 GoogleServiceAuthError last_error_; 35 GoogleServiceAuthError last_error_;
39 int number_of_errors_;
40 }; 36 };
41 37
42 TestingOAuth2TokenServiceConsumer::TestingOAuth2TokenServiceConsumer() 38 TestingOAuth2TokenServiceConsumer::TestingOAuth2TokenServiceConsumer()
43 : OAuth2TokenService::Consumer("test"), 39 : OAuth2TokenService::Consumer("test"),
44 number_of_successful_tokens_(0), 40 num_get_token_success_(0),
45 last_error_(GoogleServiceAuthError::AuthErrorNone()), 41 num_get_token_failure_(0),
46 number_of_errors_(0) { 42 last_error_(GoogleServiceAuthError::AuthErrorNone()) {
47 } 43 }
48 44
49 TestingOAuth2TokenServiceConsumer::~TestingOAuth2TokenServiceConsumer() { 45 TestingOAuth2TokenServiceConsumer::~TestingOAuth2TokenServiceConsumer() {
50 } 46 }
51 47
52 void TestingOAuth2TokenServiceConsumer::OnGetTokenSuccess( 48 void TestingOAuth2TokenServiceConsumer::OnGetTokenSuccess(
53 const OAuth2TokenService::Request* request, 49 const OAuth2TokenService::Request* request,
54 const std::string& token, 50 const std::string& token,
55 const base::Time& expiration_date) { 51 const base::Time& expiration_date) {
56 last_token_ = token; 52 last_token_ = token;
57 ++number_of_successful_tokens_; 53 ++num_get_token_success_;
58 } 54 }
59 55
60 void TestingOAuth2TokenServiceConsumer::OnGetTokenFailure( 56 void TestingOAuth2TokenServiceConsumer::OnGetTokenFailure(
61 const OAuth2TokenService::Request* request, 57 const OAuth2TokenService::Request* request,
62 const GoogleServiceAuthError& error) { 58 const GoogleServiceAuthError& error) {
63 last_error_ = error; 59 last_error_ = error;
64 ++number_of_errors_; 60 ++num_get_token_failure_;
65 } 61 }
66 62
67 class ProfileOAuth2TokenServiceRequestTest : public testing::Test { 63 // A mock implementation of an OAuth2TokenService.
64 //
65 // Use SetResponse to vary the response to token requests.
66 class MockOAuth2TokenService : public FakeOAuth2TokenService {
67 public:
68 MockOAuth2TokenService();
69 virtual ~MockOAuth2TokenService();
70
71 void SetResponse(const GoogleServiceAuthError& error,
72 const std::string& access_token,
73 const base::Time& expiration);
74 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.
75 const std::string& last_token_invalidated() const;
76
77 protected:
78 virtual void FetchOAuth2Token(RequestImpl* request,
79 const std::string& account_id,
80 net::URLRequestContextGetter* getter,
81 const std::string& client_id,
82 const std::string& client_secret,
83 const ScopeSet& scopes) OVERRIDE;
84
85 virtual void InvalidateOAuth2Token(const std::string& account_id,
86 const std::string& client_id,
87 const ScopeSet& scopes,
88 const std::string& access_token) OVERRIDE;
89
90 private:
91 GoogleServiceAuthError response_error_;
92 std::string response_access_token_;
93 base::Time response_expiration_;
94 int num_invalidate_token_;
95 std::string last_token_invalidated_;
96 };
97
98 MockOAuth2TokenService::MockOAuth2TokenService()
99 : response_error_(GoogleServiceAuthError::AuthErrorNone()),
100 response_access_token_(kAccessToken),
101 response_expiration_(base::Time::Max()),
102 num_invalidate_token_(0) {
103 }
104
105 MockOAuth2TokenService::~MockOAuth2TokenService() {
106 }
107
108 void MockOAuth2TokenService::SetResponse(const GoogleServiceAuthError& error,
109 const std::string& access_token,
110 const base::Time& expiration) {
111 response_error_ = error;
112 response_access_token_ = access_token;
113 response_expiration_ = expiration;
114 }
115
116 int MockOAuth2TokenService::num_invalidate_token() const {
117 return num_invalidate_token_;
118 }
119
120 const std::string& MockOAuth2TokenService::last_token_invalidated() const {
121 return last_token_invalidated_;
122 }
123
124 void MockOAuth2TokenService::FetchOAuth2Token(
125 RequestImpl* request,
126 const std::string& account_id,
127 net::URLRequestContextGetter* getter,
128 const std::string& client_id,
129 const std::string& client_secret,
130 const ScopeSet& scopes) {
131 base::MessageLoop::current()->PostTask(
132 FROM_HERE,
133 base::Bind(&OAuth2TokenService::RequestImpl::InformConsumer,
134 request->AsWeakPtr(),
135 response_error_,
136 response_access_token_,
137 response_expiration_));
138 }
139
140 void MockOAuth2TokenService::InvalidateOAuth2Token(
141 const std::string& account_id,
142 const std::string& client_id,
143 const ScopeSet& scopes,
144 const std::string& access_token) {
145 ++num_invalidate_token_;
146 last_token_invalidated_ = access_token;
147 }
148
149 class OAuth2TokenServiceRequestTest : public testing::Test {
68 public: 150 public:
69 virtual void SetUp() OVERRIDE; 151 virtual void SetUp() OVERRIDE;
70 152
71 protected: 153 protected:
154 class Provider : public OAuth2TokenServiceRequest::TokenServiceProvider {
155 public:
156 Provider(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
157 OAuth2TokenService* token_service);
158
159 virtual scoped_refptr<base::SingleThreadTaskRunner>
160 GetTokenServiceTaskRunner() OVERRIDE;
161 virtual OAuth2TokenService* GetTokenService() OVERRIDE;
162
163 private:
164 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
165 OAuth2TokenService* token_service_;
166 };
167
72 base::MessageLoop ui_loop_; 168 base::MessageLoop ui_loop_;
73 scoped_ptr<content::TestBrowserThread> ui_thread_; 169 scoped_ptr<MockOAuth2TokenService> oauth2_service_;
74 170 scoped_ptr<OAuth2TokenServiceRequest::TokenServiceProvider> provider_;
75 scoped_ptr<Profile> profile_;
76 TestingOAuth2TokenServiceConsumer consumer_; 171 TestingOAuth2TokenServiceConsumer consumer_;
77 FakeProfileOAuth2TokenService* oauth2_service_;
78
79 scoped_ptr<ProfileOAuth2TokenServiceRequest> request_;
80 }; 172 };
81 173
82 void ProfileOAuth2TokenServiceRequestTest::SetUp() { 174 void OAuth2TokenServiceRequestTest::SetUp() {
83 ui_thread_.reset(new content::TestBrowserThread(content::BrowserThread::UI, 175 oauth2_service_.reset(new MockOAuth2TokenService);
84 &ui_loop_)); 176 oauth2_service_->AddAccount(kAccountId);
85 TestingProfile::Builder builder; 177 provider_.reset(
86 builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(), 178 new Provider(base::MessageLoopProxy::current(), oauth2_service_.get()));
87 &BuildFakeProfileOAuth2TokenService); 179 }
88 profile_ = builder.Build(); 180
89 181 OAuth2TokenServiceRequestTest::Provider::Provider(
90 oauth2_service_ = (FakeProfileOAuth2TokenService*) 182 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
91 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get()); 183 OAuth2TokenService* token_service)
92 } 184 : task_runner_(task_runner), token_service_(token_service) {
93 185 }
94 TEST_F(ProfileOAuth2TokenServiceRequestTest, 186
95 Failure) { 187 scoped_refptr<base::SingleThreadTaskRunner>
96 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 188 OAuth2TokenServiceRequestTest::Provider::GetTokenServiceTaskRunner() {
97 ProfileOAuth2TokenServiceRequest::CreateAndStart( 189 return task_runner_;
98 profile_.get(), 190 }
99 std::string(), 191
100 OAuth2TokenService::ScopeSet(), 192 OAuth2TokenService* OAuth2TokenServiceRequestTest::Provider::GetTokenService() {
101 &consumer_)); 193 return token_service_;
102 oauth2_service_->IssueErrorForAllPendingRequests( 194 }
103 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE)); 195
104 ui_loop_.RunUntilIdle(); 196 TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Failure) {
105 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 197 oauth2_service_->SetResponse(
106 EXPECT_EQ(1, consumer_.number_of_errors_); 198 GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE),
107 } 199 std::string(),
108 200 base::Time());
109 TEST_F(ProfileOAuth2TokenServiceRequestTest, Success) { 201 scoped_ptr<OAuth2TokenServiceRequest> request(
110 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); 202 OAuth2TokenServiceRequest::CreateAndStart(provider_.get(),
111 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 203 kAccountId,
112 ProfileOAuth2TokenServiceRequest::CreateAndStart( 204 OAuth2TokenService::ScopeSet(),
113 profile_.get(), 205 &consumer_));
206 ui_loop_.RunUntilIdle();
207 EXPECT_EQ(0, consumer_.num_get_token_success_);
208 EXPECT_EQ(1, consumer_.num_get_token_failure_);
209 EXPECT_EQ(GoogleServiceAuthError::SERVICE_UNAVAILABLE,
210 consumer_.last_error_.state());
211 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
212 }
213
214 TEST_F(OAuth2TokenServiceRequestTest, CreateAndStart_Success) {
215 scoped_ptr<OAuth2TokenServiceRequest> request(
216 OAuth2TokenServiceRequest::CreateAndStart(provider_.get(),
217 kAccountId,
218 OAuth2TokenService::ScopeSet(),
219 &consumer_));
220 ui_loop_.RunUntilIdle();
221 EXPECT_EQ(1, consumer_.num_get_token_success_);
222 EXPECT_EQ(0, consumer_.num_get_token_failure_);
223 EXPECT_EQ(kAccessToken, consumer_.last_token_);
224 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
225 }
226
227 TEST_F(OAuth2TokenServiceRequestTest,
228 CreateAndStart_DestroyRequestBeforeCompletes) {
229 scoped_ptr<OAuth2TokenServiceRequest> request(
230 OAuth2TokenServiceRequest::CreateAndStart(provider_.get(),
231 kAccountId,
232 OAuth2TokenService::ScopeSet(),
233 &consumer_));
234 request.reset();
235 ui_loop_.RunUntilIdle();
236 EXPECT_EQ(0, consumer_.num_get_token_success_);
237 EXPECT_EQ(0, consumer_.num_get_token_failure_);
238 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
239 }
240
241 TEST_F(OAuth2TokenServiceRequestTest,
242 CreateAndStart_DestroyRequestAfterCompletes) {
243 scoped_ptr<OAuth2TokenServiceRequest> request(
244 OAuth2TokenServiceRequest::CreateAndStart(provider_.get(),
245 kAccountId,
246 OAuth2TokenService::ScopeSet(),
247 &consumer_));
248 ui_loop_.RunUntilIdle();
249 request.reset();
250 EXPECT_EQ(1, consumer_.num_get_token_success_);
251 EXPECT_EQ(0, consumer_.num_get_token_failure_);
252 EXPECT_EQ(kAccessToken, consumer_.last_token_);
253 EXPECT_EQ(0, oauth2_service_->num_invalidate_token());
254 }
255
256 TEST_F(OAuth2TokenServiceRequestTest, CreateAndStartInvalidate) {
257 scoped_ptr<OAuth2TokenServiceRequest> request(
258 OAuth2TokenServiceRequest::CreateAndStartInvalidate(
259 provider_.get(),
114 kAccountId, 260 kAccountId,
115 OAuth2TokenService::ScopeSet(), 261 OAuth2TokenService::ScopeSet(),
116 &consumer_)); 262 kAccessToken));
117 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, 263 ui_loop_.RunUntilIdle();
118 base::Time::Max()); 264 EXPECT_EQ(0, consumer_.num_get_token_success_);
119 ui_loop_.RunUntilIdle(); 265 EXPECT_EQ(0, consumer_.num_get_token_failure_);
120 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 266 EXPECT_EQ(kAccessToken, oauth2_service_->last_token_invalidated());
121 EXPECT_EQ(kAccessToken, consumer_.last_token_); 267 EXPECT_EQ(1, oauth2_service_->num_invalidate_token());
122 EXPECT_EQ(0, consumer_.number_of_errors_); 268 }
123 } 269
124 270 TEST_F(OAuth2TokenServiceRequestTest,
125 TEST_F(ProfileOAuth2TokenServiceRequestTest, 271 CreateAndStartInvalidate_DestroyBeforeCompletes) {
126 RequestDeletionBeforeServiceComplete) { 272 scoped_ptr<OAuth2TokenServiceRequest> request(
127 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken); 273 OAuth2TokenServiceRequest::CreateAndStartInvalidate(
128 scoped_ptr<ProfileOAuth2TokenServiceRequest> request( 274 provider_.get(),
129 ProfileOAuth2TokenServiceRequest::CreateAndStart(
130 profile_.get(),
131 kAccountId, 275 kAccountId,
132 OAuth2TokenService::ScopeSet(), 276 OAuth2TokenService::ScopeSet(),
133 &consumer_)); 277 kAccessToken));
134 request.reset(); 278 request.reset();
135 oauth2_service_->IssueTokenForAllPendingRequests(kAccessToken, 279 ui_loop_.RunUntilIdle();
136 base::Time::Max()); 280 EXPECT_EQ(0, consumer_.num_get_token_success_);
137 ui_loop_.RunUntilIdle(); 281 EXPECT_EQ(0, consumer_.num_get_token_failure_);
138 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 282 EXPECT_EQ(kAccessToken, oauth2_service_->last_token_invalidated());
139 EXPECT_EQ(0, consumer_.number_of_errors_); 283 EXPECT_EQ(1, oauth2_service_->num_invalidate_token());
140 }
141
142 TEST_F(ProfileOAuth2TokenServiceRequestTest,
143 RequestDeletionAfterServiceComplete) {
144 oauth2_service_->UpdateCredentials(kAccountId, kRefreshToken);
145 scoped_ptr<ProfileOAuth2TokenServiceRequest> request(
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();
154 request.reset();
155 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
156 EXPECT_EQ(0, consumer_.number_of_errors_);
157 } 284 }
158 285
159 } // namespace 286 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698