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

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: Moved DeviceOAuth2TokenService factory method to g_browser_process Created 7 years, 8 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 {
Mattias Nissler (ping if slow) 2013/03/26 12:04:32 drive-by-nit: Seems like this class is mostly redu
David Roche 2013/03/27 05:09:51 Done.
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) {}
71 virtual ~RetryingTestingOAuth2TokenServiceConsumer() {} 35 virtual ~RetryingTestingOAuth2TokenServiceConsumer() {}
72 36
73 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request, 37 virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
(...skipping 12 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) {
Mattias Nissler (ping if slow) 2013/03/26 12:04:32 nit: 4 spaces indentation.
David Roche 2013/03/27 05:09:51 Done.
64 }
Mattias Nissler (ping if slow) 2013/03/26 12:04:32 nit: newline
David Roche 2013/03/27 05:09:51 Done.
65 // For testing: set the refresh token to be used.
66 void set_refresh_token(const std::string& refresh_token) {
67 refresh_token_ = refresh_token;
68 }
Mattias Nissler (ping if slow) 2013/03/26 12:04:32 nit: newline
David Roche 2013/03/27 05:09:51 Done.
69 protected:
70 std::string GetRefreshToken() OVERRIDE {
71 return refresh_token_;
72 }
Mattias Nissler (ping if slow) 2013/03/26 12:04:32 nit: newline:
David Roche 2013/03/27 05:09:51 Done.
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()
80 : request_context_getter_(new net::TestURLRequestContextGetter(
81 message_loop_.message_loop_proxy())) {
82 }
99 83
100 virtual void SetUp() OVERRIDE { 84 virtual void SetUp() OVERRIDE {
101 TokenServiceTestHarness::SetUp(); 85 TokenServiceTestHarness::SetUp();
102 io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO, 86 io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO,
103 &message_loop_)); 87 &message_loop_));
104 service_->UpdateCredentials(credentials_); 88 oauth2_service_.reset(new TestOAuth2TokenService(request_context_getter_));
105 profile_->CreateRequestContext();
106 oauth2_service_ = OAuth2TokenServiceFactory::GetForProfile(profile_.get());
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_;
97 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
115 net::TestURLFetcherFactory factory_; 98 net::TestURLFetcherFactory factory_;
116 OAuth2TokenService* oauth2_service_; 99 scoped_ptr<TestOAuth2TokenService> oauth2_service_;
117 TestingOAuth2TokenServiceConsumer consumer_; 100 TestingOAuth2TokenServiceConsumer consumer_;
118 }; 101 };
119 102
120 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { 103 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) {
121 scoped_ptr<OAuth2TokenService::Request> request( 104 scoped_ptr<OAuth2TokenService::Request> request(
122 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 105 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
123 message_loop_.RunUntilIdle(); 106 message_loop_.RunUntilIdle();
124 107
125 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 108 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
126 EXPECT_EQ(1, consumer_.number_of_errors_); 109 EXPECT_EQ(1, consumer_.number_of_errors_);
127 } 110 }
128 111
129 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { 112 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) {
130 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 113 oauth2_service_->set_refresh_token("refreshToken");
131 "refreshToken"); 114 scoped_ptr<OAuth2TokenService::Request> request(
132 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 115 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
133 std::set<std::string>(), &consumer_));
134 message_loop_.RunUntilIdle(); 116 message_loop_.RunUntilIdle();
135 117
136 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 118 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
137 EXPECT_EQ(0, consumer_.number_of_errors_); 119 EXPECT_EQ(0, consumer_.number_of_errors_);
138 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 120 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
139 EXPECT_TRUE(fetcher); 121 EXPECT_TRUE(fetcher);
140 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 122 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
141 fetcher->SetResponseString(""); 123 fetcher->SetResponseString("");
142 fetcher->delegate()->OnURLFetchComplete(fetcher); 124 fetcher->delegate()->OnURLFetchComplete(fetcher);
143 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 125 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
144 EXPECT_EQ(1, consumer_.number_of_errors_); 126 EXPECT_EQ(1, consumer_.number_of_errors_);
145 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 127 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
146 } 128 }
147 129
148 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { 130 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) {
149 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 131 oauth2_service_->set_refresh_token("refreshToken");
150 "refreshToken"); 132 scoped_ptr<OAuth2TokenService::Request> request(
151 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 133 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
152 std::set<std::string>(), &consumer_));
153 message_loop_.RunUntilIdle(); 134 message_loop_.RunUntilIdle();
154 135
155 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 136 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
156 EXPECT_EQ(0, consumer_.number_of_errors_); 137 EXPECT_EQ(0, consumer_.number_of_errors_);
157 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 138 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
158 EXPECT_TRUE(fetcher); 139 EXPECT_TRUE(fetcher);
159 fetcher->set_response_code(net::HTTP_OK); 140 fetcher->set_response_code(net::HTTP_OK);
160 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 141 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
161 fetcher->delegate()->OnURLFetchComplete(fetcher); 142 fetcher->delegate()->OnURLFetchComplete(fetcher);
162 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 143 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
163 EXPECT_EQ(0, consumer_.number_of_errors_); 144 EXPECT_EQ(0, consumer_.number_of_errors_);
164 EXPECT_EQ("token", consumer_.last_token_); 145 EXPECT_EQ("token", consumer_.last_token_);
165 } 146 }
166 147
167 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { 148 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
168 std::set<std::string> scopes1; 149 std::set<std::string> scopes1;
169 scopes1.insert("s1"); 150 scopes1.insert("s1");
170 scopes1.insert("s2"); 151 scopes1.insert("s2");
171 std::set<std::string> scopes1_same; 152 std::set<std::string> scopes1_same;
172 scopes1_same.insert("s2"); 153 scopes1_same.insert("s2");
173 scopes1_same.insert("s1"); 154 scopes1_same.insert("s1");
174 std::set<std::string> scopes2; 155 std::set<std::string> scopes2;
175 scopes2.insert("s3"); 156 scopes2.insert("s3");
176 157
177 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 158 oauth2_service_->set_refresh_token("refreshToken");
178 "refreshToken");
179 159
180 // First request. 160 // First request.
181 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 161 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
182 scopes1, &consumer_)); 162 scopes1, &consumer_));
183 message_loop_.RunUntilIdle(); 163 message_loop_.RunUntilIdle();
184 164
185 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 165 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
186 EXPECT_EQ(0, consumer_.number_of_errors_); 166 EXPECT_EQ(0, consumer_.number_of_errors_);
187 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 167 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
188 EXPECT_TRUE(fetcher); 168 EXPECT_TRUE(fetcher);
(...skipping 26 matching lines...) Expand all
215 EXPECT_TRUE(fetcher); 195 EXPECT_TRUE(fetcher);
216 fetcher->set_response_code(net::HTTP_OK); 196 fetcher->set_response_code(net::HTTP_OK);
217 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 197 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
218 fetcher->delegate()->OnURLFetchComplete(fetcher); 198 fetcher->delegate()->OnURLFetchComplete(fetcher);
219 EXPECT_EQ(3, consumer_.number_of_correct_tokens_); 199 EXPECT_EQ(3, consumer_.number_of_correct_tokens_);
220 EXPECT_EQ(0, consumer_.number_of_errors_); 200 EXPECT_EQ(0, consumer_.number_of_errors_);
221 EXPECT_EQ("token2", consumer_.last_token_); 201 EXPECT_EQ("token2", consumer_.last_token_);
222 } 202 }
223 203
224 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { 204 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
225 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 205 oauth2_service_->set_refresh_token("refreshToken");
226 "refreshToken");
227 206
228 // First request. 207 // First request.
229 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 208 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
230 std::set<std::string>(), &consumer_)); 209 std::set<std::string>(), &consumer_));
231 message_loop_.RunUntilIdle(); 210 message_loop_.RunUntilIdle();
232 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 211 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
233 EXPECT_EQ(0, consumer_.number_of_errors_); 212 EXPECT_EQ(0, consumer_.number_of_errors_);
234 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 213 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
235 EXPECT_TRUE(fetcher); 214 EXPECT_TRUE(fetcher);
236 fetcher->set_response_code(net::HTTP_OK); 215 fetcher->set_response_code(net::HTTP_OK);
(...skipping 14 matching lines...) Expand all
251 fetcher = factory_.GetFetcherByID(0); 230 fetcher = factory_.GetFetcherByID(0);
252 EXPECT_TRUE(fetcher); 231 EXPECT_TRUE(fetcher);
253 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 232 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
254 fetcher->SetResponseString(""); 233 fetcher->SetResponseString("");
255 fetcher->delegate()->OnURLFetchComplete(fetcher); 234 fetcher->delegate()->OnURLFetchComplete(fetcher);
256 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 235 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
257 EXPECT_EQ(1, consumer_.number_of_errors_); 236 EXPECT_EQ(1, consumer_.number_of_errors_);
258 } 237 }
259 238
260 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { 239 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
261 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 240 oauth2_service_->set_refresh_token("refreshToken");
262 "refreshToken");
263 241
264 // First request. 242 // First request.
265 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 243 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
266 std::set<std::string>(), &consumer_)); 244 std::set<std::string>(), &consumer_));
267 message_loop_.RunUntilIdle(); 245 message_loop_.RunUntilIdle();
268 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 246 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
269 EXPECT_EQ(0, consumer_.number_of_errors_); 247 EXPECT_EQ(0, consumer_.number_of_errors_);
270 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 248 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
271 EXPECT_TRUE(fetcher); 249 EXPECT_TRUE(fetcher);
272 fetcher->set_response_code(net::HTTP_OK); 250 fetcher->set_response_code(net::HTTP_OK);
(...skipping 14 matching lines...) Expand all
287 EXPECT_TRUE(fetcher); 265 EXPECT_TRUE(fetcher);
288 fetcher->set_response_code(net::HTTP_OK); 266 fetcher->set_response_code(net::HTTP_OK);
289 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); 267 fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
290 fetcher->delegate()->OnURLFetchComplete(fetcher); 268 fetcher->delegate()->OnURLFetchComplete(fetcher);
291 EXPECT_EQ(2, consumer_.number_of_correct_tokens_); 269 EXPECT_EQ(2, consumer_.number_of_correct_tokens_);
292 EXPECT_EQ(0, consumer_.number_of_errors_); 270 EXPECT_EQ(0, consumer_.number_of_errors_);
293 EXPECT_EQ("another token", consumer_.last_token_); 271 EXPECT_EQ("another token", consumer_.last_token_);
294 } 272 }
295 273
296 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { 274 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
297 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 275 oauth2_service_->set_refresh_token("refreshToken");
298 "refreshToken");
299 276
300 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 277 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
301 std::set<std::string>(), &consumer_)); 278 std::set<std::string>(), &consumer_));
302 message_loop_.RunUntilIdle(); 279 message_loop_.RunUntilIdle();
303 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 280 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
304 EXPECT_EQ(0, consumer_.number_of_errors_); 281 EXPECT_EQ(0, consumer_.number_of_errors_);
305 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 282 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
306 EXPECT_TRUE(fetcher); 283 EXPECT_TRUE(fetcher);
307 284
308 request.reset(); 285 request.reset();
309 286
310 fetcher->set_response_code(net::HTTP_OK); 287 fetcher->set_response_code(net::HTTP_OK);
311 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 288 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
312 fetcher->delegate()->OnURLFetchComplete(fetcher); 289 fetcher->delegate()->OnURLFetchComplete(fetcher);
313 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 290 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
314 EXPECT_EQ(0, consumer_.number_of_errors_); 291 EXPECT_EQ(0, consumer_.number_of_errors_);
315 } 292 }
316 293
317 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { 294 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) {
318 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 295 oauth2_service_->set_refresh_token("refreshToken");
319 "refreshToken");
320 296
321 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 297 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
322 std::set<std::string>(), &consumer_)); 298 std::set<std::string>(), &consumer_));
323 message_loop_.RunUntilIdle(); 299 message_loop_.RunUntilIdle();
324 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 300 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
325 fetcher->set_response_code(net::HTTP_OK); 301 fetcher->set_response_code(net::HTTP_OK);
326 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 302 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
327 fetcher->delegate()->OnURLFetchComplete(fetcher); 303 fetcher->delegate()->OnURLFetchComplete(fetcher);
328 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 304 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
329 EXPECT_EQ(0, consumer_.number_of_errors_); 305 EXPECT_EQ(0, consumer_.number_of_errors_);
330 EXPECT_EQ("token", consumer_.last_token_); 306 EXPECT_EQ("token", consumer_.last_token_);
331 307
332 request.reset(); 308 request.reset();
333 309
334 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 310 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
335 EXPECT_EQ(0, consumer_.number_of_errors_); 311 EXPECT_EQ(0, consumer_.number_of_errors_);
336 EXPECT_EQ("token", consumer_.last_token_); 312 EXPECT_EQ("token", consumer_.last_token_);
337 } 313 }
338 314
339 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { 315 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) {
340 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 316 oauth2_service_->set_refresh_token("refreshToken");
341 "refreshToken");
342 317
343 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 318 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
344 std::set<std::string>(), &consumer_)); 319 std::set<std::string>(), &consumer_));
345 message_loop_.RunUntilIdle(); 320 message_loop_.RunUntilIdle();
346 scoped_ptr<OAuth2TokenService::Request> request2( 321 scoped_ptr<OAuth2TokenService::Request> request2(
347 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 322 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
348 message_loop_.RunUntilIdle(); 323 message_loop_.RunUntilIdle();
349 324
350 request.reset(); 325 request.reset();
351 326
352 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 327 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
353 fetcher->set_response_code(net::HTTP_OK); 328 fetcher->set_response_code(net::HTTP_OK);
354 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 329 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
355 fetcher->delegate()->OnURLFetchComplete(fetcher); 330 fetcher->delegate()->OnURLFetchComplete(fetcher);
356 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 331 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
357 EXPECT_EQ(0, consumer_.number_of_errors_); 332 EXPECT_EQ(0, consumer_.number_of_errors_);
358 } 333 }
359 334
360 TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndRequest) { 335 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) {
361 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 336 // We have a valid refresh token; the first request is successful.
362 "refreshToken"); 337 oauth2_service_->set_refresh_token("refreshToken");
363
364 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 338 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
365 std::set<std::string>(), &consumer_)); 339 std::set<std::string>(), &consumer_));
366 message_loop_.RunUntilIdle(); 340 message_loop_.RunUntilIdle();
367 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 341 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
368 fetcher->set_response_code(net::HTTP_OK); 342 fetcher->set_response_code(net::HTTP_OK);
369 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 343 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
370 fetcher->delegate()->OnURLFetchComplete(fetcher); 344 fetcher->delegate()->OnURLFetchComplete(fetcher);
371 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 345 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
372 EXPECT_EQ(0, consumer_.number_of_errors_); 346 EXPECT_EQ(0, consumer_.number_of_errors_);
373 EXPECT_EQ("token", consumer_.last_token_); 347 EXPECT_EQ("token", consumer_.last_token_);
374 348
375 // Signs out 349 // The refresh token is no longer available; subsequent requests fail.
376 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 350 oauth2_service_->set_refresh_token("");
377 "");
378 service_->EraseTokensFromDB();
379
380 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); 351 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
381 message_loop_.RunUntilIdle(); 352 message_loop_.RunUntilIdle();
382 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 353 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
383 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 354 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
384 EXPECT_EQ(1, consumer_.number_of_errors_); 355 EXPECT_EQ(1, consumer_.number_of_errors_);
385 } 356 }
386 357
387 TEST_F(OAuth2TokenServiceTest, SuccessAndSignOutAndSignInAndSuccess) { 358 TEST_F(OAuth2TokenServiceTest,
388 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 359 ChangedRefreshTokenDoesNotAffectInFlightRequests) {
389 "refreshToken"); 360 oauth2_service_->set_refresh_token("first refreshToken");
390 std::set<std::string> scopes; 361 std::set<std::string> scopes;
391 scopes.insert("s1"); 362 scopes.insert("s1");
392 scopes.insert("s2"); 363 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 364
430 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 365 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
431 scopes, &consumer_)); 366 scopes, &consumer_));
432 message_loop_.RunUntilIdle(); 367 message_loop_.RunUntilIdle();
433 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); 368 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
434 369
435 // Note |request| is still pending. 370 // Note |request| is still pending when the refresh token changes.
436 service_->EraseTokensFromDB(); 371 oauth2_service_->set_refresh_token("second refreshToken");
437 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
438 "second refreshToken");
439 372
373 // A 2nd request (using the new refresh token) that occurs and completes
374 // while the 1st request is in flight is successful.
440 TestingOAuth2TokenServiceConsumer consumer2; 375 TestingOAuth2TokenServiceConsumer consumer2;
441 scoped_ptr<OAuth2TokenService::Request> request2( 376 scoped_ptr<OAuth2TokenService::Request> request2(
442 oauth2_service_->StartRequest(scopes, &consumer2)); 377 oauth2_service_->StartRequest(scopes, &consumer2));
443 message_loop_.RunUntilIdle(); 378 message_loop_.RunUntilIdle();
444 379
445 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); 380 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0);
446 fetcher2->set_response_code(net::HTTP_OK); 381 fetcher2->set_response_code(net::HTTP_OK);
447 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); 382 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
448 fetcher2->delegate()->OnURLFetchComplete(fetcher2); 383 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
449 EXPECT_EQ(1, consumer2.number_of_correct_tokens_); 384 EXPECT_EQ(1, consumer2.number_of_correct_tokens_);
450 EXPECT_EQ(0, consumer2.number_of_errors_); 385 EXPECT_EQ(0, consumer2.number_of_errors_);
451 EXPECT_EQ("second token", consumer2.last_token_); 386 EXPECT_EQ("second token", consumer2.last_token_);
452 387
453 fetcher1->set_response_code(net::HTTP_OK); 388 fetcher1->set_response_code(net::HTTP_OK);
454 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); 389 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600));
455 fetcher1->delegate()->OnURLFetchComplete(fetcher1); 390 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
456 EXPECT_EQ(1, consumer_.number_of_correct_tokens_); 391 EXPECT_EQ(1, consumer_.number_of_correct_tokens_);
457 EXPECT_EQ(0, consumer_.number_of_errors_); 392 EXPECT_EQ(0, consumer_.number_of_errors_);
458 EXPECT_EQ("first token", consumer_.last_token_); 393 EXPECT_EQ("first token", consumer_.last_token_);
459 } 394 }
460 395
461 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { 396 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) {
462 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 397 oauth2_service_->set_refresh_token("refreshToken");
463 "refreshToken");
464 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 398 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
465 std::set<std::string>(), &consumer_)); 399 std::set<std::string>(), &consumer_));
466 message_loop_.RunUntilIdle(); 400 message_loop_.RunUntilIdle();
467 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 401 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
468 EXPECT_EQ(0, consumer_.number_of_errors_); 402 EXPECT_EQ(0, consumer_.number_of_errors_);
469 403
470 profile_.reset(); 404 // The destructor should cancel all in-flight fetchers.
405 oauth2_service_.reset(NULL);
471 406
472 EXPECT_EQ(0, consumer_.number_of_correct_tokens_); 407 EXPECT_EQ(0, consumer_.number_of_correct_tokens_);
473 EXPECT_EQ(1, consumer_.number_of_errors_); 408 EXPECT_EQ(1, consumer_.number_of_errors_);
474 } 409 }
475 410
476 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { 411 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) {
477 service_->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, 412 oauth2_service_->set_refresh_token("refreshToken");
478 "refreshToken"); 413 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get());
479 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_);
480 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 414 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
481 std::set<std::string>(), &consumer)); 415 std::set<std::string>(), &consumer));
482 message_loop_.RunUntilIdle(); 416 message_loop_.RunUntilIdle();
483 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 417 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
484 EXPECT_EQ(0, consumer.number_of_errors_); 418 EXPECT_EQ(0, consumer.number_of_errors_);
485 419
486 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 420 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
487 EXPECT_TRUE(fetcher); 421 EXPECT_TRUE(fetcher);
488 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 422 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
489 fetcher->SetResponseString(""); 423 fetcher->SetResponseString("");
490 fetcher->delegate()->OnURLFetchComplete(fetcher); 424 fetcher->delegate()->OnURLFetchComplete(fetcher);
491 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 425 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
492 EXPECT_EQ(1, consumer.number_of_errors_); 426 EXPECT_EQ(1, consumer.number_of_errors_);
493 427
494 fetcher = factory_.GetFetcherByID(0); 428 fetcher = factory_.GetFetcherByID(0);
495 EXPECT_TRUE(fetcher); 429 EXPECT_TRUE(fetcher);
496 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 430 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
497 fetcher->SetResponseString(""); 431 fetcher->SetResponseString("");
498 fetcher->delegate()->OnURLFetchComplete(fetcher); 432 fetcher->delegate()->OnURLFetchComplete(fetcher);
499 EXPECT_EQ(0, consumer.number_of_correct_tokens_); 433 EXPECT_EQ(0, consumer.number_of_correct_tokens_);
500 EXPECT_EQ(2, consumer.number_of_errors_); 434 EXPECT_EQ(2, consumer.number_of_errors_);
501 } 435 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698