gaia_oauth_client_unittest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Use of this source code is governed by a BSD-style license that can be 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// found in the LICENSE file. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// A complete set of unit tests for GaiaOAuthClient. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string> 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <vector> 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "base/strings/string_number_conversions.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "base/values.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "google_apis/gaia/gaia_oauth_client.h" 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "net/base/net_errors.h" 1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "net/http/http_status_code.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "net/url_request/test_url_fetcher_factory.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "net/url_request/url_fetcher_delegate.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "net/url_request/url_request_status.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "net/url_request/url_request_test_util.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "testing/gmock/include/gmock/gmock.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "testing/gtest/include/gtest/gtest.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "url/gurl.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing ::testing::_; 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing ::testing::Eq; 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing ::testing::HasSubstr; 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing ::testing::Pointee; 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruusing ::testing::SaveArg; 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querunamespace { 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Responds as though OAuth returned from the server. 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass MockOAuthFetcher : public net::TestURLFetcher { 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcher(int response_code, 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int max_failure_count, 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool complete_immediately, 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const GURL& url, 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const std::string& results, 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru net::URLFetcher::RequestType request_type, 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru net::URLFetcherDelegate* d) 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : net::TestURLFetcher(0, url, d), 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max_failure_count_(max_failure_count), 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru current_failure_count_(0), 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru complete_immediately_(complete_immediately) { 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru set_url(url); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru set_response_code(response_code); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SetResponseString(results); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~MockOAuthFetcher() { } 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void Start() OVERRIDE { 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((GetResponseCode() != net::HTTP_OK) && (max_failure_count_ != -1) && 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (current_failure_count_ == max_failure_count_)) { 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru set_response_code(net::HTTP_OK); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru net::URLRequestStatus::Status code = net::URLRequestStatus::SUCCESS; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (GetResponseCode() != net::HTTP_OK) { 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru code = net::URLRequestStatus::FAILED; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru current_failure_count_++; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru set_status(net::URLRequestStatus(code, 0)); 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (complete_immediately_) 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delegate()->OnURLFetchComplete(this); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void Finish() { 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ASSERT_FALSE(complete_immediately_); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delegate()->OnURLFetchComplete(this); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private: 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int max_failure_count_; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int current_failure_count_; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool complete_immediately_; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcher); 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass MockOAuthFetcherFactory : public net::URLFetcherFactory, 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public net::ScopedURLFetcherFactory { 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory() 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : net::ScopedURLFetcherFactory(this), 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru response_code_(net::HTTP_OK), 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru complete_immediately_(true) { 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~MockOAuthFetcherFactory() {} 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual net::URLFetcher* CreateURLFetcher( 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int id, 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const GURL& url, 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru net::URLFetcher::RequestType request_type, 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru net::URLFetcherDelegate* d) OVERRIDE { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru url_fetcher_ = new MockOAuthFetcher( 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru response_code_, 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max_failure_count_, 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru complete_immediately_, 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru url, 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru results_, 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru request_type, 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return url_fetcher_; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void set_response_code(int response_code) { 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru response_code_ = response_code; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void set_max_failure_count(int count) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max_failure_count_ = count; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void set_results(const std::string& results) { 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru results_ = results; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcher* get_url_fetcher() { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return url_fetcher_; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void set_complete_immediately(bool complete_immediately) { 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru complete_immediately_ = complete_immediately; 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private: 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcher* url_fetcher_; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int response_code_; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bool complete_immediately_; 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int max_failure_count_; 12554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius std::string results_; 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcherFactory); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kTestAccessToken = "1/fFAGRNJru1FTz70BzhT3Zg"; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kTestRefreshToken = 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ"; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kTestUserEmail = "a_user@gmail.com"; 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kTestUserId = "8675309"; 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst int kTestExpiresIn = 3920; 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kDummyGetTokensResult = 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "{\"access_token\":\"" + kTestAccessToken + "\"," 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "," 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"refresh_token\":\"" + kTestRefreshToken + "\"}"; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kDummyRefreshTokenResult = 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "{\"access_token\":\"" + kTestAccessToken + "\"," 143b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "}"; 144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 145103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusconst std::string kDummyUserInfoResult = 146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho "{\"email\":\"" + kTestUserEmail + "\"}"; 147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoconst std::string kDummyUserIdResult = 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "{\"id\":\"" + kTestUserId + "\"}"; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst std::string kDummyTokenInfoResult = 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "{\"issued_to\": \"1234567890.apps.googleusercontent.com\"," 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"audience\": \"1234567890.apps.googleusercontent.com\"," 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"scope\": \"https://googleapis.com/oauth2/v2/tokeninfo\"," 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "}"; 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querunamespace gaia { 159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruclass GaiaOAuthClientTest : public testing::Test { 161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru protected: 162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru virtual void SetUp() OVERRIDE { 163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru client_info_.client_id = "test_client_id"; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru client_info_.client_secret = "test_client_secret"; 165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru client_info_.redirect_uri = "test_redirect_uri"; 166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 16727f654740f2a26ad62a5c155af9199af9e69b889claireho 168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru protected: 16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho net::TestURLRequestContextGetter* GetRequestContext() { 17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (!request_context_getter_) { 17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho request_context_getter_ = new net::TestURLRequestContextGetter( 17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho message_loop_.message_loop_proxy()); 17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return request_context_getter_; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru base::MessageLoop message_loop_; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OAuthClientInfo client_info_; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass MockGaiaOAuthClientDelegate : public gaia::GaiaOAuthClient::Delegate { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru public: 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate() {} 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~MockGaiaOAuthClientDelegate() {} 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD3(OnGetTokensResponse, void(const std::string& refresh_token, 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const std::string& access_token, 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int expires_in_seconds)); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD2(OnRefreshTokenResponse, void(const std::string& access_token, 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int expires_in_seconds)); 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD1(OnGetUserEmailResponse, void(const std::string& user_email)); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD1(OnGetUserIdResponse, void(const std::string& user_id)); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD0(OnOAuthError, void()); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD1(OnNetworkError, void(int response_code)); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // gMock doesn't like methods that take or return scoped_ptr. A 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // work-around is to create a mock method that takes a raw ptr, and 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // override the problematic method to call through to it. 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // https://groups.google.com/a/chromium.org/d/msg/chromium-dev/01sDxsJ1OYw/I_S0xCBRF2oJ 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MOCK_METHOD1(OnGetTokenInfoResponsePtr, 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void(const base::DictionaryValue* token_info)); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void OnGetTokenInfoResponse( 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru scoped_ptr<base::DictionaryValue> token_info) OVERRIDE { 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru token_info_.reset(token_info.release()); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OnGetTokenInfoResponsePtr(token_info_.get()); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private: 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru scoped_ptr<base::DictionaryValue> token_info_; 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DISALLOW_COPY_AND_ASSIGN(MockGaiaOAuthClientDelegate); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, NetworkFailure) { 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int response_code = net::HTTP_INTERNAL_SERVER_ERROR; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnNetworkError(response_code)) 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru .Times(1); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_response_code(response_code); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_max_failure_count(4); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetTokensFromAuthCode(client_info_, "auth_code", 2, &delegate); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, NetworkFailureRecover) { 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int response_code = net::HTTP_INTERNAL_SERVER_ERROR; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnGetTokensResponse(kTestRefreshToken, kTestAccessToken, 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kTestExpiresIn)).Times(1); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_response_code(response_code); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_max_failure_count(4); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyGetTokensResult); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetTokensFromAuthCode(client_info_, "auth_code", -1, &delegate); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, OAuthFailure) { 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int response_code = net::HTTP_BAD_REQUEST; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnOAuthError()).Times(1); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_response_code(response_code); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_max_failure_count(-1); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyGetTokensResult); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetTokensFromAuthCode(client_info_, "auth_code", -1, &delegate); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, GetTokensSuccess) { 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnGetTokensResponse(kTestRefreshToken, kTestAccessToken, 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kTestExpiresIn)).Times(1); 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyGetTokensResult); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetTokensFromAuthCode(client_info_, "auth_code", -1, &delegate); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, RefreshTokenSuccess) { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnRefreshTokenResponse(kTestAccessToken, 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kTestExpiresIn)).Times(1); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyRefreshTokenResult); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_complete_immediately(false); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.RefreshToken(client_info_, "refresh_token", std::vector<std::string>(), 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru -1, &delegate); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_THAT(factory.get_url_fetcher()->upload_data(), 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Not(HasSubstr("scope"))); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.get_url_fetcher()->Finish(); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, RefreshTokenDownscopingSuccess) { 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnRefreshTokenResponse(kTestAccessToken, 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru kTestExpiresIn)).Times(1); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyRefreshTokenResult); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_complete_immediately(false); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.RefreshToken(client_info_, "refresh_token", 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru std::vector<std::string>(1, "scope4test"), -1, &delegate); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_THAT(factory.get_url_fetcher()->upload_data(), 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru HasSubstr("&scope=scope4test")); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.get_url_fetcher()->Finish(); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, GetUserEmail) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnGetUserEmailResponse(kTestUserEmail)).Times(1); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyUserInfoResult); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetUserEmail("access_token", 1, &delegate); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, GetUserId) { 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnGetUserIdResponse(kTestUserId)).Times(1); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyUserIdResult); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetUserId("access_token", 1, &delegate); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTEST_F(GaiaOAuthClientTest, GetTokenInfo) { 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const base::DictionaryValue* captured_result; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockGaiaOAuthClientDelegate delegate; 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru EXPECT_CALL(delegate, OnGetTokenInfoResponsePtr(_)) 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru .WillOnce(SaveArg<0>(&captured_result)); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MockOAuthFetcherFactory factory; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru factory.set_results(kDummyTokenInfoResult); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GaiaOAuthClient auth(GetRequestContext()); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru auth.GetTokenInfo("access_token", 1, &delegate); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru std::string issued_to; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ASSERT_TRUE(captured_result->GetString("issued_to", &issued_to)); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ASSERT_EQ("1234567890.apps.googleusercontent.com", issued_to); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} // namespace gaia 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru