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

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_EQ(1U, factory_.GetFetcherCount());
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 ASSERT_EQ(2U, factory_.GetFetcherCount());
185 EXPECT_TRUE(fetcher); 190 fetcher = factory_.GetFetcherByID(1);
191 ASSERT_TRUE(fetcher);
186 fetcher->set_response_code(net::HTTP_OK); 192 fetcher->set_response_code(net::HTTP_OK);
187 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 193 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
188 fetcher->delegate()->OnURLFetchComplete(fetcher); 194 fetcher->delegate()->OnURLFetchComplete(fetcher);
189 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 195 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
190 EXPECT_EQ(0, consumer_.number_of_errors_); 196 EXPECT_EQ(0, consumer_.number_of_errors_);
191 EXPECT_EQ("token2", consumer_.last_token_); 197 EXPECT_EQ("token2", consumer_.last_token_);
192 } 198 }
193 199
194 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { 200 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
195 oauth2_service_->set_refresh_token("refreshToken"); 201 oauth2_service_->set_refresh_token("refreshToken");
196 202
197 // First request. 203 // First request.
198 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 204 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
199 std::set<std::string>(), &consumer_)); 205 std::set<std::string>(), &consumer_));
200 base::RunLoop().RunUntilIdle(); 206 base::RunLoop().RunUntilIdle();
201 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 207 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
202 EXPECT_EQ(0, consumer_.number_of_errors_); 208 EXPECT_EQ(0, consumer_.number_of_errors_);
203 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 209 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
204 EXPECT_TRUE(fetcher); 210 ASSERT_TRUE(fetcher);
205 fetcher->set_response_code(net::HTTP_OK); 211 fetcher->set_response_code(net::HTTP_OK);
206 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 212 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
207 fetcher->delegate()->OnURLFetchComplete(fetcher); 213 fetcher->delegate()->OnURLFetchComplete(fetcher);
208 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 214 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
209 EXPECT_EQ(0, consumer_.number_of_errors_); 215 EXPECT_EQ(0, consumer_.number_of_errors_);
210 EXPECT_EQ("token", consumer_.last_token_); 216 EXPECT_EQ("token", consumer_.last_token_);
211 217
212 // Second request must try to access the network as the token has expired. 218 // Second request must try to access the network as the token has expired.
213 scoped_ptr<OAuth2TokenService::Request> request2( 219 scoped_ptr<OAuth2TokenService::Request> request2(
214 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 220 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
215 base::RunLoop().RunUntilIdle(); 221 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 222 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
217 EXPECT_EQ(0, consumer_.number_of_errors_); 223 EXPECT_EQ(0, consumer_.number_of_errors_);
218 224
219 // Network failure. 225 // Network failure.
220 fetcher = factory_.GetFetcherByID(0); 226 ASSERT_EQ(2U, factory_.GetFetcherCount());
221 EXPECT_TRUE(fetcher); 227 fetcher = factory_.GetFetcherByID(1);
228 ASSERT_TRUE(fetcher);
222 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 229 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
223 fetcher->SetResponseString(std::string()); 230 fetcher->SetResponseString(std::string());
224 fetcher->delegate()->OnURLFetchComplete(fetcher); 231 fetcher->delegate()->OnURLFetchComplete(fetcher);
225 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 232 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
226 EXPECT_EQ(1, consumer_.number_of_errors_); 233 EXPECT_EQ(1, consumer_.number_of_errors_);
227 } 234 }
228 235
229 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { 236 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
230 oauth2_service_->set_refresh_token("refreshToken"); 237 oauth2_service_->set_refresh_token("refreshToken");
231 238
232 // First request. 239 // First request.
233 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 240 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
234 std::set<std::string>(), &consumer_)); 241 std::set<std::string>(), &consumer_));
235 base::RunLoop().RunUntilIdle(); 242 base::RunLoop().RunUntilIdle();
236 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 243 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
237 EXPECT_EQ(0, consumer_.number_of_errors_); 244 EXPECT_EQ(0, consumer_.number_of_errors_);
238 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 245 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
239 EXPECT_TRUE(fetcher); 246 ASSERT_TRUE(fetcher);
240 fetcher->set_response_code(net::HTTP_OK); 247 fetcher->set_response_code(net::HTTP_OK);
241 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 248 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
242 fetcher->delegate()->OnURLFetchComplete(fetcher); 249 fetcher->delegate()->OnURLFetchComplete(fetcher);
243 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 250 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
244 EXPECT_EQ(0, consumer_.number_of_errors_); 251 EXPECT_EQ(0, consumer_.number_of_errors_);
245 EXPECT_EQ("token", consumer_.last_token_); 252 EXPECT_EQ("token", consumer_.last_token_);
246 253
247 // Second request must try to access the network as the token has expired. 254 // Second request must try to access the network as the token has expired.
248 scoped_ptr<OAuth2TokenService::Request> request2( 255 scoped_ptr<OAuth2TokenService::Request> request2(
249 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 256 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
250 base::RunLoop().RunUntilIdle(); 257 base::RunLoop().RunUntilIdle();
251 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 258 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
252 EXPECT_EQ(0, consumer_.number_of_errors_); 259 EXPECT_EQ(0, consumer_.number_of_errors_);
253 260
254 fetcher = factory_.GetFetcherByID(0); 261 ASSERT_EQ(2U, factory_.GetFetcherCount());
255 EXPECT_TRUE(fetcher); 262 fetcher = factory_.GetFetcherByID(1);
263 ASSERT_TRUE(fetcher);
256 fetcher->set_response_code(net::HTTP_OK); 264 fetcher->set_response_code(net::HTTP_OK);
257 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); 265 fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
258 fetcher->delegate()->OnURLFetchComplete(fetcher); 266 fetcher->delegate()->OnURLFetchComplete(fetcher);
259 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 267 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
260 EXPECT_EQ(0, consumer_.number_of_errors_); 268 EXPECT_EQ(0, consumer_.number_of_errors_);
261 EXPECT_EQ("another token", consumer_.last_token_); 269 EXPECT_EQ("another token", consumer_.last_token_);
262 } 270 }
263 271
264 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { 272 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
265 oauth2_service_->set_refresh_token("refreshToken"); 273 oauth2_service_->set_refresh_token("refreshToken");
266 274
267 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 275 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
268 std::set<std::string>(), &consumer_)); 276 std::set<std::string>(), &consumer_));
269 base::RunLoop().RunUntilIdle(); 277 base::RunLoop().RunUntilIdle();
270 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 278 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
271 EXPECT_EQ(0, consumer_.number_of_errors_); 279 EXPECT_EQ(0, consumer_.number_of_errors_);
272 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 280 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
273 EXPECT_TRUE(fetcher); 281 ASSERT_TRUE(fetcher);
274 282
275 request.reset(); 283 request.reset();
276 284
277 fetcher->set_response_code(net::HTTP_OK); 285 fetcher->set_response_code(net::HTTP_OK);
278 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 286 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
279 fetcher->delegate()->OnURLFetchComplete(fetcher); 287 fetcher->delegate()->OnURLFetchComplete(fetcher);
280 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 288 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
281 EXPECT_EQ(0, consumer_.number_of_errors_); 289 EXPECT_EQ(0, consumer_.number_of_errors_);
282 } 290 }
283 291
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 341 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
334 fetcher->delegate()->OnURLFetchComplete(fetcher); 342 fetcher->delegate()->OnURLFetchComplete(fetcher);
335 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 343 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
336 EXPECT_EQ(0, consumer_.number_of_errors_); 344 EXPECT_EQ(0, consumer_.number_of_errors_);
337 EXPECT_EQ("token", consumer_.last_token_); 345 EXPECT_EQ("token", consumer_.last_token_);
338 346
339 // The refresh token is no longer available; subsequent requests fail. 347 // The refresh token is no longer available; subsequent requests fail.
340 oauth2_service_->set_refresh_token(""); 348 oauth2_service_->set_refresh_token("");
341 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); 349 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
342 base::RunLoop().RunUntilIdle(); 350 base::RunLoop().RunUntilIdle();
343 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 351 EXPECT_EQ(1U, factory_.GetFetcherCount());
344 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 352 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
345 EXPECT_EQ(1, consumer_.number_of_errors_); 353 EXPECT_EQ(1, consumer_.number_of_errors_);
346 } 354 }
347 355
348 TEST_F(OAuth2TokenServiceTest, 356 TEST_F(OAuth2TokenServiceTest,
349 ChangedRefreshTokenDoesNotAffectInFlightRequests) { 357 ChangedRefreshTokenDoesNotAffectInFlightRequests) {
350 oauth2_service_->set_refresh_token("first refreshToken"); 358 oauth2_service_->set_refresh_token("first refreshToken");
351 std::set<std::string> scopes; 359 std::set<std::string> scopes;
352 scopes.insert("s1"); 360 scopes.insert("s1");
353 scopes.insert("s2"); 361 scopes.insert("s2");
354 362
355 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 363 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
356 scopes, &consumer_)); 364 scopes, &consumer_));
357 base::RunLoop().RunUntilIdle(); 365 base::RunLoop().RunUntilIdle();
366 ASSERT_EQ(1U, factory_.GetFetcherCount());
358 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); 367 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
359 368
360 // Note |request| is still pending when the refresh token changes. 369 // Note |request| is still pending when the refresh token changes.
361 oauth2_service_->set_refresh_token("second refreshToken"); 370 oauth2_service_->set_refresh_token("second refreshToken");
362 371
363 // A 2nd request (using the new refresh token) that occurs and completes 372 // A 2nd request (using the new refresh token) that occurs and completes
364 // while the 1st request is in flight is successful. 373 // while the 1st request is in flight is successful.
365 TestingOAuth2TokenServiceConsumer consumer2; 374 TestingOAuth2TokenServiceConsumer consumer2;
366 scoped_ptr<OAuth2TokenService::Request> request2( 375 scoped_ptr<OAuth2TokenService::Request> request2(
367 oauth2_service_->StartRequest(scopes, &consumer2)); 376 oauth2_service_->StartRequest(scopes, &consumer2));
368 base::RunLoop().RunUntilIdle(); 377 base::RunLoop().RunUntilIdle();
369 378
370 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); 379 ASSERT_EQ(2U, factory_.GetFetcherCount());
380 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
371 fetcher2->set_response_code(net::HTTP_OK); 381 fetcher2->set_response_code(net::HTTP_OK);
372 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); 382 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
373 fetcher2->delegate()->OnURLFetchComplete(fetcher2); 383 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
374 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); 384 EXPECT_EQ(1, consumer2.number_of_successful_tokens_);
375 EXPECT_EQ(0, consumer2.number_of_errors_); 385 EXPECT_EQ(0, consumer2.number_of_errors_);
376 EXPECT_EQ("second token", consumer2.last_token_); 386 EXPECT_EQ("second token", consumer2.last_token_);
377 387
378 fetcher1->set_response_code(net::HTTP_OK); 388 fetcher1->set_response_code(net::HTTP_OK);
379 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); 389 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600));
380 fetcher1->delegate()->OnURLFetchComplete(fetcher1); 390 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
(...skipping 27 matching lines...) Expand all
408 EXPECT_EQ(0, consumer.number_of_errors_); 418 EXPECT_EQ(0, consumer.number_of_errors_);
409 419
410 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 420 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
411 ASSERT_TRUE(fetcher); 421 ASSERT_TRUE(fetcher);
412 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 422 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
413 fetcher->SetResponseString(std::string()); 423 fetcher->SetResponseString(std::string());
414 fetcher->delegate()->OnURLFetchComplete(fetcher); 424 fetcher->delegate()->OnURLFetchComplete(fetcher);
415 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 425 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
416 EXPECT_EQ(1, consumer.number_of_errors_); 426 EXPECT_EQ(1, consumer.number_of_errors_);
417 427
418 fetcher = factory_.GetFetcherByID(0); 428 ASSERT_EQ(2U, factory_.GetFetcherCount());
429 fetcher = factory_.GetFetcherByID(1);
419 ASSERT_TRUE(fetcher); 430 ASSERT_TRUE(fetcher);
420 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 431 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
421 fetcher->SetResponseString(std::string()); 432 fetcher->SetResponseString(std::string());
422 fetcher->delegate()->OnURLFetchComplete(fetcher); 433 fetcher->delegate()->OnURLFetchComplete(fetcher);
423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 434 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
424 EXPECT_EQ(2, consumer.number_of_errors_); 435 EXPECT_EQ(2, consumer.number_of_errors_);
425 } 436 }
426 437
427 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { 438 TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
428 std::set<std::string> scopes; 439 std::set<std::string> scopes;
429 oauth2_service_->set_refresh_token("refreshToken"); 440 oauth2_service_->set_refresh_token("refreshToken");
430 441
431 // First request. 442 // First request.
432 scoped_ptr<OAuth2TokenService::Request> request( 443 scoped_ptr<OAuth2TokenService::Request> request(
433 oauth2_service_->StartRequest(scopes, &consumer_)); 444 oauth2_service_->StartRequest(scopes, &consumer_));
434 base::RunLoop().RunUntilIdle(); 445 base::RunLoop().RunUntilIdle();
435 446
436 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 447 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
437 EXPECT_EQ(0, consumer_.number_of_errors_); 448 EXPECT_EQ(0, consumer_.number_of_errors_);
438 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 449 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
439 EXPECT_TRUE(fetcher); 450 ASSERT_TRUE(fetcher);
440 fetcher->set_response_code(net::HTTP_OK); 451 fetcher->set_response_code(net::HTTP_OK);
441 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 452 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
442 fetcher->delegate()->OnURLFetchComplete(fetcher); 453 fetcher->delegate()->OnURLFetchComplete(fetcher);
443 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 454 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
444 EXPECT_EQ(0, consumer_.number_of_errors_); 455 EXPECT_EQ(0, consumer_.number_of_errors_);
445 EXPECT_EQ("token", consumer_.last_token_); 456 EXPECT_EQ("token", consumer_.last_token_);
446 457
447 // Second request, should return the same token without needing a network 458 // Second request, should return the same token without needing a network
448 // request. 459 // request.
449 scoped_ptr<OAuth2TokenService::Request> request2( 460 scoped_ptr<OAuth2TokenService::Request> request2(
450 oauth2_service_->StartRequest(scopes, &consumer_)); 461 oauth2_service_->StartRequest(scopes, &consumer_));
451 base::RunLoop().RunUntilIdle(); 462 base::RunLoop().RunUntilIdle();
452 463
453 // No new network fetcher. 464 // No new network fetcher.
454 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 465 ASSERT_EQ(1U, factory_.GetFetcherCount());
455 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 466 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
456 EXPECT_EQ(0, consumer_.number_of_errors_); 467 EXPECT_EQ(0, consumer_.number_of_errors_);
457 EXPECT_EQ("token", consumer_.last_token_); 468 EXPECT_EQ("token", consumer_.last_token_);
458 469
459 // Invalidating the token should return a new token on the next request. 470 // Invalidating the token should return a new token on the next request.
460 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); 471 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_);
461 scoped_ptr<OAuth2TokenService::Request> request3( 472 scoped_ptr<OAuth2TokenService::Request> request3(
462 oauth2_service_->StartRequest(scopes, &consumer_)); 473 oauth2_service_->StartRequest(scopes, &consumer_));
463 base::RunLoop().RunUntilIdle(); 474 base::RunLoop().RunUntilIdle();
464 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 475 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
465 EXPECT_EQ(0, consumer_.number_of_errors_); 476 EXPECT_EQ(0, consumer_.number_of_errors_);
466 fetcher = factory_.GetFetcherByID(0); 477 ASSERT_EQ(2U, factory_.GetFetcherCount());
467 EXPECT_TRUE(fetcher); 478 fetcher = factory_.GetFetcherByID(1);
479 ASSERT_TRUE(fetcher);
468 fetcher->set_response_code(net::HTTP_OK); 480 fetcher->set_response_code(net::HTTP_OK);
469 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 481 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
470 fetcher->delegate()->OnURLFetchComplete(fetcher); 482 fetcher->delegate()->OnURLFetchComplete(fetcher);
471 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 483 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
472 EXPECT_EQ(0, consumer_.number_of_errors_); 484 EXPECT_EQ(0, consumer_.number_of_errors_);
473 EXPECT_EQ("token2", consumer_.last_token_); 485 EXPECT_EQ("token2", consumer_.last_token_);
474 } 486 }
475 487
476 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { 488 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) {
477 oauth2_service_->set_refresh_token("refreshToken"); 489 oauth2_service_->set_refresh_token("refreshToken");
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); 528 oauth2_service_->CancelRequestsForTokenForTest("refreshToken");
517 529
518 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 530 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
519 EXPECT_EQ(2, consumer_.number_of_errors_); 531 EXPECT_EQ(2, consumer_.number_of_errors_);
520 532
521 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); 533 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2");
522 534
523 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 535 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
524 EXPECT_EQ(3, consumer_.number_of_errors_); 536 EXPECT_EQ(3, consumer_.number_of_errors_);
525 } 537 }
538
539 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) {
540 std::string client_id_1("client1");
541 std::string client_secret_1("secret1");
542 std::string client_id_2("client2");
543 std::string client_secret_2("secret2");
544 std::set<std::string> scope_set;
545 scope_set.insert("scope1");
546 scope_set.insert("scope2");
547
548 std::string refresh_token("refreshToken");
549 oauth2_service_->set_refresh_token(refresh_token);
550
551 scoped_ptr<OAuth2TokenService::Request> request1(
552 oauth2_service_->StartRequestForClient(std::string(),
553 client_id_1,
554 client_secret_1,
555 scope_set,
556 &consumer_));
557 scoped_ptr<OAuth2TokenService::Request> request2(
558 oauth2_service_->StartRequestForClient(std::string(),
559 client_id_2,
560 client_secret_2,
561 scope_set,
562 &consumer_));
563 // Start a request that should be duplicate of |request1|.
564 scoped_ptr<OAuth2TokenService::Request> request3(
565 oauth2_service_->StartRequestForClient(std::string(),
566 client_id_1,
567 client_secret_1,
568 scope_set,
569 &consumer_));
570 base::RunLoop().RunUntilIdle();
571
572 // Check to make sure we have started exactly two fetchers.
573 ASSERT_EQ(2U, factory_.GetFetcherCount());
574 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
575 ASSERT_TRUE(fetcher1);
576 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
577 ASSERT_TRUE(fetcher2);
Roger Tawa OOO till Jul 10th 2013/08/16 21:16:50 Lines 574 to 577 seem redundant with line 573. I
zel 2013/08/19 16:03:17 Done.
578
579 const OAuth2TokenService::PendingFetcherMap& fetchers =
580 oauth2_service_->GetPendingFetchersForTesting();
581 ASSERT_EQ(2U,
582 fetchers.find(OAuth2TokenService::FetchParameters(
583 std::string(),
584 client_id_1,
585 refresh_token,
586 scope_set))->second->GetWaitingRequestCount());
587 ASSERT_EQ(1U,
588 fetchers.find(OAuth2TokenService::FetchParameters(
589 std::string(),
590 client_id_2,
591 refresh_token,
592 scope_set))->second->GetWaitingRequestCount());
593
594 fetcher1->set_response_code(net::HTTP_OK);
595 fetcher1->SetResponseString(GetValidTokenResponse("token1", 3600));
596 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
597
598 fetcher2->set_response_code(net::HTTP_OK);
599 fetcher2->SetResponseString(GetValidTokenResponse("token2", 3600));
600 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
601
602 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
603 EXPECT_EQ(0, consumer_.number_of_errors_);
Roger Tawa OOO till Jul 10th 2013/08/16 21:16:50 Don't need lines 594 to 603 for this test.
zel 2013/08/19 16:03:17 Done.
604 }
605
606 TEST_F(OAuth2TokenServiceTest, ClientScopeSetOrderTest) {
607 OAuth2TokenService::ScopeSet set_0;
608 OAuth2TokenService::ScopeSet set_1;
609 set_1.insert("1");
610
611 OAuth2TokenService::ClientScopeSet sets[] = {
612 OAuth2TokenService::ClientScopeSet("0", "0", set_0),
613 OAuth2TokenService::ClientScopeSet("0", "0", set_1),
614 OAuth2TokenService::ClientScopeSet("0", "1", set_0),
615 OAuth2TokenService::ClientScopeSet("0", "1", set_1),
616 OAuth2TokenService::ClientScopeSet("1", "0", set_0),
617 OAuth2TokenService::ClientScopeSet("1", "0", set_1),
618 OAuth2TokenService::ClientScopeSet("1", "1", set_0),
619 OAuth2TokenService::ClientScopeSet("1", "1", set_1),
620 };
621
622 for (size_t i = 0; i < arraysize(sets); i++) {
623 for (size_t j = 0; j < arraysize(sets); j++) {
624 if (i == j) {
625 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
626 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
627 } else if (i < j) {
628 EXPECT_TRUE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
629 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
630 } else {
631 EXPECT_TRUE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
632 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
633 }
634 }
635 }
636 }
637
638 TEST_F(OAuth2TokenServiceTest, FetchParametersOrderTest) {
639 OAuth2TokenService::ScopeSet set_0;
640 OAuth2TokenService::ScopeSet set_1;
641 set_1.insert("1");
642
643 OAuth2TokenService::FetchParameters params[] = {
644 OAuth2TokenService::FetchParameters("0", "0", "0", set_0),
645 OAuth2TokenService::FetchParameters("0", "0", "0", set_1),
646 OAuth2TokenService::FetchParameters("0", "0", "1", set_0),
647 OAuth2TokenService::FetchParameters("0", "0", "1", set_1),
648 OAuth2TokenService::FetchParameters("0", "1", "0", set_0),
649 OAuth2TokenService::FetchParameters("0", "1", "0", set_1),
650 OAuth2TokenService::FetchParameters("0", "1", "1", set_0),
651 OAuth2TokenService::FetchParameters("0", "1", "1", set_1),
652 OAuth2TokenService::FetchParameters("1", "0", "0", set_0),
653 OAuth2TokenService::FetchParameters("1", "0", "0", set_1),
654 OAuth2TokenService::FetchParameters("1", "0", "1", set_0),
655 OAuth2TokenService::FetchParameters("1", "0", "1", set_1),
656 OAuth2TokenService::FetchParameters("1", "1", "0", set_0),
657 OAuth2TokenService::FetchParameters("1", "1", "0", set_1),
658 OAuth2TokenService::FetchParameters("1", "1", "1", set_0),
659 OAuth2TokenService::FetchParameters("1", "1", "1", set_1)
660 };
661
662 for (size_t i = 0; i < arraysize(params); i++) {
663 for (size_t j = 0; j < arraysize(params); j++) {
664 if (i == j) {
665 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
666 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
667 } else if (i < j) {
668 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j;
669 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
670 } else {
671 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j;
672 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
673 }
674 }
675 }
676 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698