OLD | NEW |
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/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
8 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
9 #include "chrome/browser/signin/oauth2_token_service.h" | 10 #include "chrome/browser/signin/oauth2_token_service.h" |
10 #include "chrome/browser/signin/oauth2_token_service_test_util.h" | 11 #include "chrome/browser/signin/oauth2_token_service_test_util.h" |
11 #include "chrome/browser/signin/token_service_factory.h" | 12 #include "chrome/browser/signin/token_service_factory.h" |
12 #include "chrome/browser/signin/token_service_unittest.h" | 13 #include "chrome/browser/signin/token_service_unittest.h" |
13 #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" |
14 #include "google_apis/gaia/gaia_constants.h" | 16 #include "google_apis/gaia/gaia_constants.h" |
15 #include "google_apis/gaia/google_service_auth_error.h" | 17 #include "google_apis/gaia/google_service_auth_error.h" |
16 #include "google_apis/gaia/oauth2_access_token_consumer.h" | 18 #include "google_apis/gaia/oauth2_access_token_consumer.h" |
17 #include "net/http/http_status_code.h" | 19 #include "net/http/http_status_code.h" |
18 #include "net/url_request/test_url_fetcher_factory.h" | 20 #include "net/url_request/test_url_fetcher_factory.h" |
19 #include "net/url_request/url_request_status.h" | 21 #include "net/url_request/url_request_status.h" |
20 #include "net/url_request/url_request_test_util.h" | 22 #include "net/url_request/url_request_test_util.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
22 | 24 |
23 using content::BrowserThread; | 25 using content::BrowserThread; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 65 } |
64 | 66 |
65 std::string refresh_token_; | 67 std::string refresh_token_; |
66 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; | 68 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; |
67 }; | 69 }; |
68 | 70 |
69 class OAuth2TokenServiceTest : public TokenServiceTestHarness { | 71 class OAuth2TokenServiceTest : public TokenServiceTestHarness { |
70 public: | 72 public: |
71 virtual void SetUp() OVERRIDE { | 73 virtual void SetUp() OVERRIDE { |
72 TokenServiceTestHarness::SetUp(); | 74 TokenServiceTestHarness::SetUp(); |
73 io_thread_.reset(new content::TestBrowserThread(content::BrowserThread::IO, | |
74 &message_loop_)); | |
75 oauth2_service_.reset( | 75 oauth2_service_.reset( |
76 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( | 76 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( |
77 message_loop_.message_loop_proxy()))); | 77 BrowserThread::GetMessageLoopProxyForThread( |
78 } | 78 BrowserThread::IO)))); |
79 | |
80 virtual void TearDown() OVERRIDE { | |
81 TokenServiceTestHarness::TearDown(); | |
82 } | 79 } |
83 | 80 |
84 protected: | 81 protected: |
85 scoped_ptr<content::TestBrowserThread> io_thread_; | |
86 net::TestURLFetcherFactory factory_; | 82 net::TestURLFetcherFactory factory_; |
87 scoped_ptr<TestOAuth2TokenService> oauth2_service_; | 83 scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
88 TestingOAuth2TokenServiceConsumer consumer_; | 84 TestingOAuth2TokenServiceConsumer consumer_; |
89 }; | 85 }; |
90 | 86 |
91 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { | 87 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
92 scoped_ptr<OAuth2TokenService::Request> request( | 88 scoped_ptr<OAuth2TokenService::Request> request( |
93 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 89 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
94 message_loop_.RunUntilIdle(); | 90 base::RunLoop().RunUntilIdle(); |
95 | 91 |
96 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 92 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
97 EXPECT_EQ(1, consumer_.number_of_errors_); | 93 EXPECT_EQ(1, consumer_.number_of_errors_); |
98 } | 94 } |
99 | 95 |
100 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { | 96 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
101 oauth2_service_->set_refresh_token("refreshToken"); | 97 oauth2_service_->set_refresh_token("refreshToken"); |
102 scoped_ptr<OAuth2TokenService::Request> request( | 98 scoped_ptr<OAuth2TokenService::Request> request( |
103 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 99 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
104 message_loop_.RunUntilIdle(); | 100 base::RunLoop().RunUntilIdle(); |
105 | 101 |
106 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 102 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
107 EXPECT_EQ(0, consumer_.number_of_errors_); | 103 EXPECT_EQ(0, consumer_.number_of_errors_); |
108 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 104 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
109 EXPECT_TRUE(fetcher); | 105 EXPECT_TRUE(fetcher); |
110 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 106 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
111 fetcher->SetResponseString(std::string()); | 107 fetcher->SetResponseString(std::string()); |
112 fetcher->delegate()->OnURLFetchComplete(fetcher); | 108 fetcher->delegate()->OnURLFetchComplete(fetcher); |
113 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 109 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
114 EXPECT_EQ(1, consumer_.number_of_errors_); | 110 EXPECT_EQ(1, consumer_.number_of_errors_); |
115 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 111 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
116 } | 112 } |
117 | 113 |
118 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { | 114 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
119 oauth2_service_->set_refresh_token("refreshToken"); | 115 oauth2_service_->set_refresh_token("refreshToken"); |
120 scoped_ptr<OAuth2TokenService::Request> request( | 116 scoped_ptr<OAuth2TokenService::Request> request( |
121 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 117 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
122 message_loop_.RunUntilIdle(); | 118 base::RunLoop().RunUntilIdle(); |
123 | 119 |
124 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 120 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
125 EXPECT_EQ(0, consumer_.number_of_errors_); | 121 EXPECT_EQ(0, consumer_.number_of_errors_); |
126 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 122 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
127 EXPECT_TRUE(fetcher); | 123 EXPECT_TRUE(fetcher); |
128 fetcher->set_response_code(net::HTTP_OK); | 124 fetcher->set_response_code(net::HTTP_OK); |
129 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 125 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
130 fetcher->delegate()->OnURLFetchComplete(fetcher); | 126 fetcher->delegate()->OnURLFetchComplete(fetcher); |
131 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 127 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
132 EXPECT_EQ(0, consumer_.number_of_errors_); | 128 EXPECT_EQ(0, consumer_.number_of_errors_); |
133 EXPECT_EQ("token", consumer_.last_token_); | 129 EXPECT_EQ("token", consumer_.last_token_); |
134 } | 130 } |
135 | 131 |
136 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { | 132 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
137 std::set<std::string> scopes1; | 133 std::set<std::string> scopes1; |
138 scopes1.insert("s1"); | 134 scopes1.insert("s1"); |
139 scopes1.insert("s2"); | 135 scopes1.insert("s2"); |
140 std::set<std::string> scopes1_same; | 136 std::set<std::string> scopes1_same; |
141 scopes1_same.insert("s2"); | 137 scopes1_same.insert("s2"); |
142 scopes1_same.insert("s1"); | 138 scopes1_same.insert("s1"); |
143 std::set<std::string> scopes2; | 139 std::set<std::string> scopes2; |
144 scopes2.insert("s3"); | 140 scopes2.insert("s3"); |
145 | 141 |
146 oauth2_service_->set_refresh_token("refreshToken"); | 142 oauth2_service_->set_refresh_token("refreshToken"); |
147 | 143 |
148 // First request. | 144 // First request. |
149 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 145 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
150 scopes1, &consumer_)); | 146 scopes1, &consumer_)); |
151 message_loop_.RunUntilIdle(); | 147 base::RunLoop().RunUntilIdle(); |
152 | 148 |
153 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 149 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
154 EXPECT_EQ(0, consumer_.number_of_errors_); | 150 EXPECT_EQ(0, consumer_.number_of_errors_); |
155 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 151 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
156 EXPECT_TRUE(fetcher); | 152 EXPECT_TRUE(fetcher); |
157 fetcher->set_response_code(net::HTTP_OK); | 153 fetcher->set_response_code(net::HTTP_OK); |
158 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 154 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
159 fetcher->delegate()->OnURLFetchComplete(fetcher); | 155 fetcher->delegate()->OnURLFetchComplete(fetcher); |
160 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 156 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
161 EXPECT_EQ(0, consumer_.number_of_errors_); | 157 EXPECT_EQ(0, consumer_.number_of_errors_); |
162 EXPECT_EQ("token", consumer_.last_token_); | 158 EXPECT_EQ("token", consumer_.last_token_); |
163 | 159 |
164 // Second request to the same set of scopes, should return the same token | 160 // Second request to the same set of scopes, should return the same token |
165 // without needing a network request. | 161 // without needing a network request. |
166 scoped_ptr<OAuth2TokenService::Request> request2( | 162 scoped_ptr<OAuth2TokenService::Request> request2( |
167 oauth2_service_->StartRequest(scopes1_same, &consumer_)); | 163 oauth2_service_->StartRequest(scopes1_same, &consumer_)); |
168 message_loop_.RunUntilIdle(); | 164 base::RunLoop().RunUntilIdle(); |
169 | 165 |
170 // No new network fetcher. | 166 // No new network fetcher. |
171 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 167 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
172 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 168 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
173 EXPECT_EQ(0, consumer_.number_of_errors_); | 169 EXPECT_EQ(0, consumer_.number_of_errors_); |
174 EXPECT_EQ("token", consumer_.last_token_); | 170 EXPECT_EQ("token", consumer_.last_token_); |
175 | 171 |
176 // Third request to a new set of scopes, should return another token. | 172 // Third request to a new set of scopes, should return another token. |
177 scoped_ptr<OAuth2TokenService::Request> request3( | 173 scoped_ptr<OAuth2TokenService::Request> request3( |
178 oauth2_service_->StartRequest(scopes2, &consumer_)); | 174 oauth2_service_->StartRequest(scopes2, &consumer_)); |
179 message_loop_.RunUntilIdle(); | 175 base::RunLoop().RunUntilIdle(); |
180 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 176 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
181 EXPECT_EQ(0, consumer_.number_of_errors_); | 177 EXPECT_EQ(0, consumer_.number_of_errors_); |
182 fetcher = factory_.GetFetcherByID(0); | 178 fetcher = factory_.GetFetcherByID(0); |
183 EXPECT_TRUE(fetcher); | 179 EXPECT_TRUE(fetcher); |
184 fetcher->set_response_code(net::HTTP_OK); | 180 fetcher->set_response_code(net::HTTP_OK); |
185 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 181 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
186 fetcher->delegate()->OnURLFetchComplete(fetcher); | 182 fetcher->delegate()->OnURLFetchComplete(fetcher); |
187 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 183 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
188 EXPECT_EQ(0, consumer_.number_of_errors_); | 184 EXPECT_EQ(0, consumer_.number_of_errors_); |
189 EXPECT_EQ("token2", consumer_.last_token_); | 185 EXPECT_EQ("token2", consumer_.last_token_); |
190 } | 186 } |
191 | 187 |
192 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { | 188 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
193 oauth2_service_->set_refresh_token("refreshToken"); | 189 oauth2_service_->set_refresh_token("refreshToken"); |
194 | 190 |
195 // First request. | 191 // First request. |
196 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 192 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
197 std::set<std::string>(), &consumer_)); | 193 std::set<std::string>(), &consumer_)); |
198 message_loop_.RunUntilIdle(); | 194 base::RunLoop().RunUntilIdle(); |
199 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 195 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
200 EXPECT_EQ(0, consumer_.number_of_errors_); | 196 EXPECT_EQ(0, consumer_.number_of_errors_); |
201 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 197 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
202 EXPECT_TRUE(fetcher); | 198 EXPECT_TRUE(fetcher); |
203 fetcher->set_response_code(net::HTTP_OK); | 199 fetcher->set_response_code(net::HTTP_OK); |
204 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 200 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
205 fetcher->delegate()->OnURLFetchComplete(fetcher); | 201 fetcher->delegate()->OnURLFetchComplete(fetcher); |
206 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 202 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
207 EXPECT_EQ(0, consumer_.number_of_errors_); | 203 EXPECT_EQ(0, consumer_.number_of_errors_); |
208 EXPECT_EQ("token", consumer_.last_token_); | 204 EXPECT_EQ("token", consumer_.last_token_); |
209 | 205 |
210 // Second request must try to access the network as the token has expired. | 206 // Second request must try to access the network as the token has expired. |
211 scoped_ptr<OAuth2TokenService::Request> request2( | 207 scoped_ptr<OAuth2TokenService::Request> request2( |
212 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 208 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
213 message_loop_.RunUntilIdle(); | 209 base::RunLoop().RunUntilIdle(); |
214 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 210 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
215 EXPECT_EQ(0, consumer_.number_of_errors_); | 211 EXPECT_EQ(0, consumer_.number_of_errors_); |
216 | 212 |
217 // Network failure. | 213 // Network failure. |
218 fetcher = factory_.GetFetcherByID(0); | 214 fetcher = factory_.GetFetcherByID(0); |
219 EXPECT_TRUE(fetcher); | 215 EXPECT_TRUE(fetcher); |
220 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 216 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
221 fetcher->SetResponseString(std::string()); | 217 fetcher->SetResponseString(std::string()); |
222 fetcher->delegate()->OnURLFetchComplete(fetcher); | 218 fetcher->delegate()->OnURLFetchComplete(fetcher); |
223 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 219 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
224 EXPECT_EQ(1, consumer_.number_of_errors_); | 220 EXPECT_EQ(1, consumer_.number_of_errors_); |
225 } | 221 } |
226 | 222 |
227 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { | 223 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
228 oauth2_service_->set_refresh_token("refreshToken"); | 224 oauth2_service_->set_refresh_token("refreshToken"); |
229 | 225 |
230 // First request. | 226 // First request. |
231 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 227 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
232 std::set<std::string>(), &consumer_)); | 228 std::set<std::string>(), &consumer_)); |
233 message_loop_.RunUntilIdle(); | 229 base::RunLoop().RunUntilIdle(); |
234 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 230 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
235 EXPECT_EQ(0, consumer_.number_of_errors_); | 231 EXPECT_EQ(0, consumer_.number_of_errors_); |
236 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 232 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
237 EXPECT_TRUE(fetcher); | 233 EXPECT_TRUE(fetcher); |
238 fetcher->set_response_code(net::HTTP_OK); | 234 fetcher->set_response_code(net::HTTP_OK); |
239 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 235 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
240 fetcher->delegate()->OnURLFetchComplete(fetcher); | 236 fetcher->delegate()->OnURLFetchComplete(fetcher); |
241 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 237 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
242 EXPECT_EQ(0, consumer_.number_of_errors_); | 238 EXPECT_EQ(0, consumer_.number_of_errors_); |
243 EXPECT_EQ("token", consumer_.last_token_); | 239 EXPECT_EQ("token", consumer_.last_token_); |
244 | 240 |
245 // Second request must try to access the network as the token has expired. | 241 // Second request must try to access the network as the token has expired. |
246 scoped_ptr<OAuth2TokenService::Request> request2( | 242 scoped_ptr<OAuth2TokenService::Request> request2( |
247 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 243 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
248 message_loop_.RunUntilIdle(); | 244 base::RunLoop().RunUntilIdle(); |
249 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 245 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
250 EXPECT_EQ(0, consumer_.number_of_errors_); | 246 EXPECT_EQ(0, consumer_.number_of_errors_); |
251 | 247 |
252 fetcher = factory_.GetFetcherByID(0); | 248 fetcher = factory_.GetFetcherByID(0); |
253 EXPECT_TRUE(fetcher); | 249 EXPECT_TRUE(fetcher); |
254 fetcher->set_response_code(net::HTTP_OK); | 250 fetcher->set_response_code(net::HTTP_OK); |
255 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); | 251 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
256 fetcher->delegate()->OnURLFetchComplete(fetcher); | 252 fetcher->delegate()->OnURLFetchComplete(fetcher); |
257 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 253 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
258 EXPECT_EQ(0, consumer_.number_of_errors_); | 254 EXPECT_EQ(0, consumer_.number_of_errors_); |
259 EXPECT_EQ("another token", consumer_.last_token_); | 255 EXPECT_EQ("another token", consumer_.last_token_); |
260 } | 256 } |
261 | 257 |
262 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { | 258 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
263 oauth2_service_->set_refresh_token("refreshToken"); | 259 oauth2_service_->set_refresh_token("refreshToken"); |
264 | 260 |
265 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 261 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
266 std::set<std::string>(), &consumer_)); | 262 std::set<std::string>(), &consumer_)); |
267 message_loop_.RunUntilIdle(); | 263 base::RunLoop().RunUntilIdle(); |
268 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 264 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
269 EXPECT_EQ(0, consumer_.number_of_errors_); | 265 EXPECT_EQ(0, consumer_.number_of_errors_); |
270 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 266 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
271 EXPECT_TRUE(fetcher); | 267 EXPECT_TRUE(fetcher); |
272 | 268 |
273 request.reset(); | 269 request.reset(); |
274 | 270 |
275 fetcher->set_response_code(net::HTTP_OK); | 271 fetcher->set_response_code(net::HTTP_OK); |
276 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 272 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
277 fetcher->delegate()->OnURLFetchComplete(fetcher); | 273 fetcher->delegate()->OnURLFetchComplete(fetcher); |
278 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 274 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
279 EXPECT_EQ(0, consumer_.number_of_errors_); | 275 EXPECT_EQ(0, consumer_.number_of_errors_); |
280 } | 276 } |
281 | 277 |
282 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { | 278 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
283 oauth2_service_->set_refresh_token("refreshToken"); | 279 oauth2_service_->set_refresh_token("refreshToken"); |
284 | 280 |
285 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 281 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
286 std::set<std::string>(), &consumer_)); | 282 std::set<std::string>(), &consumer_)); |
287 message_loop_.RunUntilIdle(); | 283 base::RunLoop().RunUntilIdle(); |
288 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 284 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
289 fetcher->set_response_code(net::HTTP_OK); | 285 fetcher->set_response_code(net::HTTP_OK); |
290 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 286 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
291 fetcher->delegate()->OnURLFetchComplete(fetcher); | 287 fetcher->delegate()->OnURLFetchComplete(fetcher); |
292 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 288 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
293 EXPECT_EQ(0, consumer_.number_of_errors_); | 289 EXPECT_EQ(0, consumer_.number_of_errors_); |
294 EXPECT_EQ("token", consumer_.last_token_); | 290 EXPECT_EQ("token", consumer_.last_token_); |
295 | 291 |
296 request.reset(); | 292 request.reset(); |
297 | 293 |
298 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 294 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
299 EXPECT_EQ(0, consumer_.number_of_errors_); | 295 EXPECT_EQ(0, consumer_.number_of_errors_); |
300 EXPECT_EQ("token", consumer_.last_token_); | 296 EXPECT_EQ("token", consumer_.last_token_); |
301 } | 297 } |
302 | 298 |
303 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { | 299 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
304 oauth2_service_->set_refresh_token("refreshToken"); | 300 oauth2_service_->set_refresh_token("refreshToken"); |
305 | 301 |
306 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 302 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
307 std::set<std::string>(), &consumer_)); | 303 std::set<std::string>(), &consumer_)); |
308 message_loop_.RunUntilIdle(); | 304 base::RunLoop().RunUntilIdle(); |
309 scoped_ptr<OAuth2TokenService::Request> request2( | 305 scoped_ptr<OAuth2TokenService::Request> request2( |
310 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 306 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
311 message_loop_.RunUntilIdle(); | 307 base::RunLoop().RunUntilIdle(); |
312 | 308 |
313 request.reset(); | 309 request.reset(); |
314 | 310 |
315 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 311 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
316 fetcher->set_response_code(net::HTTP_OK); | 312 fetcher->set_response_code(net::HTTP_OK); |
317 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 313 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
318 fetcher->delegate()->OnURLFetchComplete(fetcher); | 314 fetcher->delegate()->OnURLFetchComplete(fetcher); |
319 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 315 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
320 EXPECT_EQ(0, consumer_.number_of_errors_); | 316 EXPECT_EQ(0, consumer_.number_of_errors_); |
321 } | 317 } |
322 | 318 |
323 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { | 319 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
324 // We have a valid refresh token; the first request is successful. | 320 // We have a valid refresh token; the first request is successful. |
325 oauth2_service_->set_refresh_token("refreshToken"); | 321 oauth2_service_->set_refresh_token("refreshToken"); |
326 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 322 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
327 std::set<std::string>(), &consumer_)); | 323 std::set<std::string>(), &consumer_)); |
328 message_loop_.RunUntilIdle(); | 324 base::RunLoop().RunUntilIdle(); |
329 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 325 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
330 fetcher->set_response_code(net::HTTP_OK); | 326 fetcher->set_response_code(net::HTTP_OK); |
331 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 327 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
332 fetcher->delegate()->OnURLFetchComplete(fetcher); | 328 fetcher->delegate()->OnURLFetchComplete(fetcher); |
333 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 329 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
334 EXPECT_EQ(0, consumer_.number_of_errors_); | 330 EXPECT_EQ(0, consumer_.number_of_errors_); |
335 EXPECT_EQ("token", consumer_.last_token_); | 331 EXPECT_EQ("token", consumer_.last_token_); |
336 | 332 |
337 // The refresh token is no longer available; subsequent requests fail. | 333 // The refresh token is no longer available; subsequent requests fail. |
338 oauth2_service_->set_refresh_token(""); | 334 oauth2_service_->set_refresh_token(""); |
339 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); | 335 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); |
340 message_loop_.RunUntilIdle(); | 336 base::RunLoop().RunUntilIdle(); |
341 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 337 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
342 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 338 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
343 EXPECT_EQ(1, consumer_.number_of_errors_); | 339 EXPECT_EQ(1, consumer_.number_of_errors_); |
344 } | 340 } |
345 | 341 |
346 TEST_F(OAuth2TokenServiceTest, | 342 TEST_F(OAuth2TokenServiceTest, |
347 ChangedRefreshTokenDoesNotAffectInFlightRequests) { | 343 ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
348 oauth2_service_->set_refresh_token("first refreshToken"); | 344 oauth2_service_->set_refresh_token("first refreshToken"); |
349 std::set<std::string> scopes; | 345 std::set<std::string> scopes; |
350 scopes.insert("s1"); | 346 scopes.insert("s1"); |
351 scopes.insert("s2"); | 347 scopes.insert("s2"); |
352 | 348 |
353 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 349 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
354 scopes, &consumer_)); | 350 scopes, &consumer_)); |
355 message_loop_.RunUntilIdle(); | 351 base::RunLoop().RunUntilIdle(); |
356 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); | 352 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
357 | 353 |
358 // Note |request| is still pending when the refresh token changes. | 354 // Note |request| is still pending when the refresh token changes. |
359 oauth2_service_->set_refresh_token("second refreshToken"); | 355 oauth2_service_->set_refresh_token("second refreshToken"); |
360 | 356 |
361 // A 2nd request (using the new refresh token) that occurs and completes | 357 // A 2nd request (using the new refresh token) that occurs and completes |
362 // while the 1st request is in flight is successful. | 358 // while the 1st request is in flight is successful. |
363 TestingOAuth2TokenServiceConsumer consumer2; | 359 TestingOAuth2TokenServiceConsumer consumer2; |
364 scoped_ptr<OAuth2TokenService::Request> request2( | 360 scoped_ptr<OAuth2TokenService::Request> request2( |
365 oauth2_service_->StartRequest(scopes, &consumer2)); | 361 oauth2_service_->StartRequest(scopes, &consumer2)); |
366 message_loop_.RunUntilIdle(); | 362 base::RunLoop().RunUntilIdle(); |
367 | 363 |
368 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); | 364 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); |
369 fetcher2->set_response_code(net::HTTP_OK); | 365 fetcher2->set_response_code(net::HTTP_OK); |
370 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); | 366 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
371 fetcher2->delegate()->OnURLFetchComplete(fetcher2); | 367 fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
372 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); | 368 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); |
373 EXPECT_EQ(0, consumer2.number_of_errors_); | 369 EXPECT_EQ(0, consumer2.number_of_errors_); |
374 EXPECT_EQ("second token", consumer2.last_token_); | 370 EXPECT_EQ("second token", consumer2.last_token_); |
375 | 371 |
376 fetcher1->set_response_code(net::HTTP_OK); | 372 fetcher1->set_response_code(net::HTTP_OK); |
377 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); | 373 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); |
378 fetcher1->delegate()->OnURLFetchComplete(fetcher1); | 374 fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
379 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 375 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
380 EXPECT_EQ(0, consumer_.number_of_errors_); | 376 EXPECT_EQ(0, consumer_.number_of_errors_); |
381 EXPECT_EQ("first token", consumer_.last_token_); | 377 EXPECT_EQ("first token", consumer_.last_token_); |
382 } | 378 } |
383 | 379 |
384 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { | 380 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
385 oauth2_service_->set_refresh_token("refreshToken"); | 381 oauth2_service_->set_refresh_token("refreshToken"); |
386 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 382 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
387 std::set<std::string>(), &consumer_)); | 383 std::set<std::string>(), &consumer_)); |
388 message_loop_.RunUntilIdle(); | 384 base::RunLoop().RunUntilIdle(); |
389 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 385 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
390 EXPECT_EQ(0, consumer_.number_of_errors_); | 386 EXPECT_EQ(0, consumer_.number_of_errors_); |
391 | 387 |
392 // The destructor should cancel all in-flight fetchers. | 388 // The destructor should cancel all in-flight fetchers. |
393 oauth2_service_.reset(NULL); | 389 oauth2_service_.reset(NULL); |
394 | 390 |
395 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 391 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
396 EXPECT_EQ(1, consumer_.number_of_errors_); | 392 EXPECT_EQ(1, consumer_.number_of_errors_); |
397 } | 393 } |
398 | 394 |
399 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { | 395 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
400 oauth2_service_->set_refresh_token("refreshToken"); | 396 oauth2_service_->set_refresh_token("refreshToken"); |
401 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get()); | 397 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get()); |
402 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 398 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
403 std::set<std::string>(), &consumer)); | 399 std::set<std::string>(), &consumer)); |
404 message_loop_.RunUntilIdle(); | 400 base::RunLoop().RunUntilIdle(); |
405 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 401 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
406 EXPECT_EQ(0, consumer.number_of_errors_); | 402 EXPECT_EQ(0, consumer.number_of_errors_); |
407 | 403 |
408 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 404 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
409 ASSERT_TRUE(fetcher); | 405 ASSERT_TRUE(fetcher); |
410 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 406 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
411 fetcher->SetResponseString(std::string()); | 407 fetcher->SetResponseString(std::string()); |
412 fetcher->delegate()->OnURLFetchComplete(fetcher); | 408 fetcher->delegate()->OnURLFetchComplete(fetcher); |
413 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 409 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
414 EXPECT_EQ(1, consumer.number_of_errors_); | 410 EXPECT_EQ(1, consumer.number_of_errors_); |
415 | 411 |
416 fetcher = factory_.GetFetcherByID(0); | 412 fetcher = factory_.GetFetcherByID(0); |
417 ASSERT_TRUE(fetcher); | 413 ASSERT_TRUE(fetcher); |
418 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 414 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
419 fetcher->SetResponseString(std::string()); | 415 fetcher->SetResponseString(std::string()); |
420 fetcher->delegate()->OnURLFetchComplete(fetcher); | 416 fetcher->delegate()->OnURLFetchComplete(fetcher); |
421 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 417 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
422 EXPECT_EQ(2, consumer.number_of_errors_); | 418 EXPECT_EQ(2, consumer.number_of_errors_); |
423 } | 419 } |
424 | 420 |
425 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { | 421 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
426 std::set<std::string> scopes; | 422 std::set<std::string> scopes; |
427 oauth2_service_->set_refresh_token("refreshToken"); | 423 oauth2_service_->set_refresh_token("refreshToken"); |
428 | 424 |
429 // First request. | 425 // First request. |
430 scoped_ptr<OAuth2TokenService::Request> request( | 426 scoped_ptr<OAuth2TokenService::Request> request( |
431 oauth2_service_->StartRequest(scopes, &consumer_)); | 427 oauth2_service_->StartRequest(scopes, &consumer_)); |
432 message_loop_.RunUntilIdle(); | 428 base::RunLoop().RunUntilIdle(); |
433 | 429 |
434 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 430 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
435 EXPECT_EQ(0, consumer_.number_of_errors_); | 431 EXPECT_EQ(0, consumer_.number_of_errors_); |
436 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 432 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
437 EXPECT_TRUE(fetcher); | 433 EXPECT_TRUE(fetcher); |
438 fetcher->set_response_code(net::HTTP_OK); | 434 fetcher->set_response_code(net::HTTP_OK); |
439 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 435 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
440 fetcher->delegate()->OnURLFetchComplete(fetcher); | 436 fetcher->delegate()->OnURLFetchComplete(fetcher); |
441 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 437 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
442 EXPECT_EQ(0, consumer_.number_of_errors_); | 438 EXPECT_EQ(0, consumer_.number_of_errors_); |
443 EXPECT_EQ("token", consumer_.last_token_); | 439 EXPECT_EQ("token", consumer_.last_token_); |
444 | 440 |
445 // Second request, should return the same token without needing a network | 441 // Second request, should return the same token without needing a network |
446 // request. | 442 // request. |
447 scoped_ptr<OAuth2TokenService::Request> request2( | 443 scoped_ptr<OAuth2TokenService::Request> request2( |
448 oauth2_service_->StartRequest(scopes, &consumer_)); | 444 oauth2_service_->StartRequest(scopes, &consumer_)); |
449 message_loop_.RunUntilIdle(); | 445 base::RunLoop().RunUntilIdle(); |
450 | 446 |
451 // No new network fetcher. | 447 // No new network fetcher. |
452 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 448 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
453 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 449 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
454 EXPECT_EQ(0, consumer_.number_of_errors_); | 450 EXPECT_EQ(0, consumer_.number_of_errors_); |
455 EXPECT_EQ("token", consumer_.last_token_); | 451 EXPECT_EQ("token", consumer_.last_token_); |
456 | 452 |
457 // Invalidating the token should return a new token on the next request. | 453 // Invalidating the token should return a new token on the next request. |
458 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); | 454 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); |
459 scoped_ptr<OAuth2TokenService::Request> request3( | 455 scoped_ptr<OAuth2TokenService::Request> request3( |
460 oauth2_service_->StartRequest(scopes, &consumer_)); | 456 oauth2_service_->StartRequest(scopes, &consumer_)); |
461 message_loop_.RunUntilIdle(); | 457 base::RunLoop().RunUntilIdle(); |
462 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 458 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
463 EXPECT_EQ(0, consumer_.number_of_errors_); | 459 EXPECT_EQ(0, consumer_.number_of_errors_); |
464 fetcher = factory_.GetFetcherByID(0); | 460 fetcher = factory_.GetFetcherByID(0); |
465 EXPECT_TRUE(fetcher); | 461 EXPECT_TRUE(fetcher); |
466 fetcher->set_response_code(net::HTTP_OK); | 462 fetcher->set_response_code(net::HTTP_OK); |
467 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 463 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
468 fetcher->delegate()->OnURLFetchComplete(fetcher); | 464 fetcher->delegate()->OnURLFetchComplete(fetcher); |
469 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 465 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
470 EXPECT_EQ(0, consumer_.number_of_errors_); | 466 EXPECT_EQ(0, consumer_.number_of_errors_); |
471 EXPECT_EQ("token2", consumer_.last_token_); | 467 EXPECT_EQ("token2", consumer_.last_token_); |
472 } | 468 } |
OLD | NEW |