| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "chrome/browser/chrome_notification_types.h" | 9 #include "chrome/browser/chrome_notification_types.h" |
| 10 #include "chrome/browser/signin/oauth2_token_service.h" | 10 #include "chrome/browser/signin/oauth2_token_service.h" |
| 11 #include "chrome/browser/signin/oauth2_token_service_test_util.h" | 11 #include "chrome/browser/signin/oauth2_token_service_test_util.h" |
| 12 #include "chrome/browser/signin/token_service_factory.h" | 12 #include "chrome/browser/signin/token_service_factory.h" |
| 13 #include "chrome/browser/signin/token_service_unittest.h" | 13 #include "chrome/browser/signin/token_service_unittest.h" |
| 14 #include "chrome/test/base/testing_browser_process.h" | 14 #include "chrome/test/base/testing_browser_process.h" |
| 15 #include "content/public/browser/browser_thread.h" | 15 #include "content/public/browser/browser_thread.h" |
| 16 #include "google_apis/gaia/gaia_constants.h" | 16 #include "google_apis/gaia/gaia_constants.h" |
| 17 #include "google_apis/gaia/google_service_auth_error.h" | 17 #include "google_apis/gaia/google_service_auth_error.h" |
| 18 #include "google_apis/gaia/oauth2_access_token_consumer.h" | 18 #include "google_apis/gaia/oauth2_access_token_consumer.h" |
| 19 #include "google_apis/gaia/oauth2_access_token_fetcher.h" |
| 19 #include "net/http/http_status_code.h" | 20 #include "net/http/http_status_code.h" |
| 20 #include "net/url_request/test_url_fetcher_factory.h" | 21 #include "net/url_request/test_url_fetcher_factory.h" |
| 21 #include "net/url_request/url_request_status.h" | 22 #include "net/url_request/url_request_status.h" |
| 22 #include "net/url_request/url_request_test_util.h" | 23 #include "net/url_request/url_request_test_util.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 25 |
| 25 using content::BrowserThread; | 26 using content::BrowserThread; |
| 26 | 27 |
| 27 // A testing consumer that retries on error. | 28 // A testing consumer that retries on error. |
| 28 class RetryingTestingOAuth2TokenServiceConsumer | 29 class RetryingTestingOAuth2TokenServiceConsumer |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 class OAuth2TokenServiceTest : public TokenServiceTestHarness { | 78 class OAuth2TokenServiceTest : public TokenServiceTestHarness { |
| 78 public: | 79 public: |
| 79 virtual void SetUp() OVERRIDE { | 80 virtual void SetUp() OVERRIDE { |
| 80 TokenServiceTestHarness::SetUp(); | 81 TokenServiceTestHarness::SetUp(); |
| 81 oauth2_service_.reset( | 82 oauth2_service_.reset( |
| 82 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( | 83 new TestOAuth2TokenService(new net::TestURLRequestContextGetter( |
| 83 BrowserThread::GetMessageLoopProxyForThread( | 84 BrowserThread::GetMessageLoopProxyForThread( |
| 84 BrowserThread::IO)))); | 85 BrowserThread::IO)))); |
| 85 } | 86 } |
| 86 | 87 |
| 88 virtual void TearDown() OVERRIDE { |
| 89 OAuth2AccessTokenFetcher::ResetLastFetcherIdForTest(); |
| 90 } |
| 91 |
| 87 protected: | 92 protected: |
| 88 net::TestURLFetcherFactory factory_; | 93 net::TestURLFetcherFactory factory_; |
| 89 scoped_ptr<TestOAuth2TokenService> oauth2_service_; | 94 scoped_ptr<TestOAuth2TokenService> oauth2_service_; |
| 90 TestingOAuth2TokenServiceConsumer consumer_; | 95 TestingOAuth2TokenServiceConsumer consumer_; |
| 91 }; | 96 }; |
| 92 | 97 |
| 93 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { | 98 TEST_F(OAuth2TokenServiceTest, NoOAuth2RefreshToken) { |
| 94 scoped_ptr<OAuth2TokenService::Request> request( | 99 scoped_ptr<OAuth2TokenService::Request> request( |
| 95 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 100 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
| 96 base::RunLoop().RunUntilIdle(); | 101 base::RunLoop().RunUntilIdle(); |
| 97 | 102 |
| 98 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 103 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 99 EXPECT_EQ(1, consumer_.number_of_errors_); | 104 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 100 } | 105 } |
| 101 | 106 |
| 102 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { | 107 TEST_F(OAuth2TokenServiceTest, FailureShouldNotRetry) { |
| 103 oauth2_service_->set_refresh_token("refreshToken"); | 108 oauth2_service_->set_refresh_token("refreshToken"); |
| 104 scoped_ptr<OAuth2TokenService::Request> request( | 109 scoped_ptr<OAuth2TokenService::Request> request( |
| 105 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 110 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
| 106 base::RunLoop().RunUntilIdle(); | 111 base::RunLoop().RunUntilIdle(); |
| 107 | 112 |
| 108 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 113 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 109 EXPECT_EQ(0, consumer_.number_of_errors_); | 114 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 110 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 115 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 111 EXPECT_TRUE(fetcher); | 116 ASSERT_TRUE(fetcher); |
| 112 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 117 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 113 fetcher->SetResponseString(std::string()); | 118 fetcher->SetResponseString(std::string()); |
| 114 fetcher->delegate()->OnURLFetchComplete(fetcher); | 119 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 115 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 120 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 116 EXPECT_EQ(1, consumer_.number_of_errors_); | 121 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 117 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 122 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); |
| 118 } | 123 } |
| 119 | 124 |
| 120 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { | 125 TEST_F(OAuth2TokenServiceTest, SuccessWithoutCaching) { |
| 121 oauth2_service_->set_refresh_token("refreshToken"); | 126 oauth2_service_->set_refresh_token("refreshToken"); |
| 122 scoped_ptr<OAuth2TokenService::Request> request( | 127 scoped_ptr<OAuth2TokenService::Request> request( |
| 123 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 128 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
| 124 base::RunLoop().RunUntilIdle(); | 129 base::RunLoop().RunUntilIdle(); |
| 125 | 130 |
| 126 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 131 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 127 EXPECT_EQ(0, consumer_.number_of_errors_); | 132 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 128 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 133 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 129 EXPECT_TRUE(fetcher); | 134 ASSERT_TRUE(fetcher); |
| 130 fetcher->set_response_code(net::HTTP_OK); | 135 fetcher->set_response_code(net::HTTP_OK); |
| 131 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 136 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 132 fetcher->delegate()->OnURLFetchComplete(fetcher); | 137 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 133 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 138 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 134 EXPECT_EQ(0, consumer_.number_of_errors_); | 139 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 135 EXPECT_EQ("token", consumer_.last_token_); | 140 EXPECT_EQ("token", consumer_.last_token_); |
| 136 } | 141 } |
| 137 | 142 |
| 138 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { | 143 TEST_F(OAuth2TokenServiceTest, SuccessWithCaching) { |
| 139 std::set<std::string> scopes1; | 144 std::set<std::string> scopes1; |
| 140 scopes1.insert("s1"); | 145 scopes1.insert("s1"); |
| 141 scopes1.insert("s2"); | 146 scopes1.insert("s2"); |
| 142 std::set<std::string> scopes1_same; | 147 std::set<std::string> scopes1_same; |
| 143 scopes1_same.insert("s2"); | 148 scopes1_same.insert("s2"); |
| 144 scopes1_same.insert("s1"); | 149 scopes1_same.insert("s1"); |
| 145 std::set<std::string> scopes2; | 150 std::set<std::string> scopes2; |
| 146 scopes2.insert("s3"); | 151 scopes2.insert("s3"); |
| 147 | 152 |
| 148 oauth2_service_->set_refresh_token("refreshToken"); | 153 oauth2_service_->set_refresh_token("refreshToken"); |
| 149 | 154 |
| 150 // First request. | 155 // First request. |
| 151 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 156 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 152 scopes1, &consumer_)); | 157 scopes1, &consumer_)); |
| 153 base::RunLoop().RunUntilIdle(); | 158 base::RunLoop().RunUntilIdle(); |
| 154 | 159 |
| 155 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 160 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 156 EXPECT_EQ(0, consumer_.number_of_errors_); | 161 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 157 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 162 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 158 EXPECT_TRUE(fetcher); | 163 ASSERT_TRUE(fetcher); |
| 159 fetcher->set_response_code(net::HTTP_OK); | 164 fetcher->set_response_code(net::HTTP_OK); |
| 160 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 165 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 161 fetcher->delegate()->OnURLFetchComplete(fetcher); | 166 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 162 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 167 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 163 EXPECT_EQ(0, consumer_.number_of_errors_); | 168 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 164 EXPECT_EQ("token", consumer_.last_token_); | 169 EXPECT_EQ("token", consumer_.last_token_); |
| 165 | 170 |
| 166 // Second request to the same set of scopes, should return the same token | 171 // Second request to the same set of scopes, should return the same token |
| 167 // without needing a network request. | 172 // without needing a network request. |
| 168 scoped_ptr<OAuth2TokenService::Request> request2( | 173 scoped_ptr<OAuth2TokenService::Request> request2( |
| 169 oauth2_service_->StartRequest(scopes1_same, &consumer_)); | 174 oauth2_service_->StartRequest(scopes1_same, &consumer_)); |
| 170 base::RunLoop().RunUntilIdle(); | 175 base::RunLoop().RunUntilIdle(); |
| 171 | 176 |
| 172 // No new network fetcher. | 177 // No new network fetcher. |
| 173 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 178 EXPECT_FALSE(factory_.GetFetcherByID(1)); |
| 174 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 179 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 175 EXPECT_EQ(0, consumer_.number_of_errors_); | 180 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 176 EXPECT_EQ("token", consumer_.last_token_); | 181 EXPECT_EQ("token", consumer_.last_token_); |
| 177 | 182 |
| 178 // Third request to a new set of scopes, should return another token. | 183 // Third request to a new set of scopes, should return another token. |
| 179 scoped_ptr<OAuth2TokenService::Request> request3( | 184 scoped_ptr<OAuth2TokenService::Request> request3( |
| 180 oauth2_service_->StartRequest(scopes2, &consumer_)); | 185 oauth2_service_->StartRequest(scopes2, &consumer_)); |
| 181 base::RunLoop().RunUntilIdle(); | 186 base::RunLoop().RunUntilIdle(); |
| 182 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 187 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 183 EXPECT_EQ(0, consumer_.number_of_errors_); | 188 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 184 fetcher = factory_.GetFetcherByID(0); | 189 fetcher = factory_.GetFetcherByID(1); |
| 185 EXPECT_TRUE(fetcher); | 190 ASSERT_TRUE(fetcher); |
| 186 fetcher->set_response_code(net::HTTP_OK); | 191 fetcher->set_response_code(net::HTTP_OK); |
| 187 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 192 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| 188 fetcher->delegate()->OnURLFetchComplete(fetcher); | 193 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 189 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 194 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| 190 EXPECT_EQ(0, consumer_.number_of_errors_); | 195 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 191 EXPECT_EQ("token2", consumer_.last_token_); | 196 EXPECT_EQ("token2", consumer_.last_token_); |
| 192 } | 197 } |
| 193 | 198 |
| 194 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { | 199 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndFailure) { |
| 195 oauth2_service_->set_refresh_token("refreshToken"); | 200 oauth2_service_->set_refresh_token("refreshToken"); |
| 196 | 201 |
| 197 // First request. | 202 // First request. |
| 198 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 203 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 199 std::set<std::string>(), &consumer_)); | 204 std::set<std::string>(), &consumer_)); |
| 200 base::RunLoop().RunUntilIdle(); | 205 base::RunLoop().RunUntilIdle(); |
| 201 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 206 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 202 EXPECT_EQ(0, consumer_.number_of_errors_); | 207 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 203 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 208 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 204 EXPECT_TRUE(fetcher); | 209 ASSERT_TRUE(fetcher); |
| 205 fetcher->set_response_code(net::HTTP_OK); | 210 fetcher->set_response_code(net::HTTP_OK); |
| 206 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 211 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
| 207 fetcher->delegate()->OnURLFetchComplete(fetcher); | 212 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 208 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 213 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 209 EXPECT_EQ(0, consumer_.number_of_errors_); | 214 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 210 EXPECT_EQ("token", consumer_.last_token_); | 215 EXPECT_EQ("token", consumer_.last_token_); |
| 211 | 216 |
| 212 // Second request must try to access the network as the token has expired. | 217 // Second request must try to access the network as the token has expired. |
| 213 scoped_ptr<OAuth2TokenService::Request> request2( | 218 scoped_ptr<OAuth2TokenService::Request> request2( |
| 214 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 219 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
| 215 base::RunLoop().RunUntilIdle(); | 220 base::RunLoop().RunUntilIdle(); |
| 216 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 221 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 217 EXPECT_EQ(0, consumer_.number_of_errors_); | 222 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 218 | 223 |
| 219 // Network failure. | 224 // Network failure. |
| 220 fetcher = factory_.GetFetcherByID(0); | 225 fetcher = factory_.GetFetcherByID(1); |
| 221 EXPECT_TRUE(fetcher); | 226 ASSERT_TRUE(fetcher); |
| 222 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 227 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 223 fetcher->SetResponseString(std::string()); | 228 fetcher->SetResponseString(std::string()); |
| 224 fetcher->delegate()->OnURLFetchComplete(fetcher); | 229 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 225 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 230 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 226 EXPECT_EQ(1, consumer_.number_of_errors_); | 231 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 227 } | 232 } |
| 228 | 233 |
| 229 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { | 234 TEST_F(OAuth2TokenServiceTest, SuccessAndExpirationAndSuccess) { |
| 230 oauth2_service_->set_refresh_token("refreshToken"); | 235 oauth2_service_->set_refresh_token("refreshToken"); |
| 231 | 236 |
| 232 // First request. | 237 // First request. |
| 233 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 238 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 234 std::set<std::string>(), &consumer_)); | 239 std::set<std::string>(), &consumer_)); |
| 235 base::RunLoop().RunUntilIdle(); | 240 base::RunLoop().RunUntilIdle(); |
| 236 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 241 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 237 EXPECT_EQ(0, consumer_.number_of_errors_); | 242 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 238 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 243 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 239 EXPECT_TRUE(fetcher); | 244 ASSERT_TRUE(fetcher); |
| 240 fetcher->set_response_code(net::HTTP_OK); | 245 fetcher->set_response_code(net::HTTP_OK); |
| 241 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); | 246 fetcher->SetResponseString(GetValidTokenResponse("token", 0)); |
| 242 fetcher->delegate()->OnURLFetchComplete(fetcher); | 247 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 243 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 248 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 244 EXPECT_EQ(0, consumer_.number_of_errors_); | 249 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 245 EXPECT_EQ("token", consumer_.last_token_); | 250 EXPECT_EQ("token", consumer_.last_token_); |
| 246 | 251 |
| 247 // Second request must try to access the network as the token has expired. | 252 // Second request must try to access the network as the token has expired. |
| 248 scoped_ptr<OAuth2TokenService::Request> request2( | 253 scoped_ptr<OAuth2TokenService::Request> request2( |
| 249 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); | 254 oauth2_service_->StartRequest(std::set<std::string>(), &consumer_)); |
| 250 base::RunLoop().RunUntilIdle(); | 255 base::RunLoop().RunUntilIdle(); |
| 251 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 256 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 252 EXPECT_EQ(0, consumer_.number_of_errors_); | 257 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 253 | 258 |
| 254 fetcher = factory_.GetFetcherByID(0); | 259 fetcher = factory_.GetFetcherByID(1); |
| 255 EXPECT_TRUE(fetcher); | 260 ASSERT_TRUE(fetcher); |
| 256 fetcher->set_response_code(net::HTTP_OK); | 261 fetcher->set_response_code(net::HTTP_OK); |
| 257 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); | 262 fetcher->SetResponseString(GetValidTokenResponse("another token", 0)); |
| 258 fetcher->delegate()->OnURLFetchComplete(fetcher); | 263 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 259 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 264 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 260 EXPECT_EQ(0, consumer_.number_of_errors_); | 265 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 261 EXPECT_EQ("another token", consumer_.last_token_); | 266 EXPECT_EQ("another token", consumer_.last_token_); |
| 262 } | 267 } |
| 263 | 268 |
| 264 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { | 269 TEST_F(OAuth2TokenServiceTest, RequestDeletedBeforeCompletion) { |
| 265 oauth2_service_->set_refresh_token("refreshToken"); | 270 oauth2_service_->set_refresh_token("refreshToken"); |
| 266 | 271 |
| 267 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 272 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 268 std::set<std::string>(), &consumer_)); | 273 std::set<std::string>(), &consumer_)); |
| 269 base::RunLoop().RunUntilIdle(); | 274 base::RunLoop().RunUntilIdle(); |
| 270 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 275 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 271 EXPECT_EQ(0, consumer_.number_of_errors_); | 276 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 272 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 277 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 273 EXPECT_TRUE(fetcher); | 278 ASSERT_TRUE(fetcher); |
| 274 | 279 |
| 275 request.reset(); | 280 request.reset(); |
| 276 | 281 |
| 277 fetcher->set_response_code(net::HTTP_OK); | 282 fetcher->set_response_code(net::HTTP_OK); |
| 278 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 283 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 279 fetcher->delegate()->OnURLFetchComplete(fetcher); | 284 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 280 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 285 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 281 EXPECT_EQ(0, consumer_.number_of_errors_); | 286 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 282 } | 287 } |
| 283 | 288 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 338 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 334 fetcher->delegate()->OnURLFetchComplete(fetcher); | 339 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 335 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 340 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 336 EXPECT_EQ(0, consumer_.number_of_errors_); | 341 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 337 EXPECT_EQ("token", consumer_.last_token_); | 342 EXPECT_EQ("token", consumer_.last_token_); |
| 338 | 343 |
| 339 // The refresh token is no longer available; subsequent requests fail. | 344 // The refresh token is no longer available; subsequent requests fail. |
| 340 oauth2_service_->set_refresh_token(""); | 345 oauth2_service_->set_refresh_token(""); |
| 341 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); | 346 request = oauth2_service_->StartRequest(std::set<std::string>(), &consumer_); |
| 342 base::RunLoop().RunUntilIdle(); | 347 base::RunLoop().RunUntilIdle(); |
| 343 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 348 EXPECT_FALSE(factory_.GetFetcherByID(1)); |
| 344 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 349 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 345 EXPECT_EQ(1, consumer_.number_of_errors_); | 350 EXPECT_EQ(1, consumer_.number_of_errors_); |
| 346 } | 351 } |
| 347 | 352 |
| 348 TEST_F(OAuth2TokenServiceTest, | 353 TEST_F(OAuth2TokenServiceTest, |
| 349 ChangedRefreshTokenDoesNotAffectInFlightRequests) { | 354 ChangedRefreshTokenDoesNotAffectInFlightRequests) { |
| 350 oauth2_service_->set_refresh_token("first refreshToken"); | 355 oauth2_service_->set_refresh_token("first refreshToken"); |
| 351 std::set<std::string> scopes; | 356 std::set<std::string> scopes; |
| 352 scopes.insert("s1"); | 357 scopes.insert("s1"); |
| 353 scopes.insert("s2"); | 358 scopes.insert("s2"); |
| 354 | 359 |
| 355 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 360 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 356 scopes, &consumer_)); | 361 scopes, &consumer_)); |
| 357 base::RunLoop().RunUntilIdle(); | 362 base::RunLoop().RunUntilIdle(); |
| 358 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); | 363 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
| 359 | 364 |
| 360 // Note |request| is still pending when the refresh token changes. | 365 // Note |request| is still pending when the refresh token changes. |
| 361 oauth2_service_->set_refresh_token("second refreshToken"); | 366 oauth2_service_->set_refresh_token("second refreshToken"); |
| 362 | 367 |
| 363 // A 2nd request (using the new refresh token) that occurs and completes | 368 // A 2nd request (using the new refresh token) that occurs and completes |
| 364 // while the 1st request is in flight is successful. | 369 // while the 1st request is in flight is successful. |
| 365 TestingOAuth2TokenServiceConsumer consumer2; | 370 TestingOAuth2TokenServiceConsumer consumer2; |
| 366 scoped_ptr<OAuth2TokenService::Request> request2( | 371 scoped_ptr<OAuth2TokenService::Request> request2( |
| 367 oauth2_service_->StartRequest(scopes, &consumer2)); | 372 oauth2_service_->StartRequest(scopes, &consumer2)); |
| 368 base::RunLoop().RunUntilIdle(); | 373 base::RunLoop().RunUntilIdle(); |
| 369 | 374 |
| 370 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(0); | 375 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1); |
| 371 fetcher2->set_response_code(net::HTTP_OK); | 376 fetcher2->set_response_code(net::HTTP_OK); |
| 372 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); | 377 fetcher2->SetResponseString(GetValidTokenResponse("second token", 3600)); |
| 373 fetcher2->delegate()->OnURLFetchComplete(fetcher2); | 378 fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
| 374 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); | 379 EXPECT_EQ(1, consumer2.number_of_successful_tokens_); |
| 375 EXPECT_EQ(0, consumer2.number_of_errors_); | 380 EXPECT_EQ(0, consumer2.number_of_errors_); |
| 376 EXPECT_EQ("second token", consumer2.last_token_); | 381 EXPECT_EQ("second token", consumer2.last_token_); |
| 377 | 382 |
| 378 fetcher1->set_response_code(net::HTTP_OK); | 383 fetcher1->set_response_code(net::HTTP_OK); |
| 379 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); | 384 fetcher1->SetResponseString(GetValidTokenResponse("first token", 3600)); |
| 380 fetcher1->delegate()->OnURLFetchComplete(fetcher1); | 385 fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 408 EXPECT_EQ(0, consumer.number_of_errors_); | 413 EXPECT_EQ(0, consumer.number_of_errors_); |
| 409 | 414 |
| 410 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 415 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 411 ASSERT_TRUE(fetcher); | 416 ASSERT_TRUE(fetcher); |
| 412 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 417 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 413 fetcher->SetResponseString(std::string()); | 418 fetcher->SetResponseString(std::string()); |
| 414 fetcher->delegate()->OnURLFetchComplete(fetcher); | 419 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 415 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 420 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| 416 EXPECT_EQ(1, consumer.number_of_errors_); | 421 EXPECT_EQ(1, consumer.number_of_errors_); |
| 417 | 422 |
| 418 fetcher = factory_.GetFetcherByID(0); | 423 fetcher = factory_.GetFetcherByID(1); |
| 419 ASSERT_TRUE(fetcher); | 424 ASSERT_TRUE(fetcher); |
| 420 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); | 425 fetcher->set_response_code(net::HTTP_UNAUTHORIZED); |
| 421 fetcher->SetResponseString(std::string()); | 426 fetcher->SetResponseString(std::string()); |
| 422 fetcher->delegate()->OnURLFetchComplete(fetcher); | 427 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 423 EXPECT_EQ(0, consumer.number_of_successful_tokens_); | 428 EXPECT_EQ(0, consumer.number_of_successful_tokens_); |
| 424 EXPECT_EQ(2, consumer.number_of_errors_); | 429 EXPECT_EQ(2, consumer.number_of_errors_); |
| 425 } | 430 } |
| 426 | 431 |
| 427 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { | 432 TEST_F(OAuth2TokenServiceTest, InvalidateToken) { |
| 428 std::set<std::string> scopes; | 433 std::set<std::string> scopes; |
| 429 oauth2_service_->set_refresh_token("refreshToken"); | 434 oauth2_service_->set_refresh_token("refreshToken"); |
| 430 | 435 |
| 431 // First request. | 436 // First request. |
| 432 scoped_ptr<OAuth2TokenService::Request> request( | 437 scoped_ptr<OAuth2TokenService::Request> request( |
| 433 oauth2_service_->StartRequest(scopes, &consumer_)); | 438 oauth2_service_->StartRequest(scopes, &consumer_)); |
| 434 base::RunLoop().RunUntilIdle(); | 439 base::RunLoop().RunUntilIdle(); |
| 435 | 440 |
| 436 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 441 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 437 EXPECT_EQ(0, consumer_.number_of_errors_); | 442 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 438 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 443 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 439 EXPECT_TRUE(fetcher); | 444 ASSERT_TRUE(fetcher); |
| 440 fetcher->set_response_code(net::HTTP_OK); | 445 fetcher->set_response_code(net::HTTP_OK); |
| 441 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 446 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 442 fetcher->delegate()->OnURLFetchComplete(fetcher); | 447 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 443 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 448 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 444 EXPECT_EQ(0, consumer_.number_of_errors_); | 449 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 445 EXPECT_EQ("token", consumer_.last_token_); | 450 EXPECT_EQ("token", consumer_.last_token_); |
| 446 | 451 |
| 447 // Second request, should return the same token without needing a network | 452 // Second request, should return the same token without needing a network |
| 448 // request. | 453 // request. |
| 449 scoped_ptr<OAuth2TokenService::Request> request2( | 454 scoped_ptr<OAuth2TokenService::Request> request2( |
| 450 oauth2_service_->StartRequest(scopes, &consumer_)); | 455 oauth2_service_->StartRequest(scopes, &consumer_)); |
| 451 base::RunLoop().RunUntilIdle(); | 456 base::RunLoop().RunUntilIdle(); |
| 452 | 457 |
| 453 // No new network fetcher. | 458 // No new network fetcher. |
| 454 EXPECT_EQ(fetcher, factory_.GetFetcherByID(0)); | 459 EXPECT_FALSE(factory_.GetFetcherByID(1)); |
| 455 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 460 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 456 EXPECT_EQ(0, consumer_.number_of_errors_); | 461 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 457 EXPECT_EQ("token", consumer_.last_token_); | 462 EXPECT_EQ("token", consumer_.last_token_); |
| 458 | 463 |
| 459 // Invalidating the token should return a new token on the next request. | 464 // Invalidating the token should return a new token on the next request. |
| 460 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); | 465 oauth2_service_->InvalidateToken(scopes, consumer_.last_token_); |
| 461 scoped_ptr<OAuth2TokenService::Request> request3( | 466 scoped_ptr<OAuth2TokenService::Request> request3( |
| 462 oauth2_service_->StartRequest(scopes, &consumer_)); | 467 oauth2_service_->StartRequest(scopes, &consumer_)); |
| 463 base::RunLoop().RunUntilIdle(); | 468 base::RunLoop().RunUntilIdle(); |
| 464 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 469 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 465 EXPECT_EQ(0, consumer_.number_of_errors_); | 470 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 466 fetcher = factory_.GetFetcherByID(0); | 471 fetcher = factory_.GetFetcherByID(1); |
| 467 EXPECT_TRUE(fetcher); | 472 ASSERT_TRUE(fetcher); |
| 468 fetcher->set_response_code(net::HTTP_OK); | 473 fetcher->set_response_code(net::HTTP_OK); |
| 469 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); | 474 fetcher->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| 470 fetcher->delegate()->OnURLFetchComplete(fetcher); | 475 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 471 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); | 476 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| 472 EXPECT_EQ(0, consumer_.number_of_errors_); | 477 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 473 EXPECT_EQ("token2", consumer_.last_token_); | 478 EXPECT_EQ("token2", consumer_.last_token_); |
| 474 } | 479 } |
| 475 | 480 |
| 476 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { | 481 TEST_F(OAuth2TokenServiceTest, CancelAllRequests) { |
| 477 oauth2_service_->set_refresh_token("refreshToken"); | 482 oauth2_service_->set_refresh_token("refreshToken"); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); | 521 oauth2_service_->CancelRequestsForTokenForTest("refreshToken"); |
| 517 | 522 |
| 518 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 523 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 519 EXPECT_EQ(2, consumer_.number_of_errors_); | 524 EXPECT_EQ(2, consumer_.number_of_errors_); |
| 520 | 525 |
| 521 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); | 526 oauth2_service_->CancelRequestsForTokenForTest("refreshToken2"); |
| 522 | 527 |
| 523 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); | 528 EXPECT_EQ(0, consumer_.number_of_successful_tokens_); |
| 524 EXPECT_EQ(3, consumer_.number_of_errors_); | 529 EXPECT_EQ(3, consumer_.number_of_errors_); |
| 525 } | 530 } |
| 531 |
| 532 #if defined(OS_CHROMEOS) |
| 533 TEST_F(OAuth2TokenServiceTest, SameScopesRequestedForDifferentClients) { |
| 534 std::string client_id_1("client1"); |
| 535 std::string client_secret_1("secret1"); |
| 536 std::string client_id_2("client2"); |
| 537 std::string client_secret_2("secret2"); |
| 538 std::set<std::string> scope_set; |
| 539 scope_set.insert("scope1"); |
| 540 scope_set.insert("scope2"); |
| 541 |
| 542 oauth2_service_->set_refresh_token("refreshToken"); |
| 543 |
| 544 scoped_ptr<OAuth2TokenService::Request> request1( |
| 545 oauth2_service_->StartRequestForClient(std::string(), |
| 546 client_id_1, |
| 547 client_secret_1, |
| 548 scope_set, |
| 549 &consumer_)); |
| 550 scoped_ptr<OAuth2TokenService::Request> request2( |
| 551 oauth2_service_->StartRequestForClient(std::string(), |
| 552 client_id_2, |
| 553 client_secret_2, |
| 554 scope_set, |
| 555 &consumer_)); |
| 556 // Start a request that should be duplicate of |request1|. |
| 557 scoped_ptr<OAuth2TokenService::Request> request3( |
| 558 oauth2_service_->StartRequestForClient(std::string(), |
| 559 client_id_1, |
| 560 client_secret_1, |
| 561 scope_set, |
| 562 &consumer_)); |
| 563 base::RunLoop().RunUntilIdle(); |
| 564 |
| 565 // Check to make sure we have started exactly two fetchers. |
| 566 net::TestURLFetcher* fetcher1 = factory_.GetFetcherByID(0); |
| 567 ASSERT_TRUE(fetcher1); |
| 568 net::TestURLFetcher* fetcher2 = factory_.GetFetcherByID(1); |
| 569 ASSERT_TRUE(fetcher2); |
| 570 EXPECT_FALSE(factory_.GetFetcherByID(2)); |
| 571 |
| 572 fetcher1->set_response_code(net::HTTP_OK); |
| 573 fetcher1->SetResponseString(GetValidTokenResponse("token1", 3600)); |
| 574 fetcher1->delegate()->OnURLFetchComplete(fetcher1); |
| 575 |
| 576 fetcher2->set_response_code(net::HTTP_OK); |
| 577 fetcher2->SetResponseString(GetValidTokenResponse("token2", 3600)); |
| 578 fetcher2->delegate()->OnURLFetchComplete(fetcher2); |
| 579 |
| 580 EXPECT_EQ(3, consumer_.number_of_successful_tokens_); |
| 581 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 582 } |
| 583 #endif |
| OLD | NEW |