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

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

Issue 2782743002: [CrOS Tether] Ensure that BleAdvertiser explicitly calls Unregister() on all advertisements after t… (Closed)
Patch Set: Remove a few out of date comments. Created 3 years, 8 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 | « chromeos/components/tether/ble_advertiser.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_eid_generator.h" 10 #include "components/cryptauth/mock_eid_generator.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 seed2.set_start_time_millis(3000L); 105 seed2.set_start_time_millis(3000L);
106 106
107 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2}; 107 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2};
108 return seeds; 108 return seeds;
109 }; 109 };
110 110
111 } // namespace 111 } // namespace
112 112
113 class BleAdvertiserTest : public testing::Test { 113 class BleAdvertiserTest : public testing::Test {
114 protected: 114 protected:
115 class TestBleAdvertisementUnregisterHandler
116 : public BleAdvertiser::BleAdvertisementUnregisterHandler {
117 public:
118 TestBleAdvertisementUnregisterHandler()
119 : num_advertisements_unregistered_(0) {}
120 ~TestBleAdvertisementUnregisterHandler() {}
121
122 size_t num_advertisements_unregistered() {
123 return num_advertisements_unregistered_;
124 }
125
126 // BleAdvertiser::BleAdvertisementUnregisterHandler:
127 void OnAdvertisementUnregisterSuccess() override {
128 num_advertisements_unregistered_++;
129 }
130
131 void OnAdvertisementUnregisterFailure(
132 device::BluetoothAdvertisement::ErrorCode error_code) override {}
133
134 private:
135 size_t num_advertisements_unregistered_;
136 };
137
115 BleAdvertiserTest() 138 BleAdvertiserTest()
116 : fake_devices_(cryptauth::GenerateTestRemoteDevices(3)), 139 : fake_devices_(cryptauth::GenerateTestRemoteDevices(3)),
117 fake_advertisements_(GenerateFakeAdvertisements()) {} 140 fake_advertisements_(GenerateFakeAdvertisements()) {}
118 141
119 void SetUp() override { 142 void SetUp() override {
120 individual_advertisements_.clear(); 143 individual_advertisements_.clear();
121 register_advertisement_args_.clear(); 144 register_advertisement_args_.clear();
122 145
123 mock_adapter_ = make_scoped_refptr( 146 mock_adapter_ = make_scoped_refptr(
124 new StrictMock<MockBluetoothAdapterWithAdvertisements>()); 147 new StrictMock<MockBluetoothAdapterWithAdvertisements>());
125 ON_CALL(*mock_adapter_, AddObserver(_)) 148 ON_CALL(*mock_adapter_, AddObserver(_))
126 .WillByDefault(Invoke(this, &BleAdvertiserTest::OnAdapterAddObserver)); 149 .WillByDefault(Invoke(this, &BleAdvertiserTest::OnAdapterAddObserver));
127 ON_CALL(*mock_adapter_, RemoveObserver(_)) 150 ON_CALL(*mock_adapter_, RemoveObserver(_))
128 .WillByDefault( 151 .WillByDefault(
129 Invoke(this, &BleAdvertiserTest::OnAdapterRemoveObserver)); 152 Invoke(this, &BleAdvertiserTest::OnAdapterRemoveObserver));
130 ON_CALL(*mock_adapter_, IsPowered()).WillByDefault(Return(true)); 153 ON_CALL(*mock_adapter_, IsPowered()).WillByDefault(Return(true));
131 ON_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)) 154 ON_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_))
132 .WillByDefault( 155 .WillByDefault(
133 Invoke(this, &BleAdvertiserTest::OnAdapterRegisterAdvertisement)); 156 Invoke(this, &BleAdvertiserTest::OnAdapterRegisterAdvertisement));
134 157
158 test_unregister_handler_ = new TestBleAdvertisementUnregisterHandler();
159
135 mock_eid_generator_ = base::MakeUnique<cryptauth::MockEidGenerator>(); 160 mock_eid_generator_ = base::MakeUnique<cryptauth::MockEidGenerator>();
136 161
137 mock_seed_fetcher_ = 162 mock_seed_fetcher_ =
138 base::MakeUnique<cryptauth::MockRemoteBeaconSeedFetcher>(); 163 base::MakeUnique<cryptauth::MockRemoteBeaconSeedFetcher>();
139 std::vector<cryptauth::BeaconSeed> device_0_beacon_seeds = 164 std::vector<cryptauth::BeaconSeed> device_0_beacon_seeds =
140 CreateFakeBeaconSeedsForDevice(fake_devices_[0]); 165 CreateFakeBeaconSeedsForDevice(fake_devices_[0]);
141 std::vector<cryptauth::BeaconSeed> device_1_beacon_seeds = 166 std::vector<cryptauth::BeaconSeed> device_1_beacon_seeds =
142 CreateFakeBeaconSeedsForDevice(fake_devices_[1]); 167 CreateFakeBeaconSeedsForDevice(fake_devices_[1]);
143 std::vector<cryptauth::BeaconSeed> device_2_beacon_seeds = 168 std::vector<cryptauth::BeaconSeed> device_2_beacon_seeds =
144 CreateFakeBeaconSeedsForDevice(fake_devices_[2]); 169 CreateFakeBeaconSeedsForDevice(fake_devices_[2]);
145 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[0], 170 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[0],
146 &device_0_beacon_seeds); 171 &device_0_beacon_seeds);
147 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[1], 172 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[1],
148 &device_1_beacon_seeds); 173 &device_1_beacon_seeds);
149 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[2], 174 mock_seed_fetcher_->SetSeedsForDevice(fake_devices_[2],
150 &device_2_beacon_seeds); 175 &device_2_beacon_seeds);
151 176
152 mock_local_data_provider_ = base::MakeUnique<MockLocalDeviceDataProvider>(); 177 mock_local_data_provider_ = base::MakeUnique<MockLocalDeviceDataProvider>();
153 mock_local_data_provider_->SetPublicKey( 178 mock_local_data_provider_->SetPublicKey(
154 base::MakeUnique<std::string>(fake_public_key)); 179 base::MakeUnique<std::string>(fake_public_key));
155 180
156 ble_advertiser_ = base::WrapUnique(new BleAdvertiser( 181 ble_advertiser_ = base::WrapUnique(new BleAdvertiser(
157 mock_adapter_, mock_eid_generator_.get(), mock_seed_fetcher_.get(), 182 mock_adapter_, base::WrapUnique(test_unregister_handler_),
183 mock_eid_generator_.get(), mock_seed_fetcher_.get(),
158 mock_local_data_provider_.get())); 184 mock_local_data_provider_.get()));
159 } 185 }
160 186
161 void TearDown() override { 187 void TearDown() override {
162 // Delete the advertiser to ensure that cleanup happens properly. 188 // Delete the advertiser to ensure that cleanup happens properly.
163 ble_advertiser_.reset(); 189 ble_advertiser_.reset();
164 190
165 // All observers should have been removed. 191 // All observers should have been removed.
166 EXPECT_FALSE(individual_advertisements_.size()); 192 EXPECT_FALSE(individual_advertisements_.size());
167 } 193 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 void ReleaseAdvertisement( 251 void ReleaseAdvertisement(
226 BleAdvertiser::IndividualAdvertisement* individual_advertisement) { 252 BleAdvertiser::IndividualAdvertisement* individual_advertisement) {
227 individual_advertisement->AdvertisementReleased( 253 individual_advertisement->AdvertisementReleased(
228 individual_advertisement->advertisement_.get()); 254 individual_advertisement->advertisement_.get());
229 } 255 }
230 256
231 std::unique_ptr<BleAdvertiser> ble_advertiser_; 257 std::unique_ptr<BleAdvertiser> ble_advertiser_;
232 258
233 scoped_refptr<StrictMock<MockBluetoothAdapterWithAdvertisements>> 259 scoped_refptr<StrictMock<MockBluetoothAdapterWithAdvertisements>>
234 mock_adapter_; 260 mock_adapter_;
261 TestBleAdvertisementUnregisterHandler* test_unregister_handler_;
235 std::unique_ptr<cryptauth::MockEidGenerator> mock_eid_generator_; 262 std::unique_ptr<cryptauth::MockEidGenerator> mock_eid_generator_;
236 std::unique_ptr<cryptauth::MockRemoteBeaconSeedFetcher> mock_seed_fetcher_; 263 std::unique_ptr<cryptauth::MockRemoteBeaconSeedFetcher> mock_seed_fetcher_;
237 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_data_provider_; 264 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_data_provider_;
238 265
239 std::vector<scoped_refptr<RegisterAdvertisementArgs>> 266 std::vector<scoped_refptr<RegisterAdvertisementArgs>>
240 register_advertisement_args_; 267 register_advertisement_args_;
241 std::vector<BleAdvertiser::IndividualAdvertisement*> 268 std::vector<BleAdvertiser::IndividualAdvertisement*>
242 individual_advertisements_; 269 individual_advertisements_;
243 270
244 const std::vector<cryptauth::RemoteDevice> fake_devices_; 271 const std::vector<cryptauth::RemoteDevice> fake_devices_;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size()); 368 EXPECT_EQ(static_cast<size_t>(1), register_advertisement_args_.size());
342 VerifyServiceDataMatches(register_advertisement_args_[0], 369 VerifyServiceDataMatches(register_advertisement_args_[0],
343 individual_advertisements_[0]); 370 individual_advertisements_[0]);
344 371
345 InvokeCallback(register_advertisement_args_[0]); 372 InvokeCallback(register_advertisement_args_[0]);
346 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 373 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
347 374
348 // Now, unregister. 375 // Now, unregister.
349 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 376 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
350 EXPECT_FALSE(individual_advertisements_.size()); 377 EXPECT_FALSE(individual_advertisements_.size());
378 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
351 } 379 }
352 380
353 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully_TwoDevices) { 381 TEST_F(BleAdvertiserTest, AdvertisementRegisteredSuccessfully_TwoDevices) {
354 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(2); 382 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(2);
355 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(2); 383 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(2);
356 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2); 384 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(2);
357 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2); 385 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(2);
358 386
359 // First device. 387 // First device.
360 mock_eid_generator_->set_advertisement( 388 mock_eid_generator_->set_advertisement(
(...skipping 18 matching lines...) Expand all
379 EXPECT_EQ(static_cast<size_t>(2), individual_advertisements_.size()); 407 EXPECT_EQ(static_cast<size_t>(2), individual_advertisements_.size());
380 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size()); 408 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size());
381 VerifyServiceDataMatches(register_advertisement_args_[1], 409 VerifyServiceDataMatches(register_advertisement_args_[1],
382 individual_advertisements_[1]); 410 individual_advertisements_[1]);
383 411
384 InvokeCallback(register_advertisement_args_[1]); 412 InvokeCallback(register_advertisement_args_[1]);
385 VerifyAdvertisementHasStarted(individual_advertisements_[1]); 413 VerifyAdvertisementHasStarted(individual_advertisements_[1]);
386 414
387 // Now, unregister. 415 // Now, unregister.
388 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 416 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
417 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
418
389 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[1])); 419 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[1]));
420 EXPECT_EQ(2u, test_unregister_handler_->num_advertisements_unregistered());
421
390 EXPECT_FALSE(individual_advertisements_.size()); 422 EXPECT_FALSE(individual_advertisements_.size());
391 } 423 }
392 424
393 TEST_F(BleAdvertiserTest, TooManyDevicesRegistered) { 425 TEST_F(BleAdvertiserTest, TooManyDevicesRegistered) {
394 ASSERT_EQ(2, kMaxConcurrentAdvertisements); 426 ASSERT_EQ(2, kMaxConcurrentAdvertisements);
395 427
396 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(3); 428 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(3);
397 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(3); 429 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(3);
398 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(3); 430 EXPECT_CALL(*mock_adapter_, IsPowered()).Times(3);
399 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(3); 431 EXPECT_CALL(*mock_adapter_, RegisterAdvertisementWithArgsStruct(_)).Times(3);
400 432
401 mock_eid_generator_->set_advertisement( 433 mock_eid_generator_->set_advertisement(
402 base::MakeUnique<cryptauth::EidGenerator::DataWithTimestamp>( 434 base::MakeUnique<cryptauth::EidGenerator::DataWithTimestamp>(
403 fake_advertisements_[0])); 435 fake_advertisements_[0]));
404 436
405 // Should succeed for the first two devices. 437 // Should succeed for the first two devices.
406 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0])); 438 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[0]));
407 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1])); 439 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[1]));
408 440
409 // Should fail on the third device. 441 // Should fail on the third device.
410 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2])); 442 EXPECT_FALSE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2]));
411 443
412 // Now, unregister one; registering the third device should succeed at this 444 // Now, stop advertising to one; registering the third device should succeed
413 // point. 445 // at this point.
414 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 446 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
447
448 // Because the advertisement was never registered to begin with, it also
449 // should never have been unregistered.
450 EXPECT_EQ(0u, test_unregister_handler_->num_advertisements_unregistered());
451
415 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2])); 452 EXPECT_TRUE(ble_advertiser_->StartAdvertisingToDevice(fake_devices_[2]));
416 } 453 }
417 454
418 TEST_F(BleAdvertiserTest, AdapterPowerChange_StartsOffThenTurnsOn) { 455 TEST_F(BleAdvertiserTest, AdapterPowerChange_StartsOffThenTurnsOn) {
419 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1); 456 EXPECT_CALL(*mock_adapter_, AddObserver(_)).Times(1);
420 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1); 457 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)).Times(1);
421 EXPECT_CALL(*mock_adapter_, IsPowered()) 458 EXPECT_CALL(*mock_adapter_, IsPowered())
422 .Times(2) 459 .Times(2)
423 .WillOnce(Return(false)) // First, the adapter is powered off. 460 .WillOnce(Return(false)) // First, the adapter is powered off.
424 .WillOnce(Return(true)); // Then, the adapter is powered back on. 461 .WillOnce(Return(true)); // Then, the adapter is powered back on.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 ReleaseAdvertisement(individual_advertisements_[0]); 505 ReleaseAdvertisement(individual_advertisements_[0]);
469 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size()); 506 EXPECT_EQ(static_cast<size_t>(2), register_advertisement_args_.size());
470 VerifyServiceDataMatches(register_advertisement_args_[1], 507 VerifyServiceDataMatches(register_advertisement_args_[1],
471 individual_advertisements_[0]); 508 individual_advertisements_[0]);
472 509
473 InvokeCallback(register_advertisement_args_[1]); 510 InvokeCallback(register_advertisement_args_[1]);
474 VerifyAdvertisementHasStarted(individual_advertisements_[0]); 511 VerifyAdvertisementHasStarted(individual_advertisements_[0]);
475 512
476 // Now, unregister. 513 // Now, unregister.
477 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0])); 514 EXPECT_TRUE(ble_advertiser_->StopAdvertisingToDevice(fake_devices_[0]));
515 EXPECT_EQ(1u, test_unregister_handler_->num_advertisements_unregistered());
478 EXPECT_FALSE(individual_advertisements_.size()); 516 EXPECT_FALSE(individual_advertisements_.size());
479 } 517 }
480 518
481 } // namespace tether 519 } // namespace tether
482 520
483 } // namespace cryptauth 521 } // namespace cryptauth
OLDNEW
« no previous file with comments | « chromeos/components/tether/ble_advertiser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698