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

Side by Side Diff: chromeos/components/tether/ble_advertiser_unittest.cc

Issue 2847233003: [EasyUnlock] Move DataWithTimestamp out of ForegroundEidGenerator so it can be shared. (Closed)
Patch Set: fixes Created 3 years, 7 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 #include "chromeos/components/tether/ble_advertiser.h" 5 #include "chromeos/components/tether/ble_advertiser.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chromeos/components/tether/ble_constants.h" 8 #include "chromeos/components/tether/ble_constants.h"
9 #include "chromeos/components/tether/mock_local_device_data_provider.h" 9 #include "chromeos/components/tether/mock_local_device_data_provider.h"
10 #include "components/cryptauth/mock_foreground_eid_generator.h" 10 #include "components/cryptauth/mock_foreground_eid_generator.h"
11 #include "components/cryptauth/mock_remote_beacon_seed_fetcher.h" 11 #include "components/cryptauth/mock_remote_beacon_seed_fetcher.h"
12 #include "components/cryptauth/proto/cryptauth_api.pb.h" 12 #include "components/cryptauth/proto/cryptauth_api.pb.h"
13 #include "components/cryptauth/remote_device_test_util.h" 13 #include "components/cryptauth/remote_device_test_util.h"
14 #include "device/bluetooth/test/mock_bluetooth_adapter.h" 14 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
15 #include "device/bluetooth/test/mock_bluetooth_advertisement.h" 15 #include "device/bluetooth/test/mock_bluetooth_advertisement.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 using testing::Invoke; 18 using testing::Invoke;
19 using testing::Return; 19 using testing::Return;
20 using testing::StrictMock; 20 using testing::StrictMock;
21 using testing::_; 21 using testing::_;
22 22
23 namespace chromeos { 23 namespace chromeos {
24 24
25 namespace tether { 25 namespace tether {
26 26
27 namespace { 27 namespace {
28 uint8_t kInvertedConnectionFlag = 0x01; 28 uint8_t kInvertedConnectionFlag = 0x01;
29 29
30 const std::string fake_public_key = "fakePublicKey"; 30 const char kFakePublicKey[] = "fakePublicKey";
31 31
32 struct RegisterAdvertisementArgs 32 struct RegisterAdvertisementArgs
33 : public base::RefCounted<RegisterAdvertisementArgs> { 33 : public base::RefCounted<RegisterAdvertisementArgs> {
34 RegisterAdvertisementArgs( 34 RegisterAdvertisementArgs(
35 const device::BluetoothAdvertisement::ServiceData& service_data, 35 const device::BluetoothAdvertisement::ServiceData& service_data,
36 const device::BluetoothAdvertisement::UUIDList& service_uuids, 36 const device::BluetoothAdvertisement::UUIDList& service_uuids,
37 const device::BluetoothAdapter::CreateAdvertisementCallback& callback, 37 const device::BluetoothAdapter::CreateAdvertisementCallback& callback,
38 const device::BluetoothAdapter::AdvertisementErrorCallback& errback) 38 const device::BluetoothAdapter::AdvertisementErrorCallback& errback)
39 : service_data(service_data), 39 : service_data(service_data),
40 service_uuids(service_uuids), 40 service_uuids(service_uuids),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 RegisterAdvertisementWithArgsStruct( 73 RegisterAdvertisementWithArgsStruct(
74 make_scoped_refptr(new RegisterAdvertisementArgs( 74 make_scoped_refptr(new RegisterAdvertisementArgs(
75 *advertisement_data->service_data(), 75 *advertisement_data->service_data(),
76 *advertisement_data->service_uuids(), callback, errback))); 76 *advertisement_data->service_uuids(), callback, errback)));
77 } 77 }
78 78
79 protected: 79 protected:
80 ~MockBluetoothAdapterWithAdvertisements() override {} 80 ~MockBluetoothAdapterWithAdvertisements() override {}
81 }; 81 };
82 82
83 std::vector<cryptauth::ForegroundEidGenerator::DataWithTimestamp> 83 std::vector<cryptauth::DataWithTimestamp> GenerateFakeAdvertisements() {
84 GenerateFakeAdvertisements() { 84 cryptauth::DataWithTimestamp advertisement1("advertisement1", 1000L, 2000L);
85 cryptauth::ForegroundEidGenerator::DataWithTimestamp advertisement1( 85 cryptauth::DataWithTimestamp advertisement2("advertisement2", 2000L, 3000L);
86 "advertisement1", 1000L, 2000L);
87 cryptauth::ForegroundEidGenerator::DataWithTimestamp advertisement2(
88 "advertisement2", 2000L, 3000L);
89 86
90 std::vector<cryptauth::ForegroundEidGenerator::DataWithTimestamp> 87 std::vector<cryptauth::DataWithTimestamp> advertisements = {advertisement1,
91 advertisements = {advertisement1, advertisement2}; 88 advertisement2};
92 return advertisements; 89 return advertisements;
93 } 90 }
94 91
95 std::vector<cryptauth::BeaconSeed> CreateFakeBeaconSeedsForDevice( 92 std::vector<cryptauth::BeaconSeed> CreateFakeBeaconSeedsForDevice(
96 const cryptauth::RemoteDevice& remote_device) { 93 const cryptauth::RemoteDevice& remote_device) {
97 cryptauth::BeaconSeed seed1; 94 cryptauth::BeaconSeed seed1;
98 seed1.set_data("seed1Data" + remote_device.GetTruncatedDeviceIdForLogs()); 95 seed1.set_data("seed1Data" + remote_device.GetTruncatedDeviceIdForLogs());
99 seed1.set_start_time_millis(1000L); 96 seed1.set_start_time_millis(1000L);
100 seed1.set_start_time_millis(2000L); 97 seed1.set_start_time_millis(2000L);
101 98
102 cryptauth::BeaconSeed seed2; 99 cryptauth::BeaconSeed seed2;
103 seed2.set_data("seed2Data" + remote_device.GetTruncatedDeviceIdForLogs()); 100 seed2.set_data("seed2Data" + remote_device.GetTruncatedDeviceIdForLogs());
104 seed2.set_start_time_millis(2000L); 101 seed2.set_start_time_millis(2000L);
105 seed2.set_start_time_millis(3000L); 102 seed2.set_start_time_millis(3000L);
106 103
107 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2}; 104 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2};
108 return seeds; 105 return seeds;
109 }; 106 }
110 107
111 } // namespace 108 } // namespace
112 109
113 class BleAdvertiserTest : public testing::Test { 110 class BleAdvertiserTest : public testing::Test {
114 protected: 111 protected:
115 class TestBleAdvertisementUnregisterHandler 112 class TestBleAdvertisementUnregisterHandler
116 : public BleAdvertiser::BleAdvertisementUnregisterHandler { 113 : public BleAdvertiser::BleAdvertisementUnregisterHandler {
117 public: 114 public:
118 TestBleAdvertisementUnregisterHandler() 115 TestBleAdvertisementUnregisterHandler()
119 : num_advertisements_unregistered_(0) {} 116 : num_advertisements_unregistered_(0) {}
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 CreateFakeBeaconSeedsForDevice(fake_devices_[2]); 168 CreateFakeBeaconSeedsForDevice(fake_devices_[2]);
172 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[0], 169 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[0],
173 &device_0_beacon_seeds); 170 &device_0_beacon_seeds);
174 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[1], 171 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[1],
175 &device_1_beacon_seeds); 172 &device_1_beacon_seeds);
176 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[2], 173 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[2],
177 &device_2_beacon_seeds); 174 &device_2_beacon_seeds);
178 175
179 mock_local_data_provider_ = base::MakeUnique<MockLocalDeviceDataProvider>(); 176 mock_local_data_provider_ = base::MakeUnique<MockLocalDeviceDataProvider>();
180 mock_local_data_provider_->SetPublicKey( 177 mock_local_data_provider_->SetPublicKey(
181 base::MakeUnique<std::string>(fake_public_key)); 178 base::MakeUnique<std::string>(kFakePublicKey));
182 179
183 ble_advertiser_ = base::WrapUnique(new BleAdvertiser( 180 ble_advertiser_ = base::WrapUnique(new BleAdvertiser(
184 mock_adapter_, base::WrapUnique(test_unregister_handler_), 181 mock_adapter_, base::WrapUnique(test_unregister_handler_),
185 std::move(eid_generator), mock_seed_fetcher_.get(), 182 std::move(eid_generator), mock_seed_fetcher_.get(),
186 mock_local_data_provider_.get())); 183 mock_local_data_provider_.get()));
187 } 184 }
188 185
189 void TearDown() override { 186 void TearDown() override {
190 // Delete the advertiser to ensure that cleanup happens properly. 187 // Delete the advertiser to ensure that cleanup happens properly.
191 ble_advertiser_.reset(); 188 ble_advertiser_.reset();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 cryptauth::MockForegroundEidGenerator* mock_eid_generator_; 261 cryptauth::MockForegroundEidGenerator* mock_eid_generator_;
265 std::unique_ptr<cryptauth::MockRemoteBeaconSeedFetcher> mock_seed_fetcher_; 262 std::unique_ptr<cryptauth::MockRemoteBeaconSeedFetcher> mock_seed_fetcher_;
266 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_data_provider_; 263 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_data_provider_;
267 264
268 std::vector<scoped_refptr<RegisterAdvertisementArgs>> 265 std::vector<scoped_refptr<RegisterAdvertisementArgs>>
269 register_advertisement_args_; 266 register_advertisement_args_;
270 std::vector<BleAdvertiser::IndividualAdvertisement*> 267 std::vector<BleAdvertiser::IndividualAdvertisement*>
271 individual_advertisements_; 268 individual_advertisements_;
272 269
273 const std::vector<cryptauth::RemoteDevice> fake_devices_; 270 const std::vector<cryptauth::RemoteDevice> fake_devices_;
274 const std::vector<cryptauth::ForegroundEidGenerator::DataWithTimestamp> 271 const std::vector<cryptauth::DataWithTimestamp> fake_advertisements_;
275 fake_advertisements_;
276 272
277 private: 273 private:
278 DISALLOW_COPY_AND_ASSIGN(BleAdvertiserTest); 274 DISALLOW_COPY_AND_ASSIGN(BleAdvertiserTest);
279 }; 275 };
280 276
281 TEST_F(BleAdvertiserTest, TestCannotFetchPublicKey) { 277 TEST_F(BleAdvertiserTest, TestCannotFetchPublicKey) {
282 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(0); 278 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(0);
283 279
284 mock_local_data_provider_->SetPublicKey(nullptr); 280 mock_local_data_provider_->SetPublicKey(nullptr);
285 281
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 314
319 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 315 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
320 } 316 }
321 317
322 TEST_F(BleAdvertiserTest, AdapterPoweredOffWhenAdvertisementRegistered) { 318 TEST_F(BleAdvertiserTest, AdapterPoweredOffWhenAdvertisementRegistered) {
323 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 319 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
324 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 320 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
325 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1).WillOnce(Return(false)); 321 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1).WillOnce(Return(false));
326 322
327 mock_eid_generator_->set_advertisement( 323 mock_eid_generator_->set_advertisement(
328 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 324 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
329 fake_advertisements_[0]));
330 325
331 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 326 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
332 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 327 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
333 328
334 // RegisterAdvertisement() should not have been called. 329 // RegisterAdvertisement() should not have been called.
335 EXPECT_FALSE(register_advertisement_args_.size()); 330 EXPECT_FALSE(register_advertisement_args_.size());
336 } 331 }
337 332
338 TEST_F(BleAdvertiserTest, RegisteringAdvertisementFails) { 333 TEST_F(BleAdvertiserTest, RegisteringAdvertisementFails) {
339 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 334 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
340 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 335 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
341 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1); 336 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1);
342 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1); 337 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1);
343 338
344 mock_eid_generator_->set_advertisement( 339 mock_eid_generator_->set_advertisement(
345 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 340 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
346 fake_advertisements_[0]));
347 341
348 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 342 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
349 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 343 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
350 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 344 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
351 VerifyServiceDataMatches(register_advertisement_args_[0], 345 VerifyServiceDataMatches(register_advertisement_args_[0],
352 individual_advertisements_[0]); 346 individual_advertisements_[0]);
353 347
354 InvokeErrback(register_advertisement_args_[0]); 348 InvokeErrback(register_advertisement_args_[0]);
355 VerifyAdvertisementHasNotStarted(individual_advertisements_[0]); 349 VerifyAdvertisementHasNotStarted(individual_advertisements_[0]);
356 } 350 }
357 351
358 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully) { 352 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully) {
359 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 353 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
360 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 354 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
361 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1); 355 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(1);
362 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1); 356 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1);
363 357
364 mock_eid_generator_->set_advertisement( 358 mock_eid_generator_->set_advertisement(
365 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 359 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
366 fake_advertisements_[0]));
367 360
368 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 361 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
369 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 362 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
370 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 363 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
371 VerifyServiceDataMatches(register_advertisement_args_[0], 364 VerifyServiceDataMatches(register_advertisement_args_[0],
372 individual_advertisements_[0]); 365 individual_advertisements_[0]);
373 366
374 InvokeCallback(register_advertisement_args_[0]); 367 InvokeCallback(register_advertisement_args_[0]);
375 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 368 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
376 369
377 // Now, unregister. 370 // Now, unregister.
378 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 371 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
379 EXPECT_FALSE(individual_advertisements_.size()); 372 EXPECT_FALSE(individual_advertisements_.size());
380 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered()); 373 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
381 } 374 }
382 375
383 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully_TwoDevices) { 376 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully_TwoDevices) {
384 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(2); 377 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(2);
385 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(2); 378 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(2);
386 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2); 379 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2);
387 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2); 380 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2);
388 381
389 // First device. 382 // First device.
390 mock_eid_generator_->set_advertisement( 383 mock_eid_generator_->set_advertisement(
391 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 384 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
392 fake_advertisements_[0]));
393 385
394 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 386 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
395 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 387 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
396 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 388 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
397 VerifyServiceDataMatches(register_advertisement_args_[0], 389 VerifyServiceDataMatches(register_advertisement_args_[0],
398 individual_advertisements_[0]); 390 individual_advertisements_[0]);
399 391
400 InvokeCallback(register_advertisement_args_[0]); 392 InvokeCallback(register_advertisement_args_[0]);
401 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 393 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
402 394
403 // Second device. 395 // Second device.
404 mock_eid_generator_->set_advertisement( 396 mock_eid_generator_->set_advertisement(
405 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 397 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[1]));
406 fake_advertisements_[1]));
407 398
408 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1])); 399 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1]));
409 EXPECT_EQ(static_cast<size_t>(2), individual_advertisements_.size()); 400 EXPECT_EQ(static_cast<size_t>(2), individual_advertisements_.size());
410 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size()); 401 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size());
411 VerifyServiceDataMatches(register_advertisement_args_[1], 402 VerifyServiceDataMatches(register_advertisement_args_[1],
412 individual_advertisements_[1]); 403 individual_advertisements_[1]);
413 404
414 InvokeCallback(register_advertisement_args_[1]); 405 InvokeCallback(register_advertisement_args_[1]);
415 VerifyAdvertisementHasStarted(individual_advertisements_[1]); 406 VerifyAdvertisementHasStarted(individual_advertisements_[1]);
416 407
417 // Now, unregister. 408 // Now, unregister.
418 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 409 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
419 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered()); 410 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
420 411
421 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[1])); 412 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[1]));
422 EXPECT_EQ(2u, test_unregister_handler_->num_advertisements_unregistered()); 413 EXPECT_EQ(2u, test_unregister_handler_->num_advertisements_unregistered());
423 414
424 EXPECT_FALSE(individual_advertisements_.size()); 415 EXPECT_FALSE(individual_advertisements_.size());
425 } 416 }
426 417
427 TEST_F(BleAdvertiserTest, TooManyDevicesRegistered) { 418 TEST_F(BleAdvertiserTest, TooManyDevicesRegistered) {
428 ASSERT_EQ(2, kMaxConcurrentAdvertisements); 419 ASSERT_EQ(2, kMaxConcurrentAdvertisements);
429 420
430 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(3); 421 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(3);
431 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(3); 422 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(3);
432 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(3); 423 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(3);
433 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(3); 424 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(3);
434 425
435 mock_eid_generator_->set_advertisement( 426 mock_eid_generator_->set_advertisement(
436 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 427 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
437 fake_advertisements_[0]));
438 428
439 // Should succeed for the first two devices. 429 // Should succeed for the first two devices.
440 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 430 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
441 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1])); 431 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1]));
442 432
443 // Should fail on the third device. 433 // Should fail on the third device.
444 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2])); 434 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2]));
445 435
446 // Now, stop advertising to one; registering the third device should succeed 436 // Now, stop advertising to one; registering the third device should succeed
447 // at this point. 437 // at this point.
448 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 438 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
449 439
450 // Because the advertisement was never registered to begin with, it also 440 // Because the advertisement was never registered to begin with, it also
451 // should never have been unregistered. 441 // should never have been unregistered.
452 EXPECT_EQ(0u, test_unregister_handler_->num_advertisements_unregistered()); 442 EXPECT_EQ(0u, test_unregister_handler_->num_advertisements_unregistered());
453 443
454 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2])); 444 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2]));
455 } 445 }
456 446
457 TEST_F(BleAdvertiserTest, AdapterPowerChange_StartsOffThenTurnsOn) { 447 TEST_F(BleAdvertiserTest, AdapterPowerChange_StartsOffThenTurnsOn) {
458 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 448 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
459 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 449 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
460 EXPECT_CALL(*mock_adapter_, IsPowered()) 450 EXPECT_CALL(*mock_adapter_, IsPowered())
461 .Times(2) 451 .Times(2)
462 .WillOnce(Return(false)) // First, the adapter is powered off. 452 .WillOnce(Return(false)) // First, the adapter is powered off.
463 .WillOnce(Return(true)); // Then, the adapter is powered back on. 453 .WillOnce(Return(true)); // Then, the adapter is powered back on.
464 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1); 454 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(1);
465 455
466 mock_eid_generator_->set_advertisement( 456 mock_eid_generator_->set_advertisement(
467 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 457 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
468 fake_advertisements_[0]));
469 458
470 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 459 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
471 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 460 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
472 461
473 // RegisterAdvertisement() should not have been called. 462 // RegisterAdvertisement() should not have been called.
474 EXPECT_FALSE(register_advertisement_args_.size()); 463 EXPECT_FALSE(register_advertisement_args_.size());
475 464
476 // Now, simulate power being changed. Since the power is now on, 465 // Now, simulate power being changed. Since the power is now on,
477 // RegisterAdvertisement() should have been called. 466 // RegisterAdvertisement() should have been called.
478 individual_advertisements_[0]->AdapterPoweredChanged(mock_adapter_.get(), 467 individual_advertisements_[0]->AdapterPoweredChanged(mock_adapter_.get(),
479 true); 468 true);
480 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 469 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
481 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 470 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
482 VerifyServiceDataMatches(register_advertisement_args_[0], 471 VerifyServiceDataMatches(register_advertisement_args_[0],
483 individual_advertisements_[0]); 472 individual_advertisements_[0]);
484 } 473 }
485 474
486 TEST_F(BleAdvertiserTest, AdvertisementReleased) { 475 TEST_F(BleAdvertiserTest, AdvertisementReleased) {
487 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 476 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
488 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 477 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
489 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2); 478 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2);
490 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2); 479 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2);
491 480
492 mock_eid_generator_->set_advertisement( 481 mock_eid_generator_->set_advertisement(
493 base::MakeUnique<cryptauth::ForegroundEidGenerator::DataWithTimestamp>( 482 base::MakeUnique<cryptauth::DataWithTimestamp>(fake_advertisements_[0]));
494 fake_advertisements_[0]));
495 483
496 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 484 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
497 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size()); 485 EXPECT_EQ(static_cast<size_t>(1), individual_advertisements_.size());
498 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 486 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
499 VerifyServiceDataMatches(register_advertisement_args_[0], 487 VerifyServiceDataMatches(register_advertisement_args_[0],
500 individual_advertisements_[0]); 488 individual_advertisements_[0]);
501 489
502 InvokeCallback(register_advertisement_args_[0]); 490 InvokeCallback(register_advertisement_args_[0]);
503 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 491 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
504 492
505 // Now, simulate the advertisement being released. A new advertisement should 493 // Now, simulate the advertisement being released. A new advertisement should
506 // have been created. 494 // have been created.
507 ReleaseAdvertisement(individual_advertisements_[0]); 495 ReleaseAdvertisement(individual_advertisements_[0]);
508 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size()); 496 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size());
509 VerifyServiceDataMatches(register_advertisement_args_[1], 497 VerifyServiceDataMatches(register_advertisement_args_[1],
510 individual_advertisements_[0]); 498 individual_advertisements_[0]);
511 499
512 InvokeCallback(register_advertisement_args_[1]); 500 InvokeCallback(register_advertisement_args_[1]);
513 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 501 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
514 502
515 // Now, unregister. 503 // Now, unregister.
516 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 504 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
517 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered()); 505 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
518 EXPECT_FALSE(individual_advertisements_.size()); 506 EXPECT_FALSE(individual_advertisements_.size());
519 } 507 }
520 508
521 } // namespace tether 509 } // namespace tether
522 510
523 } // namespace cryptauth 511 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/components/tether/ble_advertiser.cc ('k') | chromeos/components/tether/ble_scanner_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698