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

Side by Side Diff: google_apis/gaia/oauth2_token_service_unittest.cc

Issue 23767004: Revert "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, 3 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
« no previous file with comments | « google_apis/gaia/oauth2_token_service.cc ('k') | net/url_request/test_url_fetcher_factory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "google_apis/gaia/gaia_constants.h" 9 #include "google_apis/gaia/gaia_constants.h"
10 #include "google_apis/gaia/google_service_auth_error.h" 10 #include "google_apis/gaia/google_service_auth_error.h"
11 #include "google_apis/gaia/oauth2_access_token_consumer.h" 11 #include "google_apis/gaia/oauth2_access_token_consumer.h"
12 #include "google_apis/gaia/oauth2_access_token_fetcher.h"
13 #include "google_apis/gaia/oauth2_token_service.h" 12 #include "google_apis/gaia/oauth2_token_service.h"
14 #include "google_apis/gaia/oauth2_token_service_test_util.h" 13 #include "google_apis/gaia/oauth2_token_service_test_util.h"
15 #include "net/http/http_status_code.h" 14 #include "net/http/http_status_code.h"
16 #include "net/url_request/test_url_fetcher_factory.h" 15 #include "net/url_request/test_url_fetcher_factory.h"
17 #include "net/url_request/url_fetcher_delegate.h" 16 #include "net/url_request/url_fetcher_delegate.h"
18 #include "net/url_request/url_request_test_util.h" 17 #include "net/url_request/url_request_test_util.h"
19 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
20 19
21 // A testing consumer that retries on error. 20 // A testing consumer that retries on error.
22 class RetryingTestingOAuth2TokenServiceConsumer 21 class RetryingTestingOAuth2TokenServiceConsumer
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 public: 71 public:
73 virtual void SetUp() OVERRIDE { 72 virtual void SetUp() OVERRIDE {
74 oauth2_service_.reset( 73 oauth2_service_.reset(
75 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( 74 new TestOAuth2TokenService(new net::TestURLRequestContextGetter(
76 message_loop_.message_loop_proxy()))); 75 message_loop_.message_loop_proxy())));
77 } 76 }
78 77
79 virtual void TearDown() OVERRIDE { 78 virtual void TearDown() OVERRIDE {
80 // Makes sure that all the clean up tasks are run. 79 // Makes sure that all the clean up tasks are run.
81 base::RunLoop().RunUntilIdle(); 80 base::RunLoop().RunUntilIdle();
82 OAuth2AccessTokenFetcher::ResetLastFetcherIdForTest();
83 } 81 }
84 82
85 protected: 83 protected:
86 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop. 84 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop.
87 net::TestURLFetcherFactory factory_; 85 net::TestURLFetcherFactory factory_;
88 scoped_ptr<TestOAuth2TokenService> oauth2_service_; 86 scoped_ptr<TestOAuth2TokenService> oauth2_service_;
89 TestingOAuth2TokenServiceConsumer consumer_; 87 TestingOAuth2TokenServiceConsumer consumer_;
90 }; 88 };
91 89
92 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { 90 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) {
93 scoped_ptr<OAuth2TokenService::Request> request( 91 scoped_ptr<OAuth2TokenService::Request> request(
94 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 92 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
95 base::RunLoop().RunUntilIdle(); 93 base::RunLoop().RunUntilIdle();
96 94
97 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 95 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
98 EXPECT_EQ(1, consumer_.number_of_errors_); 96 EXPECT_EQ(1, consumer_.number_of_errors_);
99 } 97 }
100 98
101 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { 99 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) {
102 oauth2_service_->set_refresh_token("refreshToken"); 100 oauth2_service_->set_refresh_token("refreshToken");
103 scoped_ptr<OAuth2TokenService::Request> request( 101 scoped_ptr<OAuth2TokenService::Request> request(
104 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 102 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
105 base::RunLoop().RunUntilIdle(); 103 base::RunLoop().RunUntilIdle();
106 104
107 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 105 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
108 EXPECT_EQ(0, consumer_.number_of_errors_); 106 EXPECT_EQ(0, consumer_.number_of_errors_);
109 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 107 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
110 ASSERT_TRUE(fetcher); 108 EXPECT_TRUE(fetcher);
111 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 109 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
112 fetcher->SetResponseString(std::string()); 110 fetcher->SetResponseString(std::string());
113 fetcher->delegate()->OnURLFetchComplete(fetcher); 111 fetcher->delegate()->OnURLFetchComplete(fetcher);
114 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 112 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
115 EXPECT_EQ(1, consumer_.number_of_errors_); 113 EXPECT_EQ(1, consumer_.number_of_errors_);
116 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); 114 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
117 } 115 }
118 116
119 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { 117 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) {
120 oauth2_service_->set_refresh_token("refreshToken"); 118 oauth2_service_->set_refresh_token("refreshToken");
121 scoped_ptr<OAuth2TokenService::Request> request( 119 scoped_ptr<OAuth2TokenService::Request> request(
122 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 120 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
123 base::RunLoop().RunUntilIdle(); 121 base::RunLoop().RunUntilIdle();
124 122
125 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 123 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
126 EXPECT_EQ(0, consumer_.number_of_errors_); 124 EXPECT_EQ(0, consumer_.number_of_errors_);
127 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 125 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
128 ASSERT_TRUE(fetcher); 126 EXPECT_TRUE(fetcher);
129 fetcher->set_response_code(net::HTTP_OK); 127 fetcher->set_response_code(net::HTTP_OK);
130 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 128 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
131 fetcher->delegate()->OnURLFetchComplete(fetcher); 129 fetcher->delegate()->OnURLFetchComplete(fetcher);
132 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 130 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
133 EXPECT_EQ(0, consumer_.number_of_errors_); 131 EXPECT_EQ(0, consumer_.number_of_errors_);
134 EXPECT_EQ("token", consumer_.last_token_); 132 EXPECT_EQ("token", consumer_.last_token_);
135 } 133 }
136 134
137 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { 135 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) {
138 std::set<std::string> scopes1; 136 std::set<std::string> scopes1;
139 scopes1.insert("s1"); 137 scopes1.insert("s1");
140 scopes1.insert("s2"); 138 scopes1.insert("s2");
141 std::set<std::string> scopes1_same; 139 std::set<std::string> scopes1_same;
142 scopes1_same.insert("s2"); 140 scopes1_same.insert("s2");
143 scopes1_same.insert("s1"); 141 scopes1_same.insert("s1");
144 std::set<std::string> scopes2; 142 std::set<std::string> scopes2;
145 scopes2.insert("s3"); 143 scopes2.insert("s3");
146 144
147 oauth2_service_->set_refresh_token("refreshToken"); 145 oauth2_service_->set_refresh_token("refreshToken");
148 146
149 // First request. 147 // First request.
150 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 148 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
151 scopes1, &consumer_)); 149 scopes1, &consumer_));
152 base::RunLoop().RunUntilIdle(); 150 base::RunLoop().RunUntilIdle();
153 151
154 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 152 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
155 EXPECT_EQ(0, consumer_.number_of_errors_); 153 EXPECT_EQ(0, consumer_.number_of_errors_);
156 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 154 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
157 ASSERT_TRUE(fetcher); 155 EXPECT_TRUE(fetcher);
158 fetcher->set_response_code(net::HTTP_OK); 156 fetcher->set_response_code(net::HTTP_OK);
159 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 157 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
160 fetcher->delegate()->OnURLFetchComplete(fetcher); 158 fetcher->delegate()->OnURLFetchComplete(fetcher);
161 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 159 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
162 EXPECT_EQ(0, consumer_.number_of_errors_); 160 EXPECT_EQ(0, consumer_.number_of_errors_);
163 EXPECT_EQ("token", consumer_.last_token_); 161 EXPECT_EQ("token", consumer_.last_token_);
164 162
165 // Second request to the same set of scopes, should return the same token 163 // Second request to the same set of scopes, should return the same token
166 // without needing a network request. 164 // without needing a network request.
167 scoped_ptr<OAuth2TokenService::Request> request2( 165 scoped_ptr<OAuth2TokenService::Request> request2(
168 oauth2_service_->StartRequest(scopes1_same, &consumer_)); 166 oauth2_service_->StartRequest(scopes1_same, &consumer_));
169 base::RunLoop().RunUntilIdle(); 167 base::RunLoop().RunUntilIdle();
170 168
171 // No new network fetcher. 169 // No new network fetcher.
172 EXPECT_EQ(1U, factory_.GetFetcherCount()); 170 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
173 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 171 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
174 EXPECT_EQ(0, consumer_.number_of_errors_); 172 EXPECT_EQ(0, consumer_.number_of_errors_);
175 EXPECT_EQ("token", consumer_.last_token_); 173 EXPECT_EQ("token", consumer_.last_token_);
176 174
177 // Third request to a new set of scopes, should return another token. 175 // Third request to a new set of scopes, should return another token.
178 scoped_ptr<OAuth2TokenService::Request> request3( 176 scoped_ptr<OAuth2TokenService::Request> request3(
179 oauth2_service_->StartRequest(scopes2, &consumer_)); 177 oauth2_service_->StartRequest(scopes2, &consumer_));
180 base::RunLoop().RunUntilIdle(); 178 base::RunLoop().RunUntilIdle();
181 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 179 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
182 EXPECT_EQ(0, consumer_.number_of_errors_); 180 EXPECT_EQ(0, consumer_.number_of_errors_);
183 ASSERT_EQ(2U, factory_.GetFetcherCount()); 181 fetcher = factory_.GetFetcherByID(0);
184 fetcher = factory_.GetFetcherByID(1); 182 EXPECT_TRUE(fetcher);
185 ASSERT_TRUE(fetcher);
186 fetcher->set_response_code(net::HTTP_OK); 183 fetcher->set_response_code(net::HTTP_OK);
187 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 184 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
188 fetcher->delegate()->OnURLFetchComplete(fetcher); 185 fetcher->delegate()->OnURLFetchComplete(fetcher);
189 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 186 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
190 EXPECT_EQ(0, consumer_.number_of_errors_); 187 EXPECT_EQ(0, consumer_.number_of_errors_);
191 EXPECT_EQ("token2", consumer_.last_token_); 188 EXPECT_EQ("token2", consumer_.last_token_);
192 } 189 }
193 190
194 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { 191 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) {
195 oauth2_service_->set_refresh_token("refreshToken"); 192 oauth2_service_->set_refresh_token("refreshToken");
196 193
197 // First request. 194 // First request.
198 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 195 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
199 std::set<std::string>(), &consumer_)); 196 std::set<std::string>(), &consumer_));
200 base::RunLoop().RunUntilIdle(); 197 base::RunLoop().RunUntilIdle();
201 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 198 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
202 EXPECT_EQ(0, consumer_.number_of_errors_); 199 EXPECT_EQ(0, consumer_.number_of_errors_);
203 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 200 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
204 ASSERT_TRUE(fetcher); 201 EXPECT_TRUE(fetcher);
205 fetcher->set_response_code(net::HTTP_OK); 202 fetcher->set_response_code(net::HTTP_OK);
206 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 203 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
207 fetcher->delegate()->OnURLFetchComplete(fetcher); 204 fetcher->delegate()->OnURLFetchComplete(fetcher);
208 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 205 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
209 EXPECT_EQ(0, consumer_.number_of_errors_); 206 EXPECT_EQ(0, consumer_.number_of_errors_);
210 EXPECT_EQ("token", consumer_.last_token_); 207 EXPECT_EQ("token", consumer_.last_token_);
211 208
212 // Second request must try to access the network as the token has expired. 209 // Second request must try to access the network as the token has expired.
213 scoped_ptr<OAuth2TokenService::Request> request2( 210 scoped_ptr<OAuth2TokenService::Request> request2(
214 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 211 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
215 base::RunLoop().RunUntilIdle(); 212 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 213 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
217 EXPECT_EQ(0, consumer_.number_of_errors_); 214 EXPECT_EQ(0, consumer_.number_of_errors_);
218 215
219 // Network failure. 216 // Network failure.
220 ASSERT_EQ(2U, factory_.GetFetcherCount()); 217 fetcher = factory_.GetFetcherByID(0);
221 fetcher = factory_.GetFetcherByID(1); 218 EXPECT_TRUE(fetcher);
222 ASSERT_TRUE(fetcher);
223 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 219 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
224 fetcher->SetResponseString(std::string()); 220 fetcher->SetResponseString(std::string());
225 fetcher->delegate()->OnURLFetchComplete(fetcher); 221 fetcher->delegate()->OnURLFetchComplete(fetcher);
226 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 222 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
227 EXPECT_EQ(1, consumer_.number_of_errors_); 223 EXPECT_EQ(1, consumer_.number_of_errors_);
228 } 224 }
229 225
230 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { 226 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) {
231 oauth2_service_->set_refresh_token("refreshToken"); 227 oauth2_service_->set_refresh_token("refreshToken");
232 228
233 // First request. 229 // First request.
234 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 230 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
235 std::set<std::string>(), &consumer_)); 231 std::set<std::string>(), &consumer_));
236 base::RunLoop().RunUntilIdle(); 232 base::RunLoop().RunUntilIdle();
237 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 233 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
238 EXPECT_EQ(0, consumer_.number_of_errors_); 234 EXPECT_EQ(0, consumer_.number_of_errors_);
239 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 235 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
240 ASSERT_TRUE(fetcher); 236 EXPECT_TRUE(fetcher);
241 fetcher->set_response_code(net::HTTP_OK); 237 fetcher->set_response_code(net::HTTP_OK);
242 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); 238 fetcher->SetResponseString(GetValidTokenResponse("token", 0));
243 fetcher->delegate()->OnURLFetchComplete(fetcher); 239 fetcher->delegate()->OnURLFetchComplete(fetcher);
244 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 240 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
245 EXPECT_EQ(0, consumer_.number_of_errors_); 241 EXPECT_EQ(0, consumer_.number_of_errors_);
246 EXPECT_EQ("token", consumer_.last_token_); 242 EXPECT_EQ("token", consumer_.last_token_);
247 243
248 // Second request must try to access the network as the token has expired. 244 // Second request must try to access the network as the token has expired.
249 scoped_ptr<OAuth2TokenService::Request> request2( 245 scoped_ptr<OAuth2TokenService::Request> request2(
250 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 246 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
251 base::RunLoop().RunUntilIdle(); 247 base::RunLoop().RunUntilIdle();
252 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 248 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
253 EXPECT_EQ(0, consumer_.number_of_errors_); 249 EXPECT_EQ(0, consumer_.number_of_errors_);
254 250
255 ASSERT_EQ(2U, factory_.GetFetcherCount()); 251 fetcher = factory_.GetFetcherByID(0);
256 fetcher = factory_.GetFetcherByID(1); 252 EXPECT_TRUE(fetcher);
257 ASSERT_TRUE(fetcher);
258 fetcher->set_response_code(net::HTTP_OK); 253 fetcher->set_response_code(net::HTTP_OK);
259 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); 254 fetcher->SetResponseString(GetValidTokenResponse("another token", 0));
260 fetcher->delegate()->OnURLFetchComplete(fetcher); 255 fetcher->delegate()->OnURLFetchComplete(fetcher);
261 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 256 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
262 EXPECT_EQ(0, consumer_.number_of_errors_); 257 EXPECT_EQ(0, consumer_.number_of_errors_);
263 EXPECT_EQ("another token", consumer_.last_token_); 258 EXPECT_EQ("another token", consumer_.last_token_);
264 } 259 }
265 260
266 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { 261 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) {
267 oauth2_service_->set_refresh_token("refreshToken"); 262 oauth2_service_->set_refresh_token("refreshToken");
268 263
269 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 264 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
270 std::set<std::string>(), &consumer_)); 265 std::set<std::string>(), &consumer_));
271 base::RunLoop().RunUntilIdle(); 266 base::RunLoop().RunUntilIdle();
272 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 267 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
273 EXPECT_EQ(0, consumer_.number_of_errors_); 268 EXPECT_EQ(0, consumer_.number_of_errors_);
274 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 269 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
275 ASSERT_TRUE(fetcher); 270 EXPECT_TRUE(fetcher);
276 271
277 request.reset(); 272 request.reset();
278 273
279 fetcher->set_response_code(net::HTTP_OK); 274 fetcher->set_response_code(net::HTTP_OK);
280 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 275 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
281 fetcher->delegate()->OnURLFetchComplete(fetcher); 276 fetcher->delegate()->OnURLFetchComplete(fetcher);
282 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 277 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
283 EXPECT_EQ(0, consumer_.number_of_errors_); 278 EXPECT_EQ(0, consumer_.number_of_errors_);
284 } 279 }
285 280
286 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { 281 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) {
287 oauth2_service_->set_refresh_token("refreshToken"); 282 oauth2_service_->set_refresh_token("refreshToken");
288 283
289 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 284 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
290 std::set<std::string>(), &consumer_)); 285 std::set<std::string>(), &consumer_));
291 base::RunLoop().RunUntilIdle(); 286 base::RunLoop().RunUntilIdle();
292 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 287 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
293 ASSERT_TRUE(fetcher);
294 fetcher->set_response_code(net::HTTP_OK); 288 fetcher->set_response_code(net::HTTP_OK);
295 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 289 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
296 fetcher->delegate()->OnURLFetchComplete(fetcher); 290 fetcher->delegate()->OnURLFetchComplete(fetcher);
297 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 291 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
298 EXPECT_EQ(0, consumer_.number_of_errors_); 292 EXPECT_EQ(0, consumer_.number_of_errors_);
299 EXPECT_EQ("token", consumer_.last_token_); 293 EXPECT_EQ("token", consumer_.last_token_);
300 294
301 request.reset(); 295 request.reset();
302 296
303 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 297 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
304 EXPECT_EQ(0, consumer_.number_of_errors_); 298 EXPECT_EQ(0, consumer_.number_of_errors_);
305 EXPECT_EQ("token", consumer_.last_token_); 299 EXPECT_EQ("token", consumer_.last_token_);
306 } 300 }
307 301
308 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { 302 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) {
309 oauth2_service_->set_refresh_token("refreshToken"); 303 oauth2_service_->set_refresh_token("refreshToken");
310 304
311 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 305 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
312 std::set<std::string>(), &consumer_)); 306 std::set<std::string>(), &consumer_));
313 base::RunLoop().RunUntilIdle(); 307 base::RunLoop().RunUntilIdle();
314 scoped_ptr<OAuth2TokenService::Request> request2( 308 scoped_ptr<OAuth2TokenService::Request> request2(
315 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); 309 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_));
316 base::RunLoop().RunUntilIdle(); 310 base::RunLoop().RunUntilIdle();
317 311
318 request.reset(); 312 request.reset();
319 313
320 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 314 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
321 ASSERT_TRUE(fetcher);
322 fetcher->set_response_code(net::HTTP_OK); 315 fetcher->set_response_code(net::HTTP_OK);
323 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 316 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
324 fetcher->delegate()->OnURLFetchComplete(fetcher); 317 fetcher->delegate()->OnURLFetchComplete(fetcher);
325 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 318 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
326 EXPECT_EQ(0, consumer_.number_of_errors_); 319 EXPECT_EQ(0, consumer_.number_of_errors_);
327 } 320 }
328 321
329 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { 322 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) {
330 // We have a valid refresh token; the first request is successful. 323 // We have a valid refresh token; the first request is successful.
331 oauth2_service_->set_refresh_token("refreshToken"); 324 oauth2_service_->set_refresh_token("refreshToken");
332 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 325 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
333 std::set<std::string>(), &consumer_)); 326 std::set<std::string>(), &consumer_));
334 base::RunLoop().RunUntilIdle(); 327 base::RunLoop().RunUntilIdle();
335 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 328 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
336 ASSERT_TRUE(fetcher);
337 fetcher->set_response_code(net::HTTP_OK); 329 fetcher->set_response_code(net::HTTP_OK);
338 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 330 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
339 fetcher->delegate()->OnURLFetchComplete(fetcher); 331 fetcher->delegate()->OnURLFetchComplete(fetcher);
340 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 332 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
341 EXPECT_EQ(0, consumer_.number_of_errors_); 333 EXPECT_EQ(0, consumer_.number_of_errors_);
342 EXPECT_EQ("token", consumer_.last_token_); 334 EXPECT_EQ("token", consumer_.last_token_);
343 335
344 // The refresh token is no longer available; subsequent requests fail. 336 // The refresh token is no longer available; subsequent requests fail.
345 oauth2_service_->set_refresh_token(""); 337 oauth2_service_->set_refresh_token("");
346 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); 338 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_);
347 base::RunLoop().RunUntilIdle(); 339 base::RunLoop().RunUntilIdle();
348 EXPECT_EQ(1U, factory_.GetFetcherCount()); 340 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
349 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 341 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
350 EXPECT_EQ(1, consumer_.number_of_errors_); 342 EXPECT_EQ(1, consumer_.number_of_errors_);
351 } 343 }
352 344
353 TEST_F(OAuth2TokenServiceTest, 345 TEST_F(OAuth2TokenServiceTest,
354 ChangedRefreshTokenDoesNotAffectInFlightRequests) { 346 ChangedRefreshTokenDoesNotAffectInFlightRequests) {
355 oauth2_service_->set_refresh_token("first refreshToken"); 347 oauth2_service_->set_refresh_token("first refreshToken");
356 std::set<std::string> scopes; 348 std::set<std::string> scopes;
357 scopes.insert("s1"); 349 scopes.insert("s1");
358 scopes.insert("s2"); 350 scopes.insert("s2");
359 351
360 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( 352 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest(
361 scopes, &consumer_)); 353 scopes, &consumer_));
362 base::RunLoop().RunUntilIdle(); 354 base::RunLoop().RunUntilIdle();
363 ASSERT_EQ(1U, factory_.GetFetcherCount());
364 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); 355 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0);
365 ASSERT_TRUE(fetcher1);
366 356
367 // Note |request| is still pending when the refresh token changes. 357 // Note |request| is still pending when the refresh token changes.
368 oauth2_service_->set_refresh_token("second refreshToken"); 358 oauth2_service_->set_refresh_token("second refreshToken");
369 359
370 // A 2nd request (using the new refresh token) that occurs and completes 360 // A 2nd request (using the new refresh token) that occurs and completes
371 // while the 1st request is in flight is successful. 361 // while the 1st request is in flight is successful.
372 TestingOAuth2TokenServiceConsumer consumer2; 362 TestingOAuth2TokenServiceConsumer consumer2;
373 scoped_ptr<OAuth2TokenService::Request> request2( 363 scoped_ptr<OAuth2TokenService::Request> request2(
374 oauth2_service_->StartRequest(scopes, &consumer2)); 364 oauth2_service_->StartRequest(scopes, &consumer2));
375 base::RunLoop().RunUntilIdle(); 365 base::RunLoop().RunUntilIdle();
376 366
377 ASSERT_EQ(2U, factory_.GetFetcherCount()); 367 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0);
378 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1);
379 fetcher2->set_response_code(net::HTTP_OK); 368 fetcher2->set_response_code(net::HTTP_OK);
380 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); 369 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600));
381 fetcher2->delegate()->OnURLFetchComplete(fetcher2); 370 fetcher2->delegate()->OnURLFetchComplete(fetcher2);
382 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); 371 EXPECT_EQ(1, consumer2.number_of_successful_tokens_);
383 EXPECT_EQ(0, consumer2.number_of_errors_); 372 EXPECT_EQ(0, consumer2.number_of_errors_);
384 EXPECT_EQ("second token", consumer2.last_token_); 373 EXPECT_EQ("second token", consumer2.last_token_);
385 374
386 fetcher1->set_response_code(net::HTTP_OK); 375 fetcher1->set_response_code(net::HTTP_OK);
387 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); 376 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600));
388 fetcher1->delegate()->OnURLFetchComplete(fetcher1); 377 fetcher1->delegate()->OnURLFetchComplete(fetcher1);
(...skipping 27 matching lines...) Expand all
416 EXPECT_EQ(0, consumer.number_of_errors_); 405 EXPECT_EQ(0, consumer.number_of_errors_);
417 406
418 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 407 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
419 ASSERT_TRUE(fetcher); 408 ASSERT_TRUE(fetcher);
420 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 409 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
421 fetcher->SetResponseString(std::string()); 410 fetcher->SetResponseString(std::string());
422 fetcher->delegate()->OnURLFetchComplete(fetcher); 411 fetcher->delegate()->OnURLFetchComplete(fetcher);
423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 412 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
424 EXPECT_EQ(1, consumer.number_of_errors_); 413 EXPECT_EQ(1, consumer.number_of_errors_);
425 414
426 ASSERT_EQ(2U, factory_.GetFetcherCount()); 415 fetcher = factory_.GetFetcherByID(0);
427 fetcher = factory_.GetFetcherByID(1);
428 ASSERT_TRUE(fetcher); 416 ASSERT_TRUE(fetcher);
429 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); 417 fetcher->set_response_code(net::HTTP_UNAUTHORIZED);
430 fetcher->SetResponseString(std::string()); 418 fetcher->SetResponseString(std::string());
431 fetcher->delegate()->OnURLFetchComplete(fetcher); 419 fetcher->delegate()->OnURLFetchComplete(fetcher);
432 EXPECT_EQ(0, consumer.number_of_successful_tokens_); 420 EXPECT_EQ(0, consumer.number_of_successful_tokens_);
433 EXPECT_EQ(2, consumer.number_of_errors_); 421 EXPECT_EQ(2, consumer.number_of_errors_);
434 } 422 }
435 423
436 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { 424 TEST_F(OAuth2TokenServiceTest, InvalidateToken) {
437 std::set<std::string> scopes; 425 std::set<std::string> scopes;
438 oauth2_service_->set_refresh_token("refreshToken"); 426 oauth2_service_->set_refresh_token("refreshToken");
439 427
440 // First request. 428 // First request.
441 scoped_ptr<OAuth2TokenService::Request> request( 429 scoped_ptr<OAuth2TokenService::Request> request(
442 oauth2_service_->StartRequest(scopes, &consumer_)); 430 oauth2_service_->StartRequest(scopes, &consumer_));
443 base::RunLoop().RunUntilIdle(); 431 base::RunLoop().RunUntilIdle();
444 432
445 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 433 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
446 EXPECT_EQ(0, consumer_.number_of_errors_); 434 EXPECT_EQ(0, consumer_.number_of_errors_);
447 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 435 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
448 ASSERT_TRUE(fetcher); 436 EXPECT_TRUE(fetcher);
449 fetcher->set_response_code(net::HTTP_OK); 437 fetcher->set_response_code(net::HTTP_OK);
450 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); 438 fetcher->SetResponseString(GetValidTokenResponse("token", 3600));
451 fetcher->delegate()->OnURLFetchComplete(fetcher); 439 fetcher->delegate()->OnURLFetchComplete(fetcher);
452 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); 440 EXPECT_EQ(1, consumer_.number_of_successful_tokens_);
453 EXPECT_EQ(0, consumer_.number_of_errors_); 441 EXPECT_EQ(0, consumer_.number_of_errors_);
454 EXPECT_EQ("token", consumer_.last_token_); 442 EXPECT_EQ("token", consumer_.last_token_);
455 443
456 // Second request, should return the same token without needing a network 444 // Second request, should return the same token without needing a network
457 // request. 445 // request.
458 scoped_ptr<OAuth2TokenService::Request> request2( 446 scoped_ptr<OAuth2TokenService::Request> request2(
459 oauth2_service_->StartRequest(scopes, &consumer_)); 447 oauth2_service_->StartRequest(scopes, &consumer_));
460 base::RunLoop().RunUntilIdle(); 448 base::RunLoop().RunUntilIdle();
461 449
462 // No new network fetcher. 450 // No new network fetcher.
463 ASSERT_EQ(1U, factory_.GetFetcherCount()); 451 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0));
464 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 452 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
465 EXPECT_EQ(0, consumer_.number_of_errors_); 453 EXPECT_EQ(0, consumer_.number_of_errors_);
466 EXPECT_EQ("token", consumer_.last_token_); 454 EXPECT_EQ("token", consumer_.last_token_);
467 455
468 // Invalidating the token should return a new token on the next request. 456 // Invalidating the token should return a new token on the next request.
469 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); 457 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_);
470 scoped_ptr<OAuth2TokenService::Request> request3( 458 scoped_ptr<OAuth2TokenService::Request> request3(
471 oauth2_service_->StartRequest(scopes, &consumer_)); 459 oauth2_service_->StartRequest(scopes, &consumer_));
472 base::RunLoop().RunUntilIdle(); 460 base::RunLoop().RunUntilIdle();
473 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); 461 EXPECT_EQ(2, consumer_.number_of_successful_tokens_);
474 EXPECT_EQ(0, consumer_.number_of_errors_); 462 EXPECT_EQ(0, consumer_.number_of_errors_);
475 ASSERT_EQ(2U, factory_.GetFetcherCount()); 463 fetcher = factory_.GetFetcherByID(0);
476 fetcher = factory_.GetFetcherByID(1); 464 EXPECT_TRUE(fetcher);
477 ASSERT_TRUE(fetcher);
478 fetcher->set_response_code(net::HTTP_OK); 465 fetcher->set_response_code(net::HTTP_OK);
479 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); 466 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600));
480 fetcher->delegate()->OnURLFetchComplete(fetcher); 467 fetcher->delegate()->OnURLFetchComplete(fetcher);
481 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); 468 EXPECT_EQ(3, consumer_.number_of_successful_tokens_);
482 EXPECT_EQ(0, consumer_.number_of_errors_); 469 EXPECT_EQ(0, consumer_.number_of_errors_);
483 EXPECT_EQ("token2", consumer_.last_token_); 470 EXPECT_EQ("token2", consumer_.last_token_);
484 } 471 }
485 472
486 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { 473 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) {
487 oauth2_service_->set_refresh_token("refreshToken"); 474 oauth2_service_->set_refresh_token("refreshToken");
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); 513 oauth2_service_->CancelRequestsForTokenForTest("refreshToken");
527 514
528 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 515 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
529 EXPECT_EQ(2, consumer_.number_of_errors_); 516 EXPECT_EQ(2, consumer_.number_of_errors_);
530 517
531 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); 518 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2");
532 519
533 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); 520 EXPECT_EQ(0, consumer_.number_of_successful_tokens_);
534 EXPECT_EQ(3, consumer_.number_of_errors_); 521 EXPECT_EQ(3, consumer_.number_of_errors_);
535 } 522 }
536
537 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) {
538 std::string client_id_1("client1");
539 std::string client_secret_1("secret1");
540 std::string client_id_2("client2");
541 std::string client_secret_2("secret2");
542 std::set<std::string> scope_set;
543 scope_set.insert("scope1");
544 scope_set.insert("scope2");
545
546 std::string refresh_token("refreshToken");
547 oauth2_service_->set_refresh_token(refresh_token);
548
549 scoped_ptr<OAuth2TokenService::Request> request1(
550 oauth2_service_->StartRequestForClient(client_id_1,
551 client_secret_1,
552 scope_set,
553 &consumer_));
554 scoped_ptr<OAuth2TokenService::Request> request2(
555 oauth2_service_->StartRequestForClient(client_id_2,
556 client_secret_2,
557 scope_set,
558 &consumer_));
559 // Start a request that should be duplicate of |request1|.
560 scoped_ptr<OAuth2TokenService::Request> request3(
561 oauth2_service_->StartRequestForClient(client_id_1,
562 client_secret_1,
563 scope_set,
564 &consumer_));
565 base::RunLoop().RunUntilIdle();
566
567 ASSERT_EQ(2U,
568 oauth2_service_->GetNumPendingRequestsForTesting(
569 client_id_1,
570 refresh_token,
571 scope_set));
572 ASSERT_EQ(1U,
573 oauth2_service_->GetNumPendingRequestsForTesting(
574 client_id_2,
575 refresh_token,
576 scope_set));
577 }
578
579 TEST_F(OAuth2TokenServiceTest, ClientScopeSetOrderTest) {
580 OAuth2TokenService::ScopeSet set_0;
581 OAuth2TokenService::ScopeSet set_1;
582 set_1.insert("1");
583
584 OAuth2TokenService::ClientScopeSet sets[] = {
585 OAuth2TokenService::ClientScopeSet("0", set_0),
586 OAuth2TokenService::ClientScopeSet("0", set_1),
587 OAuth2TokenService::ClientScopeSet("1", set_0),
588 OAuth2TokenService::ClientScopeSet("1", set_1),
589 };
590
591 for (size_t i = 0; i < arraysize(sets); i++) {
592 for (size_t j = 0; j < arraysize(sets); j++) {
593 if (i == j) {
594 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
595 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
596 } else if (i < j) {
597 EXPECT_TRUE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
598 EXPECT_FALSE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
599 } else {
600 EXPECT_TRUE(sets[j] < sets[i]) << " i=" << i << ", j=" << j;
601 EXPECT_FALSE(sets[i] < sets[j]) << " i=" << i << ", j=" << j;
602 }
603 }
604 }
605 }
606
607 TEST_F(OAuth2TokenServiceTest, FetchParametersOrderTest) {
608 OAuth2TokenService::ScopeSet set_0;
609 OAuth2TokenService::ScopeSet set_1;
610 set_1.insert("1");
611
612 OAuth2TokenService::FetchParameters params[] = {
613 OAuth2TokenService::FetchParameters("0", "0", set_0),
614 OAuth2TokenService::FetchParameters("0", "0", set_1),
615 OAuth2TokenService::FetchParameters("0", "1", set_0),
616 OAuth2TokenService::FetchParameters("0", "1", set_1),
617 OAuth2TokenService::FetchParameters("1", "0", set_0),
618 OAuth2TokenService::FetchParameters("1", "0", set_1),
619 OAuth2TokenService::FetchParameters("1", "1", set_0),
620 OAuth2TokenService::FetchParameters("1", "1", set_1),
621 };
622
623 for (size_t i = 0; i < arraysize(params); i++) {
624 for (size_t j = 0; j < arraysize(params); j++) {
625 if (i == j) {
626 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
627 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
628 } else if (i < j) {
629 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j;
630 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j;
631 } else {
632 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j;
633 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j;
634 }
635 }
636 }
637 }
OLDNEW
« no previous file with comments | « google_apis/gaia/oauth2_token_service.cc ('k') | net/url_request/test_url_fetcher_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698