Index: chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc |
diff --git a/chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc b/chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc |
deleted file mode 100644 |
index 9211a50d32abc7efbcc07a135210ea3335041f27..0000000000000000000000000000000000000000 |
--- a/chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc |
+++ /dev/null |
@@ -1,353 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/bind.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/stringprintf.h" |
-#include "chrome/browser/managed_mode/managed_user_refresh_token_fetcher.h" |
-#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
-#include "chrome/test/base/testing_profile.h" |
-#include "content/public/test/test_browser_thread_bundle.h" |
-#include "google_apis/gaia/gaia_constants.h" |
-#include "google_apis/gaia/gaia_oauth_client.h" |
-#include "google_apis/gaia/gaia_urls.h" |
-#include "google_apis/gaia/google_service_auth_error.h" |
-#include "google_apis/gaia/oauth2_token_service.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/url_util.h" |
-#include "net/http/http_request_headers.h" |
-#include "net/http/http_status_code.h" |
-#include "net/url_request/test_url_fetcher_factory.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace { |
- |
-const char kAccountId[] = "account_id"; |
-const char kDeviceName[] = "Compy"; |
-const char kManagedUserId[] = "abcdef"; |
- |
-const char kAccessToken[] = "accesstoken"; |
-const char kAuthorizationCode[] = "authorizationcode"; |
-const char kManagedUserToken[] = "managedusertoken"; |
-const char kOAuth2RefreshToken[] = "refreshtoken"; |
- |
-const char kIssueTokenResponseFormat[] = |
- "{" |
- " \"code\": \"%s\"" |
- "}"; |
- |
-const char kGetRefreshTokenResponseFormat[] = |
- "{" |
- " \"access_token\": \"<ignored>\"," |
- " \"expires_in\": 12345," |
- " \"refresh_token\": \"%s\"" |
- "}"; |
- |
-// Utility methods -------------------------------------------------- |
- |
-// Slightly hacky way to extract a value from a URL-encoded POST request body. |
-bool GetValueForKey(const std::string& encoded_string, |
- const std::string& key, |
- std::string* value) { |
- GURL url("http://example.com/?" + encoded_string); |
- return net::GetValueForKeyInQuery(url, key, value); |
-} |
- |
-void SendResponse(net::TestURLFetcher* url_fetcher, |
- const std::string& response) { |
- url_fetcher->set_status( |
- net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0)); |
- url_fetcher->set_response_code(net::HTTP_OK); |
- url_fetcher->SetResponseString(response); |
- url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
-} |
- |
-void SetNetworkError(net::TestURLFetcher* url_fetcher, int error) { |
- url_fetcher->set_status( |
- net::URLRequestStatus(net::URLRequestStatus::FAILED, error)); |
- url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
-} |
- |
-void SetHttpError(net::TestURLFetcher* url_fetcher, int error) { |
- url_fetcher->set_status(net::URLRequestStatus()); |
- url_fetcher->set_response_code(error); |
- url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); |
-} |
- |
-void VerifyTokenRequest( |
- std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests) { |
- ASSERT_EQ(1u, requests.size()); |
- EXPECT_EQ(1u, requests[0].scopes.size()); |
- EXPECT_EQ(1u, requests[0].scopes.count(GaiaConstants::kOAuth1LoginScope)); |
-} |
- |
-} // namespace |
- |
-class ManagedUserRefreshTokenFetcherTest : public testing::Test { |
- public: |
- ManagedUserRefreshTokenFetcherTest(); |
- virtual ~ManagedUserRefreshTokenFetcherTest() {} |
- |
- protected: |
- void StartFetching(); |
- |
- net::TestURLFetcher* GetIssueTokenRequest(); |
- net::TestURLFetcher* GetRefreshTokenRequest(); |
- |
- void MakeOAuth2TokenServiceRequestSucceed(); |
- void MakeOAuth2TokenServiceRequestFail(GoogleServiceAuthError::State error); |
- void MakeIssueTokenRequestSucceed(); |
- void MakeRefreshTokenFetchSucceed(); |
- |
- void Reset(); |
- |
- const GoogleServiceAuthError& error() const { return error_; } |
- const std::string& token() const { return token_; } |
- |
- private: |
- void OnTokenFetched(const GoogleServiceAuthError& error, |
- const std::string& token); |
- |
- content::TestBrowserThreadBundle thread_bundle_; |
- TestingProfile profile_; |
- FakeProfileOAuth2TokenService oauth2_token_service_; |
- net::TestURLFetcherFactory url_fetcher_factory_; |
- scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher_; |
- |
- GoogleServiceAuthError error_; |
- std::string token_; |
- base::WeakPtrFactory<ManagedUserRefreshTokenFetcherTest> weak_ptr_factory_; |
-}; |
- |
-ManagedUserRefreshTokenFetcherTest::ManagedUserRefreshTokenFetcherTest() |
- : token_fetcher_( |
- ManagedUserRefreshTokenFetcher::Create(&oauth2_token_service_, |
- kAccountId, |
- profile_.GetRequestContext())), |
- error_(GoogleServiceAuthError::NONE), |
- weak_ptr_factory_(this) {} |
- |
-void ManagedUserRefreshTokenFetcherTest::StartFetching() { |
- oauth2_token_service_.IssueRefreshToken(kOAuth2RefreshToken); |
- token_fetcher_->Start(kManagedUserId, kDeviceName, |
- base::Bind( |
- &ManagedUserRefreshTokenFetcherTest::OnTokenFetched, |
- weak_ptr_factory_.GetWeakPtr())); |
-} |
- |
-net::TestURLFetcher* |
-ManagedUserRefreshTokenFetcherTest::GetIssueTokenRequest() { |
- net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(1); |
- if (!url_fetcher) |
- return NULL; |
- |
- EXPECT_EQ(GaiaUrls::GetInstance()->oauth2_issue_token_url(), |
- url_fetcher->GetOriginalURL()); |
- std::string access_token; |
- net::HttpRequestHeaders headers; |
- url_fetcher->GetExtraRequestHeaders(&headers); |
- EXPECT_TRUE(headers.GetHeader("Authorization", &access_token)); |
- EXPECT_EQ(std::string("Bearer ") + kAccessToken, access_token); |
- const std::string upload_data = url_fetcher->upload_data(); |
- std::string managed_user_id; |
- EXPECT_TRUE(GetValueForKey(upload_data, "profile_id", &managed_user_id)); |
- EXPECT_EQ(kManagedUserId, managed_user_id); |
- std::string device_name; |
- EXPECT_TRUE(GetValueForKey(upload_data, "device_name", &device_name)); |
- EXPECT_EQ(kDeviceName, device_name); |
- return url_fetcher; |
-} |
- |
-net::TestURLFetcher* |
-ManagedUserRefreshTokenFetcherTest::GetRefreshTokenRequest() { |
- net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID( |
- gaia::GaiaOAuthClient::kUrlFetcherId); |
- if (!url_fetcher) |
- return NULL; |
- |
- EXPECT_EQ(GaiaUrls::GetInstance()->oauth2_token_url(), |
- url_fetcher->GetOriginalURL()); |
- std::string auth_code; |
- EXPECT_TRUE(GetValueForKey(url_fetcher->upload_data(), "code", &auth_code)); |
- EXPECT_EQ(kAuthorizationCode, auth_code); |
- return url_fetcher; |
-} |
- |
-void |
-ManagedUserRefreshTokenFetcherTest::MakeOAuth2TokenServiceRequestSucceed() { |
- std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests = |
- oauth2_token_service_.GetPendingRequests(); |
- VerifyTokenRequest(requests); |
- base::Time expiration_date = base::Time::Now() + |
- base::TimeDelta::FromHours(1); |
- oauth2_token_service_.IssueTokenForScope(requests[0].scopes, |
- kAccessToken, |
- expiration_date); |
-} |
- |
-void |
-ManagedUserRefreshTokenFetcherTest::MakeOAuth2TokenServiceRequestFail( |
- GoogleServiceAuthError::State error) { |
- std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests = |
- oauth2_token_service_.GetPendingRequests(); |
- VerifyTokenRequest(requests); |
- oauth2_token_service_.IssueErrorForScope(requests[0].scopes, |
- GoogleServiceAuthError(error)); |
-} |
- |
-void ManagedUserRefreshTokenFetcherTest::MakeIssueTokenRequestSucceed() { |
- SendResponse(GetIssueTokenRequest(), |
- base::StringPrintf(kIssueTokenResponseFormat, |
- kAuthorizationCode)); |
-} |
- |
-void ManagedUserRefreshTokenFetcherTest::MakeRefreshTokenFetchSucceed() { |
- SendResponse(GetRefreshTokenRequest(), |
- base::StringPrintf(kGetRefreshTokenResponseFormat, |
- kManagedUserToken)); |
-} |
- |
-void ManagedUserRefreshTokenFetcherTest::Reset() { |
- token_fetcher_.reset(); |
-} |
- |
-void ManagedUserRefreshTokenFetcherTest::OnTokenFetched( |
- const GoogleServiceAuthError& error, |
- const std::string& token) { |
- error_ = error; |
- token_ = token; |
-} |
- |
-// Tests -------------------------------------------------------- |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, Success) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- MakeRefreshTokenFetchSucceed(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(kManagedUserToken, token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, ExpiredAccessToken) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- MakeRefreshTokenFetchSucceed(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(kManagedUserToken, token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, ExpiredAccessTokenRetry) { |
- // If we get a 401 error for the second time, we should give up instead of |
- // retrying again. |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED); |
- |
- EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state()); |
- EXPECT_EQ(net::ERR_FAILED, error().network_error()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, MalformedIssueTokenResponse) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- SendResponse(GetIssueTokenRequest(), "choke"); |
- |
- EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state()); |
- EXPECT_EQ(net::ERR_INVALID_RESPONSE, error().network_error()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, FetchAccessTokenFailure) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestFail( |
- GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); |
- |
- EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, error().state()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, IssueTokenNetworkError) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- SetNetworkError(GetIssueTokenRequest(), net::ERR_SSL_PROTOCOL_ERROR); |
- |
- EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state()); |
- EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, error().network_error()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, FetchRefreshTokenNetworkError) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- SetNetworkError(GetRefreshTokenRequest(), net::ERR_CONNECTION_REFUSED); |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- SetNetworkError(GetRefreshTokenRequest(), net::ERR_CONNECTION_REFUSED); |
- |
- EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state()); |
- EXPECT_EQ(net::ERR_FAILED, error().network_error()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, |
- FetchRefreshTokenTransientNetworkError) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- SetNetworkError(GetRefreshTokenRequest(), net::ERR_CONNECTION_REFUSED); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- MakeRefreshTokenFetchSucceed(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(kManagedUserToken, token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, FetchRefreshTokenBadRequest) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- SetHttpError(GetRefreshTokenRequest(), net::HTTP_BAD_REQUEST); |
- |
- EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state()); |
- EXPECT_EQ(net::ERR_FAILED, error().network_error()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileFetchingAccessToken) { |
- StartFetching(); |
- Reset(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileCallingIssueToken) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- Reset(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(std::string(), token()); |
-} |
- |
-TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileFetchingRefreshToken) { |
- StartFetching(); |
- MakeOAuth2TokenServiceRequestSucceed(); |
- MakeIssueTokenRequestSucceed(); |
- Reset(); |
- |
- EXPECT_EQ(GoogleServiceAuthError::NONE, error().state()); |
- EXPECT_EQ(std::string(), token()); |
-} |