Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1339)

Unified Diff: chrome/common/net/gaia/gaia_auth_fetcher_unittest.cc

Issue 10928017: Moving google_apis and GaiaClient to src/google_apis. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to head Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_fetcher.cc ('k') | chrome/common/net/gaia/gaia_auth_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
-}
« no previous file with comments | « chrome/common/net/gaia/gaia_auth_fetcher.cc ('k') | chrome/common/net/gaia/gaia_auth_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698