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

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

Issue 22581003: Handling of multiple concurrent requests from different clients in OAuth2TokenService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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> 5 #include <string>
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/signin/oauth2_token_service.h" 10 #include "chrome/browser/signin/oauth2_token_service.h"
11 #include "chrome/browser/signin/oauth2_token_service_test_util.h" 11 #include "chrome/browser/signin/oauth2_token_service_test_util.h"
12 #include "chrome/browser/signin/token_service_factory.h" 12 #include "chrome/browser/signin/token_service_factory.h"
13 #include "chrome/browser/signin/token_service_unittest.h" 13 #include "chrome/browser/signin/token_service_unittest.h"
14 #include "chrome/test/base/testing_browser_process.h" 14 #include "chrome/test/base/testing_browser_process.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "google_apis/gaia/gaia_constants.h" 16 #include "google_apis/gaia/gaia_constants.h"
17 #include "google_apis/gaia/google_service_auth_error.h" 17 #include "google_apis/gaia/google_service_auth_error.h"
18 #include "google_apis/gaia/oauth2_access_token_consumer.h" 18 #include "google_apis/gaia/oauth2_access_token_consumer.h"
19 #include "google_apis/gaia/oauth2_access_token_fetcher.h"
19 #include "net/http/http_status_code.h" 20 #include "net/http/http_status_code.h"
20 #include "net/url_request/test_url_fetcher_factory.h" 21 #include "net/url_request/test_url_fetcher_factory.h"
21 #include "net/url_request/url_request_status.h" 22 #include "net/url_request/url_request_status.h"
22 #include "net/url_request/url_request_test_util.h" 23 #include "net/url_request/url_request_test_util.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 using content::BrowserThread; 26 using content::BrowserThread;
26 27
27 // A testing consumer that retries on error. 28 // A testing consumer that retries on error.
28 class RetryingTestingOAuth2TokenServiceConsumer 29 class RetryingTestingOAuth2TokenServiceConsumer
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 class OAuth2TokenServiceTest : public TokenServiceTestHarness { 78 class OAuth2TokenServiceTest : public TokenServiceTestHarness {
78 public: 79 public:
79 virtual void SetUp() OVERRIDE { 80 virtual void SetUp() OVERRIDE {
80 TokenServiceTestHarness::SetUp(); 81 TokenServiceTestHarness::SetUp();
81 oauth2_service_.reset( 82 oauth2_service_.reset(
82 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( 83 new TestOAuth2TokenService(new net::TestURLRequestContextGetter(
83 BrowserThread::GetMessageLoopProxyForThread( 84 BrowserThread::GetMessageLoopProxyForThread(
84 BrowserThread::IO)))); 85 BrowserThread::IO))));
85 } 86 }
86 87
88 virtual void TearDown() OVERRIDE {
89 OAuth2AccessTokenFetcher::ResetLastFetcherIdForTest();
90 }
91
87 protected: 92 protected:
88 net::TestURLFetcherFactory factory_; 93 net::TestURLFetcherFactory factory_;
89 scoped_ptr<TestOAuth2TokenService> oauth2_service_; 94 scoped_ptr<TestOAuth2TokenService> oauth2_service_;
90 TestingOAuth2TokenServiceConsumer consumer_; 95 TestingOAuth2TokenServiceConsumer consumer_;
91 }; 96 };
92 97
93 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { 98 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) {
94 scoped_ptr<OAuth2TokenService::Request> request( 99 scoped_ptr<OAuth2TokenService::Request> request(
95 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 100 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
96 base::RunLoop().RunUntilIdle(); 101 base::RunLoop().RunUntilIdle();
97 102
98 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 103 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
99 EXPECT_EQ(1, consumer_.number_of_errors_); 104 EXPECT_EQ(1, consumer_.number_of_errors_);
100 } 105 }
101 106
102 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { 107 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) {
103 oauth2_service_->set_refresh_token("refreshToken"); 108 oauth2_service_->set_refresh_token("refreshToken");
104 scoped_ptr<OAuth2TokenService::Request> request( 109 scoped_ptr<OAuth2TokenService::Request> request(
105 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 110 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
106 base::RunLoop().RunUntilIdle(); 111 base::RunLoop().RunUntilIdle();
107 112
108 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 113 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
109 EXPECT_EQ(0, consumer_.number_of_errors_); 114 EXPECT_EQ(0, consumer_.number_of_errors_);
110 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 115 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
111 EXPECT_TRUE(fetcher); 116 ASSERT_TRUE(fetcher);
112 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 117 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
113 fetcher->SetResponseString(std::string()); 118 fetcher->SetResponseString(std::string());
114 fetcher->delegate()->OnURLFetchComplete(fetcher); 119 fetcher->delegate()->OnURLFetchComplete(fetcher);
115 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 120 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
116 EXPECT_EQ(1, consumer_.number_of_errors_); 121 EXPECT_EQ(1, consumer_.number_of_errors_);
117 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 122 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
118 } 123 }
119 124
120 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { 125 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) {
121 oauth2_service_->set_refresh_token("refreshToken"); 126 oauth2_service_->set_refresh_token("refreshToken");
122 scoped_ptr<OAuth2TokenService::Request> request( 127 scoped_ptr<OAuth2TokenService::Request> request(
123 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 128 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
124 base::RunLoop().RunUntilIdle(); 129 base::RunLoop().RunUntilIdle();
125 130
126 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 131 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
127 EXPECT_EQ(0, consumer_.number_of_errors_); 132 EXPECT_EQ(0, consumer_.number_of_errors_);
128 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 133 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
129 EXPECT_TRUE(fetcher); 134 ASSERT_TRUE(fetcher);
130 fetcher->set_response_code(net::HTTP_OK); 135 fetcher->set_response_code(net::HTTP_OK);
131 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 136 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
132 fetcher->delegate()->OnURLFetchComplete(fetcher); 137 fetcher->delegate()->OnURLFetchComplete(fetcher);
133 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 138 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
134 EXPECT_EQ(0, consumer_.number_of_errors_); 139 EXPECT_EQ(0, consumer_.number_of_errors_);
135 EXPECT_EQ("token", consumer_.last_token_); 140 EXPECT_EQ("token", consumer_.last_token_);
136 } 141 }
137 142
138 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { 143 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
139 std::set<std::string> scopes1; 144 std::set<std::string> scopes1;
140 scopes1.insert("s1"); 145 scopes1.insert("s1");
141 scopes1.insert("s2"); 146 scopes1.insert("s2");
142 std::set<std::string> scopes1_same; 147 std::set<std::string> scopes1_same;
143 scopes1_same.insert("s2"); 148 scopes1_same.insert("s2");
144 scopes1_same.insert("s1"); 149 scopes1_same.insert("s1");
145 std::set<std::string> scopes2; 150 std::set<std::string> scopes2;
146 scopes2.insert("s3"); 151 scopes2.insert("s3");
147 152
148 oauth2_service_->set_refresh_token("refreshToken"); 153 oauth2_service_->set_refresh_token("refreshToken");
149 154
150 // First request. 155 // First request.
151 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 156 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
152 scopes1, &consumer_)); 157 scopes1, &consumer_));
153 base::RunLoop().RunUntilIdle(); 158 base::RunLoop().RunUntilIdle();
154 159
155 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 160 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
156 EXPECT_EQ(0, consumer_.number_of_errors_); 161 EXPECT_EQ(0, consumer_.number_of_errors_);
157 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 162 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
158 EXPECT_TRUE(fetcher); 163 ASSERT_TRUE(fetcher);
159 fetcher->set_response_code(net::HTTP_OK); 164 fetcher->set_response_code(net::HTTP_OK);
160 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 165 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
161 fetcher->delegate()->OnURLFetchComplete(fetcher); 166 fetcher->delegate()->OnURLFetchComplete(fetcher);
162 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 167 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
163 EXPECT_EQ(0, consumer_.number_of_errors_); 168 EXPECT_EQ(0, consumer_.number_of_errors_);
164 EXPECT_EQ("token", consumer_.last_token_); 169 EXPECT_EQ("token", consumer_.last_token_);
165 170
166 // Second request to the same set of scopes, should return the same token 171 // Second request to the same set of scopes, should return the same token
167 // without needing a network request. 172 // without needing a network request.
168 scoped_ptr<OAuth2TokenService::Request> request2( 173 scoped_ptr<OAuth2TokenService::Request> request2(
169 oauth2_service_->StartRequest(scopes1_same, &consumer_)); 174 oauth2_service_->StartRequest(scopes1_same, &consumer_));
170 base::RunLoop().RunUntilIdle(); 175 base::RunLoop().RunUntilIdle();
171 176
172 // No new network fetcher. 177 // No new network fetcher.
173 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 178 EXPECT_FALSE(factory_.GetFetcherByID(1));
174 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 179 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
175 EXPECT_EQ(0, consumer_.number_of_errors_); 180 EXPECT_EQ(0, consumer_.number_of_errors_);
176 EXPECT_EQ("token", consumer_.last_token_); 181 EXPECT_EQ("token", consumer_.last_token_);
177 182
178 // Third request to a new set of scopes, should return another token. 183 // Third request to a new set of scopes, should return another token.
179 scoped_ptr<OAuth2TokenService::Request> request3( 184 scoped_ptr<OAuth2TokenService::Request> request3(
180 oauth2_service_->StartRequest(scopes2, &consumer_)); 185 oauth2_service_->StartRequest(scopes2, &consumer_));
181 base::RunLoop().RunUntilIdle(); 186 base::RunLoop().RunUntilIdle();
182 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 187 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
183 EXPECT_EQ(0, consumer_.number_of_errors_); 188 EXPECT_EQ(0, consumer_.number_of_errors_);
184 fetcher = factory_.GetFetcherByID(0); 189 fetcher = factory_.GetFetcherByID(1);
185 EXPECT_TRUE(fetcher); 190 ASSERT_TRUE(fetcher);
186 fetcher->set_response_code(net::HTTP_OK); 191 fetcher->set_response_code(net::HTTP_OK);
187 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 192 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
188 fetcher->delegate()->OnURLFetchComplete(fetcher); 193 fetcher->delegate()->OnURLFetchComplete(fetcher);
189 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 194 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
190 EXPECT_EQ(0, consumer_.number_of_errors_); 195 EXPECT_EQ(0, consumer_.number_of_errors_);
191 EXPECT_EQ("token2", consumer_.last_token_); 196 EXPECT_EQ("token2", consumer_.last_token_);
192 } 197 }
193 198
194 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { 199 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
195 oauth2_service_->set_refresh_token("refreshToken"); 200 oauth2_service_->set_refresh_token("refreshToken");
196 201
197 // First request. 202 // First request.
198 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 203 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
199 std::set<std::string>(), &consumer_)); 204 std::set<std::string>(), &consumer_));
200 base::RunLoop().RunUntilIdle(); 205 base::RunLoop().RunUntilIdle();
201 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 206 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
202 EXPECT_EQ(0, consumer_.number_of_errors_); 207 EXPECT_EQ(0, consumer_.number_of_errors_);
203 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 208 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
204 EXPECT_TRUE(fetcher); 209 ASSERT_TRUE(fetcher);
205 fetcher->set_response_code(net::HTTP_OK); 210 fetcher->set_response_code(net::HTTP_OK);
206 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 211 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
207 fetcher->delegate()->OnURLFetchComplete(fetcher); 212 fetcher->delegate()->OnURLFetchComplete(fetcher);
208 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 213 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
209 EXPECT_EQ(0, consumer_.number_of_errors_); 214 EXPECT_EQ(0, consumer_.number_of_errors_);
210 EXPECT_EQ("token", consumer_.last_token_); 215 EXPECT_EQ("token", consumer_.last_token_);
211 216
212 // Second request must try to access the network as the token has expired. 217 // Second request must try to access the network as the token has expired.
213 scoped_ptr<OAuth2TokenService::Request> request2( 218 scoped_ptr<OAuth2TokenService::Request> request2(
214 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 219 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
215 base::RunLoop().RunUntilIdle(); 220 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 221 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
217 EXPECT_EQ(0, consumer_.number_of_errors_); 222 EXPECT_EQ(0, consumer_.number_of_errors_);
218 223
219 // Network failure. 224 // Network failure.
220 fetcher = factory_.GetFetcherByID(0); 225 fetcher = factory_.GetFetcherByID(1);
221 EXPECT_TRUE(fetcher); 226 ASSERT_TRUE(fetcher);
222 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 227 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
223 fetcher->SetResponseString(std::string()); 228 fetcher->SetResponseString(std::string());
224 fetcher->delegate()->OnURLFetchComplete(fetcher); 229 fetcher->delegate()->OnURLFetchComplete(fetcher);
225 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 230 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
226 EXPECT_EQ(1, consumer_.number_of_errors_); 231 EXPECT_EQ(1, consumer_.number_of_errors_);
227 } 232 }
228 233
229 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { 234 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
230 oauth2_service_->set_refresh_token("refreshToken"); 235 oauth2_service_->set_refresh_token("refreshToken");
231 236
232 // First request. 237 // First request.
233 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 238 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
234 std::set<std::string>(), &consumer_)); 239 std::set<std::string>(), &consumer_));
235 base::RunLoop().RunUntilIdle(); 240 base::RunLoop().RunUntilIdle();
236 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 241 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
237 EXPECT_EQ(0, consumer_.number_of_errors_); 242 EXPECT_EQ(0, consumer_.number_of_errors_);
238 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 243 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
239 EXPECT_TRUE(fetcher); 244 ASSERT_TRUE(fetcher);
240 fetcher->set_response_code(net::HTTP_OK); 245 fetcher->set_response_code(net::HTTP_OK);
241 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 246 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
242 fetcher->delegate()->OnURLFetchComplete(fetcher); 247 fetcher->delegate()->OnURLFetchComplete(fetcher);
243 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 248 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
244 EXPECT_EQ(0, consumer_.number_of_errors_); 249 EXPECT_EQ(0, consumer_.number_of_errors_);
245 EXPECT_EQ("token", consumer_.last_token_); 250 EXPECT_EQ("token", consumer_.last_token_);
246 251
247 // Second request must try to access the network as the token has expired. 252 // Second request must try to access the network as the token has expired.
248 scoped_ptr<OAuth2TokenService::Request> request2( 253 scoped_ptr<OAuth2TokenService::Request> request2(
249 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 254 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
250 base::RunLoop().RunUntilIdle(); 255 base::RunLoop().RunUntilIdle();
251 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 256 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
252 EXPECT_EQ(0, consumer_.number_of_errors_); 257 EXPECT_EQ(0, consumer_.number_of_errors_);
253 258
254 fetcher = factory_.GetFetcherByID(0); 259 fetcher = factory_.GetFetcherByID(1);
255 EXPECT_TRUE(fetcher); 260 ASSERT_TRUE(fetcher);
256 fetcher->set_response_code(net::HTTP_OK); 261 fetcher->set_response_code(net::HTTP_OK);
257 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); 262 fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
258 fetcher->delegate()->OnURLFetchComplete(fetcher); 263 fetcher->delegate()->OnURLFetchComplete(fetcher);
259 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 264 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
260 EXPECT_EQ(0, consumer_.number_of_errors_); 265 EXPECT_EQ(0, consumer_.number_of_errors_);
261 EXPECT_EQ("another token", consumer_.last_token_); 266 EXPECT_EQ("another token", consumer_.last_token_);
262 } 267 }
263 268
264 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { 269 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
265 oauth2_service_->set_refresh_token("refreshToken"); 270 oauth2_service_->set_refresh_token("refreshToken");
266 271
267 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 272 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
268 std::set<std::string>(), &consumer_)); 273 std::set<std::string>(), &consumer_));
269 base::RunLoop().RunUntilIdle(); 274 base::RunLoop().RunUntilIdle();
270 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 275 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
271 EXPECT_EQ(0, consumer_.number_of_errors_); 276 EXPECT_EQ(0, consumer_.number_of_errors_);
272 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 277 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
273 EXPECT_TRUE(fetcher); 278 ASSERT_TRUE(fetcher);
274 279
275 request.reset(); 280 request.reset();
276 281
277 fetcher->set_response_code(net::HTTP_OK); 282 fetcher->set_response_code(net::HTTP_OK);
278 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 283 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
279 fetcher->delegate()->OnURLFetchComplete(fetcher); 284 fetcher->delegate()->OnURLFetchComplete(fetcher);
280 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 285 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
281 EXPECT_EQ(0, consumer_.number_of_errors_); 286 EXPECT_EQ(0, consumer_.number_of_errors_);
282 } 287 }
283 288
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 338 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
334 fetcher->delegate()->OnURLFetchComplete(fetcher); 339 fetcher->delegate()->OnURLFetchComplete(fetcher);
335 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 340 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
336 EXPECT_EQ(0, consumer_.number_of_errors_); 341 EXPECT_EQ(0, consumer_.number_of_errors_);
337 EXPECT_EQ("token", consumer_.last_token_); 342 EXPECT_EQ("token", consumer_.last_token_);
338 343
339 // The refresh token is no longer available; subsequent requests fail. 344 // The refresh token is no longer available; subsequent requests fail.
340 oauth2_service_->set_refresh_token(""); 345 oauth2_service_->set_refresh_token("");
341 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); 346 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
342 base::RunLoop().RunUntilIdle(); 347 base::RunLoop().RunUntilIdle();
343 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 348 EXPECT_FALSE(factory_.GetFetcherByID(1));
344 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 349 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
345 EXPECT_EQ(1, consumer_.number_of_errors_); 350 EXPECT_EQ(1, consumer_.number_of_errors_);
346 } 351 }
347 352
348 TEST_F(OAuth2TokenServiceTest, 353 TEST_F(OAuth2TokenServiceTest,
349 ChangedRefreshTokenDoesNotAffectInFlightRequests) { 354 ChangedRefreshTokenDoesNotAffectInFlightRequests) {
350 oauth2_service_->set_refresh_token("first refreshToken"); 355 oauth2_service_->set_refresh_token("first refreshToken");
351 std::set<std::string> scopes; 356 std::set<std::string> scopes;
352 scopes.insert("s1"); 357 scopes.insert("s1");
353 scopes.insert("s2"); 358 scopes.insert("s2");
354 359
355 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 360 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
356 scopes, &consumer_)); 361 scopes, &consumer_));
357 base::RunLoop().RunUntilIdle(); 362 base::RunLoop().RunUntilIdle();
358 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); 363 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
359 364
360 // Note |request| is still pending when the refresh token changes. 365 // Note |request| is still pending when the refresh token changes.
361 oauth2_service_->set_refresh_token("second refreshToken"); 366 oauth2_service_->set_refresh_token("second refreshToken");
362 367
363 // A 2nd request (using the new refresh token) that occurs and completes 368 // A 2nd request (using the new refresh token) that occurs and completes
364 // while the 1st request is in flight is successful. 369 // while the 1st request is in flight is successful.
365 TestingOAuth2TokenServiceConsumer consumer2; 370 TestingOAuth2TokenServiceConsumer consumer2;
366 scoped_ptr<OAuth2TokenService::Request> request2( 371 scoped_ptr<OAuth2TokenService::Request> request2(
367 oauth2_service_->StartRequest(scopes, &consumer2)); 372 oauth2_service_->StartRequest(scopes, &consumer2));
368 base::RunLoop().RunUntilIdle(); 373 base::RunLoop().RunUntilIdle();
369 374
370 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); 375 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
371 fetcher2->set_response_code(net::HTTP_OK); 376 fetcher2->set_response_code(net::HTTP_OK);
372 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); 377 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
373 fetcher2->delegate()->OnURLFetchComplete(fetcher2); 378 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
374 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); 379 EXPECT_EQ(1, consumer2.number_of_successful_tokens_);
375 EXPECT_EQ(0, consumer2.number_of_errors_); 380 EXPECT_EQ(0, consumer2.number_of_errors_);
376 EXPECT_EQ("second token", consumer2.last_token_); 381 EXPECT_EQ("second token", consumer2.last_token_);
377 382
378 fetcher1->set_response_code(net::HTTP_OK); 383 fetcher1->set_response_code(net::HTTP_OK);
379 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); 384 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600));
380 fetcher1->delegate()->OnURLFetchComplete(fetcher1); 385 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
(...skipping 27 matching lines...) Expand all
408 EXPECT_EQ(0, consumer.number_of_errors_); 413 EXPECT_EQ(0, consumer.number_of_errors_);
409 414
410 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 415 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
411 ASSERT_TRUE(fetcher); 416 ASSERT_TRUE(fetcher);
412 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 417 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
413 fetcher->SetResponseString(std::string()); 418 fetcher->SetResponseString(std::string());
414 fetcher->delegate()->OnURLFetchComplete(fetcher); 419 fetcher->delegate()->OnURLFetchComplete(fetcher);
415 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 420 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
416 EXPECT_EQ(1, consumer.number_of_errors_); 421 EXPECT_EQ(1, consumer.number_of_errors_);
417 422
418 fetcher = factory_.GetFetcherByID(0); 423 fetcher = factory_.GetFetcherByID(1);
419 ASSERT_TRUE(fetcher); 424 ASSERT_TRUE(fetcher);
420 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 425 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
421 fetcher->SetResponseString(std::string()); 426 fetcher->SetResponseString(std::string());
422 fetcher->delegate()->OnURLFetchComplete(fetcher); 427 fetcher->delegate()->OnURLFetchComplete(fetcher);
423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 428 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
424 EXPECT_EQ(2, consumer.number_of_errors_); 429 EXPECT_EQ(2, consumer.number_of_errors_);
425 } 430 }
426 431
427 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { 432 TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
428 std::set<std::string> scopes; 433 std::set<std::string> scopes;
429 oauth2_service_->set_refresh_token("refreshToken"); 434 oauth2_service_->set_refresh_token("refreshToken");
430 435
431 // First request. 436 // First request.
432 scoped_ptr<OAuth2TokenService::Request> request( 437 scoped_ptr<OAuth2TokenService::Request> request(
433 oauth2_service_->StartRequest(scopes, &consumer_)); 438 oauth2_service_->StartRequest(scopes, &consumer_));
434 base::RunLoop().RunUntilIdle(); 439 base::RunLoop().RunUntilIdle();
435 440
436 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 441 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
437 EXPECT_EQ(0, consumer_.number_of_errors_); 442 EXPECT_EQ(0, consumer_.number_of_errors_);
438 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 443 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
439 EXPECT_TRUE(fetcher); 444 ASSERT_TRUE(fetcher);
440 fetcher->set_response_code(net::HTTP_OK); 445 fetcher->set_response_code(net::HTTP_OK);
441 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 446 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
442 fetcher->delegate()->OnURLFetchComplete(fetcher); 447 fetcher->delegate()->OnURLFetchComplete(fetcher);
443 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 448 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
444 EXPECT_EQ(0, consumer_.number_of_errors_); 449 EXPECT_EQ(0, consumer_.number_of_errors_);
445 EXPECT_EQ("token", consumer_.last_token_); 450 EXPECT_EQ("token", consumer_.last_token_);
446 451
447 // Second request, should return the same token without needing a network 452 // Second request, should return the same token without needing a network
448 // request. 453 // request.
449 scoped_ptr<OAuth2TokenService::Request> request2( 454 scoped_ptr<OAuth2TokenService::Request> request2(
450 oauth2_service_->StartRequest(scopes, &consumer_)); 455 oauth2_service_->StartRequest(scopes, &consumer_));
451 base::RunLoop().RunUntilIdle(); 456 base::RunLoop().RunUntilIdle();
452 457
453 // No new network fetcher. 458 // No new network fetcher.
454 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 459 EXPECT_FALSE(factory_.GetFetcherByID(1));
455 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 460 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
456 EXPECT_EQ(0, consumer_.number_of_errors_); 461 EXPECT_EQ(0, consumer_.number_of_errors_);
457 EXPECT_EQ("token", consumer_.last_token_); 462 EXPECT_EQ("token", consumer_.last_token_);
458 463
459 // Invalidating the token should return a new token on the next request. 464 // Invalidating the token should return a new token on the next request.
460 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); 465 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_);
461 scoped_ptr<OAuth2TokenService::Request> request3( 466 scoped_ptr<OAuth2TokenService::Request> request3(
462 oauth2_service_->StartRequest(scopes, &consumer_)); 467 oauth2_service_->StartRequest(scopes, &consumer_));
463 base::RunLoop().RunUntilIdle(); 468 base::RunLoop().RunUntilIdle();
464 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 469 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
465 EXPECT_EQ(0, consumer_.number_of_errors_); 470 EXPECT_EQ(0, consumer_.number_of_errors_);
466 fetcher = factory_.GetFetcherByID(0); 471 fetcher = factory_.GetFetcherByID(1);
467 EXPECT_TRUE(fetcher); 472 ASSERT_TRUE(fetcher);
468 fetcher->set_response_code(net::HTTP_OK); 473 fetcher->set_response_code(net::HTTP_OK);
469 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 474 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
470 fetcher->delegate()->OnURLFetchComplete(fetcher); 475 fetcher->delegate()->OnURLFetchComplete(fetcher);
471 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 476 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
472 EXPECT_EQ(0, consumer_.number_of_errors_); 477 EXPECT_EQ(0, consumer_.number_of_errors_);
473 EXPECT_EQ("token2", consumer_.last_token_); 478 EXPECT_EQ("token2", consumer_.last_token_);
474 } 479 }
475 480
476 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { 481 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) {
477 oauth2_service_->set_refresh_token("refreshToken"); 482 oauth2_service_->set_refresh_token("refreshToken");
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); 521 oauth2_service_->CancelRequestsForTokenForTest("refreshToken");
517 522
518 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 523 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
519 EXPECT_EQ(2, consumer_.number_of_errors_); 524 EXPECT_EQ(2, consumer_.number_of_errors_);
520 525
521 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); 526 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2");
522 527
523 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 528 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
524 EXPECT_EQ(3, consumer_.number_of_errors_); 529 EXPECT_EQ(3, consumer_.number_of_errors_);
525 } 530 }
531
532 #if defined(OS_CHROMEOS)
533 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) {
534 std::string client_id_1("client1");
535 std::string client_secret_1("secret1");
536 std::string client_id_2("client2");
537 std::string client_secret_2("secret2");
538 std::set<std::string> scope_set;
539 scope_set.insert("scope1");
540 scope_set.insert("scope2");
541
542 oauth2_service_->set_refresh_token("refreshToken");
543
544 scoped_ptr<OAuth2TokenService::Request> request1(
545 oauth2_service_->StartRequestForClient(std::string(),
546 client_id_1,
547 client_secret_1,
548 scope_set,
549 &consumer_));
550 scoped_ptr<OAuth2TokenService::Request> request2(
551 oauth2_service_->StartRequestForClient(std::string(),
552 client_id_2,
553 client_secret_2,
554 scope_set,
555 &consumer_));
556 // Start a request that should be duplicate of |request1|.
557 scoped_ptr<OAuth2TokenService::Request> request3(
558 oauth2_service_->StartRequestForClient(std::string(),
559 client_id_1,
560 client_secret_1,
561 scope_set,
562 &consumer_));
563 base::RunLoop().RunUntilIdle();
564
565 // Check to make sure we have started exactly two fetchers.
566 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
567 ASSERT_TRUE(fetcher1);
568 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
569 ASSERT_TRUE(fetcher2);
570 EXPECT_FALSE(factory_.GetFetcherByID(2));
571
572 fetcher1->set_response_code(net::HTTP_OK);
573 fetcher1->SetResponseString(GetValidTokenResponse("token1", 3600));
574 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
575
576 fetcher2->set_response_code(net::HTTP_OK);
577 fetcher2->SetResponseString(GetValidTokenResponse("token2", 3600));
578 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
579
580 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
581 EXPECT_EQ(0, consumer_.number_of_errors_);
582 }
583 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698