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