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

Side by Side Diff: chrome/browser/signin/oauth2_token_service_unittest.cc

Issue 12647008: Refactor OAuth2TokenService to have profile- and device-based implementations. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: move function to minimize diff Created 7 years, 9 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 4
5 #include <string>
6
5 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
6 #include "chrome/browser/signin/oauth2_token_service.h" 8 #include "chrome/browser/signin/oauth2_token_service.h"
7 #include "chrome/browser/signin/oauth2_token_service_factory.h" 9 #include "chrome/browser/signin/oauth2_token_service_test_util.h"
8 #include "chrome/browser/signin/token_service_factory.h" 10 #include "chrome/browser/signin/token_service_factory.h"
9 #include "chrome/browser/signin/token_service_unittest.h" 11 #include "chrome/browser/signin/token_service_unittest.h"
10 #include "chrome/common/chrome_notification_types.h" 12 #include "chrome/common/chrome_notification_types.h"
11 #include "content/public/browser/browser_thread.h" 13 #include "chrome/test/base/testing_browser_process.h"
12 #include "google_apis/gaia/gaia_constants.h" 14 #include "google_apis/gaia/gaia_constants.h"
13 #include "google_apis/gaia/google_service_auth_error.h" 15 #include "google_apis/gaia/google_service_auth_error.h"
14 #include "google_apis/gaia/oauth2_access_token_consumer.h" 16 #include "google_apis/gaia/oauth2_access_token_consumer.h"
15 #include "net/http/http_status_code.h" 17 #include "net/http/http_status_code.h"
16 #include "net/url_request/test_url_fetcher_factory.h" 18 #include "net/url_request/test_url_fetcher_factory.h"
17 #include "net/url_request/url_request_status.h" 19 #include "net/url_request/url_request_status.h"
20 #include "net/url_request/url_request_test_util.h"
18 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
19 22
20 using content::BrowserThread; 23 using content::BrowserThread;
21 24
22 static const char kValidTokenResponse[] =
23 "{"
24 " \"access_token\": \"%s\","
25 " \"expires_in\": %d,"
26 " \"token_type\": \"Bearer\""
27 "}";
28
29 std::string GetValidTokenResponse(std::string token, int expiration) {
30 return base::StringPrintf(kValidTokenResponse, token.c_str(), expiration);
31 }
32
33 // A simple testing consumer.
34 class TestingOAuth2TokenServiceConsumer : public OAuth2TokenService::Consumer {
35 public:
36 TestingOAuth2TokenServiceConsumer()
37 : number_of_correct_tokens_(0),
38 last_error_(GoogleServiceAuthError::AuthErrorNone()),
39 number_of_errors_(0) {}
40 virtual ~TestingOAuth2TokenServiceConsumer() {}
41
42 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
43 const std::string& token,
44 const base::Time& expiration_date) OVERRIDE {
45 last_token_ = token;
46 ++number_of_correct_tokens_;
47 }
48
49 virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
50 const GoogleServiceAuthError& error) OVERRIDE {
51 last_error_ = error;
52 ++number_of_errors_;
53 }
54
55 std::string last_token_;
56 int number_of_correct_tokens_;
57 GoogleServiceAuthError last_error_;
58 int number_of_errors_;
59 };
60
61 // A testing consumer that retries on error. 25 // A testing consumer that retries on error.
62 class RetryingTestingOAuth2TokenServiceConsumer 26 class RetryingTestingOAuth2TokenServiceConsumer
63 : public OAuth2TokenService::Consumer { 27 : public OAuth2TokenService::Consumer {
64 public: 28 public:
65 RetryingTestingOAuth2TokenServiceConsumer( 29 RetryingTestingOAuth2TokenServiceConsumer(
66 OAuth2TokenService* oauth2_service) 30 OAuth2TokenService* oauth2_service)
67 : oauth2_service_(oauth2_service), 31 : oauth2_service_(oauth2_service),
68 number_of_correct_tokens_(0), 32 number_of_correct_tokens_(0),
69 last_error_(GoogleServiceAuthError::AuthErrorNone()), 33 last_error_(GoogleServiceAuthError::AuthErrorNone()),
70 number_of_errors_(0) {} 34 number_of_errors_(0) {}
(...skipping 15 matching lines...) Expand all
86 } 50 }
87 51
88 OAuth2TokenService* oauth2_service_; 52 OAuth2TokenService* oauth2_service_;
89 scoped_ptr<OAuth2TokenService::Request> request_; 53 scoped_ptr<OAuth2TokenService::Request> request_;
90 std::string last_token_; 54 std::string last_token_;
91 int number_of_correct_tokens_; 55 int number_of_correct_tokens_;
92 GoogleServiceAuthError last_error_; 56 GoogleServiceAuthError last_error_;
93 int number_of_errors_; 57 int number_of_errors_;
94 }; 58 };
95 59
60 class TestOAuth2TokenService : public OAuth2TokenService {
61 public:
62 explicit TestOAuth2TokenService(net::URLRequestContextGetter* getter)
63 : OAuth2TokenService(getter) {
64 }
65 // For testing: set the refresh token to be used.
66 void refresh_token(const std::string& refresh_token) {
Andrew T Wilson (Slow) 2013/03/19 19:58:44 call setters something like "set_refresh_token()".
David Roche 2013/03/21 00:12:02 Done.
67 refresh_token_ = refresh_token;
68 }
69 protected:
70 std::string GetRefreshToken() {
71 return refresh_token_;
72 }
73 private:
74 std::string refresh_token_;
75 };
76
96 class OAuth2TokenServiceTest : public TokenServiceTestHarness { 77 class OAuth2TokenServiceTest : public TokenServiceTestHarness {
97 public: 78 public:
98 OAuth2TokenServiceTest() {} 79 OAuth2TokenServiceTest() {
Andrew T Wilson (Slow) 2013/03/19 19:58:44 This is fine, but consider not editing this line i
David Roche 2013/03/21 00:12:02 Done.
80 }
99 81
100 virtual void SetUp() OVERRIDE { 82 virtual void SetUp() OVERRIDE {
101 TokenServiceTestHarness::SetUp(); 83 TokenServiceTestHarness::SetUp();
102 io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO, 84 io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO,
103 &message_loop_)); 85 &message_loop_));
104 service_->UpdateCredentials(credentials_); 86 oauth2_service_.reset(new TestOAuth2TokenService(
105 profile_->CreateRequestContext(); 87 new net::TestURLRequestContextGetter(
Andrew T Wilson (Slow) 2013/03/19 19:58:44 Does this leak the TestURLRequestContextGetter() w
David Roche 2013/03/21 00:12:02 Done.
106 oauth2_service_ = OAuth2TokenServiceFactory::GetForProfile(profile_.get()); 88 message_loop_.message_loop_proxy())));
107 } 89 }
108 90
109 virtual void TearDown() OVERRIDE { 91 virtual void TearDown() OVERRIDE {
110 TokenServiceTestHarness::TearDown(); 92 TokenServiceTestHarness::TearDown();
111 } 93 }
112 94
113 protected: 95 protected:
114 scoped_ptr<content::TestBrowserThread> io_thread_; 96 scoped_ptr<content::TestBrowserThread> io_thread_;
115 net::TestURLFetcherFactory factory_; 97 net::TestURLFetcherFactory factory_;
116 OAuth2TokenService* oauth2_service_; 98 scoped_ptr<TestOAuth2TokenService> oauth2_service_;
117 TestingOAuth2TokenServiceConsumer consumer_; 99 TestingOAuth2TokenServiceConsumer consumer_;
118 }; 100 };
119 101
120 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { 102 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) {
121 scoped_ptr<OAuth2TokenService::Request> request( 103 scoped_ptr<OAuth2TokenService::Request> request(
122 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 104 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
123 message_loop_.RunUntilIdle(); 105 message_loop_.RunUntilIdle();
124 106
125 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 107 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
126 EXPECT_EQ(1, consumer_.number_of_errors_); 108 EXPECT_EQ(1, consumer_.number_of_errors_);
127 } 109 }
128 110
129 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { 111 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) {
130 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 112 oauth2_service_->refresh_token("refreshToken");
131 "refreshToken"); 113 scoped_ptr<OAuth2TokenService::Request> request(
132 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 114 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
133 std::set<std::string>(), &consumer_));
134 message_loop_.RunUntilIdle(); 115 message_loop_.RunUntilIdle();
135 116
136 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 117 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
137 EXPECT_EQ(0, consumer_.number_of_errors_); 118 EXPECT_EQ(0, consumer_.number_of_errors_);
138 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 119 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
139 EXPECT_TRUE(fetcher); 120 EXPECT_TRUE(fetcher);
140 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 121 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
141 fetcher->SetResponseString(""); 122 fetcher->SetResponseString("");
142 fetcher->delegate()->OnURLFetchComplete(fetcher); 123 fetcher->delegate()->OnURLFetchComplete(fetcher);
143 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 124 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
144 EXPECT_EQ(1, consumer_.number_of_errors_); 125 EXPECT_EQ(1, consumer_.number_of_errors_);
145 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 126 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
146 } 127 }
147 128
148 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { 129 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) {
149 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 130 oauth2_service_->refresh_token("refreshToken");
150 "refreshToken"); 131 scoped_ptr<OAuth2TokenService::Request> request(
151 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 132 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
152 std::set<std::string>(), &consumer_));
153 message_loop_.RunUntilIdle(); 133 message_loop_.RunUntilIdle();
154 134
155 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 135 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
156 EXPECT_EQ(0, consumer_.number_of_errors_); 136 EXPECT_EQ(0, consumer_.number_of_errors_);
157 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 137 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
158 EXPECT_TRUE(fetcher); 138 EXPECT_TRUE(fetcher);
159 fetcher->set_response_code(net::HTTP_OK); 139 fetcher->set_response_code(net::HTTP_OK);
160 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 140 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
161 fetcher->delegate()->OnURLFetchComplete(fetcher); 141 fetcher->delegate()->OnURLFetchComplete(fetcher);
162 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 142 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
163 EXPECT_EQ(0, consumer_.number_of_errors_); 143 EXPECT_EQ(0, consumer_.number_of_errors_);
164 EXPECT_EQ("token", consumer_.last_token_); 144 EXPECT_EQ("token", consumer_.last_token_);
165 } 145 }
166 146
167 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { 147 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
168 std::set<std::string> scopes1; 148 std::set<std::string> scopes1;
169 scopes1.insert("s1"); 149 scopes1.insert("s1");
170 scopes1.insert("s2"); 150 scopes1.insert("s2");
171 std::set<std::string> scopes1_same; 151 std::set<std::string> scopes1_same;
172 scopes1_same.insert("s2"); 152 scopes1_same.insert("s2");
173 scopes1_same.insert("s1"); 153 scopes1_same.insert("s1");
174 std::set<std::string> scopes2; 154 std::set<std::string> scopes2;
175 scopes2.insert("s3"); 155 scopes2.insert("s3");
176 156
177 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 157 oauth2_service_->refresh_token("refreshToken");
178 "refreshToken");
179 158
180 // First request. 159 // First request.
181 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 160 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
182 scopes1, &consumer_)); 161 scopes1, &consumer_));
183 message_loop_.RunUntilIdle(); 162 message_loop_.RunUntilIdle();
184 163
185 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 164 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
186 EXPECT_EQ(0, consumer_.number_of_errors_); 165 EXPECT_EQ(0, consumer_.number_of_errors_);
187 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 166 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
188 EXPECT_TRUE(fetcher); 167 EXPECT_TRUE(fetcher);
(...skipping 26 matching lines...) Expand all
215 EXPECT_TRUE(fetcher); 194 EXPECT_TRUE(fetcher);
216 fetcher->set_response_code(net::HTTP_OK); 195 fetcher->set_response_code(net::HTTP_OK);
217 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 196 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
218 fetcher->delegate()->OnURLFetchComplete(fetcher); 197 fetcher->delegate()->OnURLFetchComplete(fetcher);
219 EXPECT_EQ(3, consumer_.number_of_correct_tokens_); 198 EXPECT_EQ(3, consumer_.number_of_correct_tokens_);
220 EXPECT_EQ(0, consumer_.number_of_errors_); 199 EXPECT_EQ(0, consumer_.number_of_errors_);
221 EXPECT_EQ("token2", consumer_.last_token_); 200 EXPECT_EQ("token2", consumer_.last_token_);
222 } 201 }
223 202
224 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { 203 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
225 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 204 oauth2_service_->refresh_token("refreshToken");
226 "refreshToken");
227 205
228 // First request. 206 // First request.
229 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 207 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
230 std::set<std::string>(), &consumer_)); 208 std::set<std::string>(), &consumer_));
231 message_loop_.RunUntilIdle(); 209 message_loop_.RunUntilIdle();
232 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 210 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
233 EXPECT_EQ(0, consumer_.number_of_errors_); 211 EXPECT_EQ(0, consumer_.number_of_errors_);
234 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 212 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
235 EXPECT_TRUE(fetcher); 213 EXPECT_TRUE(fetcher);
236 fetcher->set_response_code(net::HTTP_OK); 214 fetcher->set_response_code(net::HTTP_OK);
(...skipping 14 matching lines...) Expand all
251 fetcher = factory_.GetFetcherByID(0); 229 fetcher = factory_.GetFetcherByID(0);
252 EXPECT_TRUE(fetcher); 230 EXPECT_TRUE(fetcher);
253 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 231 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
254 fetcher->SetResponseString(""); 232 fetcher->SetResponseString("");
255 fetcher->delegate()->OnURLFetchComplete(fetcher); 233 fetcher->delegate()->OnURLFetchComplete(fetcher);
256 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 234 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
257 EXPECT_EQ(1, consumer_.number_of_errors_); 235 EXPECT_EQ(1, consumer_.number_of_errors_);
258 } 236 }
259 237
260 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { 238 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
261 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 239 oauth2_service_->refresh_token("refreshToken");
262 "refreshToken");
263 240
264 // First request. 241 // First request.
265 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 242 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
266 std::set<std::string>(), &consumer_)); 243 std::set<std::string>(), &consumer_));
267 message_loop_.RunUntilIdle(); 244 message_loop_.RunUntilIdle();
268 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 245 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
269 EXPECT_EQ(0, consumer_.number_of_errors_); 246 EXPECT_EQ(0, consumer_.number_of_errors_);
270 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 247 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
271 EXPECT_TRUE(fetcher); 248 EXPECT_TRUE(fetcher);
272 fetcher->set_response_code(net::HTTP_OK); 249 fetcher->set_response_code(net::HTTP_OK);
(...skipping 14 matching lines...) Expand all
287 EXPECT_TRUE(fetcher); 264 EXPECT_TRUE(fetcher);
288 fetcher->set_response_code(net::HTTP_OK); 265 fetcher->set_response_code(net::HTTP_OK);
289 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); 266 fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
290 fetcher->delegate()->OnURLFetchComplete(fetcher); 267 fetcher->delegate()->OnURLFetchComplete(fetcher);
291 EXPECT_EQ(2, consumer_.number_of_correct_tokens_); 268 EXPECT_EQ(2, consumer_.number_of_correct_tokens_);
292 EXPECT_EQ(0, consumer_.number_of_errors_); 269 EXPECT_EQ(0, consumer_.number_of_errors_);
293 EXPECT_EQ("another token", consumer_.last_token_); 270 EXPECT_EQ("another token", consumer_.last_token_);
294 } 271 }
295 272
296 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { 273 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
297 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 274 oauth2_service_->refresh_token("refreshToken");
298 "refreshToken");
299 275
300 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 276 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
301 std::set<std::string>(), &consumer_)); 277 std::set<std::string>(), &consumer_));
302 message_loop_.RunUntilIdle(); 278 message_loop_.RunUntilIdle();
303 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 279 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
304 EXPECT_EQ(0, consumer_.number_of_errors_); 280 EXPECT_EQ(0, consumer_.number_of_errors_);
305 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 281 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
306 EXPECT_TRUE(fetcher); 282 EXPECT_TRUE(fetcher);
307 283
308 request.reset(); 284 request.reset();
309 285
310 fetcher->set_response_code(net::HTTP_OK); 286 fetcher->set_response_code(net::HTTP_OK);
311 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 287 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
312 fetcher->delegate()->OnURLFetchComplete(fetcher); 288 fetcher->delegate()->OnURLFetchComplete(fetcher);
313 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 289 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
314 EXPECT_EQ(0, consumer_.number_of_errors_); 290 EXPECT_EQ(0, consumer_.number_of_errors_);
315 } 291 }
316 292
317 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { 293 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) {
318 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 294 oauth2_service_->refresh_token("refreshToken");
319 "refreshToken");
320 295
321 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 296 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
322 std::set<std::string>(), &consumer_)); 297 std::set<std::string>(), &consumer_));
323 message_loop_.RunUntilIdle(); 298 message_loop_.RunUntilIdle();
324 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 299 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
325 fetcher->set_response_code(net::HTTP_OK); 300 fetcher->set_response_code(net::HTTP_OK);
326 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 301 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
327 fetcher->delegate()->OnURLFetchComplete(fetcher); 302 fetcher->delegate()->OnURLFetchComplete(fetcher);
328 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 303 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
329 EXPECT_EQ(0, consumer_.number_of_errors_); 304 EXPECT_EQ(0, consumer_.number_of_errors_);
330 EXPECT_EQ("token", consumer_.last_token_); 305 EXPECT_EQ("token", consumer_.last_token_);
331 306
332 request.reset(); 307 request.reset();
333 308
334 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 309 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
335 EXPECT_EQ(0, consumer_.number_of_errors_); 310 EXPECT_EQ(0, consumer_.number_of_errors_);
336 EXPECT_EQ("token", consumer_.last_token_); 311 EXPECT_EQ("token", consumer_.last_token_);
337 } 312 }
338 313
339 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { 314 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) {
340 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 315 oauth2_service_->refresh_token("refreshToken");
341 "refreshToken");
342 316
343 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 317 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
344 std::set<std::string>(), &consumer_)); 318 std::set<std::string>(), &consumer_));
345 message_loop_.RunUntilIdle(); 319 message_loop_.RunUntilIdle();
346 scoped_ptr<OAuth2TokenService::Request> request2( 320 scoped_ptr<OAuth2TokenService::Request> request2(
347 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 321 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
348 message_loop_.RunUntilIdle(); 322 message_loop_.RunUntilIdle();
349 323
350 request.reset(); 324 request.reset();
351 325
352 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 326 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
353 fetcher->set_response_code(net::HTTP_OK); 327 fetcher->set_response_code(net::HTTP_OK);
354 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 328 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
355 fetcher->delegate()->OnURLFetchComplete(fetcher); 329 fetcher->delegate()->OnURLFetchComplete(fetcher);
356 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 330 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
357 EXPECT_EQ(0, consumer_.number_of_errors_); 331 EXPECT_EQ(0, consumer_.number_of_errors_);
358 } 332 }
359 333
360 TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndRequest) { 334 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) {
361 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 335 // We have a valid refresh token; the first request is successful.
362 "refreshToken"); 336 oauth2_service_->refresh_token("refreshToken");
363
364 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 337 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
365 std::set<std::string>(), &consumer_)); 338 std::set<std::string>(), &consumer_));
366 message_loop_.RunUntilIdle(); 339 message_loop_.RunUntilIdle();
367 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 340 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
368 fetcher->set_response_code(net::HTTP_OK); 341 fetcher->set_response_code(net::HTTP_OK);
369 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 342 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
370 fetcher->delegate()->OnURLFetchComplete(fetcher); 343 fetcher->delegate()->OnURLFetchComplete(fetcher);
371 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 344 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
372 EXPECT_EQ(0, consumer_.number_of_errors_); 345 EXPECT_EQ(0, consumer_.number_of_errors_);
373 EXPECT_EQ("token", consumer_.last_token_); 346 EXPECT_EQ("token", consumer_.last_token_);
374 347
375 // Signs out 348 // The refresh token is no longer available; subsequent requests fail.
376 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 349 oauth2_service_->refresh_token("");
377 "");
378 service_->EraseTokensFromDB();
379
380 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); 350 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
381 message_loop_.RunUntilIdle(); 351 message_loop_.RunUntilIdle();
382 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 352 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
383 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 353 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
384 EXPECT_EQ(1, consumer_.number_of_errors_); 354 EXPECT_EQ(1, consumer_.number_of_errors_);
385 } 355 }
386 356
387 TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndSignInAndSuccess) { 357 TEST_F(OAuth2TokenServiceTest,
388 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 358 ChangedRefreshTokenDoesNotAffectInFlightRequests) {
389 "refreshToken"); 359 oauth2_service_->refresh_token("first refreshToken");
390 std::set<std::string> scopes; 360 std::set<std::string> scopes;
391 scopes.insert("s1"); 361 scopes.insert("s1");
392 scopes.insert("s2"); 362 scopes.insert("s2");
393
394 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
395 scopes, &consumer_));
396 message_loop_.RunUntilIdle();
397 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
398 fetcher->set_response_code(net::HTTP_OK);
399 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
400 fetcher->delegate()->OnURLFetchComplete(fetcher);
401 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
402 EXPECT_EQ(0, consumer_.number_of_errors_);
403 EXPECT_EQ("token", consumer_.last_token_);
404
405 // Signs out and signs in
406 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
407 "");
408 service_->EraseTokensFromDB();
409 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
410 "refreshToken");
411
412 request = oauth2_service_->StartRequest(scopes, &consumer_);
413 message_loop_.RunUntilIdle();
414 fetcher = factory_.GetFetcherByID(0);
415 fetcher->set_response_code(net::HTTP_OK);
416 fetcher->SetResponseString(GetValidTokenResponse("another token", 3600));
417 fetcher->delegate()->OnURLFetchComplete(fetcher);
418 EXPECT_EQ(2, consumer_.number_of_correct_tokens_);
419 EXPECT_EQ(0, consumer_.number_of_errors_);
420 EXPECT_EQ("another token", consumer_.last_token_);
421 }
422
423 TEST_F(OAuth2TokenServiceTest, PendingAndSignOutAndSignInAndSuccess) {
424 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
425 "first refreshToken");
426 std::set<std::string> scopes;
427 scopes.insert("s1");
428 scopes.insert("s2");
429 363
430 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 364 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
431 scopes, &consumer_)); 365 scopes, &consumer_));
432 message_loop_.RunUntilIdle(); 366 message_loop_.RunUntilIdle();
433 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); 367 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
434 368
435 // Note |request| is still pending. 369 // Note |request| is still pending when the refresh token changes.
436 service_->EraseTokensFromDB(); 370 oauth2_service_->refresh_token("second refreshToken");
437 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
438 "second refreshToken");
439 371
372 // A 2nd request (using the new refresh token) that occurs and completes
373 // while the 1st request is in flight is successful.
440 TestingOAuth2TokenServiceConsumer consumer2; 374 TestingOAuth2TokenServiceConsumer consumer2;
441 scoped_ptr<OAuth2TokenService::Request> request2( 375 scoped_ptr<OAuth2TokenService::Request> request2(
442 oauth2_service_->StartRequest(scopes, &consumer2)); 376 oauth2_service_->StartRequest(scopes, &consumer2));
443 message_loop_.RunUntilIdle(); 377 message_loop_.RunUntilIdle();
444 378
445 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); 379 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0);
446 fetcher2->set_response_code(net::HTTP_OK); 380 fetcher2->set_response_code(net::HTTP_OK);
447 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); 381 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
448 fetcher2->delegate()->OnURLFetchComplete(fetcher2); 382 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
449 EXPECT_EQ(1, consumer2.number_of_correct_tokens_); 383 EXPECT_EQ(1, consumer2.number_of_correct_tokens_);
450 EXPECT_EQ(0, consumer2.number_of_errors_); 384 EXPECT_EQ(0, consumer2.number_of_errors_);
451 EXPECT_EQ("second token", consumer2.last_token_); 385 EXPECT_EQ("second token", consumer2.last_token_);
452 386
453 fetcher1->set_response_code(net::HTTP_OK); 387 fetcher1->set_response_code(net::HTTP_OK);
454 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); 388 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600));
455 fetcher1->delegate()->OnURLFetchComplete(fetcher1); 389 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
456 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 390 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
457 EXPECT_EQ(0, consumer_.number_of_errors_); 391 EXPECT_EQ(0, consumer_.number_of_errors_);
458 EXPECT_EQ("first token", consumer_.last_token_); 392 EXPECT_EQ("first token", consumer_.last_token_);
459 } 393 }
460 394
461 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { 395 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) {
462 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 396 oauth2_service_->refresh_token("refreshToken");
463 "refreshToken");
464 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 397 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
465 std::set<std::string>(), &consumer_)); 398 std::set<std::string>(), &consumer_));
466 message_loop_.RunUntilIdle(); 399 message_loop_.RunUntilIdle();
467 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 400 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
468 EXPECT_EQ(0, consumer_.number_of_errors_); 401 EXPECT_EQ(0, consumer_.number_of_errors_);
469 402
470 profile_.reset(); 403 // The destructor should cancel all in-flight fetchers.
404 oauth2_service_.reset(NULL);
471 405
472 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 406 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
473 EXPECT_EQ(1, consumer_.number_of_errors_); 407 EXPECT_EQ(1, consumer_.number_of_errors_);
474 } 408 }
475 409
476 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { 410 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) {
477 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 411 oauth2_service_->refresh_token("refreshToken");
478 "refreshToken"); 412 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get());
479 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_);
480 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 413 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
481 std::set<std::string>(), &consumer)); 414 std::set<std::string>(), &consumer));
482 message_loop_.RunUntilIdle(); 415 message_loop_.RunUntilIdle();
483 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 416 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
484 EXPECT_EQ(0, consumer.number_of_errors_); 417 EXPECT_EQ(0, consumer.number_of_errors_);
485 418
486 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 419 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
487 EXPECT_TRUE(fetcher); 420 EXPECT_TRUE(fetcher);
488 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 421 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
489 fetcher->SetResponseString(""); 422 fetcher->SetResponseString("");
490 fetcher->delegate()->OnURLFetchComplete(fetcher); 423 fetcher->delegate()->OnURLFetchComplete(fetcher);
491 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 424 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
492 EXPECT_EQ(1, consumer.number_of_errors_); 425 EXPECT_EQ(1, consumer.number_of_errors_);
493 426
494 fetcher = factory_.GetFetcherByID(0); 427 fetcher = factory_.GetFetcherByID(0);
495 EXPECT_TRUE(fetcher); 428 EXPECT_TRUE(fetcher);
496 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 429 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
497 fetcher->SetResponseString(""); 430 fetcher->SetResponseString("");
498 fetcher->delegate()->OnURLFetchComplete(fetcher); 431 fetcher->delegate()->OnURLFetchComplete(fetcher);
499 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 432 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
500 EXPECT_EQ(2, consumer.number_of_errors_); 433 EXPECT_EQ(2, consumer.number_of_errors_);
501 } 434 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698