| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 // | |
| 5 // A complete set of unit tests for GaiaOAuthFetcher. | |
| 6 // Originally ported from GaiaAuthFetcher tests. | |
| 7 | |
| 8 #include <string> | |
| 9 | |
| 10 #include "base/memory/scoped_ptr.h" | |
| 11 #include "chrome/browser/net/gaia/gaia_oauth_consumer.h" | |
| 12 #include "chrome/browser/net/gaia/gaia_oauth_fetcher.h" | |
| 13 #include "chrome/test/base/testing_profile.h" | |
| 14 #include "content/public/test/test_browser_thread_bundle.h" | |
| 15 #include "google_apis/gaia/gaia_constants.h" | |
| 16 #include "google_apis/gaia/gaia_urls.h" | |
| 17 #include "google_apis/gaia/google_service_auth_error.h" | |
| 18 #include "net/base/net_errors.h" | |
| 19 #include "net/http/http_status_code.h" | |
| 20 #include "net/url_request/test_url_fetcher_factory.h" | |
| 21 #include "net/url_request/url_request_status.h" | |
| 22 #include "testing/gmock/include/gmock/gmock.h" | |
| 23 #include "testing/gtest/include/gtest/gtest.h" | |
| 24 #include "url/gurl.h" | |
| 25 | |
| 26 class MockGaiaOAuthConsumer : public GaiaOAuthConsumer { | |
| 27 public: | |
| 28 MockGaiaOAuthConsumer() {} | |
| 29 ~MockGaiaOAuthConsumer() {} | |
| 30 | |
| 31 MOCK_METHOD1(OnGetOAuthTokenSuccess, void(const std::string& oauth_token)); | |
| 32 MOCK_METHOD1(OnGetOAuthTokenFailure, | |
| 33 void(const GoogleServiceAuthError& error)); | |
| 34 | |
| 35 MOCK_METHOD2(OnOAuthGetAccessTokenSuccess, void(const std::string& token, | |
| 36 const std::string& secret)); | |
| 37 MOCK_METHOD1(OnOAuthGetAccessTokenFailure, | |
| 38 void(const GoogleServiceAuthError& error)); | |
| 39 | |
| 40 MOCK_METHOD3(OnOAuthWrapBridgeSuccess, | |
| 41 void(const std::string& service_scope, | |
| 42 const std::string& token, | |
| 43 const std::string& expires_in)); | |
| 44 MOCK_METHOD2(OnOAuthWrapBridgeFailure, | |
| 45 void(const std::string& service_scope, | |
| 46 const GoogleServiceAuthError& error)); | |
| 47 | |
| 48 MOCK_METHOD1(OnUserInfoSuccess, void(const std::string& email)); | |
| 49 MOCK_METHOD1(OnUserInfoFailure, void(const GoogleServiceAuthError& error)); | |
| 50 | |
| 51 MOCK_METHOD0(OnOAuthRevokeTokenSuccess, void()); | |
| 52 MOCK_METHOD1(OnOAuthRevokeTokenFailure, | |
| 53 void(const GoogleServiceAuthError& error)); | |
| 54 }; | |
| 55 | |
| 56 class MockGaiaOAuthFetcher : public GaiaOAuthFetcher { | |
| 57 public: | |
| 58 MockGaiaOAuthFetcher(GaiaOAuthConsumer* consumer, | |
| 59 net::URLRequestContextGetter* getter, | |
| 60 const std::string& service_scope) | |
| 61 : GaiaOAuthFetcher( | |
| 62 consumer, getter, service_scope) {} | |
| 63 | |
| 64 ~MockGaiaOAuthFetcher() {} | |
| 65 | |
| 66 void set_request_type(RequestType type) { | |
| 67 request_type_ = type; | |
| 68 } | |
| 69 | |
| 70 MOCK_METHOD1(StartOAuthGetAccessToken, | |
| 71 void(const std::string& oauth1_request_token)); | |
| 72 | |
| 73 MOCK_METHOD4(StartOAuthWrapBridge, | |
| 74 void(const std::string& oauth1_access_token, | |
| 75 const std::string& oauth1_access_token_secret, | |
| 76 const std::string& wrap_token_duration, | |
| 77 const std::string& oauth2_scope)); | |
| 78 | |
| 79 MOCK_METHOD1(StartUserInfo, void(const std::string& oauth2_access_token)); | |
| 80 }; | |
| 81 | |
| 82 #if 0 // Suppressing for now | |
| 83 TEST(GaiaOAuthFetcherTest, GetOAuthToken) { | |
| 84 const std::string oauth_token = "4/OAuth1-Request_Token-1234567"; | |
| 85 base::Time creation = base::Time::Now(); | |
| 86 base::Time expiration = base::Time::Time(); | |
| 87 | |
| 88 scoped_ptr<net::CanonicalCookie> canonical_cookie; | |
| 89 canonical_cookie.reset( | |
| 90 new net::CanonicalCookie( | |
| 91 GURL("http://www.google.com/"), // url | |
| 92 "oauth_token", // name | |
| 93 oauth_token, // value | |
| 94 "www.google.com", // domain | |
| 95 "/accounts/o8/GetOAuthToken", // path | |
| 96 "", // mac_key | |
| 97 "", // mac_algorithm | |
| 98 creation, // creation | |
| 99 expiration, // expiration | |
| 100 creation, // last_access | |
| 101 true, // secure | |
| 102 true, // httponly | |
| 103 false)); // has_expires | |
| 104 | |
| 105 scoped_ptr<ChromeCookieDetails::ChromeCookieDetails> cookie_details; | |
| 106 cookie_details.reset( | |
| 107 new ChromeCookieDetails::ChromeCookieDetails( | |
| 108 canonical_cookie.get(), | |
| 109 false, | |
| 110 net::CookieMonster::Delegate::CHANGE_COOKIE_EXPLICIT)); | |
| 111 | |
| 112 MockGaiaOAuthConsumer consumer; | |
| 113 EXPECT_CALL(consumer, OnGetOAuthTokenSuccess(oauth_token)).Times(1); | |
| 114 | |
| 115 TestingProfile profile; | |
| 116 | |
| 117 MockGaiaOAuthFetcher oauth_fetcher(&consumer, | |
| 118 profile.GetRequestContext(), | |
| 119 std::string()); | |
| 120 EXPECT_CALL(oauth_fetcher, StartOAuthGetAccessToken(oauth_token)).Times(1); | |
| 121 } | |
| 122 #endif // 0 // Suppressing for now | |
| 123 | |
| 124 class GaiaOAuthFetcherTest : public testing::Test { | |
| 125 private: | |
| 126 content::TestBrowserThreadBundle thread_bundle_; | |
| 127 }; | |
| 128 | |
| 129 TEST_F(GaiaOAuthFetcherTest, OAuthGetAccessToken) { | |
| 130 const std::string oauth_token = | |
| 131 "1/OAuth1-Access_Token-1234567890abcdefghijklm"; | |
| 132 const std::string oauth_token_secret = "Dont_tell_the_secret-123"; | |
| 133 const std::string data("oauth_token=" | |
| 134 "1%2FOAuth1-Access_Token-1234567890abcdefghijklm" | |
| 135 "&oauth_token_secret=Dont_tell_the_secret-123"); | |
| 136 | |
| 137 MockGaiaOAuthConsumer consumer; | |
| 138 EXPECT_CALL(consumer, | |
| 139 OnOAuthGetAccessTokenSuccess(oauth_token, | |
| 140 oauth_token_secret)).Times(1); | |
| 141 | |
| 142 TestingProfile profile; | |
| 143 MockGaiaOAuthFetcher oauth_fetcher(&consumer, | |
| 144 profile.GetRequestContext(), | |
| 145 "service_scope-JnG18MEE"); | |
| 146 oauth_fetcher.set_request_type(GaiaOAuthFetcher::OAUTH1_ALL_ACCESS_TOKEN); | |
| 147 EXPECT_CALL(oauth_fetcher, | |
| 148 StartOAuthWrapBridge(oauth_token, | |
| 149 oauth_token_secret, | |
| 150 "3600", | |
| 151 "service_scope-JnG18MEE")).Times(1); | |
| 152 | |
| 153 net::ResponseCookies cookies; | |
| 154 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | |
| 155 GURL url(GaiaUrls::GetInstance()->oauth_get_access_token_url()); | |
| 156 | |
| 157 net::TestURLFetcher test_fetcher(0, GURL(), &oauth_fetcher); | |
| 158 test_fetcher.set_url(url); | |
| 159 test_fetcher.set_status(status); | |
| 160 test_fetcher.set_response_code(net::HTTP_OK); | |
| 161 test_fetcher.set_cookies(cookies); | |
| 162 test_fetcher.SetResponseString(data); | |
| 163 oauth_fetcher.OnURLFetchComplete(&test_fetcher); | |
| 164 } | |
| 165 | |
| 166 TEST_F(GaiaOAuthFetcherTest, OAuthWrapBridge) { | |
| 167 const std::string wrap_token = | |
| 168 "1/OAuth2-Access_Token-nopqrstuvwxyz1234567890"; | |
| 169 const std::string expires_in = "3600"; | |
| 170 | |
| 171 const std::string data("wrap_access_token=" | |
| 172 "1%2FOAuth2-Access_Token-nopqrstuvwxyz1234567890" | |
| 173 "&wrap_access_token_expires_in=3600"); | |
| 174 | |
| 175 MockGaiaOAuthConsumer consumer; | |
| 176 EXPECT_CALL(consumer, | |
| 177 OnOAuthWrapBridgeSuccess("service_scope-0fL85iOi", | |
| 178 wrap_token, | |
| 179 expires_in)).Times(1); | |
| 180 | |
| 181 TestingProfile profile; | |
| 182 MockGaiaOAuthFetcher oauth_fetcher(&consumer, | |
| 183 profile.GetRequestContext(), | |
| 184 "service_scope-0fL85iOi"); | |
| 185 oauth_fetcher.set_request_type(GaiaOAuthFetcher::OAUTH2_SERVICE_ACCESS_TOKEN); | |
| 186 EXPECT_CALL(oauth_fetcher, StartUserInfo(wrap_token)).Times(1); | |
| 187 | |
| 188 net::ResponseCookies cookies; | |
| 189 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | |
| 190 GURL url(GaiaUrls::GetInstance()->oauth_wrap_bridge_url()); | |
| 191 | |
| 192 net::TestURLFetcher test_fetcher(0, GURL(), &oauth_fetcher); | |
| 193 test_fetcher.set_url(url); | |
| 194 test_fetcher.set_status(status); | |
| 195 test_fetcher.set_response_code(net::HTTP_OK); | |
| 196 test_fetcher.set_cookies(cookies); | |
| 197 test_fetcher.SetResponseString(data); | |
| 198 oauth_fetcher.OnURLFetchComplete(&test_fetcher); | |
| 199 } | |
| 200 | |
| 201 TEST_F(GaiaOAuthFetcherTest, UserInfo) { | |
| 202 const std::string email_address = "someone@somewhere.net"; | |
| 203 const std::string wrap_token = | |
| 204 "1/OAuth2-Access_Token-nopqrstuvwxyz1234567890"; | |
| 205 const std::string expires_in = "3600"; | |
| 206 const std::string data("{\n \"email\": \"someone@somewhere.net\",\n" | |
| 207 " \"verified_email\": true\n}\n"); | |
| 208 MockGaiaOAuthConsumer consumer; | |
| 209 EXPECT_CALL(consumer, | |
| 210 OnUserInfoSuccess(email_address)).Times(1); | |
| 211 | |
| 212 TestingProfile profile; | |
| 213 MockGaiaOAuthFetcher oauth_fetcher(&consumer, | |
| 214 profile.GetRequestContext(), | |
| 215 "service_scope-Nrj4LmgU"); | |
| 216 oauth_fetcher.set_request_type(GaiaOAuthFetcher::USER_INFO); | |
| 217 | |
| 218 net::ResponseCookies cookies; | |
| 219 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | |
| 220 GURL url(GaiaUrls::GetInstance()->oauth_user_info_url()); | |
| 221 | |
| 222 net::TestURLFetcher test_fetcher(0, GURL(), &oauth_fetcher); | |
| 223 test_fetcher.set_url(url); | |
| 224 test_fetcher.set_status(status); | |
| 225 test_fetcher.set_response_code(net::HTTP_OK); | |
| 226 test_fetcher.set_cookies(cookies); | |
| 227 test_fetcher.SetResponseString(data); | |
| 228 oauth_fetcher.OnURLFetchComplete(&test_fetcher); | |
| 229 } | |
| 230 | |
| 231 TEST_F(GaiaOAuthFetcherTest, OAuthRevokeToken) { | |
| 232 const std::string token = "1/OAuth2-Access_Token-nopqrstuvwxyz1234567890"; | |
| 233 MockGaiaOAuthConsumer consumer; | |
| 234 EXPECT_CALL(consumer, | |
| 235 OnOAuthRevokeTokenSuccess()).Times(1); | |
| 236 | |
| 237 TestingProfile profile; | |
| 238 MockGaiaOAuthFetcher oauth_fetcher(&consumer, | |
| 239 profile.GetRequestContext(), | |
| 240 "service_scope-Nrj4LmgU"); | |
| 241 oauth_fetcher.set_request_type(GaiaOAuthFetcher::OAUTH2_REVOKE_TOKEN); | |
| 242 | |
| 243 net::ResponseCookies cookies; | |
| 244 net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0); | |
| 245 GURL url(GaiaUrls::GetInstance()->oauth_revoke_token_url()); | |
| 246 | |
| 247 net::TestURLFetcher test_fetcher(0, GURL(), &oauth_fetcher); | |
| 248 test_fetcher.set_url(url); | |
| 249 test_fetcher.set_status(status); | |
| 250 test_fetcher.set_response_code(net::HTTP_OK); | |
| 251 test_fetcher.set_cookies(cookies); | |
| 252 oauth_fetcher.OnURLFetchComplete(&test_fetcher); | |
| 253 } | |
| OLD | NEW |