| 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
|
| index 75608a6ae3260804f662a93ae64b9bcc266f3c55..fb79edc0bab3be9e912e1628116c681fa867ae74 100644
|
| --- a/chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc
|
| +++ b/chrome/browser/managed_mode/managed_user_refresh_token_fetcher_unittest.cc
|
| @@ -6,6 +6,7 @@
|
| #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/browser/signin/oauth2_token_service.h"
|
| #include "chrome/test/base/testing_profile.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| @@ -28,6 +29,7 @@ const char kDeviceName[] = "Compy";
|
| const char kAccessToken[] = "accesstoken";
|
| const char kAuthorizationCode[] = "authorizationcode";
|
| const char kManagedUserToken[] = "managedusertoken";
|
| +const char kOAuth2RefreshToken[] = "refreshtoken";
|
|
|
| const char kIssueTokenResponseFormat[] =
|
| "{"
|
| @@ -41,100 +43,6 @@ const char kGetRefreshTokenResponseFormat[] =
|
| " \"refresh_token\": \"%s\""
|
| "}";
|
|
|
| -// MockOAuth2TokenService ---------------------------------------------
|
| -
|
| -class MockOAuth2TokenService : public OAuth2TokenService {
|
| - public:
|
| - class Request : public OAuth2TokenService::Request {
|
| - public:
|
| - Request(const OAuth2TokenService::ScopeSet& scopes,
|
| - OAuth2TokenService::Consumer* consumer,
|
| - MockOAuth2TokenService* owner);
|
| - virtual ~Request();
|
| -
|
| - void Succeed();
|
| - void Fail(GoogleServiceAuthError::State error);
|
| -
|
| - const OAuth2TokenService::ScopeSet& scopes() const { return scopes_; }
|
| -
|
| - private:
|
| - OAuth2TokenService::ScopeSet scopes_;
|
| -
|
| - OAuth2TokenService::Consumer* consumer_;
|
| -
|
| - MockOAuth2TokenService* owner_;
|
| - };
|
| -
|
| - MockOAuth2TokenService();
|
| - virtual ~MockOAuth2TokenService();
|
| -
|
| - Request* request() const { return request_; }
|
| -
|
| - void ClearRequest(Request* request);
|
| -
|
| - private:
|
| - // OAuth2TokenService overrides:
|
| - virtual scoped_ptr<OAuth2TokenService::Request> StartRequest(
|
| - const OAuth2TokenService::ScopeSet& scopes,
|
| - OAuth2TokenService::Consumer* consumer) OVERRIDE;
|
| - virtual std::string GetRefreshToken() OVERRIDE;
|
| - virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE {
|
| - return NULL;
|
| - }
|
| -
|
| - Request* request_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockOAuth2TokenService);
|
| -};
|
| -
|
| -MockOAuth2TokenService::Request::Request(
|
| - const OAuth2TokenService::ScopeSet& scopes,
|
| - OAuth2TokenService::Consumer* consumer,
|
| - MockOAuth2TokenService* owner)
|
| - : scopes_(scopes),
|
| - consumer_(consumer),
|
| - owner_(owner) {}
|
| -
|
| -MockOAuth2TokenService::Request::~Request() {
|
| - owner_->ClearRequest(this);
|
| -}
|
| -
|
| -void MockOAuth2TokenService::Request::Succeed() {
|
| - base::Time expiration_date = base::Time::Now() +
|
| - base::TimeDelta::FromHours(1);
|
| - consumer_->OnGetTokenSuccess(this, kAccessToken, expiration_date);
|
| -}
|
| -
|
| -void MockOAuth2TokenService::Request::Fail(
|
| - GoogleServiceAuthError::State error) {
|
| - consumer_->OnGetTokenFailure(this, GoogleServiceAuthError(error));
|
| -}
|
| -
|
| -MockOAuth2TokenService::MockOAuth2TokenService() : request_(NULL) {}
|
| -
|
| -MockOAuth2TokenService::~MockOAuth2TokenService() {
|
| - EXPECT_FALSE(request_);
|
| -}
|
| -
|
| -void MockOAuth2TokenService::ClearRequest(
|
| - MockOAuth2TokenService::Request* request) {
|
| - if (request_ == request)
|
| - request_ = NULL;
|
| -}
|
| -
|
| -scoped_ptr<OAuth2TokenService::Request> MockOAuth2TokenService::StartRequest(
|
| - const OAuth2TokenService::ScopeSet& scopes,
|
| - OAuth2TokenService::Consumer* consumer) {
|
| - scoped_ptr<Request> request(new Request(scopes, consumer, this));
|
| - request_ = request.get();
|
| - return request.PassAs<OAuth2TokenService::Request>();
|
| -}
|
| -
|
| -std::string MockOAuth2TokenService::GetRefreshToken() {
|
| - NOTREACHED();
|
| - return std::string();
|
| -}
|
| -
|
| // Utility methods --------------------------------------------------
|
|
|
| // Slightly hacky way to extract a value from a URL-encoded POST request body.
|
| @@ -166,6 +74,14 @@ void SetHttpError(net::TestURLFetcher* url_fetcher, int 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(
|
| + GaiaUrls::GetInstance()->oauth1_login_scope()));
|
| +}
|
| +
|
| } // namespace
|
|
|
| class ManagedUserRefreshTokenFetcherTest : public testing::Test {
|
| @@ -176,10 +92,11 @@ class ManagedUserRefreshTokenFetcherTest : public testing::Test {
|
| protected:
|
| void StartFetching();
|
|
|
| - MockOAuth2TokenService::Request* GetOAuth2TokenServiceRequest();
|
| net::TestURLFetcher* GetIssueTokenRequest();
|
| net::TestURLFetcher* GetRefreshTokenRequest();
|
|
|
| + void MakeOAuth2TokenServiceRequestSucceed();
|
| + void MakeOAuth2TokenServiceRequestFail(GoogleServiceAuthError::State error);
|
| void MakeIssueTokenRequestSucceed();
|
| void MakeRefreshTokenFetchSucceed();
|
|
|
| @@ -194,7 +111,7 @@ class ManagedUserRefreshTokenFetcherTest : public testing::Test {
|
|
|
| content::TestBrowserThreadBundle thread_bundle_;
|
| TestingProfile profile_;
|
| - MockOAuth2TokenService oauth2_token_service_;
|
| + FakeProfileOAuth2TokenService oauth2_token_service_;
|
| net::TestURLFetcherFactory url_fetcher_factory_;
|
| scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher_;
|
|
|
| @@ -211,22 +128,13 @@ ManagedUserRefreshTokenFetcherTest::ManagedUserRefreshTokenFetcherTest()
|
| 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()));
|
| }
|
|
|
| -MockOAuth2TokenService::Request*
|
| -ManagedUserRefreshTokenFetcherTest::GetOAuth2TokenServiceRequest() {
|
| - MockOAuth2TokenService::Request* request = oauth2_token_service_.request();
|
| -
|
| - OAuth2TokenService::ScopeSet scopes = request->scopes();
|
| - EXPECT_EQ(1u, scopes.size());
|
| - EXPECT_EQ(1u, scopes.count(GaiaUrls::GetInstance()->oauth1_login_scope()));
|
| - return request;
|
| -}
|
| -
|
| net::TestURLFetcher*
|
| ManagedUserRefreshTokenFetcherTest::GetIssueTokenRequest() {
|
| net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(1);
|
| @@ -265,6 +173,28 @@ ManagedUserRefreshTokenFetcherTest::GetRefreshTokenRequest() {
|
| 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,
|
| @@ -292,7 +222,7 @@ void ManagedUserRefreshTokenFetcherTest::OnTokenFetched(
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, Success) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| MakeRefreshTokenFetchSucceed();
|
|
|
| @@ -302,9 +232,9 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, Success) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, ExpiredAccessToken) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED);
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| MakeRefreshTokenFetchSucceed();
|
|
|
| @@ -316,9 +246,9 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, ExpiredAccessTokenRetry) {
|
| // If we get a 401 error for the second time, we should give up instead of
|
| // retrying again.
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED);
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| SetHttpError(GetIssueTokenRequest(), net::HTTP_UNAUTHORIZED);
|
|
|
| EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state());
|
| @@ -328,7 +258,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, ExpiredAccessTokenRetry) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, MalformedIssueTokenResponse) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| SendResponse(GetIssueTokenRequest(), "choke");
|
|
|
| EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state());
|
| @@ -338,7 +268,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, MalformedIssueTokenResponse) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, FetchAccessTokenFailure) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Fail(
|
| + MakeOAuth2TokenServiceRequestFail(
|
| GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
|
|
|
| EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, error().state());
|
| @@ -347,7 +277,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, FetchAccessTokenFailure) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, IssueTokenNetworkError) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| SetNetworkError(GetIssueTokenRequest(), net::ERR_SSL_PROTOCOL_ERROR);
|
|
|
| EXPECT_EQ(GoogleServiceAuthError::CONNECTION_FAILED, error().state());
|
| @@ -357,7 +287,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, IssueTokenNetworkError) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, FetchRefreshTokenNetworkError) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| SetNetworkError(GetRefreshTokenRequest(), net::ERR_CONNECTION_REFUSED);
|
| EXPECT_EQ(GoogleServiceAuthError::NONE, error().state());
|
| @@ -371,7 +301,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, FetchRefreshTokenNetworkError) {
|
| TEST_F(ManagedUserRefreshTokenFetcherTest,
|
| FetchRefreshTokenTransientNetworkError) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| SetNetworkError(GetRefreshTokenRequest(), net::ERR_CONNECTION_REFUSED);
|
|
|
| @@ -384,7 +314,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest,
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, FetchRefreshTokenBadRequest) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| SetHttpError(GetRefreshTokenRequest(), net::HTTP_BAD_REQUEST);
|
|
|
| @@ -403,7 +333,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileFetchingAccessToken) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileCallingIssueToken) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| Reset();
|
|
|
| EXPECT_EQ(GoogleServiceAuthError::NONE, error().state());
|
| @@ -412,7 +342,7 @@ TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileCallingIssueToken) {
|
|
|
| TEST_F(ManagedUserRefreshTokenFetcherTest, CancelWhileFetchingRefreshToken) {
|
| StartFetching();
|
| - GetOAuth2TokenServiceRequest()->Succeed();
|
| + MakeOAuth2TokenServiceRequestSucceed();
|
| MakeIssueTokenRequestSucceed();
|
| Reset();
|
|
|
|
|