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

Side by Side Diff: components/proximity_auth/cryptauth/cryptauth_client_impl_unittest.cc

Issue 2502343003: Moved //components/proximity_auth/cryptauth to //components/cryptauth. (Closed)
Patch Set: Fixed proto #includes. Created 4 years, 1 month 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 2014 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 "components/proximity_auth/cryptauth/cryptauth_client_impl.h"
6
7 #include "base/command_line.h"
8 #include "base/macros.h"
9 #include "base/memory/ptr_util.h"
10 #include "base/test/null_task_runner.h"
11 #include "components/proximity_auth/cryptauth/cryptauth_access_token_fetcher.h"
12 #include "components/proximity_auth/cryptauth/cryptauth_api_call_flow.h"
13 #include "components/proximity_auth/cryptauth/proto/cryptauth_api.pb.h"
14 #include "components/proximity_auth/cryptauth/switches.h"
15 #include "google_apis/gaia/fake_oauth2_token_service.h"
16 #include "net/url_request/test_url_fetcher_factory.h"
17 #include "net/url_request/url_request_test_util.h"
18 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20 #include "url/gurl.h"
21
22 using testing::_;
23 using testing::DoAll;
24 using testing::Return;
25 using testing::SaveArg;
26 using testing::StrictMock;
27
28 namespace proximity_auth {
29
30 namespace {
31
32 const char kTestGoogleApisUrl[] = "https://www.testgoogleapis.com";
33 const char kAccessToken[] = "access_token";
34 const char kPublicKey1[] = "public_key1";
35 const char kPublicKey2[] = "public_key2";
36 const char kBluetoothAddress1[] = "AA:AA:AA:AA:AA:AA";
37 const char kBluetoothAddress2[] = "BB:BB:BB:BB:BB:BB";
38
39 // Values for the DeviceClassifier field.
40 const int kDeviceOsVersionCode = 100;
41 const int kDeviceSoftwareVersionCode = 200;
42 const char kDeviceSoftwarePackage[] = "cryptauth_client_unittest";
43 const cryptauth::DeviceType kDeviceType = cryptauth::CHROME;
44
45 // CryptAuthAccessTokenFetcher implementation simply returning a predetermined
46 // access token.
47 class FakeCryptAuthAccessTokenFetcher : public CryptAuthAccessTokenFetcher {
48 public:
49 FakeCryptAuthAccessTokenFetcher() : access_token_(kAccessToken) {}
50
51 void FetchAccessToken(const AccessTokenCallback& callback) override {
52 callback.Run(access_token_);
53 }
54
55 void set_access_token(const std::string& access_token) {
56 access_token_ = access_token;
57 };
58
59 private:
60 std::string access_token_;
61 };
62
63 // Mock CryptAuthApiCallFlow, which handles the HTTP requests to CryptAuth.
64 class MockCryptAuthApiCallFlow : public CryptAuthApiCallFlow {
65 public:
66 MockCryptAuthApiCallFlow() : CryptAuthApiCallFlow() {}
67 virtual ~MockCryptAuthApiCallFlow() {}
68
69 MOCK_METHOD6(Start,
70 void(const GURL&,
71 net::URLRequestContextGetter* context,
72 const std::string& access_token,
73 const std::string& serialized_request,
74 const ResultCallback& result_callback,
75 const ErrorCallback& error_callback));
76
77 private:
78 DISALLOW_COPY_AND_ASSIGN(MockCryptAuthApiCallFlow);
79 };
80
81 // Callback that should never be invoked.
82 template <class T>
83 void NotCalled(const T& type) {
84 EXPECT_TRUE(false);
85 }
86
87 // Callback that saves the result returned by CryptAuthClient.
88 template <class T>
89 void SaveResult(T* out, const T& result) {
90 *out = result;
91 }
92
93 } // namespace
94
95 class ProximityAuthCryptAuthClientTest : public testing::Test {
96 protected:
97 ProximityAuthCryptAuthClientTest()
98 : access_token_fetcher_(new FakeCryptAuthAccessTokenFetcher()),
99 api_call_flow_(new StrictMock<MockCryptAuthApiCallFlow>()),
100 url_request_context_(
101 new net::TestURLRequestContextGetter(new base::NullTaskRunner())),
102 serialized_request_(std::string()) {}
103
104 void SetUp() override {
105 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
106 switches::kCryptAuthHTTPHost, kTestGoogleApisUrl);
107
108 cryptauth::DeviceClassifier device_classifier;
109 device_classifier.set_device_os_version_code(kDeviceOsVersionCode);
110 device_classifier.set_device_software_version_code(
111 kDeviceSoftwareVersionCode);
112 device_classifier.set_device_software_package(kDeviceSoftwarePackage);
113 device_classifier.set_device_type(kDeviceType);
114
115 client_.reset(
116 new CryptAuthClientImpl(base::WrapUnique(api_call_flow_),
117 base::WrapUnique(access_token_fetcher_),
118 url_request_context_, device_classifier));
119 }
120
121 // Sets up an expectation and captures a CryptAuth API request to
122 // |request_url|.
123 void ExpectRequest(const std::string& request_url) {
124 GURL url(request_url);
125 EXPECT_CALL(*api_call_flow_,
126 Start(url, url_request_context_.get(), kAccessToken, _, _, _))
127 .WillOnce(DoAll(SaveArg<3>(&serialized_request_),
128 SaveArg<4>(&flow_result_callback_),
129 SaveArg<5>(&flow_error_callback_)));
130 }
131
132 // Returns |response_proto| as the result to the current API request.
133 // ExpectResult() must have been called first.
134 void FinishApiCallFlow(const google::protobuf::MessageLite* response_proto) {
135 flow_result_callback_.Run(response_proto->SerializeAsString());
136 }
137
138 // Ends the current API request with |error_message|. ExpectResult() must have
139 // been called first.
140 void FailApiCallFlow(const std::string& error_message) {
141 flow_error_callback_.Run(error_message);
142 }
143
144 protected:
145 // Owned by |client_|.
146 FakeCryptAuthAccessTokenFetcher* access_token_fetcher_;
147 // Owned by |client_|.
148 StrictMock<MockCryptAuthApiCallFlow>* api_call_flow_;
149
150 scoped_refptr<net::URLRequestContextGetter> url_request_context_;
151 std::unique_ptr<CryptAuthClient> client_;
152
153 std::string serialized_request_;
154 CryptAuthApiCallFlow::ResultCallback flow_result_callback_;
155 CryptAuthApiCallFlow::ErrorCallback flow_error_callback_;
156 };
157
158 TEST_F(ProximityAuthCryptAuthClientTest, GetMyDevicesSuccess) {
159 ExpectRequest(
160 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
161 "getmydevices?alt=proto");
162
163 cryptauth::GetMyDevicesResponse result_proto;
164 cryptauth::GetMyDevicesRequest request_proto;
165 request_proto.set_allow_stale_read(true);
166 client_->GetMyDevices(
167 request_proto,
168 base::Bind(&SaveResult<cryptauth::GetMyDevicesResponse>, &result_proto),
169 base::Bind(&NotCalled<std::string>));
170
171 cryptauth::GetMyDevicesRequest expected_request;
172 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
173 EXPECT_TRUE(expected_request.allow_stale_read());
174
175 // Return two devices, one unlock key and one unlockable device.
176 {
177 cryptauth::GetMyDevicesResponse response_proto;
178 response_proto.add_devices();
179 response_proto.mutable_devices(0)->set_public_key(kPublicKey1);
180 response_proto.mutable_devices(0)->set_unlock_key(true);
181 response_proto.mutable_devices(0)
182 ->set_bluetooth_address(kBluetoothAddress1);
183 response_proto.add_devices();
184 response_proto.mutable_devices(1)->set_public_key(kPublicKey2);
185 response_proto.mutable_devices(1)->set_unlockable(true);
186 FinishApiCallFlow(&response_proto);
187 }
188
189 // Check that the result received in callback is the same as the response.
190 ASSERT_EQ(2, result_proto.devices_size());
191 EXPECT_EQ(kPublicKey1, result_proto.devices(0).public_key());
192 EXPECT_TRUE(result_proto.devices(0).unlock_key());
193 EXPECT_EQ(kBluetoothAddress1, result_proto.devices(0).bluetooth_address());
194 EXPECT_EQ(kPublicKey2, result_proto.devices(1).public_key());
195 EXPECT_TRUE(result_proto.devices(1).unlockable());
196 }
197
198 TEST_F(ProximityAuthCryptAuthClientTest, GetMyDevicesFailure) {
199 ExpectRequest(
200 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
201 "getmydevices?alt=proto");
202
203 std::string error_message;
204 client_->GetMyDevices(cryptauth::GetMyDevicesRequest(),
205 base::Bind(&NotCalled<cryptauth::GetMyDevicesResponse>),
206 base::Bind(&SaveResult<std::string>, &error_message));
207
208 std::string kStatus500Error("HTTP status: 500");
209 FailApiCallFlow(kStatus500Error);
210 EXPECT_EQ(kStatus500Error, error_message);
211 }
212
213 TEST_F(ProximityAuthCryptAuthClientTest, FindEligibleUnlockDevicesSuccess) {
214 ExpectRequest(
215 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
216 "findeligibleunlockdevices?alt=proto");
217
218 cryptauth::FindEligibleUnlockDevicesResponse result_proto;
219 cryptauth::FindEligibleUnlockDevicesRequest request_proto;
220 request_proto.set_callback_bluetooth_address(kBluetoothAddress2);
221 client_->FindEligibleUnlockDevices(
222 request_proto,
223 base::Bind(&SaveResult<cryptauth::FindEligibleUnlockDevicesResponse>,
224 &result_proto),
225 base::Bind(&NotCalled<std::string>));
226
227 cryptauth::FindEligibleUnlockDevicesRequest expected_request;
228 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
229 EXPECT_EQ(kBluetoothAddress2, expected_request.callback_bluetooth_address());
230
231 // Return a response proto with one eligible and one ineligible device.
232 cryptauth::FindEligibleUnlockDevicesResponse response_proto;
233 response_proto.add_eligible_devices();
234 response_proto.mutable_eligible_devices(0)->set_public_key(kPublicKey1);
235
236 const std::string kIneligibilityReason = "You require more vespine gas.";
237 response_proto.add_ineligible_devices();
238 response_proto.mutable_ineligible_devices(0)
239 ->mutable_device()
240 ->set_public_key(kPublicKey2);
241 response_proto.mutable_ineligible_devices(0)
242 ->add_reasons(kIneligibilityReason);
243 FinishApiCallFlow(&response_proto);
244
245 // Check that the result received in callback is the same as the response.
246 ASSERT_EQ(1, result_proto.eligible_devices_size());
247 EXPECT_EQ(kPublicKey1, result_proto.eligible_devices(0).public_key());
248 ASSERT_EQ(1, result_proto.ineligible_devices_size());
249 EXPECT_EQ(kPublicKey2,
250 result_proto.ineligible_devices(0).device().public_key());
251 ASSERT_EQ(1, result_proto.ineligible_devices(0).reasons_size());
252 EXPECT_EQ(kIneligibilityReason,
253 result_proto.ineligible_devices(0).reasons(0));
254 }
255
256 TEST_F(ProximityAuthCryptAuthClientTest, FindEligibleUnlockDevicesFailure) {
257 ExpectRequest(
258 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
259 "findeligibleunlockdevices?alt=proto");
260
261 std::string error_message;
262 cryptauth::FindEligibleUnlockDevicesRequest request_proto;
263 request_proto.set_callback_bluetooth_address(kBluetoothAddress1);
264 client_->FindEligibleUnlockDevices(
265 request_proto,
266 base::Bind(&NotCalled<cryptauth::FindEligibleUnlockDevicesResponse>),
267 base::Bind(&SaveResult<std::string>, &error_message));
268
269 std::string kStatus403Error("HTTP status: 403");
270 FailApiCallFlow(kStatus403Error);
271 EXPECT_EQ(kStatus403Error, error_message);
272 }
273
274 TEST_F(ProximityAuthCryptAuthClientTest, SendDeviceSyncTickleSuccess) {
275 ExpectRequest(
276 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
277 "senddevicesynctickle?alt=proto");
278
279 cryptauth::SendDeviceSyncTickleResponse result_proto;
280 client_->SendDeviceSyncTickle(
281 cryptauth::SendDeviceSyncTickleRequest(),
282 base::Bind(&SaveResult<cryptauth::SendDeviceSyncTickleResponse>,
283 &result_proto),
284 base::Bind(&NotCalled<std::string>));
285
286 cryptauth::SendDeviceSyncTickleRequest expected_request;
287 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
288
289 cryptauth::SendDeviceSyncTickleResponse response_proto;
290 FinishApiCallFlow(&response_proto);
291 }
292
293 TEST_F(ProximityAuthCryptAuthClientTest, ToggleEasyUnlockSuccess) {
294 ExpectRequest(
295 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
296 "toggleeasyunlock?alt=proto");
297
298 cryptauth::ToggleEasyUnlockResponse result_proto;
299 cryptauth::ToggleEasyUnlockRequest request_proto;
300 request_proto.set_enable(true);
301 request_proto.set_apply_to_all(false);
302 request_proto.set_public_key(kPublicKey1);
303 client_->ToggleEasyUnlock(
304 request_proto,
305 base::Bind(&SaveResult<cryptauth::ToggleEasyUnlockResponse>,
306 &result_proto),
307 base::Bind(&NotCalled<std::string>));
308
309 cryptauth::ToggleEasyUnlockRequest expected_request;
310 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
311 EXPECT_TRUE(expected_request.enable());
312 EXPECT_EQ(kPublicKey1, expected_request.public_key());
313 EXPECT_FALSE(expected_request.apply_to_all());
314
315 cryptauth::ToggleEasyUnlockResponse response_proto;
316 FinishApiCallFlow(&response_proto);
317 }
318
319 TEST_F(ProximityAuthCryptAuthClientTest, SetupEnrollmentSuccess) {
320 ExpectRequest(
321 "https://www.testgoogleapis.com/cryptauth/v1/enrollment/"
322 "setup?alt=proto");
323
324 std::string kApplicationId = "mkaes";
325 std::vector<std::string> supported_protocols;
326 supported_protocols.push_back("gcmV1");
327 supported_protocols.push_back("testProtocol");
328
329 cryptauth::SetupEnrollmentResponse result_proto;
330 cryptauth::SetupEnrollmentRequest request_proto;
331 request_proto.set_application_id(kApplicationId);
332 request_proto.add_types("gcmV1");
333 request_proto.add_types("testProtocol");
334 client_->SetupEnrollment(
335 request_proto, base::Bind(&SaveResult<cryptauth::SetupEnrollmentResponse>,
336 &result_proto),
337 base::Bind(&NotCalled<std::string>));
338
339 cryptauth::SetupEnrollmentRequest expected_request;
340 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
341 EXPECT_EQ(kApplicationId, expected_request.application_id());
342 ASSERT_EQ(2, expected_request.types_size());
343 EXPECT_EQ("gcmV1", expected_request.types(0));
344 EXPECT_EQ("testProtocol", expected_request.types(1));
345
346 // Return a fake enrollment session.
347 {
348 cryptauth::SetupEnrollmentResponse response_proto;
349 response_proto.set_status("OK");
350 response_proto.add_infos();
351 response_proto.mutable_infos(0)->set_type("gcmV1");
352 response_proto.mutable_infos(0)->set_enrollment_session_id("session_id");
353 response_proto.mutable_infos(0)->set_server_ephemeral_key("ephemeral_key");
354 FinishApiCallFlow(&response_proto);
355 }
356
357 // Check that the returned proto is the same as the one just created.
358 EXPECT_EQ("OK", result_proto.status());
359 ASSERT_EQ(1, result_proto.infos_size());
360 EXPECT_EQ("gcmV1", result_proto.infos(0).type());
361 EXPECT_EQ("session_id", result_proto.infos(0).enrollment_session_id());
362 EXPECT_EQ("ephemeral_key", result_proto.infos(0).server_ephemeral_key());
363 }
364
365 TEST_F(ProximityAuthCryptAuthClientTest, FinishEnrollmentSuccess) {
366 ExpectRequest(
367 "https://www.testgoogleapis.com/cryptauth/v1/enrollment/"
368 "finish?alt=proto");
369
370 const char kEnrollmentSessionId[] = "enrollment_session_id";
371 const char kEnrollmentMessage[] = "enrollment_message";
372 const char kDeviceEphemeralKey[] = "device_ephermal_key";
373 cryptauth::FinishEnrollmentResponse result_proto;
374 cryptauth::FinishEnrollmentRequest request_proto;
375 request_proto.set_enrollment_session_id(kEnrollmentSessionId);
376 request_proto.set_enrollment_message(kEnrollmentMessage);
377 request_proto.set_device_ephemeral_key(kDeviceEphemeralKey);
378 client_->FinishEnrollment(
379 request_proto,
380 base::Bind(&SaveResult<cryptauth::FinishEnrollmentResponse>,
381 &result_proto),
382 base::Bind(&NotCalled<const std::string&>));
383
384 cryptauth::FinishEnrollmentRequest expected_request;
385 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
386 EXPECT_EQ(kEnrollmentSessionId, expected_request.enrollment_session_id());
387 EXPECT_EQ(kEnrollmentMessage, expected_request.enrollment_message());
388 EXPECT_EQ(kDeviceEphemeralKey, expected_request.device_ephemeral_key());
389
390 {
391 cryptauth::FinishEnrollmentResponse response_proto;
392 response_proto.set_status("OK");
393 FinishApiCallFlow(&response_proto);
394 }
395 EXPECT_EQ("OK", result_proto.status());
396 }
397
398 TEST_F(ProximityAuthCryptAuthClientTest, FetchAccessTokenFailure) {
399 access_token_fetcher_->set_access_token("");
400
401 std::string error_message;
402 client_->GetMyDevices(cryptauth::GetMyDevicesRequest(),
403 base::Bind(&NotCalled<cryptauth::GetMyDevicesResponse>),
404 base::Bind(&SaveResult<std::string>, &error_message));
405
406 EXPECT_EQ("Failed to get a valid access token.", error_message);
407 }
408
409 TEST_F(ProximityAuthCryptAuthClientTest, ParseResponseProtoFailure) {
410 ExpectRequest(
411 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
412 "getmydevices?alt=proto");
413
414 std::string error_message;
415 client_->GetMyDevices(cryptauth::GetMyDevicesRequest(),
416 base::Bind(&NotCalled<cryptauth::GetMyDevicesResponse>),
417 base::Bind(&SaveResult<std::string>, &error_message));
418
419 flow_result_callback_.Run("Not a valid serialized response message.");
420 EXPECT_EQ("Failed to parse response proto.", error_message);
421 }
422
423 TEST_F(ProximityAuthCryptAuthClientTest,
424 MakeSecondRequestBeforeFirstRequestSucceeds) {
425 ExpectRequest(
426 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
427 "getmydevices?alt=proto");
428
429 // Make first request.
430 cryptauth::GetMyDevicesResponse result_proto;
431 client_->GetMyDevices(
432 cryptauth::GetMyDevicesRequest(),
433 base::Bind(&SaveResult<cryptauth::GetMyDevicesResponse>, &result_proto),
434 base::Bind(&NotCalled<std::string>));
435
436 // With request pending, make second request.
437 {
438 std::string error_message;
439 client_->FindEligibleUnlockDevices(
440 cryptauth::FindEligibleUnlockDevicesRequest(),
441 base::Bind(&NotCalled<cryptauth::FindEligibleUnlockDevicesResponse>),
442 base::Bind(&SaveResult<std::string>, &error_message));
443 EXPECT_EQ("Client has been used for another request. Do not reuse.",
444 error_message);
445 }
446
447 // Complete first request.
448 {
449 cryptauth::GetMyDevicesResponse response_proto;
450 response_proto.add_devices();
451 response_proto.mutable_devices(0)->set_public_key(kPublicKey1);
452 FinishApiCallFlow(&response_proto);
453 }
454
455 ASSERT_EQ(1, result_proto.devices_size());
456 EXPECT_EQ(kPublicKey1, result_proto.devices(0).public_key());
457 }
458
459 TEST_F(ProximityAuthCryptAuthClientTest,
460 MakeSecondRequestBeforeFirstRequestFails) {
461 ExpectRequest(
462 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
463 "getmydevices?alt=proto");
464
465 // Make first request.
466 std::string error_message;
467 client_->GetMyDevices(cryptauth::GetMyDevicesRequest(),
468 base::Bind(&NotCalled<cryptauth::GetMyDevicesResponse>),
469 base::Bind(&SaveResult<std::string>, &error_message));
470
471 // With request pending, make second request.
472 {
473 std::string error_message;
474 client_->FindEligibleUnlockDevices(
475 cryptauth::FindEligibleUnlockDevicesRequest(),
476 base::Bind(&NotCalled<cryptauth::FindEligibleUnlockDevicesResponse>),
477 base::Bind(&SaveResult<std::string>, &error_message));
478 EXPECT_EQ("Client has been used for another request. Do not reuse.",
479 error_message);
480 }
481
482 // Fail first request.
483 std::string kStatus429Error = "HTTP status: 429";
484 FailApiCallFlow(kStatus429Error);
485 EXPECT_EQ(kStatus429Error, error_message);
486 }
487
488 TEST_F(ProximityAuthCryptAuthClientTest,
489 MakeSecondRequestAfterFirstRequestSucceeds) {
490 // Make first request successfully.
491 {
492 ExpectRequest(
493 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
494 "getmydevices?alt=proto");
495 cryptauth::GetMyDevicesResponse result_proto;
496 client_->GetMyDevices(
497 cryptauth::GetMyDevicesRequest(),
498 base::Bind(&SaveResult<cryptauth::GetMyDevicesResponse>, &result_proto),
499 base::Bind(&NotCalled<std::string>));
500
501 cryptauth::GetMyDevicesResponse response_proto;
502 response_proto.add_devices();
503 response_proto.mutable_devices(0)->set_public_key(kPublicKey1);
504 FinishApiCallFlow(&response_proto);
505 ASSERT_EQ(1, result_proto.devices_size());
506 EXPECT_EQ(kPublicKey1, result_proto.devices(0).public_key());
507 }
508
509 // Second request fails.
510 {
511 std::string error_message;
512 client_->FindEligibleUnlockDevices(
513 cryptauth::FindEligibleUnlockDevicesRequest(),
514 base::Bind(&NotCalled<cryptauth::FindEligibleUnlockDevicesResponse>),
515 base::Bind(&SaveResult<std::string>, &error_message));
516 EXPECT_EQ("Client has been used for another request. Do not reuse.",
517 error_message);
518 }
519 }
520
521 TEST_F(ProximityAuthCryptAuthClientTest, DeviceClassifierIsSet) {
522 ExpectRequest(
523 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
524 "getmydevices?alt=proto");
525
526 cryptauth::GetMyDevicesResponse result_proto;
527 cryptauth::GetMyDevicesRequest request_proto;
528 request_proto.set_allow_stale_read(true);
529 client_->GetMyDevices(
530 request_proto,
531 base::Bind(&SaveResult<cryptauth::GetMyDevicesResponse>, &result_proto),
532 base::Bind(&NotCalled<std::string>));
533 cryptauth::GetMyDevicesRequest expected_request;
534 EXPECT_TRUE(expected_request.ParseFromString(serialized_request_));
535
536 const cryptauth::DeviceClassifier& device_classifier =
537 expected_request.device_classifier();
538 EXPECT_EQ(kDeviceOsVersionCode, device_classifier.device_os_version_code());
539 EXPECT_EQ(kDeviceSoftwareVersionCode,
540 device_classifier.device_software_version_code());
541 EXPECT_EQ(kDeviceSoftwarePackage,
542 device_classifier.device_software_package());
543 EXPECT_EQ(kDeviceType, device_classifier.device_type());
544 }
545
546 TEST_F(ProximityAuthCryptAuthClientTest, GetAccessTokenUsed) {
547 EXPECT_TRUE(client_->GetAccessTokenUsed().empty());
548 ExpectRequest(
549 "https://www.testgoogleapis.com/cryptauth/v1/deviceSync/"
550 "getmydevices?alt=proto");
551
552 cryptauth::GetMyDevicesResponse result_proto;
553 cryptauth::GetMyDevicesRequest request_proto;
554 request_proto.set_allow_stale_read(true);
555 client_->GetMyDevices(
556 request_proto,
557 base::Bind(&SaveResult<cryptauth::GetMyDevicesResponse>, &result_proto),
558 base::Bind(&NotCalled<std::string>));
559 EXPECT_EQ(kAccessToken, client_->GetAccessTokenUsed());
560 }
561
562 } // namespace proximity_auth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698