| OLD | NEW |
| 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/fake_oauth2_token_service_delegate.h" |
| 9 #include "google_apis/gaia/gaia_constants.h" | 10 #include "google_apis/gaia/gaia_constants.h" |
| 10 #include "google_apis/gaia/google_service_auth_error.h" | 11 #include "google_apis/gaia/google_service_auth_error.h" |
| 11 #include "google_apis/gaia/oauth2_access_token_consumer.h" | 12 #include "google_apis/gaia/oauth2_access_token_consumer.h" |
| 12 #include "google_apis/gaia/oauth2_access_token_fetcher_impl.h" | 13 #include "google_apis/gaia/oauth2_access_token_fetcher_impl.h" |
| 13 #include "google_apis/gaia/oauth2_token_service.h" | 14 #include "google_apis/gaia/oauth2_token_service.h" |
| 14 #include "google_apis/gaia/oauth2_token_service_test_util.h" | 15 #include "google_apis/gaia/oauth2_token_service_test_util.h" |
| 15 #include "net/http/http_status_code.h" | 16 #include "net/http/http_status_code.h" |
| 16 #include "net/url_request/test_url_fetcher_factory.h" | 17 #include "net/url_request/test_url_fetcher_factory.h" |
| 17 #include "net/url_request/url_fetcher_delegate.h" | 18 #include "net/url_request/url_fetcher_delegate.h" |
| 18 #include "net/url_request/url_request_test_util.h" | 19 #include "net/url_request/url_request_test_util.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 36 account_id_, OAuth2TokenService::ScopeSet(), this).release()); | 37 account_id_, OAuth2TokenService::ScopeSet(), this).release()); |
| 37 } | 38 } |
| 38 | 39 |
| 39 OAuth2TokenService* oauth2_service_; | 40 OAuth2TokenService* oauth2_service_; |
| 40 std::string account_id_; | 41 std::string account_id_; |
| 41 scoped_ptr<OAuth2TokenService::Request> request_; | 42 scoped_ptr<OAuth2TokenService::Request> request_; |
| 42 }; | 43 }; |
| 43 | 44 |
| 44 class TestOAuth2TokenService : public OAuth2TokenService { | 45 class TestOAuth2TokenService : public OAuth2TokenService { |
| 45 public: | 46 public: |
| 46 explicit TestOAuth2TokenService(net::TestURLRequestContextGetter* getter) | 47 explicit TestOAuth2TokenService(FakeOAuth2TokenServiceDelegate* delegate) |
| 47 : request_context_getter_(getter) { | 48 : OAuth2TokenService(delegate) {} |
| 48 } | |
| 49 | 49 |
| 50 void CancelAllRequestsForTest() { CancelAllRequests(); } | 50 void CancelAllRequestsForTest() { CancelAllRequests(); } |
| 51 | 51 |
| 52 void CancelRequestsForAccountForTest(const std::string& account_id) { | 52 void CancelRequestsForAccountForTest(const std::string& account_id) { |
| 53 CancelRequestsForAccount(account_id); | 53 CancelRequestsForAccount(account_id); |
| 54 } | 54 } |
| 55 | 55 |
| 56 // For testing: set the refresh token to be used. | 56 FakeOAuth2TokenServiceDelegate* GetFakeOAuth2TokenServiceDelegate() { |
| 57 void set_refresh_token(const std::string& account_id, | 57 return static_cast<FakeOAuth2TokenServiceDelegate*>(GetDelegate()); |
| 58 const std::string& refresh_token) { | |
| 59 if (refresh_token.empty()) | |
| 60 refresh_tokens_.erase(account_id); | |
| 61 else | |
| 62 refresh_tokens_[account_id] = refresh_token; | |
| 63 } | 58 } |
| 64 | |
| 65 bool RefreshTokenIsAvailable(const std::string& account_id) const override { | |
| 66 std::map<std::string, std::string>::const_iterator it = | |
| 67 refresh_tokens_.find(account_id); | |
| 68 | |
| 69 return it != refresh_tokens_.end(); | |
| 70 }; | |
| 71 | |
| 72 private: | |
| 73 // OAuth2TokenService implementation. | |
| 74 net::URLRequestContextGetter* GetRequestContext() override { | |
| 75 return request_context_getter_.get(); | |
| 76 } | |
| 77 | |
| 78 OAuth2AccessTokenFetcher* CreateAccessTokenFetcher( | |
| 79 const std::string& account_id, | |
| 80 net::URLRequestContextGetter* getter, | |
| 81 OAuth2AccessTokenConsumer* consumer) override { | |
| 82 std::map<std::string, std::string>::const_iterator it = | |
| 83 refresh_tokens_.find(account_id); | |
| 84 DCHECK(it != refresh_tokens_.end()); | |
| 85 std::string refresh_token(it->second); | |
| 86 return new OAuth2AccessTokenFetcherImpl(consumer, getter, refresh_token); | |
| 87 }; | |
| 88 | |
| 89 std::map<std::string, std::string> refresh_tokens_; | |
| 90 scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; | |
| 91 }; | 59 }; |
| 92 | 60 |
| 93 class OAuth2TokenServiceTest : public testing::Test { | 61 class OAuth2TokenServiceTest : public testing::Test { |
| 94 public: | 62 public: |
| 95 void SetUp() override { | 63 void SetUp() override { |
| 96 oauth2_service_.reset( | 64 oauth2_service_.reset(new TestOAuth2TokenService( |
| 97 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( | 65 new FakeOAuth2TokenServiceDelegate(new net::TestURLRequestContextGetter( |
| 98 message_loop_.task_runner()))); | 66 message_loop_.task_runner())))); |
| 99 account_id_ = "test_user@gmail.com"; | 67 account_id_ = "test_user@gmail.com"; |
| 100 } | 68 } |
| 101 | 69 |
| 102 void TearDown() override { | 70 void TearDown() override { |
| 103 // Makes sure that all the clean up tasks are run. | 71 // Makes sure that all the clean up tasks are run. |
| 104 base::RunLoop().RunUntilIdle(); | 72 base::RunLoop().RunUntilIdle(); |
| 105 } | 73 } |
| 106 | 74 |
| 107 protected: | 75 protected: |
| 108 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop. | 76 base::MessageLoopForIO message_loop_; // net:: stuff needs IO message loop. |
| 109 net::TestURLFetcherFactory factory_; | 77 net::TestURLFetcherFactory factory_; |
| 110 scoped_ptr<TestOAuth2TokenService> oauth2_service_; | 78 scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
| 111 std::string account_id_; | 79 std::string account_id_; |
| 112 TestingOAuth2TokenServiceConsumer consumer_; | 80 TestingOAuth2TokenServiceConsumer consumer_; |
| 113 }; | 81 }; |
| 114 | 82 |
| 115 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { | 83 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
| 116 scoped_ptr<OAuth2TokenService::Request> request( | 84 scoped_ptr<OAuth2TokenService::Request> request( |
| 117 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), | 85 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 118 &consumer_)); | 86 &consumer_)); |
| 119 base::RunLoop().RunUntilIdle(); | 87 base::RunLoop().RunUntilIdle(); |
| 120 | 88 |
| 121 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 89 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 122 EXPECT_EQ(1, consumer_.number_of_errors_); | 90 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 123 } | 91 } |
| 124 | 92 |
| 125 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { | 93 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
| 126 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 94 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 95 "refreshToken"); |
| 127 scoped_ptr<OAuth2TokenService::Request> request( | 96 scoped_ptr<OAuth2TokenService::Request> request( |
| 128 oauth2_service_->StartRequest(account_id_, | 97 oauth2_service_->StartRequest(account_id_, |
| 129 OAuth2TokenService::ScopeSet(), | 98 OAuth2TokenService::ScopeSet(), |
| 130 &consumer_)); | 99 &consumer_)); |
| 131 base::RunLoop().RunUntilIdle(); | 100 base::RunLoop().RunUntilIdle(); |
| 132 | 101 |
| 133 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 102 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 134 EXPECT_EQ(0, consumer_.number_of_errors_); | 103 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 135 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 104 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 136 ASSERT_TRUE(fetcher); | 105 ASSERT_TRUE(fetcher); |
| 137 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 106 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 138 fetcher->SetResponseString(std::string()); | 107 fetcher->SetResponseString(std::string()); |
| 139 fetcher->delegate()->OnURLFetchComplete(fetcher); | 108 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 140 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 109 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 141 EXPECT_EQ(1, consumer_.number_of_errors_); | 110 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 142 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 111 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
| 143 } | 112 } |
| 144 | 113 |
| 145 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { | 114 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
| 146 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 115 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 116 "refreshToken"); |
| 147 scoped_ptr<OAuth2TokenService::Request> request( | 117 scoped_ptr<OAuth2TokenService::Request> request( |
| 148 oauth2_service_->StartRequest(account_id_, | 118 oauth2_service_->StartRequest(account_id_, |
| 149 OAuth2TokenService::ScopeSet(), | 119 OAuth2TokenService::ScopeSet(), |
| 150 &consumer_)); | 120 &consumer_)); |
| 151 base::RunLoop().RunUntilIdle(); | 121 base::RunLoop().RunUntilIdle(); |
| 152 | 122 |
| 153 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 123 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 154 EXPECT_EQ(0, consumer_.number_of_errors_); | 124 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 155 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 125 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 156 ASSERT_TRUE(fetcher); | 126 ASSERT_TRUE(fetcher); |
| 157 fetcher->set_response_code(net::HTTP_OK); | 127 fetcher->set_response_code(net::HTTP_OK); |
| 158 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 128 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 159 fetcher->delegate()->OnURLFetchComplete(fetcher); | 129 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 160 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 130 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 161 EXPECT_EQ(0, consumer_.number_of_errors_); | 131 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 162 EXPECT_EQ("token", consumer_.last_token_); | 132 EXPECT_EQ("token", consumer_.last_token_); |
| 163 } | 133 } |
| 164 | 134 |
| 165 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { | 135 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
| 166 OAuth2TokenService::ScopeSet scopes1; | 136 OAuth2TokenService::ScopeSet scopes1; |
| 167 scopes1.insert("s1"); | 137 scopes1.insert("s1"); |
| 168 scopes1.insert("s2"); | 138 scopes1.insert("s2"); |
| 169 OAuth2TokenService::ScopeSet scopes1_same; | 139 OAuth2TokenService::ScopeSet scopes1_same; |
| 170 scopes1_same.insert("s2"); | 140 scopes1_same.insert("s2"); |
| 171 scopes1_same.insert("s1"); | 141 scopes1_same.insert("s1"); |
| 172 OAuth2TokenService::ScopeSet scopes2; | 142 OAuth2TokenService::ScopeSet scopes2; |
| 173 scopes2.insert("s3"); | 143 scopes2.insert("s3"); |
| 174 | 144 |
| 175 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 145 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 146 "refreshToken"); |
| 176 | 147 |
| 177 // First request. | 148 // First request. |
| 178 scoped_ptr<OAuth2TokenService::Request> request( | 149 scoped_ptr<OAuth2TokenService::Request> request( |
| 179 oauth2_service_->StartRequest(account_id_, scopes1, &consumer_)); | 150 oauth2_service_->StartRequest(account_id_, scopes1, &consumer_)); |
| 180 base::RunLoop().RunUntilIdle(); | 151 base::RunLoop().RunUntilIdle(); |
| 181 | 152 |
| 182 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 153 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 183 EXPECT_EQ(0, consumer_.number_of_errors_); | 154 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 184 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 155 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 185 ASSERT_TRUE(fetcher); | 156 ASSERT_TRUE(fetcher); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 211 ASSERT_TRUE(fetcher); | 182 ASSERT_TRUE(fetcher); |
| 212 fetcher->set_response_code(net::HTTP_OK); | 183 fetcher->set_response_code(net::HTTP_OK); |
| 213 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 184 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| 214 fetcher->delegate()->OnURLFetchComplete(fetcher); | 185 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 215 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 186 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| 216 EXPECT_EQ(0, consumer_.number_of_errors_); | 187 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 217 EXPECT_EQ("token2", consumer_.last_token_); | 188 EXPECT_EQ("token2", consumer_.last_token_); |
| 218 } | 189 } |
| 219 | 190 |
| 220 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { | 191 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
| 221 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 192 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 193 "refreshToken"); |
| 222 | 194 |
| 223 // First request. | 195 // First request. |
| 224 scoped_ptr<OAuth2TokenService::Request> request( | 196 scoped_ptr<OAuth2TokenService::Request> request( |
| 225 oauth2_service_->StartRequest(account_id_, | 197 oauth2_service_->StartRequest(account_id_, |
| 226 OAuth2TokenService::ScopeSet(), | 198 OAuth2TokenService::ScopeSet(), |
| 227 &consumer_)); | 199 &consumer_)); |
| 228 base::RunLoop().RunUntilIdle(); | 200 base::RunLoop().RunUntilIdle(); |
| 229 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 201 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 230 EXPECT_EQ(0, consumer_.number_of_errors_); | 202 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 231 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 203 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 250 fetcher = factory_.GetFetcherByID(0); | 222 fetcher = factory_.GetFetcherByID(0); |
| 251 ASSERT_TRUE(fetcher); | 223 ASSERT_TRUE(fetcher); |
| 252 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 224 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 253 fetcher->SetResponseString(std::string()); | 225 fetcher->SetResponseString(std::string()); |
| 254 fetcher->delegate()->OnURLFetchComplete(fetcher); | 226 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 255 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 227 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 256 EXPECT_EQ(1, consumer_.number_of_errors_); | 228 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 257 } | 229 } |
| 258 | 230 |
| 259 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { | 231 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
| 260 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 232 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 233 "refreshToken"); |
| 261 | 234 |
| 262 // First request. | 235 // First request. |
| 263 scoped_ptr<OAuth2TokenService::Request> request( | 236 scoped_ptr<OAuth2TokenService::Request> request( |
| 264 oauth2_service_->StartRequest(account_id_, | 237 oauth2_service_->StartRequest(account_id_, |
| 265 OAuth2TokenService::ScopeSet(), | 238 OAuth2TokenService::ScopeSet(), |
| 266 &consumer_)); | 239 &consumer_)); |
| 267 base::RunLoop().RunUntilIdle(); | 240 base::RunLoop().RunUntilIdle(); |
| 268 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 241 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 269 EXPECT_EQ(0, consumer_.number_of_errors_); | 242 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 270 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 243 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 289 ASSERT_TRUE(fetcher); | 262 ASSERT_TRUE(fetcher); |
| 290 fetcher->set_response_code(net::HTTP_OK); | 263 fetcher->set_response_code(net::HTTP_OK); |
| 291 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); | 264 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
| 292 fetcher->delegate()->OnURLFetchComplete(fetcher); | 265 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 293 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 266 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 294 EXPECT_EQ(0, consumer_.number_of_errors_); | 267 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 295 EXPECT_EQ("another token", consumer_.last_token_); | 268 EXPECT_EQ("another token", consumer_.last_token_); |
| 296 } | 269 } |
| 297 | 270 |
| 298 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { | 271 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
| 299 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 272 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 273 "refreshToken"); |
| 300 | 274 |
| 301 scoped_ptr<OAuth2TokenService::Request> request( | 275 scoped_ptr<OAuth2TokenService::Request> request( |
| 302 oauth2_service_->StartRequest(account_id_, | 276 oauth2_service_->StartRequest(account_id_, |
| 303 OAuth2TokenService::ScopeSet(), | 277 OAuth2TokenService::ScopeSet(), |
| 304 &consumer_)); | 278 &consumer_)); |
| 305 base::RunLoop().RunUntilIdle(); | 279 base::RunLoop().RunUntilIdle(); |
| 306 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 280 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 307 EXPECT_EQ(0, consumer_.number_of_errors_); | 281 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 308 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 282 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 309 ASSERT_TRUE(fetcher); | 283 ASSERT_TRUE(fetcher); |
| 310 | 284 |
| 311 request.reset(); | 285 request.reset(); |
| 312 | 286 |
| 313 fetcher->set_response_code(net::HTTP_OK); | 287 fetcher->set_response_code(net::HTTP_OK); |
| 314 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 288 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 315 fetcher->delegate()->OnURLFetchComplete(fetcher); | 289 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 316 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 290 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 317 EXPECT_EQ(0, consumer_.number_of_errors_); | 291 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 318 } | 292 } |
| 319 | 293 |
| 320 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { | 294 TEST_F(OAuth2TokenServiceTest, RequestDeletedAfterCompletion) { |
| 321 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 295 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 296 "refreshToken"); |
| 322 | 297 |
| 323 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 298 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 324 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); | 299 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
| 325 base::RunLoop().RunUntilIdle(); | 300 base::RunLoop().RunUntilIdle(); |
| 326 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 301 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 327 ASSERT_TRUE(fetcher); | 302 ASSERT_TRUE(fetcher); |
| 328 fetcher->set_response_code(net::HTTP_OK); | 303 fetcher->set_response_code(net::HTTP_OK); |
| 329 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 304 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 330 fetcher->delegate()->OnURLFetchComplete(fetcher); | 305 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 331 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 306 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 332 EXPECT_EQ(0, consumer_.number_of_errors_); | 307 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 333 EXPECT_EQ("token", consumer_.last_token_); | 308 EXPECT_EQ("token", consumer_.last_token_); |
| 334 | 309 |
| 335 request.reset(); | 310 request.reset(); |
| 336 | 311 |
| 337 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 312 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 338 EXPECT_EQ(0, consumer_.number_of_errors_); | 313 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 339 EXPECT_EQ("token", consumer_.last_token_); | 314 EXPECT_EQ("token", consumer_.last_token_); |
| 340 } | 315 } |
| 341 | 316 |
| 342 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { | 317 TEST_F(OAuth2TokenServiceTest, MultipleRequestsForTheSameScopesWithOneDeleted) { |
| 343 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 318 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 319 "refreshToken"); |
| 344 | 320 |
| 345 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 321 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 346 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); | 322 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
| 347 base::RunLoop().RunUntilIdle(); | 323 base::RunLoop().RunUntilIdle(); |
| 348 scoped_ptr<OAuth2TokenService::Request> request2( | 324 scoped_ptr<OAuth2TokenService::Request> request2( |
| 349 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), | 325 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 350 &consumer_)); | 326 &consumer_)); |
| 351 base::RunLoop().RunUntilIdle(); | 327 base::RunLoop().RunUntilIdle(); |
| 352 | 328 |
| 353 request.reset(); | 329 request.reset(); |
| 354 | 330 |
| 355 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 331 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 356 ASSERT_TRUE(fetcher); | 332 ASSERT_TRUE(fetcher); |
| 357 fetcher->set_response_code(net::HTTP_OK); | 333 fetcher->set_response_code(net::HTTP_OK); |
| 358 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 334 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 359 fetcher->delegate()->OnURLFetchComplete(fetcher); | 335 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 360 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 336 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 361 EXPECT_EQ(0, consumer_.number_of_errors_); | 337 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 362 } | 338 } |
| 363 | 339 |
| 364 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { | 340 TEST_F(OAuth2TokenServiceTest, ClearedRefreshTokenFailsSubsequentRequests) { |
| 365 // We have a valid refresh token; the first request is successful. | 341 // We have a valid refresh token; the first request is successful. |
| 366 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 342 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 343 "refreshToken"); |
| 367 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 344 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 368 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); | 345 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
| 369 base::RunLoop().RunUntilIdle(); | 346 base::RunLoop().RunUntilIdle(); |
| 370 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 347 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 371 ASSERT_TRUE(fetcher); | 348 ASSERT_TRUE(fetcher); |
| 372 fetcher->set_response_code(net::HTTP_OK); | 349 fetcher->set_response_code(net::HTTP_OK); |
| 373 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 350 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 374 fetcher->delegate()->OnURLFetchComplete(fetcher); | 351 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 375 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 352 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 376 EXPECT_EQ(0, consumer_.number_of_errors_); | 353 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 377 EXPECT_EQ("token", consumer_.last_token_); | 354 EXPECT_EQ("token", consumer_.last_token_); |
| 378 | 355 |
| 379 // The refresh token is no longer available; subsequent requests fail. | 356 // The refresh token is no longer available; subsequent requests fail. |
| 380 oauth2_service_->set_refresh_token(account_id_, ""); | 357 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, ""); |
| 381 request = oauth2_service_->StartRequest(account_id_, | 358 request = oauth2_service_->StartRequest(account_id_, |
| 382 OAuth2TokenService::ScopeSet(), &consumer_); | 359 OAuth2TokenService::ScopeSet(), &consumer_); |
| 383 base::RunLoop().RunUntilIdle(); | 360 base::RunLoop().RunUntilIdle(); |
| 384 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 361 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 385 EXPECT_EQ(1, consumer_.number_of_errors_); | 362 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 386 } | 363 } |
| 387 | 364 |
| 388 TEST_F(OAuth2TokenServiceTest, | 365 TEST_F(OAuth2TokenServiceTest, |
| 389 ChangedRefreshTokenDoesNotAffectInFlightRequests) { | 366 ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
| 390 oauth2_service_->set_refresh_token(account_id_, "first refreshToken"); | 367 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 368 "first refreshToken"); |
| 391 OAuth2TokenService::ScopeSet scopes; | 369 OAuth2TokenService::ScopeSet scopes; |
| 392 scopes.insert("s1"); | 370 scopes.insert("s1"); |
| 393 scopes.insert("s2"); | 371 scopes.insert("s2"); |
| 394 OAuth2TokenService::ScopeSet scopes1; | 372 OAuth2TokenService::ScopeSet scopes1; |
| 395 scopes.insert("s3"); | 373 scopes.insert("s3"); |
| 396 scopes.insert("s4"); | 374 scopes.insert("s4"); |
| 397 | 375 |
| 398 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 376 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 399 account_id_, scopes, &consumer_)); | 377 account_id_, scopes, &consumer_)); |
| 400 base::RunLoop().RunUntilIdle(); | 378 base::RunLoop().RunUntilIdle(); |
| 401 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); | 379 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
| 402 ASSERT_TRUE(fetcher1); | 380 ASSERT_TRUE(fetcher1); |
| 403 | 381 |
| 404 // Note |request| is still pending when the refresh token changes. | 382 // Note |request| is still pending when the refresh token changes. |
| 405 oauth2_service_->set_refresh_token(account_id_, "second refreshToken"); | 383 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 384 "second refreshToken"); |
| 406 | 385 |
| 407 // A 2nd request (using the new refresh token) that occurs and completes | 386 // A 2nd request (using the new refresh token) that occurs and completes |
| 408 // while the 1st request is in flight is successful. | 387 // while the 1st request is in flight is successful. |
| 409 TestingOAuth2TokenServiceConsumer consumer2; | 388 TestingOAuth2TokenServiceConsumer consumer2; |
| 410 scoped_ptr<OAuth2TokenService::Request> request2( | 389 scoped_ptr<OAuth2TokenService::Request> request2( |
| 411 oauth2_service_->StartRequest(account_id_, scopes1, &consumer2)); | 390 oauth2_service_->StartRequest(account_id_, scopes1, &consumer2)); |
| 412 base::RunLoop().RunUntilIdle(); | 391 base::RunLoop().RunUntilIdle(); |
| 413 | 392 |
| 414 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); | 393 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); |
| 415 fetcher2->set_response_code(net::HTTP_OK); | 394 fetcher2->set_response_code(net::HTTP_OK); |
| 416 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); | 395 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
| 417 fetcher2->delegate()->OnURLFetchComplete(fetcher2); | 396 fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
| 418 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); | 397 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); |
| 419 EXPECT_EQ(0, consumer2.number_of_errors_); | 398 EXPECT_EQ(0, consumer2.number_of_errors_); |
| 420 EXPECT_EQ("second token", consumer2.last_token_); | 399 EXPECT_EQ("second token", consumer2.last_token_); |
| 421 | 400 |
| 422 fetcher1->set_response_code(net::HTTP_OK); | 401 fetcher1->set_response_code(net::HTTP_OK); |
| 423 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); | 402 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); |
| 424 fetcher1->delegate()->OnURLFetchComplete(fetcher1); | 403 fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
| 425 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 404 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 426 EXPECT_EQ(0, consumer_.number_of_errors_); | 405 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 427 EXPECT_EQ("first token", consumer_.last_token_); | 406 EXPECT_EQ("first token", consumer_.last_token_); |
| 428 } | 407 } |
| 429 | 408 |
| 430 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { | 409 TEST_F(OAuth2TokenServiceTest, ServiceShutDownBeforeFetchComplete) { |
| 431 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 410 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 411 "refreshToken"); |
| 432 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 412 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 433 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); | 413 account_id_, OAuth2TokenService::ScopeSet(), &consumer_)); |
| 434 base::RunLoop().RunUntilIdle(); | 414 base::RunLoop().RunUntilIdle(); |
| 435 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 415 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 436 EXPECT_EQ(0, consumer_.number_of_errors_); | 416 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 437 | 417 |
| 438 // The destructor should cancel all in-flight fetchers. | 418 // The destructor should cancel all in-flight fetchers. |
| 439 oauth2_service_.reset(NULL); | 419 oauth2_service_.reset(NULL); |
| 440 | 420 |
| 441 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 421 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 442 EXPECT_EQ(1, consumer_.number_of_errors_); | 422 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 443 } | 423 } |
| 444 | 424 |
| 445 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { | 425 TEST_F(OAuth2TokenServiceTest, RetryingConsumer) { |
| 446 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 426 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 427 "refreshToken"); |
| 447 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get(), | 428 RetryingTestingOAuth2TokenServiceConsumer consumer(oauth2_service_.get(), |
| 448 account_id_); | 429 account_id_); |
| 449 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 430 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 450 account_id_, OAuth2TokenService::ScopeSet(), &consumer)); | 431 account_id_, OAuth2TokenService::ScopeSet(), &consumer)); |
| 451 base::RunLoop().RunUntilIdle(); | 432 base::RunLoop().RunUntilIdle(); |
| 452 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 433 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| 453 EXPECT_EQ(0, consumer.number_of_errors_); | 434 EXPECT_EQ(0, consumer.number_of_errors_); |
| 454 | 435 |
| 455 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 436 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 456 ASSERT_TRUE(fetcher); | 437 ASSERT_TRUE(fetcher); |
| 457 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 438 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 458 fetcher->SetResponseString(std::string()); | 439 fetcher->SetResponseString(std::string()); |
| 459 fetcher->delegate()->OnURLFetchComplete(fetcher); | 440 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 460 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 441 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| 461 EXPECT_EQ(1, consumer.number_of_errors_); | 442 EXPECT_EQ(1, consumer.number_of_errors_); |
| 462 | 443 |
| 463 fetcher = factory_.GetFetcherByID(0); | 444 fetcher = factory_.GetFetcherByID(0); |
| 464 ASSERT_TRUE(fetcher); | 445 ASSERT_TRUE(fetcher); |
| 465 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 446 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 466 fetcher->SetResponseString(std::string()); | 447 fetcher->SetResponseString(std::string()); |
| 467 fetcher->delegate()->OnURLFetchComplete(fetcher); | 448 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 468 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 449 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| 469 EXPECT_EQ(2, consumer.number_of_errors_); | 450 EXPECT_EQ(2, consumer.number_of_errors_); |
| 470 } | 451 } |
| 471 | 452 |
| 472 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { | 453 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
| 473 OAuth2TokenService::ScopeSet scopes; | 454 OAuth2TokenService::ScopeSet scopes; |
| 474 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 455 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 456 "refreshToken"); |
| 475 | 457 |
| 476 // First request. | 458 // First request. |
| 477 scoped_ptr<OAuth2TokenService::Request> request( | 459 scoped_ptr<OAuth2TokenService::Request> request( |
| 478 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); | 460 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
| 479 base::RunLoop().RunUntilIdle(); | 461 base::RunLoop().RunUntilIdle(); |
| 480 | 462 |
| 481 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 463 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 482 EXPECT_EQ(0, consumer_.number_of_errors_); | 464 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 483 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 465 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 484 ASSERT_TRUE(fetcher); | 466 ASSERT_TRUE(fetcher); |
| 485 fetcher->set_response_code(net::HTTP_OK); | 467 fetcher->set_response_code(net::HTTP_OK); |
| 486 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 468 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 487 fetcher->delegate()->OnURLFetchComplete(fetcher); | 469 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 488 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 470 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 489 EXPECT_EQ(0, consumer_.number_of_errors_); | 471 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 490 EXPECT_EQ("token", consumer_.last_token_); | 472 EXPECT_EQ("token", consumer_.last_token_); |
| 491 | 473 |
| 492 // Second request, should return the same token without needing a network | 474 // Second request, should return the same token without needing a network |
| 493 // request. | 475 // request. |
| 494 scoped_ptr<OAuth2TokenService::Request> request2( | 476 scoped_ptr<OAuth2TokenService::Request> request2( |
| 495 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); | 477 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
| 496 base::RunLoop().RunUntilIdle(); | 478 base::RunLoop().RunUntilIdle(); |
| 497 | 479 |
| 498 // No new network fetcher. | 480 // No new network fetcher. |
| 499 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 481 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 500 EXPECT_EQ(0, consumer_.number_of_errors_); | 482 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 501 EXPECT_EQ("token", consumer_.last_token_); | 483 EXPECT_EQ("token", consumer_.last_token_); |
| 502 | 484 |
| 503 // Invalidating the token should return a new token on the next request. | 485 // Invalidating the token should return a new token on the next request. |
| 504 oauth2_service_->InvalidateToken(account_id_, scopes, consumer_.last_token_); | 486 oauth2_service_->InvalidateAccessToken(account_id_, scopes, |
| 487 consumer_.last_token_); |
| 505 scoped_ptr<OAuth2TokenService::Request> request3( | 488 scoped_ptr<OAuth2TokenService::Request> request3( |
| 506 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); | 489 oauth2_service_->StartRequest(account_id_, scopes, &consumer_)); |
| 507 base::RunLoop().RunUntilIdle(); | 490 base::RunLoop().RunUntilIdle(); |
| 508 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 491 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 509 EXPECT_EQ(0, consumer_.number_of_errors_); | 492 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 510 fetcher = factory_.GetFetcherByID(0); | 493 fetcher = factory_.GetFetcherByID(0); |
| 511 ASSERT_TRUE(fetcher); | 494 ASSERT_TRUE(fetcher); |
| 512 fetcher->set_response_code(net::HTTP_OK); | 495 fetcher->set_response_code(net::HTTP_OK); |
| 513 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 496 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| 514 fetcher->delegate()->OnURLFetchComplete(fetcher); | 497 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 515 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 498 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| 516 EXPECT_EQ(0, consumer_.number_of_errors_); | 499 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 517 EXPECT_EQ("token2", consumer_.last_token_); | 500 EXPECT_EQ("token2", consumer_.last_token_); |
| 518 } | 501 } |
| 519 | 502 |
| 520 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { | 503 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { |
| 521 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 504 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 505 "refreshToken"); |
| 522 scoped_ptr<OAuth2TokenService::Request> request( | 506 scoped_ptr<OAuth2TokenService::Request> request( |
| 523 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), | 507 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 524 &consumer_)); | 508 &consumer_)); |
| 525 | 509 |
| 526 oauth2_service_->set_refresh_token("account_id_2", "refreshToken2"); | 510 oauth2_service_->GetDelegate()->UpdateCredentials("account_id_2", |
| 511 "refreshToken2"); |
| 527 scoped_ptr<OAuth2TokenService::Request> request2( | 512 scoped_ptr<OAuth2TokenService::Request> request2( |
| 528 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), | 513 oauth2_service_->StartRequest(account_id_, OAuth2TokenService::ScopeSet(), |
| 529 &consumer_)); | 514 &consumer_)); |
| 530 | 515 |
| 531 base::RunLoop().RunUntilIdle(); | 516 base::RunLoop().RunUntilIdle(); |
| 532 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 517 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 533 EXPECT_EQ(0, consumer_.number_of_errors_); | 518 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 534 | 519 |
| 535 oauth2_service_->CancelAllRequestsForTest(); | 520 oauth2_service_->CancelAllRequestsForTest(); |
| 536 | 521 |
| 537 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 522 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 538 EXPECT_EQ(2, consumer_.number_of_errors_); | 523 EXPECT_EQ(2, consumer_.number_of_errors_); |
| 539 } | 524 } |
| 540 | 525 |
| 541 TEST_F(OAuth2TokenServiceTest, CancelRequestsForAccount) { | 526 TEST_F(OAuth2TokenServiceTest, CancelRequestsForAccount) { |
| 542 OAuth2TokenService::ScopeSet scope_set_1; | 527 OAuth2TokenService::ScopeSet scope_set_1; |
| 543 scope_set_1.insert("scope1"); | 528 scope_set_1.insert("scope1"); |
| 544 scope_set_1.insert("scope2"); | 529 scope_set_1.insert("scope2"); |
| 545 OAuth2TokenService::ScopeSet scope_set_2(scope_set_1.begin(), | 530 OAuth2TokenService::ScopeSet scope_set_2(scope_set_1.begin(), |
| 546 scope_set_1.end()); | 531 scope_set_1.end()); |
| 547 scope_set_2.insert("scope3"); | 532 scope_set_2.insert("scope3"); |
| 548 | 533 |
| 549 oauth2_service_->set_refresh_token(account_id_, "refreshToken"); | 534 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, |
| 535 "refreshToken"); |
| 550 scoped_ptr<OAuth2TokenService::Request> request1( | 536 scoped_ptr<OAuth2TokenService::Request> request1( |
| 551 oauth2_service_->StartRequest(account_id_, scope_set_1, &consumer_)); | 537 oauth2_service_->StartRequest(account_id_, scope_set_1, &consumer_)); |
| 552 scoped_ptr<OAuth2TokenService::Request> request2( | 538 scoped_ptr<OAuth2TokenService::Request> request2( |
| 553 oauth2_service_->StartRequest(account_id_, scope_set_2, &consumer_)); | 539 oauth2_service_->StartRequest(account_id_, scope_set_2, &consumer_)); |
| 554 | 540 |
| 555 std::string account_id_2("account_id_2"); | 541 std::string account_id_2("account_id_2"); |
| 556 oauth2_service_->set_refresh_token(account_id_2, "refreshToken2"); | 542 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_2, |
| 543 "refreshToken2"); |
| 557 scoped_ptr<OAuth2TokenService::Request> request3( | 544 scoped_ptr<OAuth2TokenService::Request> request3( |
| 558 oauth2_service_->StartRequest(account_id_2, scope_set_1, &consumer_)); | 545 oauth2_service_->StartRequest(account_id_2, scope_set_1, &consumer_)); |
| 559 | 546 |
| 560 base::RunLoop().RunUntilIdle(); | 547 base::RunLoop().RunUntilIdle(); |
| 561 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 548 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 562 EXPECT_EQ(0, consumer_.number_of_errors_); | 549 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 563 | 550 |
| 564 oauth2_service_->CancelRequestsForAccountForTest(account_id_); | 551 oauth2_service_->CancelRequestsForAccountForTest(account_id_); |
| 565 | 552 |
| 566 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 553 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 567 EXPECT_EQ(2, consumer_.number_of_errors_); | 554 EXPECT_EQ(2, consumer_.number_of_errors_); |
| 568 | 555 |
| 569 oauth2_service_->CancelRequestsForAccountForTest(account_id_2); | 556 oauth2_service_->CancelRequestsForAccountForTest(account_id_2); |
| 570 | 557 |
| 571 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 558 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 572 EXPECT_EQ(3, consumer_.number_of_errors_); | 559 EXPECT_EQ(3, consumer_.number_of_errors_); |
| 573 } | 560 } |
| 574 | 561 |
| 575 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { | 562 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { |
| 576 std::string client_id_1("client1"); | 563 std::string client_id_1("client1"); |
| 577 std::string client_secret_1("secret1"); | 564 std::string client_secret_1("secret1"); |
| 578 std::string client_id_2("client2"); | 565 std::string client_id_2("client2"); |
| 579 std::string client_secret_2("secret2"); | 566 std::string client_secret_2("secret2"); |
| 580 std::set<std::string> scope_set; | 567 std::set<std::string> scope_set; |
| 581 scope_set.insert("scope1"); | 568 scope_set.insert("scope1"); |
| 582 scope_set.insert("scope2"); | 569 scope_set.insert("scope2"); |
| 583 | 570 |
| 584 std::string refresh_token("refreshToken"); | 571 std::string refresh_token("refreshToken"); |
| 585 oauth2_service_->set_refresh_token(account_id_, refresh_token); | 572 oauth2_service_->GetDelegate()->UpdateCredentials(account_id_, refresh_token); |
| 586 | 573 |
| 587 scoped_ptr<OAuth2TokenService::Request> request1( | 574 scoped_ptr<OAuth2TokenService::Request> request1( |
| 588 oauth2_service_->StartRequestForClient(account_id_, | 575 oauth2_service_->StartRequestForClient(account_id_, |
| 589 client_id_1, | 576 client_id_1, |
| 590 client_secret_1, | 577 client_secret_1, |
| 591 scope_set, | 578 scope_set, |
| 592 &consumer_)); | 579 &consumer_)); |
| 593 scoped_ptr<OAuth2TokenService::Request> request2( | 580 scoped_ptr<OAuth2TokenService::Request> request2( |
| 594 oauth2_service_->StartRequestForClient(account_id_, | 581 oauth2_service_->StartRequestForClient(account_id_, |
| 595 client_id_2, | 582 client_id_2, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 } else if (i < j) { | 628 } else if (i < j) { |
| 642 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j; | 629 EXPECT_TRUE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
| 643 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; | 630 EXPECT_FALSE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
| 644 } else { | 631 } else { |
| 645 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j; | 632 EXPECT_TRUE(params[j] < params[i]) << " i=" << i << ", j=" << j; |
| 646 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; | 633 EXPECT_FALSE(params[i] < params[j]) << " i=" << i << ", j=" << j; |
| 647 } | 634 } |
| 648 } | 635 } |
| 649 } | 636 } |
| 650 } | 637 } |
| 638 |
| 639 TEST_F(OAuth2TokenServiceTest, UpdateClearsCache) { |
| 640 std::string kEmail = "test@gmail.com"; |
| 641 std::set<std::string> scope_list; |
| 642 scope_list.insert("scope"); |
| 643 oauth2_service_->GetDelegate()->UpdateCredentials(kEmail, "refreshToken"); |
| 644 scoped_ptr<OAuth2TokenService::Request> request( |
| 645 oauth2_service_->StartRequest(kEmail, scope_list, &consumer_)); |
| 646 base::RunLoop().RunUntilIdle(); |
| 647 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 648 ASSERT_TRUE(fetcher); |
| 649 fetcher->set_response_code(net::HTTP_OK); |
| 650 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 651 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 652 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 653 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 654 EXPECT_EQ("token", consumer_.last_token_); |
| 655 EXPECT_EQ(1, (int)oauth2_service_->token_cache_.size()); |
| 656 |
| 657 // Signs out and signs in |
| 658 oauth2_service_->RevokeAllCredentials(); |
| 659 |
| 660 EXPECT_EQ(0, (int)oauth2_service_->token_cache_.size()); |
| 661 oauth2_service_->GetDelegate()->UpdateCredentials(kEmail, "refreshToken"); |
| 662 request = oauth2_service_->StartRequest(kEmail, scope_list, &consumer_); |
| 663 base::RunLoop().RunUntilIdle(); |
| 664 fetcher = factory_.GetFetcherByID(0); |
| 665 // ASSERT_TRUE(fetcher); |
| 666 fetcher->set_response_code(net::HTTP_OK); |
| 667 fetcher->SetResponseString(GetValidTokenResponse("another token", 3600)); |
| 668 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 669 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 670 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 671 EXPECT_EQ("another token", consumer_.last_token_); |
| 672 EXPECT_EQ(1, (int)oauth2_service_->token_cache_.size()); |
| 673 } |
| OLD | NEW |