| Index: chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc
|
| diff --git a/chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc b/chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc
|
| deleted file mode 100644
|
| index 22290571c61d9a1ef94ed3afdee585f3d1f2354c..0000000000000000000000000000000000000000
|
| --- a/chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc
|
| +++ /dev/null
|
| @@ -1,1021 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -//
|
| -// A complete set of unit tests for GaiaAuthFetcher.
|
| -// Originally ported from GoogleAuthenticator tests.
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/json/json_reader.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/stringprintf.h"
|
| -#include "base/values.h"
|
| -#include "chrome/common/net/gaia/gaia_auth_consumer.h"
|
| -#include "chrome/common/net/gaia/gaia_auth_fetcher.h"
|
| -#include "chrome/common/net/gaia/gaia_urls.h"
|
| -#include "chrome/common/net/gaia/google_service_auth_error.h"
|
| -#include "chrome/common/net/gaia/mock_url_fetcher_factory.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "net/base/load_flags.h"
|
| -#include "net/base/net_errors.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 "net/url_request/url_request_status.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using ::testing::_;
|
| -using ::testing::Invoke;
|
| -
|
| -namespace {
|
| -static const char kGetAuthCodeValidCookie[] =
|
| - "oauth_code=test-code; Path=/test; Secure; HttpOnly";
|
| -static const char kGetAuthCodeCookieNoSecure[] =
|
| - "oauth_code=test-code; Path=/test; HttpOnly";
|
| -static const char kGetAuthCodeCookieNoHttpOnly[] =
|
| - "oauth_code=test-code; Path=/test; Secure";
|
| -static const char kGetAuthCodeCookieNoOAuthCode[] =
|
| - "Path=/test; Secure; HttpOnly";
|
| -static const char kGetTokenPairValidResponse[] =
|
| - "{"
|
| - " \"refresh_token\": \"rt1\","
|
| - " \"access_token\": \"at1\","
|
| - " \"expires_in\": 3600,"
|
| - " \"token_type\": \"Bearer\""
|
| - "}";
|
| -static const char kClientOAuthValidResponse[] =
|
| - "{"
|
| - " \"oauth2\": {"
|
| - " \"refresh_token\": \"rt1\","
|
| - " \"access_token\": \"at1\","
|
| - " \"expires_in\": 3600,"
|
| - " \"token_type\": \"Bearer\""
|
| - " }"
|
| - "}";
|
| -
|
| -static void ExpectCaptchaChallenge(const GoogleServiceAuthError& error) {
|
| - // Make sure this is a captcha server challange.
|
| - EXPECT_EQ(GoogleServiceAuthError::CAPTCHA_REQUIRED, error.state());
|
| - EXPECT_EQ("challengetokenblob", error.captcha().token);
|
| - EXPECT_EQ("http://www.audio.com/", error.captcha().audio_url.spec());
|
| - EXPECT_EQ("http://www.image.com/", error.captcha().image_url.spec());
|
| - EXPECT_EQ(640, error.captcha().image_width);
|
| - EXPECT_EQ(480, error.captcha().image_height);
|
| -}
|
| -
|
| -static void ExpectBadAuth(const GoogleServiceAuthError& error) {
|
| - EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, error.state());
|
| -}
|
| -
|
| -static void ExpectTwoFactorChallenge(const GoogleServiceAuthError& error) {
|
| - // Make sure this is a captcha server challange.
|
| - EXPECT_EQ(GoogleServiceAuthError::TWO_FACTOR, error.state());
|
| - EXPECT_EQ("challengetokenblob", error.second_factor().token);
|
| - EXPECT_EQ("prompt_text", error.second_factor().prompt_text);
|
| - EXPECT_EQ("alternate_text", error.second_factor().alternate_text);
|
| - EXPECT_EQ(10, error.second_factor().field_length);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -MockFetcher::MockFetcher(bool success,
|
| - const GURL& url,
|
| - const std::string& results,
|
| - net::URLFetcher::RequestType request_type,
|
| - net::URLFetcherDelegate* d)
|
| - : TestURLFetcher(0, url, d) {
|
| - set_url(url);
|
| - net::URLRequestStatus::Status code;
|
| -
|
| - if (success) {
|
| - set_response_code(net::HTTP_OK);
|
| - code = net::URLRequestStatus::SUCCESS;
|
| - } else {
|
| - set_response_code(net::HTTP_FORBIDDEN);
|
| - code = net::URLRequestStatus::FAILED;
|
| - }
|
| -
|
| - set_status(net::URLRequestStatus(code, 0));
|
| - SetResponseString(results);
|
| -}
|
| -
|
| -MockFetcher::MockFetcher(const GURL& url,
|
| - const net::URLRequestStatus& status,
|
| - int response_code,
|
| - const net::ResponseCookies& cookies,
|
| - const std::string& results,
|
| - net::URLFetcher::RequestType request_type,
|
| - net::URLFetcherDelegate* d)
|
| - : TestURLFetcher(0, url, d) {
|
| - set_url(url);
|
| - set_status(status);
|
| - set_response_code(response_code);
|
| - set_cookies(cookies);
|
| - SetResponseString(results);
|
| -}
|
| -
|
| -MockFetcher::~MockFetcher() {}
|
| -
|
| -void MockFetcher::Start() {
|
| - delegate()->OnURLFetchComplete(this);
|
| -}
|
| -
|
| -class GaiaAuthFetcherTest : public testing::Test {
|
| - public:
|
| - GaiaAuthFetcherTest()
|
| - : client_login_source_(GaiaUrls::GetInstance()->client_login_url()),
|
| - issue_auth_token_source_(
|
| - GaiaUrls::GetInstance()->issue_auth_token_url()),
|
| - client_login_to_oauth2_source_(
|
| - GaiaUrls::GetInstance()->client_login_to_oauth2_url()),
|
| - oauth2_token_source_(GaiaUrls::GetInstance()->oauth2_token_url()),
|
| - token_auth_source_(GaiaUrls::GetInstance()->token_auth_url()),
|
| - merge_session_source_(GaiaUrls::GetInstance()->merge_session_url()),
|
| - uberauth_token_source_(base::StringPrintf(
|
| - "%s?source=&issueuberauth=1",
|
| - GaiaUrls::GetInstance()->oauth1_login_url().c_str())),
|
| - client_oauth_source_(GaiaUrls::GetInstance()->client_oauth_url()),
|
| - oauth_login_gurl_(GaiaUrls::GetInstance()->oauth1_login_url()) {}
|
| -
|
| - void RunParsingTest(const std::string& data,
|
| - const std::string& sid,
|
| - const std::string& lsid,
|
| - const std::string& token) {
|
| - std::string out_sid;
|
| - std::string out_lsid;
|
| - std::string out_token;
|
| -
|
| - GaiaAuthFetcher::ParseClientLoginResponse(data,
|
| - &out_sid,
|
| - &out_lsid,
|
| - &out_token);
|
| - EXPECT_EQ(lsid, out_lsid);
|
| - EXPECT_EQ(sid, out_sid);
|
| - EXPECT_EQ(token, out_token);
|
| - }
|
| -
|
| - void RunErrorParsingTest(const std::string& data,
|
| - const std::string& error,
|
| - const std::string& error_url,
|
| - const std::string& captcha_url,
|
| - const std::string& captcha_token) {
|
| - std::string out_error;
|
| - std::string out_error_url;
|
| - std::string out_captcha_url;
|
| - std::string out_captcha_token;
|
| -
|
| - GaiaAuthFetcher::ParseClientLoginFailure(data,
|
| - &out_error,
|
| - &out_error_url,
|
| - &out_captcha_url,
|
| - &out_captcha_token);
|
| - EXPECT_EQ(error, out_error);
|
| - EXPECT_EQ(error_url, out_error_url);
|
| - EXPECT_EQ(captcha_url, out_captcha_url);
|
| - EXPECT_EQ(captcha_token, out_captcha_token);
|
| - }
|
| -
|
| - net::ResponseCookies cookies_;
|
| - GURL client_login_source_;
|
| - GURL issue_auth_token_source_;
|
| - GURL client_login_to_oauth2_source_;
|
| - GURL oauth2_token_source_;
|
| - GURL token_auth_source_;
|
| - GURL merge_session_source_;
|
| - GURL uberauth_token_source_;
|
| - GURL client_oauth_source_;
|
| - GURL oauth_login_gurl_;
|
| - TestingProfile profile_;
|
| - protected:
|
| - MessageLoop message_loop_;
|
| -};
|
| -
|
| -class MockGaiaConsumer : public GaiaAuthConsumer {
|
| - public:
|
| - MockGaiaConsumer() {}
|
| - ~MockGaiaConsumer() {}
|
| -
|
| - MOCK_METHOD1(OnClientLoginSuccess, void(const ClientLoginResult& result));
|
| - MOCK_METHOD2(OnIssueAuthTokenSuccess, void(const std::string& service,
|
| - const std::string& token));
|
| - MOCK_METHOD1(OnClientOAuthSuccess,
|
| - void(const GaiaAuthConsumer::ClientOAuthResult& result));
|
| - MOCK_METHOD1(OnMergeSessionSuccess, void(const std::string& data));
|
| - MOCK_METHOD1(OnUberAuthTokenSuccess, void(const std::string& data));
|
| - MOCK_METHOD1(OnClientLoginFailure,
|
| - void(const GoogleServiceAuthError& error));
|
| - MOCK_METHOD2(OnIssueAuthTokenFailure, void(const std::string& service,
|
| - const GoogleServiceAuthError& error));
|
| - MOCK_METHOD1(OnClientOAuthFailure,
|
| - void(const GoogleServiceAuthError& error));
|
| - MOCK_METHOD1(OnMergeSessionFailure, void(
|
| - const GoogleServiceAuthError& error));
|
| - MOCK_METHOD1(OnUberAuthTokenFailure, void(
|
| - const GoogleServiceAuthError& error));
|
| -};
|
| -
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_ErrorComparator DISABLED_ErrorComparator
|
| -#else
|
| -#define MAYBE_ErrorComparator ErrorComparator
|
| -#endif
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, MAYBE_ErrorComparator) {
|
| - GoogleServiceAuthError expected_error =
|
| - GoogleServiceAuthError::FromConnectionError(-101);
|
| -
|
| - GoogleServiceAuthError matching_error =
|
| - GoogleServiceAuthError::FromConnectionError(-101);
|
| -
|
| - EXPECT_TRUE(expected_error == matching_error);
|
| -
|
| - expected_error = GoogleServiceAuthError::FromConnectionError(6);
|
| -
|
| - EXPECT_FALSE(expected_error == matching_error);
|
| -
|
| - expected_error = GoogleServiceAuthError(GoogleServiceAuthError::NONE);
|
| -
|
| - EXPECT_FALSE(expected_error == matching_error);
|
| -
|
| - matching_error = GoogleServiceAuthError(GoogleServiceAuthError::NONE);
|
| -
|
| - EXPECT_TRUE(expected_error == matching_error);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, LoginNetFailure) {
|
| - int error_no = net::ERR_CONNECTION_RESET;
|
| - net::URLRequestStatus status(net::URLRequestStatus::FAILED, error_no);
|
| -
|
| - GoogleServiceAuthError expected_error =
|
| - GoogleServiceAuthError::FromConnectionError(error_no);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginFailure(expected_error))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| -
|
| - MockFetcher mock_fetcher(
|
| - client_login_source_, status, 0, net::ResponseCookies(), std::string(),
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, TokenNetFailure) {
|
| - int error_no = net::ERR_CONNECTION_RESET;
|
| - net::URLRequestStatus status(net::URLRequestStatus::FAILED, error_no);
|
| -
|
| - GoogleServiceAuthError expected_error =
|
| - GoogleServiceAuthError::FromConnectionError(error_no);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnIssueAuthTokenFailure(_, expected_error))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| -
|
| - MockFetcher mock_fetcher(
|
| - issue_auth_token_source_, status, 0, cookies_, std::string(),
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, LoginDenied) {
|
| - std::string data("Error=BadAuthentication");
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| -
|
| - GoogleServiceAuthError expected_error(
|
| - GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginFailure(expected_error))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| -
|
| - MockFetcher mock_fetcher(
|
| - client_login_source_, status, net::HTTP_FORBIDDEN, cookies_, data,
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ParseRequest) {
|
| - RunParsingTest("SID=sid\nLSID=lsid\nAuth=auth\n", "sid", "lsid", "auth");
|
| - RunParsingTest("LSID=lsid\nSID=sid\nAuth=auth\n", "sid", "lsid", "auth");
|
| - RunParsingTest("SID=sid\nLSID=lsid\nAuth=auth", "sid", "lsid", "auth");
|
| - RunParsingTest("SID=sid\nAuth=auth\n", "sid", "", "auth");
|
| - RunParsingTest("LSID=lsid\nAuth=auth\n", "", "lsid", "auth");
|
| - RunParsingTest("\nAuth=auth\n", "", "", "auth");
|
| - RunParsingTest("SID=sid", "sid", "", "");
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ParseErrorRequest) {
|
| - RunErrorParsingTest("Url=U\n"
|
| - "Error=E\n"
|
| - "CaptchaToken=T\n"
|
| - "CaptchaUrl=C\n", "E", "U", "C", "T");
|
| - RunErrorParsingTest("CaptchaToken=T\n"
|
| - "Error=E\n"
|
| - "Url=U\n"
|
| - "CaptchaUrl=C\n", "E", "U", "C", "T");
|
| - RunErrorParsingTest("\n\n\nCaptchaToken=T\n"
|
| - "\nError=E\n"
|
| - "\nUrl=U\n"
|
| - "CaptchaUrl=C\n", "E", "U", "C", "T");
|
| -}
|
| -
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OnlineLogin) {
|
| - std::string data("SID=sid\nLSID=lsid\nAuth=auth\n");
|
| -
|
| - GaiaAuthConsumer::ClientLoginResult result;
|
| - result.lsid = "lsid";
|
| - result.sid = "sid";
|
| - result.token = "auth";
|
| - result.data = data;
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginSuccess(result))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - MockFetcher mock_fetcher(
|
| - client_login_source_, status, net::HTTP_OK, cookies_, data,
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, WorkingIssueAuthToken) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnIssueAuthTokenSuccess(_, "token"))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - MockFetcher mock_fetcher(
|
| - issue_auth_token_source_, status, net::HTTP_OK, cookies_, "token",
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, CheckTwoFactorResponse) {
|
| - std::string response =
|
| - base::StringPrintf("Error=BadAuthentication\n%s\n",
|
| - GaiaAuthFetcher::kSecondFactor);
|
| - EXPECT_TRUE(GaiaAuthFetcher::IsSecondFactorSuccess(response));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, CheckNormalErrorCode) {
|
| - std::string response = "Error=BadAuthentication\n";
|
| - EXPECT_FALSE(GaiaAuthFetcher::IsSecondFactorSuccess(response));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, TwoFactorLogin) {
|
| - std::string response = base::StringPrintf("Error=BadAuthentication\n%s\n",
|
| - GaiaAuthFetcher::kSecondFactor);
|
| -
|
| - GoogleServiceAuthError error =
|
| - GoogleServiceAuthError(GoogleServiceAuthError::TWO_FACTOR);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginFailure(error))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - MockFetcher mock_fetcher(
|
| - client_login_source_, status, net::HTTP_FORBIDDEN, cookies_, response,
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, CaptchaParse) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Url=http://www.google.com/login/captcha\n"
|
| - "Error=CaptchaRequired\n"
|
| - "CaptchaToken=CCTOKEN\n"
|
| - "CaptchaUrl=Captcha?ctoken=CCTOKEN\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateAuthError(data, status);
|
| -
|
| - std::string token = "CCTOKEN";
|
| - GURL image_url("http://accounts.google.com/Captcha?ctoken=CCTOKEN");
|
| - GURL unlock_url("http://www.google.com/login/captcha");
|
| -
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::CAPTCHA_REQUIRED);
|
| - EXPECT_EQ(error.captcha().token, token);
|
| - EXPECT_EQ(error.captcha().image_url, image_url);
|
| - EXPECT_EQ(error.captcha().unlock_url, unlock_url);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, AccountDeletedError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=AccountDeleted\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateAuthError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::ACCOUNT_DELETED);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, AccountDisabledError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=AccountDisabled\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateAuthError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::ACCOUNT_DISABLED);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest,BadAuthenticationError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=BadAuthentication\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateAuthError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest,IncomprehensibleError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=Gobbledygook\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateAuthError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::SERVICE_UNAVAILABLE);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest,ServiceUnavailableError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=ServiceUnavailable\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateOAuthLoginError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::SERVICE_UNAVAILABLE);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthAccountDeletedError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=adel\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateOAuthLoginError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::ACCOUNT_DELETED);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthAccountDisabledError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=adis\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateOAuthLoginError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::ACCOUNT_DISABLED);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthBadAuthenticationError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=badauth\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateOAuthLoginError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthServiceUnavailableError) {
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - std::string data = "Error=ire\n";
|
| - GoogleServiceAuthError error =
|
| - GaiaAuthFetcher::GenerateOAuthLoginError(data, status);
|
| - EXPECT_EQ(error.state(), GoogleServiceAuthError::SERVICE_UNAVAILABLE);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, FullLogin) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginSuccess(_))
|
| - .Times(1);
|
| -
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartClientLogin("username",
|
| - "password",
|
| - "service",
|
| - std::string(),
|
| - std::string(),
|
| - GaiaAuthFetcher::HostedAccountsAllowed);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, FullLoginFailure) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginFailure(_))
|
| - .Times(1);
|
| -
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_success(false);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartClientLogin("username",
|
| - "password",
|
| - "service",
|
| - std::string(),
|
| - std::string(),
|
| - GaiaAuthFetcher::HostedAccountsAllowed);
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientFetchPending) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginSuccess(_))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartClientLogin("username",
|
| - "password",
|
| - "service",
|
| - std::string(),
|
| - std::string(),
|
| - GaiaAuthFetcher::HostedAccountsAllowed);
|
| -
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - client_login_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies_, "SID=sid\nLSID=lsid\nAuth=auth\n",
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, FullTokenSuccess) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnIssueAuthTokenSuccess("service", "token"))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartIssueAuthToken("sid", "lsid", "service");
|
| -
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - issue_auth_token_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies_, "token",
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, FullTokenFailure) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnIssueAuthTokenFailure("service", _))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartIssueAuthToken("sid", "lsid", "service");
|
| -
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - issue_auth_token_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_FORBIDDEN, cookies_, "", net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthLoginTokenSuccess) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthSuccess(
|
| - GaiaAuthConsumer::ClientOAuthResult("rt1", "at1", 3600))).Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartLsoForOAuthLoginTokenExchange("lso_token");
|
| - net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
|
| - EXPECT_TRUE(NULL != fetcher);
|
| - EXPECT_EQ(net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES,
|
| - fetcher->GetLoadFlags());
|
| -
|
| - net::ResponseCookies cookies;
|
| - cookies.push_back(kGetAuthCodeValidCookie);
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher1(
|
| - client_login_to_oauth2_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies, "",
|
| - net::URLFetcher::POST, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher1);
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher2(
|
| - oauth2_token_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies_, kGetTokenPairValidResponse,
|
| - net::URLFetcher::POST, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher2);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthLoginTokenWithCookies) {
|
| - MockGaiaConsumer consumer;
|
| - net::TestURLFetcherFactory factory;
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartCookieForOAuthLoginTokenExchange("0");
|
| - net::TestURLFetcher* fetcher = factory.GetFetcherByID(0);
|
| - EXPECT_TRUE(NULL != fetcher);
|
| - EXPECT_EQ(net::LOAD_NORMAL, fetcher->GetLoadFlags());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthLoginTokenClientLoginToOAuth2Failure) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthFailure(_))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartLsoForOAuthLoginTokenExchange("lso_token");
|
| -
|
| - net::ResponseCookies cookies;
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - client_login_to_oauth2_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_FORBIDDEN, cookies, "",
|
| - net::URLFetcher::POST, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, OAuthLoginTokenOAuth2TokenPairFailure) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthFailure(_))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartLsoForOAuthLoginTokenExchange("lso_token");
|
| -
|
| - net::ResponseCookies cookies;
|
| - cookies.push_back(kGetAuthCodeValidCookie);
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher1(
|
| - client_login_to_oauth2_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies, "",
|
| - net::URLFetcher::POST, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher1);
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher2(
|
| - oauth2_token_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_FORBIDDEN, cookies_, "",
|
| - net::URLFetcher::POST, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher2);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, MergeSessionSuccess) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnMergeSessionSuccess("<html></html>"))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartMergeSession("myubertoken");
|
| -
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - merge_session_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies_, "<html></html>", net::URLFetcher::GET,
|
| - &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, MergeSessionSuccessRedirect) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnMergeSessionSuccess("<html></html>"))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartMergeSession("myubertoken");
|
| -
|
| - // Make sure the fetcher created has the expected flags. Set its url()
|
| - // properties to reflect a redirect.
|
| - net::TestURLFetcher* test_fetcher = factory.GetFetcherByID(0);
|
| - EXPECT_TRUE(test_fetcher != NULL);
|
| - EXPECT_TRUE(test_fetcher->GetLoadFlags() == net::LOAD_NORMAL);
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| -
|
| - GURL final_url("http://www.google.com/CheckCookie");
|
| - test_fetcher->set_url(final_url);
|
| - test_fetcher->set_status(
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0));
|
| - test_fetcher->set_response_code(net::HTTP_OK);
|
| - test_fetcher->set_cookies(cookies_);
|
| - test_fetcher->SetResponseString("<html></html>");
|
| -
|
| - auth.OnURLFetchComplete(test_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, UberAuthTokenSuccess) {
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnUberAuthTokenSuccess("uberToken"))
|
| - .Times(1);
|
| -
|
| - net::TestURLFetcherFactory factory;
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - auth.StartTokenFetchForUberAuthExchange("myAccessToken");
|
| -
|
| - EXPECT_TRUE(auth.HasPendingFetch());
|
| - MockFetcher mock_fetcher(
|
| - uberauth_token_source_,
|
| - net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0),
|
| - net::HTTP_OK, cookies_, "uberToken", net::URLFetcher::POST,
|
| - &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| - EXPECT_FALSE(auth.HasPendingFetch());
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ParseClientLoginToOAuth2Response) {
|
| - { // No cookies.
|
| - std::string auth_code;
|
| - net::ResponseCookies cookies;
|
| - EXPECT_FALSE(GaiaAuthFetcher::ParseClientLoginToOAuth2Response(
|
| - cookies, &auth_code));
|
| - EXPECT_EQ("", auth_code);
|
| - }
|
| - { // Few cookies, nothing appropriate.
|
| - std::string auth_code;
|
| - net::ResponseCookies cookies;
|
| - cookies.push_back(kGetAuthCodeCookieNoSecure);
|
| - cookies.push_back(kGetAuthCodeCookieNoHttpOnly);
|
| - cookies.push_back(kGetAuthCodeCookieNoOAuthCode);
|
| - EXPECT_FALSE(GaiaAuthFetcher::ParseClientLoginToOAuth2Response(
|
| - cookies, &auth_code));
|
| - EXPECT_EQ("", auth_code);
|
| - }
|
| - { // Few cookies, one of them is valid.
|
| - std::string auth_code;
|
| - net::ResponseCookies cookies;
|
| - cookies.push_back(kGetAuthCodeCookieNoSecure);
|
| - cookies.push_back(kGetAuthCodeCookieNoHttpOnly);
|
| - cookies.push_back(kGetAuthCodeCookieNoOAuthCode);
|
| - cookies.push_back(kGetAuthCodeValidCookie);
|
| - EXPECT_TRUE(GaiaAuthFetcher::ParseClientLoginToOAuth2Response(
|
| - cookies, &auth_code));
|
| - EXPECT_EQ("test-code", auth_code);
|
| - }
|
| - { // Single valid cookie (like in real responses).
|
| - std::string auth_code;
|
| - net::ResponseCookies cookies;
|
| - cookies.push_back(kGetAuthCodeValidCookie);
|
| - EXPECT_TRUE(GaiaAuthFetcher::ParseClientLoginToOAuth2Response(
|
| - cookies, &auth_code));
|
| - EXPECT_EQ("test-code", auth_code);
|
| - }
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthSuccess) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_results(kClientOAuthValidResponse);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthSuccess(
|
| - GaiaAuthConsumer::ClientOAuthResult("rt1", "at1", 3600))).Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, "tests", profile_.GetRequestContext());
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back(GaiaUrls::GetInstance()->oauth1_login_scope());
|
| - scopes.push_back("https://some.other.scope.com");
|
| - auth.StartClientOAuth("username", "password", scopes, "", "en");
|
| -
|
| - scoped_ptr<base::Value> actual(base::JSONReader::Read(auth.request_body_));
|
| - scoped_ptr<base::Value> expected(base::JSONReader::Read(
|
| - "{"
|
| - "\"email\": \"username\","
|
| - "\"password\": \"password\","
|
| - "\"scopes\": [\"https://www.google.com/accounts/OAuthLogin\","
|
| - " \"https://some.other.scope.com\"],"
|
| - "\"oauth2_client_id\": \"77185425430.apps.googleusercontent.com\","
|
| - "\"friendly_device_name\": \"tests\","
|
| - "\"accepts_challenges\": [\"Captcha\", \"TwoStep\"],"
|
| - "\"locale\": \"en\","
|
| - "\"fallback\": { \"name\": \"GetOAuth2Token\" }"
|
| - "}"));
|
| - EXPECT_TRUE(expected->Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthWithQuote) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_results(kClientOAuthValidResponse);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthSuccess(
|
| - GaiaAuthConsumer::ClientOAuthResult("rt1", "at1", 3600))).Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, "te\"sts", profile_.GetRequestContext());
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back("https://some.\"other.scope.com");
|
| - auth.StartClientOAuth("user\"name", "pass\"word", scopes, "", "e\"n");
|
| -
|
| - scoped_ptr<base::Value> actual(base::JSONReader::Read(auth.request_body_));
|
| - scoped_ptr<base::Value> expected(base::JSONReader::Read(
|
| - "{"
|
| - "\"email\": \"user\\\"name\","
|
| - "\"password\": \"pass\\\"word\","
|
| - "\"scopes\": [\"https://some.\\\"other.scope.com\"],"
|
| - "\"oauth2_client_id\": \"77185425430.apps.googleusercontent.com\","
|
| - "\"friendly_device_name\": \"te\\\"sts\","
|
| - "\"accepts_challenges\": [\"Captcha\", \"TwoStep\"],"
|
| - "\"locale\": \"e\\\"n\","
|
| - "\"fallback\": { \"name\": \"GetOAuth2Token\" }"
|
| - "}"));
|
| - EXPECT_TRUE(expected->Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthBadAuth) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_success(false);
|
| - factory.set_results("{"
|
| - " \"cause\" : \"BadAuthentication\","
|
| - " \"fallback\" : {"
|
| - " \"name\" : \"Terminating\","
|
| - " \"url\" : \"https://www.terminating.com\""
|
| - " }"
|
| - "}");
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthFailure(_))
|
| - .WillOnce(Invoke(ExpectBadAuth));
|
| -
|
| - GaiaAuthFetcher auth(&consumer, "tests", profile_.GetRequestContext());
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back(GaiaUrls::GetInstance()->oauth1_login_scope());
|
| - auth.StartClientOAuth("username", "password", scopes, "", "en");
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthCaptchaChallenge) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_success(false);
|
| - factory.set_results("{"
|
| - " \"cause\" : \"NeedsAdditional\","
|
| - " \"fallback\" : {"
|
| - " \"name\" : \"Terminating\","
|
| - " \"url\" : \"https://www.terminating.com\""
|
| - " },"
|
| - " \"challenge\" : {"
|
| - " \"name\" : \"Captcha\","
|
| - " \"image_url\" : \"http://www.image.com/\","
|
| - " \"image_width\" : 640,"
|
| - " \"image_height\" : 480,"
|
| - " \"audio_url\" : \"http://www.audio.com/\","
|
| - " \"challenge_token\" : \"challengetokenblob\""
|
| - " }"
|
| - "}");
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthFailure(_))
|
| - .WillOnce(Invoke(ExpectCaptchaChallenge));
|
| -
|
| - GaiaAuthFetcher auth(&consumer, "tests", profile_.GetRequestContext());
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back(GaiaUrls::GetInstance()->oauth1_login_scope());
|
| - auth.StartClientOAuth("username", "password", scopes, "", "en");
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthTwoFactorChallenge) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_success(false);
|
| - factory.set_results("{"
|
| - " \"cause\" : \"NeedsAdditional\","
|
| - " \"fallback\" : {"
|
| - " \"name\" : \"Terminating\","
|
| - " \"url\" : \"https://www.terminating.com\""
|
| - " },"
|
| - " \"challenge\" : {"
|
| - " \"name\" : \"TwoStep\","
|
| - " \"prompt_text\" : \"prompt_text\","
|
| - " \"alternate_text\" : \"alternate_text\","
|
| - " \"challenge_token\" : \"challengetokenblob\","
|
| - " \"field_length\" : 10"
|
| - " }"
|
| - "}");
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthFailure(_))
|
| - .WillOnce(Invoke(ExpectTwoFactorChallenge));
|
| -
|
| - GaiaAuthFetcher auth(&consumer, "tests", profile_.GetRequestContext());
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back(GaiaUrls::GetInstance()->oauth1_login_scope());
|
| - auth.StartClientOAuth("username", "password", scopes, "", "en");
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthChallengeSuccess) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_results(kClientOAuthValidResponse);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthSuccess(
|
| - GaiaAuthConsumer::ClientOAuthResult("rt1", "at1", 3600))).Times(2);
|
| -
|
| - GaiaAuthFetcher auth1(&consumer, std::string(), profile_.GetRequestContext());
|
| - auth1.StartClientOAuthChallengeResponse(GoogleServiceAuthError::TWO_FACTOR,
|
| - "token", "mysolution");
|
| -
|
| - scoped_ptr<base::Value> actual1(base::JSONReader::Read(auth1.request_body_));
|
| - scoped_ptr<base::Value> expected1(base::JSONReader::Read(
|
| - "{"
|
| - " \"challenge_reply\" : {"
|
| - " \"name\" : \"TwoStep\","
|
| - " \"challenge_token\" : \"token\","
|
| - " \"otp\" : \"mysolution\""
|
| - " }"
|
| - "}"));
|
| - EXPECT_TRUE(expected1->Equals(actual1.get()));
|
| -
|
| - GaiaAuthFetcher auth2(&consumer, "tests", profile_.GetRequestContext());
|
| - auth2.StartClientOAuthChallengeResponse(
|
| - GoogleServiceAuthError::CAPTCHA_REQUIRED, "token", "mysolution");
|
| -
|
| - scoped_ptr<base::Value> actual2(base::JSONReader::Read(auth2.request_body_));
|
| - scoped_ptr<base::Value> expected2(base::JSONReader::Read(
|
| - "{"
|
| - " \"challenge_reply\" : {"
|
| - " \"name\" : \"Captcha\","
|
| - " \"challenge_token\" : \"token\","
|
| - " \"solution\" : \"mysolution\""
|
| - " }"
|
| - "}"));
|
| - EXPECT_TRUE(expected2->Equals(actual2.get()));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, ClientOAuthChallengeQuote) {
|
| - MockURLFetcherFactory<MockFetcher> factory;
|
| - factory.set_results(kClientOAuthValidResponse);
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientOAuthSuccess(
|
| - GaiaAuthConsumer::ClientOAuthResult("rt1", "at1", 3600))).Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(), profile_.GetRequestContext());
|
| - auth.StartClientOAuthChallengeResponse(GoogleServiceAuthError::TWO_FACTOR,
|
| - "to\"ken", "my\"solution");
|
| -
|
| - scoped_ptr<base::Value> actual(base::JSONReader::Read(auth.request_body_));
|
| - scoped_ptr<base::Value> expected(base::JSONReader::Read(
|
| - "{"
|
| - " \"challenge_reply\" : {"
|
| - " \"name\" : \"TwoStep\","
|
| - " \"challenge_token\" : \"to\\\"ken\","
|
| - " \"otp\" : \"my\\\"solution\""
|
| - " }"
|
| - "}"));
|
| - EXPECT_TRUE(expected->Equals(actual.get()));
|
| -}
|
| -
|
| -TEST_F(GaiaAuthFetcherTest, StartOAuthLogin) {
|
| - // OAuthLogin returns the same as the ClientLogin endpoint, minus CAPTCHA
|
| - // responses.
|
| - std::string data("SID=sid\nLSID=lsid\nAuth=auth\n");
|
| -
|
| - GaiaAuthConsumer::ClientLoginResult result;
|
| - result.lsid = "lsid";
|
| - result.sid = "sid";
|
| - result.token = "auth";
|
| - result.data = data;
|
| -
|
| - MockGaiaConsumer consumer;
|
| - EXPECT_CALL(consumer, OnClientLoginSuccess(result))
|
| - .Times(1);
|
| -
|
| - GaiaAuthFetcher auth(&consumer, std::string(),
|
| - profile_.GetRequestContext());
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - MockFetcher mock_fetcher(
|
| - oauth_login_gurl_, status, net::HTTP_OK, cookies_, data,
|
| - net::URLFetcher::GET, &auth);
|
| - auth.OnURLFetchComplete(&mock_fetcher);
|
| -}
|
|
|