| Index: chrome/browser/google_apis/request_sender_unittest.cc
|
| diff --git a/chrome/browser/google_apis/request_sender_unittest.cc b/chrome/browser/google_apis/request_sender_unittest.cc
|
| deleted file mode 100644
|
| index 0a65cc1a0d7f1c78cb9ce1d3700520386674c70c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/google_apis/request_sender_unittest.cc
|
| +++ /dev/null
|
| @@ -1,250 +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 "chrome/browser/google_apis/request_sender.h"
|
| -
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "chrome/browser/google_apis/base_requests.h"
|
| -#include "chrome/browser/google_apis/dummy_auth_service.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace google_apis {
|
| -
|
| -namespace {
|
| -
|
| -const char kTestRefreshToken[] = "valid-refresh-token";
|
| -const char kTestAccessToken[] = "valid-access-token";
|
| -
|
| -// Enum for indicating the reason why a request is finished.
|
| -enum FinishReason {
|
| - NONE,
|
| - SUCCESS,
|
| - CANCEL,
|
| - AUTH_FAILURE,
|
| -};
|
| -
|
| -// AuthService for testing purpose. It accepts kTestRefreshToken and returns
|
| -// kTestAccessToken + {"1", "2", "3", ...}.
|
| -class TestAuthService : public DummyAuthService {
|
| - public:
|
| - TestAuthService() : auth_try_count_(0) {}
|
| -
|
| - virtual void StartAuthentication(
|
| - const AuthStatusCallback& callback) OVERRIDE {
|
| - // RequestSender should clear the rejected access token before starting
|
| - // to request another one.
|
| - EXPECT_FALSE(HasAccessToken());
|
| -
|
| - ++auth_try_count_;
|
| -
|
| - if (refresh_token() == kTestRefreshToken) {
|
| - const std::string token =
|
| - kTestAccessToken + base::IntToString(auth_try_count_);
|
| - set_access_token(token);
|
| - callback.Run(HTTP_SUCCESS, token);
|
| - } else {
|
| - set_access_token("");
|
| - callback.Run(HTTP_UNAUTHORIZED, "");
|
| - }
|
| - }
|
| -
|
| - private:
|
| - int auth_try_count_;
|
| -};
|
| -
|
| -// The main test fixture class.
|
| -class RequestSenderTest : public testing::Test {
|
| - protected:
|
| - RequestSenderTest()
|
| - : auth_service_(new TestAuthService),
|
| - request_sender_(auth_service_, NULL, NULL, "dummy-user-agent") {
|
| - auth_service_->set_refresh_token(kTestRefreshToken);
|
| - auth_service_->set_access_token(kTestAccessToken);
|
| - }
|
| -
|
| - TestAuthService* auth_service_; // Owned by |request_sender_|.
|
| - RequestSender request_sender_;
|
| -};
|
| -
|
| -// Minimal implementation for AuthenticatedRequestInterface that can interact
|
| -// with RequestSender correctly.
|
| -class TestRequest : public AuthenticatedRequestInterface {
|
| - public:
|
| - TestRequest(RequestSender* sender,
|
| - bool* start_called,
|
| - FinishReason* finish_reason)
|
| - : sender_(sender),
|
| - start_called_(start_called),
|
| - finish_reason_(finish_reason),
|
| - weak_ptr_factory_(this) {
|
| - }
|
| -
|
| - // Test the situation that the request has finished.
|
| - void FinishRequestWithSuccess() {
|
| - *finish_reason_ = SUCCESS;
|
| - sender_->RequestFinished(this);
|
| - }
|
| -
|
| - const std::string& passed_access_token() const {
|
| - return passed_access_token_;
|
| - }
|
| -
|
| - const ReAuthenticateCallback& passed_reauth_callback() const {
|
| - return passed_reauth_callback_;
|
| - }
|
| -
|
| - virtual void Start(const std::string& access_token,
|
| - const std::string& custom_user_agent,
|
| - const ReAuthenticateCallback& callback) OVERRIDE {
|
| - *start_called_ = true;
|
| - passed_access_token_ = access_token;
|
| - passed_reauth_callback_ = callback;
|
| -
|
| - // This request class itself does not return any response at this point.
|
| - // Each test case should respond properly by using the above methods.
|
| - }
|
| -
|
| - virtual void Cancel() OVERRIDE {
|
| - EXPECT_TRUE(*start_called_);
|
| - *finish_reason_ = CANCEL;
|
| - sender_->RequestFinished(this);
|
| - }
|
| -
|
| - virtual void OnAuthFailed(GDataErrorCode code) OVERRIDE {
|
| - *finish_reason_ = AUTH_FAILURE;
|
| - sender_->RequestFinished(this);
|
| - }
|
| -
|
| - virtual base::WeakPtr<AuthenticatedRequestInterface> GetWeakPtr() OVERRIDE {
|
| - return weak_ptr_factory_.GetWeakPtr();
|
| - }
|
| -
|
| - private:
|
| - RequestSender* sender_;
|
| - bool* start_called_;
|
| - FinishReason* finish_reason_;
|
| - std::string passed_access_token_;
|
| - ReAuthenticateCallback passed_reauth_callback_;
|
| - base::WeakPtrFactory<TestRequest> weak_ptr_factory_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(RequestSenderTest, StartAndFinishRequest) {
|
| - bool start_called = false;
|
| - FinishReason finish_reason = NONE;
|
| - TestRequest* request = new TestRequest(&request_sender_,
|
| - &start_called,
|
| - &finish_reason);
|
| - base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr();
|
| -
|
| - base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request);
|
| - EXPECT_TRUE(!cancel_closure.is_null());
|
| -
|
| - // Start is called with the specified access token. Let it succeed.
|
| - EXPECT_TRUE(start_called);
|
| - EXPECT_EQ(kTestAccessToken, request->passed_access_token());
|
| - request->FinishRequestWithSuccess();
|
| - EXPECT_FALSE(weak_ptr); // The request object is deleted.
|
| -
|
| - // It is safe to run the cancel closure even after the request is finished.
|
| - // It is just no-op. The TestRequest::Cancel method is not called.
|
| - cancel_closure.Run();
|
| - EXPECT_EQ(SUCCESS, finish_reason);
|
| -}
|
| -
|
| -TEST_F(RequestSenderTest, StartAndCancelRequest) {
|
| - bool start_called = false;
|
| - FinishReason finish_reason = NONE;
|
| - TestRequest* request = new TestRequest(&request_sender_,
|
| - &start_called,
|
| - &finish_reason);
|
| - base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr();
|
| -
|
| - base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request);
|
| - EXPECT_TRUE(!cancel_closure.is_null());
|
| - EXPECT_TRUE(start_called);
|
| -
|
| - cancel_closure.Run();
|
| - EXPECT_EQ(CANCEL, finish_reason);
|
| - EXPECT_FALSE(weak_ptr); // The request object is deleted.
|
| -}
|
| -
|
| -TEST_F(RequestSenderTest, NoRefreshToken) {
|
| - auth_service_->ClearRefreshToken();
|
| - auth_service_->ClearAccessToken();
|
| -
|
| - bool start_called = false;
|
| - FinishReason finish_reason = NONE;
|
| - TestRequest* request = new TestRequest(&request_sender_,
|
| - &start_called,
|
| - &finish_reason);
|
| - base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr();
|
| -
|
| - base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request);
|
| - EXPECT_TRUE(!cancel_closure.is_null());
|
| -
|
| - // The request is not started at all because no access token is obtained.
|
| - EXPECT_FALSE(start_called);
|
| - EXPECT_EQ(AUTH_FAILURE, finish_reason);
|
| - EXPECT_FALSE(weak_ptr); // The request object is deleted.
|
| -}
|
| -
|
| -TEST_F(RequestSenderTest, ValidRefreshTokenAndNoAccessToken) {
|
| - auth_service_->ClearAccessToken();
|
| -
|
| - bool start_called = false;
|
| - FinishReason finish_reason = NONE;
|
| - TestRequest* request = new TestRequest(&request_sender_,
|
| - &start_called,
|
| - &finish_reason);
|
| - base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr();
|
| -
|
| - base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request);
|
| - EXPECT_TRUE(!cancel_closure.is_null());
|
| -
|
| - // Access token should indicate that this is the first retry.
|
| - EXPECT_TRUE(start_called);
|
| - EXPECT_EQ(kTestAccessToken + std::string("1"),
|
| - request->passed_access_token());
|
| - request->FinishRequestWithSuccess();
|
| - EXPECT_EQ(SUCCESS, finish_reason);
|
| - EXPECT_FALSE(weak_ptr); // The request object is deleted.
|
| -}
|
| -
|
| -TEST_F(RequestSenderTest, AccessTokenRejectedSeveralTimes) {
|
| - bool start_called = false;
|
| - FinishReason finish_reason = NONE;
|
| - TestRequest* request = new TestRequest(&request_sender_,
|
| - &start_called,
|
| - &finish_reason);
|
| - base::WeakPtr<AuthenticatedRequestInterface> weak_ptr = request->GetWeakPtr();
|
| -
|
| - base::Closure cancel_closure = request_sender_.StartRequestWithRetry(request);
|
| - EXPECT_TRUE(!cancel_closure.is_null());
|
| -
|
| - EXPECT_TRUE(start_called);
|
| - EXPECT_EQ(kTestAccessToken, request->passed_access_token());
|
| - // Emulate the case that the access token was rejected by the remote service.
|
| - request->passed_reauth_callback().Run(request);
|
| - // New access token is fetched. Let it fail once again.
|
| - EXPECT_EQ(kTestAccessToken + std::string("1"),
|
| - request->passed_access_token());
|
| - request->passed_reauth_callback().Run(request);
|
| - // Once more.
|
| - EXPECT_EQ(kTestAccessToken + std::string("2"),
|
| - request->passed_access_token());
|
| - request->passed_reauth_callback().Run(request);
|
| -
|
| - // Currently, limit for the retry is controlled in each request object, not
|
| - // by the RequestSender. So with this TestRequest, RequestSender retries
|
| - // infinitely. Let it succeed/
|
| - EXPECT_EQ(kTestAccessToken + std::string("3"),
|
| - request->passed_access_token());
|
| - request->FinishRequestWithSuccess();
|
| - EXPECT_EQ(SUCCESS, finish_reason);
|
| - EXPECT_FALSE(weak_ptr);
|
| -}
|
| -
|
| -} // namespace google_apis
|
|
|