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