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 |