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

Side by Side Diff: google_apis/gaia/gaia_oauth_client_unittest.cc

Issue 17109006: Device robot refresh token integrity validation. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fix remoting compile error on windows Created 7 years, 6 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 unified diff | Download patch
« no previous file with comments | « google_apis/gaia/gaia_oauth_client.cc ('k') | google_apis/gaia/gaia_urls.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/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_)
67 delegate()->OnURLFetchComplete(this);
68 }
69
70 void Finish() {
71 ASSERT_FALSE(complete_immediately_);
61 delegate()->OnURLFetchComplete(this); 72 delegate()->OnURLFetchComplete(this);
62 } 73 }
63 74
64 private: 75 private:
65 int max_failure_count_; 76 int max_failure_count_;
66 int current_failure_count_; 77 int current_failure_count_;
78 bool complete_immediately_;
67 DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcher); 79 DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcher);
68 }; 80 };
69 81
70 class MockOAuthFetcherFactory : public net::URLFetcherFactory, 82 class MockOAuthFetcherFactory : public net::URLFetcherFactory,
71 public net::ScopedURLFetcherFactory { 83 public net::ScopedURLFetcherFactory {
72 public: 84 public:
73 MockOAuthFetcherFactory() 85 MockOAuthFetcherFactory()
74 : net::ScopedURLFetcherFactory(this), 86 : net::ScopedURLFetcherFactory(this),
75 response_code_(net::HTTP_OK) { 87 response_code_(net::HTTP_OK),
88 complete_immediately_(true) {
76 } 89 }
77 virtual ~MockOAuthFetcherFactory() {} 90 virtual ~MockOAuthFetcherFactory() {}
78 virtual net::URLFetcher* CreateURLFetcher( 91 virtual net::URLFetcher* CreateURLFetcher(
79 int id, 92 int id,
80 const GURL& url, 93 const GURL& url,
81 net::URLFetcher::RequestType request_type, 94 net::URLFetcher::RequestType request_type,
82 net::URLFetcherDelegate* d) OVERRIDE { 95 net::URLFetcherDelegate* d) OVERRIDE {
83 return new MockOAuthFetcher( 96 url_fetcher_ = new MockOAuthFetcher(
84 response_code_, 97 response_code_,
85 max_failure_count_, 98 max_failure_count_,
99 complete_immediately_,
86 url, 100 url,
87 results_, 101 results_,
88 request_type, 102 request_type,
89 d); 103 d);
104 return url_fetcher_;
90 } 105 }
91 void set_response_code(int response_code) { 106 void set_response_code(int response_code) {
92 response_code_ = response_code; 107 response_code_ = response_code;
93 } 108 }
94 void set_max_failure_count(int count) { 109 void set_max_failure_count(int count) {
95 max_failure_count_ = count; 110 max_failure_count_ = count;
96 } 111 }
97 void set_results(const std::string& results) { 112 void set_results(const std::string& results) {
98 results_ = results; 113 results_ = results;
99 } 114 }
115 MockOAuthFetcher* get_url_fetcher() {
116 return url_fetcher_;
117 }
118 void set_complete_immediately(bool complete_immediately) {
119 complete_immediately_ = complete_immediately;
120 }
100 private: 121 private:
122 MockOAuthFetcher* url_fetcher_;
101 int response_code_; 123 int response_code_;
124 bool complete_immediately_;
102 int max_failure_count_; 125 int max_failure_count_;
103 std::string results_; 126 std::string results_;
104 DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcherFactory); 127 DISALLOW_COPY_AND_ASSIGN(MockOAuthFetcherFactory);
105 }; 128 };
106 129
107 const std::string kTestAccessToken = "1/fFAGRNJru1FTz70BzhT3Zg"; 130 const std::string kTestAccessToken = "1/fFAGRNJru1FTz70BzhT3Zg";
108 const std::string kTestRefreshToken = 131 const std::string kTestRefreshToken =
109 "1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ"; 132 "1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ";
110 const std::string kTestUserEmail = "a_user@gmail.com"; 133 const std::string kTestUserEmail = "a_user@gmail.com";
111 const int kTestExpiresIn = 3920; 134 const int kTestExpiresIn = 3920;
112 135
113 const std::string kDummyGetTokensResult = 136 const std::string kDummyGetTokensResult =
114 "{\"access_token\":\"" + kTestAccessToken + "\"," 137 "{\"access_token\":\"" + kTestAccessToken + "\","
115 "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "," 138 "\"expires_in\":" + base::IntToString(kTestExpiresIn) + ","
116 "\"refresh_token\":\"" + kTestRefreshToken + "\"}"; 139 "\"refresh_token\":\"" + kTestRefreshToken + "\"}";
117 140
118 const std::string kDummyRefreshTokenResult = 141 const std::string kDummyRefreshTokenResult =
119 "{\"access_token\":\"" + kTestAccessToken + "\"," 142 "{\"access_token\":\"" + kTestAccessToken + "\","
120 "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "}"; 143 "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "}";
121 144
122 const std::string kDummyUserInfoResult = 145 const std::string kDummyUserInfoResult =
123 "{\"email\":\"" + kTestUserEmail + "\"}"; 146 "{\"email\":\"" + kTestUserEmail + "\"}";
147
148 const std::string kDummyTokenInfoResult =
149 "{\"issued_to\": \"1234567890.apps.googleusercontent.com\","
150 "\"audience\": \"1234567890.apps.googleusercontent.com\","
151 "\"scope\": \"https://googleapis.com/oauth2/v2/tokeninfo\","
152 "\"expires_in\":" + base::IntToString(kTestExpiresIn) + "}";
124 } 153 }
125 154
126 namespace gaia { 155 namespace gaia {
127 156
128 class GaiaOAuthClientTest : public testing::Test { 157 class GaiaOAuthClientTest : public testing::Test {
129 public: 158 public:
130 GaiaOAuthClientTest() {} 159 GaiaOAuthClientTest() {}
160 virtual void SetUp() OVERRIDE {
161 client_info_.client_id = "test_client_id";
162 client_info_.client_secret = "test_client_secret";
163 client_info_.redirect_uri = "test_redirect_uri";
164 };
131 165
132 TestingProfile profile_; 166 TestingProfile profile_;
133 protected: 167 protected:
134 base::MessageLoop message_loop_; 168 base::MessageLoop message_loop_;
169 OAuthClientInfo client_info_;
135 }; 170 };
136 171
137 class MockGaiaOAuthClientDelegate : public gaia::GaiaOAuthClient::Delegate { 172 class MockGaiaOAuthClientDelegate : public gaia::GaiaOAuthClient::Delegate {
138 public: 173 public:
139 MockGaiaOAuthClientDelegate() {} 174 MockGaiaOAuthClientDelegate() {}
140 ~MockGaiaOAuthClientDelegate() {} 175 ~MockGaiaOAuthClientDelegate() {}
141 176
142 MOCK_METHOD3(OnGetTokensResponse, void(const std::string& refresh_token, 177 MOCK_METHOD3(OnGetTokensResponse, void(const std::string& refresh_token,
143 const std::string& access_token, 178 const std::string& access_token,
144 int expires_in_seconds)); 179 int expires_in_seconds));
145 MOCK_METHOD2(OnRefreshTokenResponse, void(const std::string& access_token, 180 MOCK_METHOD2(OnRefreshTokenResponse, void(const std::string& access_token,
146 int expires_in_seconds)); 181 int expires_in_seconds));
147 MOCK_METHOD1(OnGetUserInfoResponse, void(const std::string& user_email)); 182 MOCK_METHOD1(OnGetUserInfoResponse, void(const std::string& user_email));
148 MOCK_METHOD0(OnOAuthError, void()); 183 MOCK_METHOD0(OnOAuthError, void());
149 MOCK_METHOD1(OnNetworkError, void(int response_code)); 184 MOCK_METHOD1(OnNetworkError, void(int response_code));
185
186 // gMock doesn't like methods that take or return scoped_ptr. A
187 // work-around is to create a mock method that takes a raw ptr, and
188 // override the problematic method to call through to it.
189 // https://groups.google.com/a/chromium.org/d/msg/chromium-dev/01sDxsJ1OYw/I_S 0xCBRF2oJ
190 MOCK_METHOD1(OnGetTokenInfoResponsePtr,
191 void(const DictionaryValue* token_info));
192 virtual void OnGetTokenInfoResponse(scoped_ptr<DictionaryValue> token_info)
193 OVERRIDE {
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
OLDNEW
« no previous file with comments | « google_apis/gaia/gaia_oauth_client.cc ('k') | google_apis/gaia/gaia_urls.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698