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

Side by Side Diff: remoting/test/access_token_fetcher_unittest.cc

Issue 880273006: Adding the AccessTokenFetcher and Environment class to the app remoting test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing some lint/readability errors Created 5 years, 10 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
OLDNEW
(Empty)
1 // Copyright 2015 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 #include "remoting/test/access_token_fetcher.h"
6
7 #include "base/bind.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace {
12 const char kAuthCodeValue[] = "test_auth_code_value";
Wez 2015/02/13 03:01:52 nit: Indentation
joedow 2015/02/14 02:31:26 Done.
13 const char kAccessTokenValue[] = "test_access_token_value";
14 const char kRefreshTokenValue[] = "test_refresh_token_value";
15 const int kTokenExpirationValue = 3600;
16 const int kNetworkErrorCode = 404;
17 }
18
19 namespace remoting {
20 namespace test {
21
22 using testing::_;
23
24 // This class implements the adapter interface which is used by the
25 // AccessTokenFetcher to make its gaia network calls.
26 class MockGaiaOAuthClient : public GaiaOAuthClientAdapter {
27 public:
28 MockGaiaOAuthClient() : GaiaOAuthClientAdapter(nullptr) {}
29 ~MockGaiaOAuthClient() override {}
30
31 void OnAccessTokenRetrieved(
Wez 2015/02/13 03:01:52 Style-guide prefers that non-accessor methods not
joedow 2015/02/14 02:31:27 Done.
32 const std::string& access_token,
33 const std::string& refresh_token) {
34 access_token_retrieved = access_token;
35 refresh_token_retrieved = refresh_token;
36 }
37
38 // Since we only want the delegate parameter for this mock, we will override
39 // the virtual members and have them call simplified versions.
Wez 2015/02/13 03:01:52 Since you'll ignore the other three parameters, do
joedow 2015/02/14 02:31:27 Done.
40 void GetTokensFromAuthCode(
41 const gaia::OAuthClientInfo& oauth_client_info,
42 const std::string& auth_code,
43 int max_retries,
44 gaia::GaiaOAuthClient::Delegate* delegate) override {
45 GetTokensFromAuthCodeImpl(delegate);
46 }
47 void RefreshToken(
48 const gaia::OAuthClientInfo& oauth_client_info,
49 const std::string& refresh_token,
50 const std::vector<std::string>& scopes,
51 int max_retries,
52 gaia::GaiaOAuthClient::Delegate* delegate) override {
53 RefreshTokenImpl(delegate);
54 }
55 void GetTokenInfo(
56 const std::string& oauth_access_token,
57 int max_retries,
58 gaia::GaiaOAuthClient::Delegate* delegate) override {
59 GetTokenInfoImpl(delegate);
60 }
61
62 MOCK_METHOD1(GetTokensFromAuthCodeImpl,
63 void(gaia::GaiaOAuthClient::Delegate* delegate));
64
65 MOCK_METHOD1(RefreshTokenImpl,
66 void(gaia::GaiaOAuthClient::Delegate* delegate));
67
68 MOCK_METHOD1(GetTokenInfoImpl,
69 void(gaia::GaiaOAuthClient::Delegate* delegate));
70
71 void DelegateToCompleteCallbacks() {
Wez 2015/02/13 03:01:51 This function name isn't very descriptive - looks
joedow 2015/02/14 02:31:26 Done.
72 ON_CALL(*this, GetTokensFromAuthCodeImpl(_))
73 .WillByDefault(testing::Invoke(this,
74 &MockGaiaOAuthClient::CompleteAuthCodeCallback));
75 ON_CALL(*this, RefreshTokenImpl(_))
76 .WillByDefault(testing::Invoke(this,
77 &MockGaiaOAuthClient::CompleteRefreshCallback));
78 ON_CALL(*this, GetTokenInfoImpl(_))
79 .WillByDefault(testing::Invoke(this,
80 &MockGaiaOAuthClient::CompleteTokenInfoCallback));
81 }
82
83 void DelegateToOAuthErrorCallback() {
84 ON_CALL(*this, GetTokensFromAuthCodeImpl(_))
85 .WillByDefault(testing::Invoke(this,
86 &MockGaiaOAuthClient::OAuthErrorCallback));
87 ON_CALL(*this, RefreshTokenImpl(_))
88 .WillByDefault(testing::Invoke(this,
89 &MockGaiaOAuthClient::OAuthErrorCallback));
90 ON_CALL(*this, GetTokenInfoImpl(_))
91 .WillByDefault(testing::Invoke(this,
92 &MockGaiaOAuthClient::OAuthErrorCallback));
93 }
94
95 void DelegateToNetworkErrorCallback() {
96 ON_CALL(*this, GetTokensFromAuthCodeImpl(_))
97 .WillByDefault(testing::Invoke(this,
98 &MockGaiaOAuthClient::NetworkErrorCallback));
99 ON_CALL(*this, RefreshTokenImpl(_))
100 .WillByDefault(testing::Invoke(this,
101 &MockGaiaOAuthClient::NetworkErrorCallback));
102 ON_CALL(*this, GetTokenInfoImpl(_))
103 .WillByDefault(testing::Invoke(this,
104 &MockGaiaOAuthClient::NetworkErrorCallback));
105 }
106
107 void DelegateToInvalidTokenCallback() {
108 ON_CALL(*this, GetTokensFromAuthCodeImpl(_))
109 .WillByDefault(testing::Invoke(this,
110 &MockGaiaOAuthClient::CompleteAuthCodeCallback));
111 ON_CALL(*this, RefreshTokenImpl(_))
112 .WillByDefault(testing::Invoke(this,
113 &MockGaiaOAuthClient::CompleteRefreshCallback));
114 ON_CALL(*this, GetTokenInfoImpl(_))
115 .WillByDefault(testing::Invoke(this,
116 &MockGaiaOAuthClient::InvalidTokenInfoCallback));
117 }
118
119 void CompleteAuthCodeCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
120 DCHECK(delegate);
121
122 delegate->OnGetTokensResponse(
123 kRefreshTokenValue,
124 kAccessTokenValue,
125 kTokenExpirationValue);
126 }
127
128 void CompleteRefreshCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
129 DCHECK(delegate);
130
131 delegate->OnRefreshTokenResponse(kAccessTokenValue, kTokenExpirationValue);
132 }
133
134 void CompleteTokenInfoCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
135 DCHECK(delegate);
136
137 // This call needs a dictionary object, but does not it to be populated.
138 scoped_ptr<base::DictionaryValue> token_info(new base::DictionaryValue());
139 delegate->OnGetTokenInfoResponse(token_info.Pass());
Wez 2015/02/13 03:01:52 nit: Just use make_scoped_ptr(new base::Dictionary
joedow 2015/02/14 02:31:27 Acknowledged.
140 }
141
142 void InvalidTokenInfoCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
143 DCHECK(delegate);
144
145 scoped_ptr<base::DictionaryValue> token_info(new base::DictionaryValue());
Wez 2015/02/13 03:01:52 And here?
joedow 2015/02/14 02:31:27 Acknowledged.
146 token_info->SetString("error", "invalid");
147 token_info->SetString("error_description", "Whoa! Invalid Token!");
148 delegate->OnGetTokenInfoResponse(token_info.Pass());
149 }
150
151 void OAuthErrorCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
152 DCHECK(delegate);
153
154 delegate->OnOAuthError();
155 }
156
157 void NetworkErrorCallback(gaia::GaiaOAuthClient::Delegate* delegate) {
158 DCHECK(delegate);
159
160 delegate->OnNetworkError(kNetworkErrorCode);
161 }
162
163 // Verification members used to observe the value of the data retrieved.
Wez 2015/02/13 03:01:52 nit: Indentation
joedow 2015/02/14 02:31:27 Acknowledged.
164 std::string access_token_retrieved;
165 std::string refresh_token_retrieved;
166 };
Wez 2015/02/13 03:01:51 DISALLOW_COPY_AND_ASSIGN()?
joedow 2015/02/14 02:31:26 Acknowledged.
167
168 // This class uses all of the same logic as the normal AccessTokenFetcher but it
169 // overrides the function which refreshes the GaiaOAuthClient so it can use a
170 // mock instance.
171 class TestAccessTokenFetcher : public AccessTokenFetcher {
Wez 2015/02/13 03:01:51 nit: AccessTokenFetcherForTest or FakeAccessTokenF
joedow 2015/02/14 02:31:26 Done.
172 public:
173 explicit TestAccessTokenFetcher(GaiaOAuthClientAdapter* mock_client) {
Wez 2015/02/13 03:01:51 Make this a scoped_ptr and use make_scoped_ptr() i
joedow 2015/02/14 02:31:26 Done.
174 DCHECK(mock_client);
175 auth_client_.reset(mock_client);
176 }
177 ~TestAccessTokenFetcher() override {}
178
179 void RefreshGaiaOAuthClientInstance() override {
Wez 2015/02/13 03:01:52 If you follow the suggestion re CreateGaiaOAuthCli
joedow 2015/02/14 02:31:26 I don't think I need too make this complex (e.g. a
180 // No need to refresh the object here since we use the same mock instance.
181 }
182 };
Wez 2015/02/13 03:01:52 DISALLOW_COPY_AND_ASSIGN
joedow 2015/02/14 02:31:26 Done.
183
184 TEST(AccessTokenFetcherTest, ExchangeAuthCodeForAccessToken) {
185 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
186
187 mock_gaia_client->DelegateToCompleteCallbacks();
Wez 2015/02/13 03:01:51 Based on this usage, it looks like this should be
joedow 2015/02/14 02:31:26 Acknowledged.
188
189 {
190 testing::Sequence call_sequence;
191
192 EXPECT_CALL(*mock_gaia_client,
193 GetTokensFromAuthCodeImpl(_)).
194 Times(1);
195
196 EXPECT_CALL(*mock_gaia_client,
197 GetTokenInfoImpl(_)).
198 Times(1);
199 }
200
201 EXPECT_CALL(*mock_gaia_client,
202 RefreshTokenImpl(_)).
203 Times(0);
204
205 // Passing the pointer transfers ownership to the token fetcher class. We
206 // will continue to use the object as it will be alive until the token fetcher
207 // is destructed, but we do not want to free it at the end of the function.
Wez 2015/02/13 03:01:52 nit: destroyed :)
joedow 2015/02/14 02:31:26 Done.
208 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
209
210 AccessTokenCallback access_token_callback = base::Bind(
211 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
212 base::Unretained(mock_gaia_client));
213
214 access_token_fetcher.GetAccessTokenFromAuthCode(
215 kAuthCodeValue,
216 access_token_callback);
217
218 EXPECT_STREQ(kAccessTokenValue,
219 mock_gaia_client->access_token_retrieved.c_str());
220 EXPECT_STREQ(kRefreshTokenValue,
221 mock_gaia_client->refresh_token_retrieved.c_str());
222 }
223
224 TEST(AccessTokenFetcherTest, ExchangeRefreshTokenForAccessToken) {
225 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
226
227 mock_gaia_client->DelegateToCompleteCallbacks();
228
229 // Passing the pointer transfers ownership to the token fetcher class. We
230 // will continue to use the object as it will be alive until the token fetcher
231 // is destructed, but we do not want to free it at the end of the function.
232 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
233
234 AccessTokenCallback access_token_callback = base::Bind(
235 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
236 base::Unretained(mock_gaia_client));
237
238 {
239 testing::Sequence call_sequence;
240
241 EXPECT_CALL(*mock_gaia_client,
242 RefreshTokenImpl(_)).
243 Times(1);
244
245 EXPECT_CALL(*mock_gaia_client,
246 GetTokenInfoImpl(_)).
247 Times(1);
248 }
249
250 EXPECT_CALL(*mock_gaia_client,
251 GetTokensFromAuthCodeImpl(_)).
252 Times(0);
253
254 access_token_fetcher.GetAccessTokenFromRefreshToken(
255 kRefreshTokenValue,
256 access_token_callback);
257
258 EXPECT_STREQ(kAccessTokenValue,
259 mock_gaia_client->access_token_retrieved.c_str());
260 EXPECT_STREQ(kRefreshTokenValue,
261 mock_gaia_client->refresh_token_retrieved.c_str());
262 }
263
264 TEST(AccessTokenFetcherTest, MultipleAccessTokenCalls) {
265 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
266
267 mock_gaia_client->DelegateToCompleteCallbacks();
268
269 // Passing the pointer transfers ownership to the token fetcher class. We
270 // will continue to use the object as it will be alive until the token fetcher
271 // is destructed, but we do not want to free it at the end of the function.
272 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
273
274 AccessTokenCallback access_token_callback = base::Bind(
275 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
276 base::Unretained(mock_gaia_client));
277
278 EXPECT_CALL(*mock_gaia_client,
279 GetTokensFromAuthCodeImpl(_)).
280 Times(1);
281
282 EXPECT_CALL(*mock_gaia_client,
283 RefreshTokenImpl(_)).
284 Times(2);
285
286 EXPECT_CALL(*mock_gaia_client,
287 GetTokenInfoImpl(_)).
288 Times(3);
289
290 access_token_fetcher.GetAccessTokenFromAuthCode(
291 kAuthCodeValue,
292 access_token_callback);
293
294 EXPECT_STREQ(kAccessTokenValue,
295 mock_gaia_client->access_token_retrieved.c_str());
296 EXPECT_STREQ(kRefreshTokenValue,
297 mock_gaia_client->refresh_token_retrieved.c_str());
298
299 // Reset our token data for the next iteration.
300 mock_gaia_client->access_token_retrieved.clear();
301 mock_gaia_client->refresh_token_retrieved.clear();
302
303 access_token_fetcher.GetAccessTokenFromRefreshToken(
304 kRefreshTokenValue,
305 access_token_callback);
306
307 EXPECT_STREQ(kAccessTokenValue,
308 mock_gaia_client->access_token_retrieved.c_str());
309 EXPECT_STREQ(kRefreshTokenValue,
310 mock_gaia_client->refresh_token_retrieved.c_str());
311
312 // Reset our token data for the next iteration.
313 mock_gaia_client->access_token_retrieved.clear();
314 mock_gaia_client->refresh_token_retrieved.clear();
315
316 access_token_fetcher.GetAccessTokenFromRefreshToken(
317 kRefreshTokenValue,
318 access_token_callback);
319
320 EXPECT_STREQ(kAccessTokenValue,
321 mock_gaia_client->access_token_retrieved.c_str());
322 EXPECT_STREQ(kRefreshTokenValue,
323 mock_gaia_client->refresh_token_retrieved.c_str());
324 }
325
326 TEST(AccessTokenFetcherTest, ExchangeAuthCode_OAuthError) {
327 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
328
329 mock_gaia_client->DelegateToOAuthErrorCallback();
330
331 // Passing the pointer transfers ownership to the token fetcher class. We
332 // will continue to use the object as it will be alive until the token fetcher
333 // is destructed, but we do not want to free it at the end of the function.
334 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
335
336 AccessTokenCallback access_token_callback = base::Bind(
337 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
338 base::Unretained(mock_gaia_client));
339
340 EXPECT_CALL(*mock_gaia_client,
341 GetTokensFromAuthCodeImpl(_)).
342 Times(1);
343
344 EXPECT_CALL(*mock_gaia_client,
345 RefreshTokenImpl(_)).
346 Times(0);
347
348 EXPECT_CALL(*mock_gaia_client,
349 GetTokenInfoImpl(_)).
350 Times(0);
351
352 access_token_fetcher.GetAccessTokenFromAuthCode(
353 kAuthCodeValue,
354 access_token_callback);
355
356 // Our callback should have been called with empty strings.
357 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
358 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
359 }
360
361 TEST(AccessTokenFetcherTest, ExchangeRefreshToken_OAuthError) {
362 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
363
364 mock_gaia_client->DelegateToOAuthErrorCallback();
365
366 // Passing the pointer transfers ownership to the token fetcher class. We
367 // will continue to use the object as it will be alive until the token fetcher
368 // is destructed, but we do not want to free it at the end of the function.
369 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
370
371 AccessTokenCallback access_token_callback = base::Bind(
372 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
373 base::Unretained(mock_gaia_client));
374
375 EXPECT_CALL(*mock_gaia_client,
376 RefreshTokenImpl(_)).
377 Times(1);
378
379 EXPECT_CALL(*mock_gaia_client,
380 GetTokenInfoImpl(_)).
381 Times(0);
382
383 EXPECT_CALL(*mock_gaia_client,
384 GetTokensFromAuthCodeImpl(_)).
385 Times(0);
386
387 access_token_fetcher.GetAccessTokenFromRefreshToken(
388 kRefreshTokenValue,
389 access_token_callback);
390
391 // Our callback should have been called with empty strings.
392 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
393 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
394 }
395
396 TEST(AccessTokenFetcherTest, ExchangeAuthCode_NetworkError) {
397 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
398
399 mock_gaia_client->DelegateToNetworkErrorCallback();
400
401 // Passing the pointer transfers ownership to the token fetcher class. We
402 // will continue to use the object as it will be alive until the token fetcher
403 // is destructed, but we do not want to free it at the end of the function.
404 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
405
406 AccessTokenCallback access_token_callback = base::Bind(
407 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
408 base::Unretained(mock_gaia_client));
409
410 EXPECT_CALL(*mock_gaia_client,
411 GetTokensFromAuthCodeImpl(_)).
412 Times(1);
413
414 EXPECT_CALL(*mock_gaia_client,
415 RefreshTokenImpl(_)).
416 Times(0);
417
418 EXPECT_CALL(*mock_gaia_client,
419 GetTokenInfoImpl(_)).
420 Times(0);
421
422 access_token_fetcher.GetAccessTokenFromAuthCode(
423 kAuthCodeValue,
424 access_token_callback);
425
426 // Our callback should have been called with empty strings.
427 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
428 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
429 }
430
431 TEST(AccessTokenFetcherTest, ExchangeRefreshToken_NetworkError) {
432 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
433
434 mock_gaia_client->DelegateToNetworkErrorCallback();
435
436 // Passing the pointer transfers ownership to the token fetcher class. We
437 // will continue to use the object as it will be alive until the token fetcher
438 // is destructed, but we do not want to free it at the end of the function.
439 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
440
441 AccessTokenCallback access_token_callback = base::Bind(
442 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
443 base::Unretained(mock_gaia_client));
444
445 EXPECT_CALL(*mock_gaia_client,
446 RefreshTokenImpl(_)).
447 Times(1);
448
449 EXPECT_CALL(*mock_gaia_client,
450 GetTokenInfoImpl(_)).
451 Times(0);
452
453 EXPECT_CALL(*mock_gaia_client,
454 GetTokensFromAuthCodeImpl(_)).
455 Times(0);
456
457 access_token_fetcher.GetAccessTokenFromRefreshToken(
458 kRefreshTokenValue,
459 access_token_callback);
460
461 // Our callback should have been called with empty strings.
462 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
463 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
464 }
465
466 TEST(AccessTokenFetcherTest, AuthCode_GetTokenInfoResponse_InvalidToken) {
467 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
468
469 mock_gaia_client->DelegateToInvalidTokenCallback();
470
471 // Passing the pointer transfers ownership to the token fetcher class. We
472 // will continue to use the object as it will be alive until the token fetcher
473 // is destructed, but we do not want to free it at the end of the function.
474 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
475
476 AccessTokenCallback access_token_callback = base::Bind(
477 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
478 base::Unretained(mock_gaia_client));
479
480 EXPECT_CALL(*mock_gaia_client,
481 GetTokensFromAuthCodeImpl(_)).
482 Times(1);
483
484 EXPECT_CALL(*mock_gaia_client,
485 GetTokenInfoImpl(_)).
486 Times(1);
487
488 EXPECT_CALL(*mock_gaia_client,
489 RefreshTokenImpl(_)).
490 Times(0);
491
492 access_token_fetcher.GetAccessTokenFromAuthCode(
493 kAuthCodeValue,
494 access_token_callback);
495
496 // Our callback should have been called with empty strings.
497 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
498 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
499 }
500
501 TEST(AccessTokenFetcherTest, RefreshToken_GetTokenInfoResponse_InvalidToken) {
502 MockGaiaOAuthClient* mock_gaia_client = new MockGaiaOAuthClient();
503
504 mock_gaia_client->DelegateToInvalidTokenCallback();
505
506 // Passing the pointer transfers ownership to the token fetcher class. We
507 // will continue to use the object as it will be alive until the token fetcher
508 // is destructed, but we do not want to free it at the end of the function.
Wez 2015/02/13 03:01:52 Suggest moving this comment in this and the preced
joedow 2015/02/14 02:31:26 Done.
509 TestAccessTokenFetcher access_token_fetcher(mock_gaia_client);
510
511 AccessTokenCallback access_token_callback = base::Bind(
512 &MockGaiaOAuthClient::OnAccessTokenRetrieved,
513 base::Unretained(mock_gaia_client));
514
515 EXPECT_CALL(*mock_gaia_client,
516 RefreshTokenImpl(_)).
517 Times(1);
518
519 EXPECT_CALL(*mock_gaia_client,
520 GetTokenInfoImpl(_)).
521 Times(1);
522
523 EXPECT_CALL(*mock_gaia_client,
524 GetTokensFromAuthCodeImpl(_)).
525 Times(0);
Wez 2015/02/13 03:01:51 Here and in earlier tests; can't you set these exp
joedow 2015/02/14 02:31:26 Done.
526
527 access_token_fetcher.GetAccessTokenFromRefreshToken(
528 kRefreshTokenValue,
529 access_token_callback);
530
531 // Our callback should have been called with empty strings.
532 EXPECT_STREQ(mock_gaia_client->access_token_retrieved.c_str(), "");
533 EXPECT_STREQ(mock_gaia_client->refresh_token_retrieved.c_str(), "");
534 }
535
536 } // namespace test
537 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698