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