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

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

Powered by Google App Engine
This is Rietveld 408576698