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

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

Issue 2803153002: [CrOS Tether] Refactor BleScanner so that it takes a BluetoothAdapter in its constructor instead of… (Closed)
Patch Set: 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
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_scanner.h" 5 #include "chromeos/components/tether/ble_scanner.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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 seed2.set_start_time_millis(fake_beacon_seed2_start_ms); 123 seed2.set_start_time_millis(fake_beacon_seed2_start_ms);
124 seed2.set_start_time_millis(fake_beacon_seed2_end_ms); 124 seed2.set_start_time_millis(fake_beacon_seed2_end_ms);
125 125
126 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2}; 126 std::vector<cryptauth::BeaconSeed> seeds = {seed1, seed2};
127 return seeds; 127 return seeds;
128 } 128 }
129 } // namespace 129 } // namespace
130 130
131 class BleScannerTest : public testing::Test { 131 class BleScannerTest : public testing::Test {
132 protected: 132 protected:
133 class TestDelegate : public BleScanner::Delegate { 133 class TestServiceDataProvider : public BleScanner::ServiceDataProvider {
134 public: 134 public:
135 TestDelegate() 135 TestServiceDataProvider() {}
136 : is_bluetooth_adapter_available_(true),
137 last_get_adapter_callback_(nullptr) {}
138 136
139 ~TestDelegate() override {} 137 ~TestServiceDataProvider() override {}
140 138
141 bool IsBluetoothAdapterAvailable() const override { 139 // ServiceDataProvider:
142 return is_bluetooth_adapter_available_; 140 const std::vector<uint8_t>* GetServiceDataForUUID(
141 device::BluetoothDevice* bluetooth_device) override {
142 return reinterpret_cast<MockBluetoothDeviceWithServiceData*>(
143 bluetooth_device)
144 ->service_data();
143 } 145 }
144
145 void set_is_bluetooth_adapter_available(
146 bool is_bluetooth_adapter_available) {
147 is_bluetooth_adapter_available_ = is_bluetooth_adapter_available;
148 }
149
150 void GetAdapter(const device::BluetoothAdapterFactory::AdapterCallback&
151 callback) override {
152 last_get_adapter_callback_ = callback;
153 }
154
155 const device::BluetoothAdapterFactory::AdapterCallback
156 last_get_adapter_callback() {
157 return last_get_adapter_callback_;
158 }
159
160 const std::vector<uint8_t>* GetServiceDataForUUID(
161 const device::BluetoothUUID& service_uuid,
162 device::BluetoothDevice* bluetooth_device) override {
163 if (device::BluetoothUUID(kAdvertisingServiceUuid) == service_uuid) {
164 return reinterpret_cast<MockBluetoothDeviceWithServiceData*>(
165 bluetooth_device)
166 ->service_data();
167 }
168
169 return nullptr;
170 }
171
172 private:
173 bool is_bluetooth_adapter_available_;
174 device::BluetoothAdapterFactory::AdapterCallback last_get_adapter_callback_;
175 }; 146 };
176 147
177 BleScannerTest() 148 BleScannerTest()
178 : test_devices_(cryptauth::GenerateTestRemoteDevices(3)), 149 : test_devices_(cryptauth::GenerateTestRemoteDevices(3)),
179 test_beacon_seeds_(CreateFakeBeaconSeeds()) {} 150 test_beacon_seeds_(CreateFakeBeaconSeeds()) {}
180 151
181 void SetUp() override { 152 void SetUp() override {
182 test_delegate_ = new TestDelegate(); 153 test_service_data_provider_ = new TestServiceDataProvider();
183 EXPECT_TRUE(test_delegate_->IsBluetoothAdapterAvailable());
184 EXPECT_FALSE(test_delegate_->last_get_adapter_callback());
185 154
186 mock_eid_generator_ = base::MakeUnique<cryptauth::MockEidGenerator>(); 155 mock_eid_generator_ = base::MakeUnique<cryptauth::MockEidGenerator>();
187 mock_eid_generator_->set_background_scan_filter( 156 mock_eid_generator_->set_background_scan_filter(
188 CreateFakeBackgroundScanFilter()); 157 CreateFakeBackgroundScanFilter());
189 158
190 mock_local_device_data_provider_ = 159 mock_local_device_data_provider_ =
191 base::MakeUnique<MockLocalDeviceDataProvider>(); 160 base::MakeUnique<MockLocalDeviceDataProvider>();
192 mock_local_device_data_provider_->SetPublicKey( 161 mock_local_device_data_provider_->SetPublicKey(
193 base::MakeUnique<std::string>(fake_local_public_key)); 162 base::MakeUnique<std::string>(fake_local_public_key));
194 mock_local_device_data_provider_->SetBeaconSeeds( 163 mock_local_device_data_provider_->SetBeaconSeeds(
195 base::MakeUnique<std::vector<cryptauth::BeaconSeed>>( 164 base::MakeUnique<std::vector<cryptauth::BeaconSeed>>(
196 test_beacon_seeds_)); 165 test_beacon_seeds_));
197 166
198 mock_adapter_ = 167 mock_adapter_ =
199 make_scoped_refptr(new NiceMock<device::MockBluetoothAdapter>()); 168 make_scoped_refptr(new NiceMock<device::MockBluetoothAdapter>());
200 stored_discovery_filter_.reset(); 169 stored_discovery_filter_.reset();
201 stored_discovery_callback_.Reset(); 170 stored_discovery_callback_.Reset();
202 stored_discovery_errback_.Reset(); 171 stored_discovery_errback_.Reset();
203 ON_CALL(*mock_adapter_, StartDiscoverySessionWithFilterRaw(_, _, _)) 172 ON_CALL(*mock_adapter_, StartDiscoverySessionWithFilterRaw(_, _, _))
204 .WillByDefault(Invoke( 173 .WillByDefault(Invoke(
205 this, &BleScannerTest::SaveStartDiscoverySessionWithFilterArgs)); 174 this, &BleScannerTest::SaveStartDiscoverySessionWithFilterArgs));
206 ON_CALL(*mock_adapter_, IsPowered()).WillByDefault(Return(true)); 175 ON_CALL(*mock_adapter_, IsPowered()).WillByDefault(Return(true));
207 176
208 mock_discovery_session_ = nullptr; 177 mock_discovery_session_ = nullptr;
209 178
210 ble_scanner_ = base::WrapUnique(new BleScanner( 179 ble_scanner_ = base::WrapUnique(new BleScanner(
211 base::WrapUnique(test_delegate_), mock_eid_generator_.get(), 180 base::WrapUnique(test_service_data_provider_), mock_adapter_,
212 mock_local_device_data_provider_.get())); 181 mock_eid_generator_.get(), mock_local_device_data_provider_.get()));
213 182
214 mock_observer_ = base::MakeUnique<MockBleScannerObserver>(); 183 mock_observer_ = base::MakeUnique<MockBleScannerObserver>();
215 ble_scanner_->AddObserver(mock_observer_.get()); 184 ble_scanner_->AddObserver(mock_observer_.get());
216 } 185 }
217 186
218 void SaveStartDiscoverySessionWithFilterArgs( 187 void SaveStartDiscoverySessionWithFilterArgs(
219 const device::BluetoothDiscoveryFilter* discovery_filter, 188 const device::BluetoothDiscoveryFilter* discovery_filter,
220 const device::BluetoothAdapter::DiscoverySessionCallback& callback, 189 const device::BluetoothAdapter::DiscoverySessionCallback& callback,
221 const device::BluetoothAdapter::ErrorCallback& errback) { 190 const device::BluetoothAdapter::ErrorCallback& errback) {
222 stored_discovery_filter_ = 191 stored_discovery_filter_ =
223 base::MakeUnique<device::BluetoothDiscoveryFilter>( 192 base::MakeUnique<device::BluetoothDiscoveryFilter>(
224 device::BluetoothTransport::BLUETOOTH_TRANSPORT_LE); 193 device::BluetoothTransport::BLUETOOTH_TRANSPORT_LE);
225 stored_discovery_filter_->CopyFrom(*discovery_filter); 194 stored_discovery_filter_->CopyFrom(*discovery_filter);
226 stored_discovery_callback_ = callback; 195 stored_discovery_callback_ = callback;
227 stored_discovery_errback_ = errback; 196 stored_discovery_errback_ = errback;
228 } 197 }
229 198
230 void InvokeAdapterCallback() {
231 const device::BluetoothAdapterFactory::AdapterCallback
232 last_get_adapter_callback = test_delegate_->last_get_adapter_callback();
233 ASSERT_TRUE(last_get_adapter_callback);
234
235 // Because the adapter has just been initialized, the discovery session
236 // should not have been started yet.
237 EXPECT_FALSE(stored_discovery_filter_);
238 EXPECT_TRUE(stored_discovery_callback_.is_null());
239 EXPECT_TRUE(stored_discovery_errback_.is_null());
240
241 EXPECT_CALL(*mock_adapter_, AddObserver(ble_scanner_.get()));
242 last_get_adapter_callback.Run(mock_adapter_);
243
244 // Once the adapter callback is returned, a discovery session should be
245 // started via that adapter.
246 AssertDiscoverySessionRequested();
247 }
248
249 void AssertDiscoverySessionRequested() { 199 void AssertDiscoverySessionRequested() {
250 // First, ensure that the correct discovery filter was passed. 200 // First, ensure that the correct discovery filter was passed.
251 EXPECT_TRUE(stored_discovery_filter_); 201 EXPECT_TRUE(stored_discovery_filter_);
252 EXPECT_EQ(device::BluetoothTransport::BLUETOOTH_TRANSPORT_LE, 202 EXPECT_EQ(device::BluetoothTransport::BLUETOOTH_TRANSPORT_LE,
253 stored_discovery_filter_->GetTransport()); 203 stored_discovery_filter_->GetTransport());
254 int16_t observed_rssi; 204 int16_t observed_rssi;
255 ASSERT_TRUE(stored_discovery_filter_->GetRSSI(&observed_rssi)); 205 ASSERT_TRUE(stored_discovery_filter_->GetRSSI(&observed_rssi));
256 EXPECT_EQ(kExpectedDiscoveryRSSI, observed_rssi); 206 EXPECT_EQ(kExpectedDiscoveryRSSI, observed_rssi);
257 207
258 // Now, ensure that both a callback and errback were passed. 208 // Now, ensure that both a callback and errback were passed.
259 EXPECT_FALSE(stored_discovery_callback_.is_null()); 209 EXPECT_FALSE(stored_discovery_callback_.is_null());
260 EXPECT_FALSE(stored_discovery_errback_.is_null()); 210 EXPECT_FALSE(stored_discovery_errback_.is_null());
261 } 211 }
262 212
263 void InvokeDiscoveryStartedCallback() { 213 void InvokeDiscoveryStartedCallback() {
264 EXPECT_FALSE(stored_discovery_callback_.is_null()); 214 EXPECT_FALSE(stored_discovery_callback_.is_null());
265 215
266 mock_discovery_session_ = new device::MockBluetoothDiscoverySession(); 216 mock_discovery_session_ = new device::MockBluetoothDiscoverySession();
267 stored_discovery_callback_.Run(base::WrapUnique(mock_discovery_session_)); 217 stored_discovery_callback_.Run(base::WrapUnique(mock_discovery_session_));
268 } 218 }
269 219
270 std::vector<cryptauth::RemoteDevice> test_devices_; 220 std::vector<cryptauth::RemoteDevice> test_devices_;
271 std::vector<cryptauth::BeaconSeed> test_beacon_seeds_; 221 std::vector<cryptauth::BeaconSeed> test_beacon_seeds_;
272 222
273 std::unique_ptr<MockBleScannerObserver> mock_observer_; 223 std::unique_ptr<MockBleScannerObserver> mock_observer_;
274 224
275 TestDelegate* test_delegate_; 225 TestServiceDataProvider* test_service_data_provider_;
276 std::unique_ptr<cryptauth::MockEidGenerator> mock_eid_generator_; 226 std::unique_ptr<cryptauth::MockEidGenerator> mock_eid_generator_;
277 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_device_data_provider_; 227 std::unique_ptr<MockLocalDeviceDataProvider> mock_local_device_data_provider_;
278 228
279 scoped_refptr<NiceMock<device::MockBluetoothAdapter>> mock_adapter_; 229 scoped_refptr<NiceMock<device::MockBluetoothAdapter>> mock_adapter_;
280 device::MockBluetoothDiscoverySession* mock_discovery_session_; 230 device::MockBluetoothDiscoverySession* mock_discovery_session_;
281 231
282 std::unique_ptr<device::BluetoothDiscoveryFilter> stored_discovery_filter_; 232 std::unique_ptr<device::BluetoothDiscoveryFilter> stored_discovery_filter_;
283 device::BluetoothAdapter::DiscoverySessionCallback stored_discovery_callback_; 233 device::BluetoothAdapter::DiscoverySessionCallback stored_discovery_callback_;
284 device::BluetoothAdapter::ErrorCallback stored_discovery_errback_; 234 device::BluetoothAdapter::ErrorCallback stored_discovery_errback_;
285 235
286 std::unique_ptr<BleScanner> ble_scanner_; 236 std::unique_ptr<BleScanner> ble_scanner_;
287 237
288 private: 238 private:
289 DISALLOW_COPY_AND_ASSIGN(BleScannerTest); 239 DISALLOW_COPY_AND_ASSIGN(BleScannerTest);
290 }; 240 };
291 241
292 TEST_F(BleScannerTest, TestNoBluetoothAdapter) {
293 test_delegate_->set_is_bluetooth_adapter_available(false);
294 EXPECT_FALSE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
295 EXPECT_FALSE(
296 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
297 EXPECT_FALSE(test_delegate_->last_get_adapter_callback());
298 EXPECT_FALSE(mock_observer_->GetNumCalls());
299 }
300
301 TEST_F(BleScannerTest, TestNoLocalBeaconSeeds) { 242 TEST_F(BleScannerTest, TestNoLocalBeaconSeeds) {
302 mock_local_device_data_provider_->SetBeaconSeeds(nullptr); 243 mock_local_device_data_provider_->SetBeaconSeeds(nullptr);
303 EXPECT_FALSE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 244 EXPECT_FALSE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
304 EXPECT_FALSE( 245 EXPECT_FALSE(
305 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 246 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
306 EXPECT_FALSE(test_delegate_->last_get_adapter_callback());
307 EXPECT_FALSE(mock_observer_->GetNumCalls()); 247 EXPECT_FALSE(mock_observer_->GetNumCalls());
308 } 248 }
309 249
310 TEST_F(BleScannerTest, TestNoBackgroundScanFilter) { 250 TEST_F(BleScannerTest, TestNoBackgroundScanFilter) {
311 mock_eid_generator_->set_background_scan_filter(nullptr); 251 mock_eid_generator_->set_background_scan_filter(nullptr);
312 EXPECT_FALSE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 252 EXPECT_FALSE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
313 EXPECT_FALSE( 253 EXPECT_FALSE(
314 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 254 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
315 EXPECT_FALSE(test_delegate_->last_get_adapter_callback());
316 EXPECT_FALSE(mock_observer_->GetNumCalls()); 255 EXPECT_FALSE(mock_observer_->GetNumCalls());
317 } 256 }
318 257
319 TEST_F(BleScannerTest, TestAdapterDoesNotInitialize) { 258 TEST_F(BleScannerTest, TestAdapterDoesNotInitialize) {
320 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 259 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
321 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 260 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
322 EXPECT_TRUE(test_delegate_->last_get_adapter_callback());
323 261
324 // Do not call the last GetAdapter() callback. The device should still be able 262 // Do not call the last GetAdapter() callback. The device should still be able
325 // to be unregistered. 263 // to be unregistered.
326 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 264 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
327 EXPECT_FALSE( 265 EXPECT_FALSE(
328 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 266 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
329 EXPECT_FALSE(mock_observer_->GetNumCalls()); 267 EXPECT_FALSE(mock_observer_->GetNumCalls());
330 } 268 }
331 269
332 TEST_F(BleScannerTest, TestAdapterDoesNotInitialize_MultipleDevicesRegistered) { 270 TEST_F(BleScannerTest, TestAdapterDoesNotInitialize_MultipleDevicesRegistered) {
333 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 271 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
334 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[1])); 272 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[1]));
335 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 273 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
336 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[1].GetDeviceId())); 274 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[1].GetDeviceId()));
337 EXPECT_TRUE(test_delegate_->last_get_adapter_callback());
338 275
339 // Do not call the last GetAdapter() callback. The devices should still be 276 // Do not call the last GetAdapter() callback. The devices should still be
340 // able to be unregistered. 277 // able to be unregistered.
341 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 278 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
342 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[1])); 279 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[1]));
343 EXPECT_FALSE( 280 EXPECT_FALSE(
344 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 281 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
345 EXPECT_FALSE( 282 EXPECT_FALSE(
346 ble_scanner_->IsDeviceRegistered(test_devices_[1].GetDeviceId())); 283 ble_scanner_->IsDeviceRegistered(test_devices_[1].GetDeviceId()));
347 EXPECT_FALSE(mock_observer_->GetNumCalls()); 284 EXPECT_FALSE(mock_observer_->GetNumCalls());
348 } 285 }
349 286
350 TEST_F(BleScannerTest, TestDiscoverySessionFailsToStart) { 287 TEST_F(BleScannerTest, TestDiscoverySessionFailsToStart) {
351 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 288 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
352 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 289 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
353 290
354 InvokeAdapterCallback(); 291 AssertDiscoverySessionRequested();
355 stored_discovery_errback_.Run(); 292 stored_discovery_errback_.Run();
356 293
357 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 294 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
358 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 295 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
359 EXPECT_FALSE(mock_observer_->GetNumCalls()); 296 EXPECT_FALSE(mock_observer_->GetNumCalls());
360 } 297 }
361 298
362 TEST_F(BleScannerTest, TestDiscoveryStartsButNoDevicesFound) { 299 TEST_F(BleScannerTest, TestDiscoveryStartsButNoDevicesFound) {
363 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 300 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
364 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 301 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
365 302
366 InvokeAdapterCallback(); 303 AssertDiscoverySessionRequested();
367 InvokeDiscoveryStartedCallback(); 304 InvokeDiscoveryStartedCallback();
368 305
369 // No devices found. 306 // No devices found.
370 307
371 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 308 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
372 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 309 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
373 EXPECT_FALSE(mock_observer_->GetNumCalls()); 310 EXPECT_FALSE(mock_observer_->GetNumCalls());
374 } 311 }
375 312
376 TEST_F(BleScannerTest, TestDiscovery_NoServiceData) { 313 TEST_F(BleScannerTest, TestDiscovery_NoServiceData) {
377 std::string empty_service_data = ""; 314 std::string empty_service_data = "";
378 315
379 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 316 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
380 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 317 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
381 318
382 InvokeAdapterCallback(); 319 AssertDiscoverySessionRequested();
383 InvokeDiscoveryStartedCallback(); 320 InvokeDiscoveryStartedCallback();
384 321
385 // Device with no service data connected. Service data is required to identify 322 // Device with no service data connected. Service data is required to identify
386 // the advertising device. 323 // the advertising device.
387 MockBluetoothDeviceWithServiceData device( 324 MockBluetoothDeviceWithServiceData device(
388 mock_adapter_.get(), kDefaultBluetoothAddress, empty_service_data); 325 mock_adapter_.get(), kDefaultBluetoothAddress, empty_service_data);
389 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device); 326 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device);
390 EXPECT_FALSE(mock_eid_generator_->num_identify_calls()); 327 EXPECT_FALSE(mock_eid_generator_->num_identify_calls());
391 EXPECT_FALSE(mock_observer_->GetNumCalls()); 328 EXPECT_FALSE(mock_observer_->GetNumCalls());
392 } 329 }
393 330
394 TEST_F(BleScannerTest, TestDiscovery_ServiceDataTooShort) { 331 TEST_F(BleScannerTest, TestDiscovery_ServiceDataTooShort) {
395 std::string short_service_data = "abc"; 332 std::string short_service_data = "abc";
396 ASSERT_TRUE(short_service_data.size() < kMinNumBytesInServiceData); 333 ASSERT_TRUE(short_service_data.size() < kMinNumBytesInServiceData);
397 334
398 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 335 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
399 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 336 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
400 337
401 InvokeAdapterCallback(); 338 AssertDiscoverySessionRequested();
402 InvokeDiscoveryStartedCallback(); 339 InvokeDiscoveryStartedCallback();
403 340
404 // Device with short service data connected. Service data of at least 4 bytes 341 // Device with short service data connected. Service data of at least 4 bytes
405 // is required to identify the advertising device. 342 // is required to identify the advertising device.
406 MockBluetoothDeviceWithServiceData device( 343 MockBluetoothDeviceWithServiceData device(
407 mock_adapter_.get(), kDefaultBluetoothAddress, short_service_data); 344 mock_adapter_.get(), kDefaultBluetoothAddress, short_service_data);
408 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device); 345 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device);
409 EXPECT_FALSE(mock_eid_generator_->num_identify_calls()); 346 EXPECT_FALSE(mock_eid_generator_->num_identify_calls());
410 EXPECT_FALSE(mock_observer_->GetNumCalls()); 347 EXPECT_FALSE(mock_observer_->GetNumCalls());
411 } 348 }
412 349
413 TEST_F(BleScannerTest, TestDiscovery_LocalDeviceDataCannotBeFetched) { 350 TEST_F(BleScannerTest, TestDiscovery_LocalDeviceDataCannotBeFetched) {
414 std::string valid_service_data_for_other_device = "abcd"; 351 std::string valid_service_data_for_other_device = "abcd";
415 ASSERT_TRUE(valid_service_data_for_other_device.size() >= 352 ASSERT_TRUE(valid_service_data_for_other_device.size() >=
416 kMinNumBytesInServiceData); 353 kMinNumBytesInServiceData);
417 354
418 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 355 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
419 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 356 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
420 357
421 InvokeAdapterCallback(); 358 AssertDiscoverySessionRequested();
422 InvokeDiscoveryStartedCallback(); 359 InvokeDiscoveryStartedCallback();
423 360
424 // Device with valid service data connected, but the local device data 361 // Device with valid service data connected, but the local device data
425 // cannot be fetched. 362 // cannot be fetched.
426 mock_local_device_data_provider_->SetPublicKey(nullptr); 363 mock_local_device_data_provider_->SetPublicKey(nullptr);
427 mock_local_device_data_provider_->SetBeaconSeeds(nullptr); 364 mock_local_device_data_provider_->SetBeaconSeeds(nullptr);
428 MockBluetoothDeviceWithServiceData device( 365 MockBluetoothDeviceWithServiceData device(
429 mock_adapter_.get(), kDefaultBluetoothAddress, 366 mock_adapter_.get(), kDefaultBluetoothAddress,
430 valid_service_data_for_other_device); 367 valid_service_data_for_other_device);
431 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device); 368 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device);
432 EXPECT_FALSE(mock_eid_generator_->num_identify_calls()); 369 EXPECT_FALSE(mock_eid_generator_->num_identify_calls());
433 EXPECT_FALSE(mock_observer_->GetNumCalls()); 370 EXPECT_FALSE(mock_observer_->GetNumCalls());
434 } 371 }
435 372
436 TEST_F(BleScannerTest, TestDiscovery_ScanSuccessfulButNoRegisteredDevice) { 373 TEST_F(BleScannerTest, TestDiscovery_ScanSuccessfulButNoRegisteredDevice) {
437 std::string valid_service_data_for_other_device = "abcd"; 374 std::string valid_service_data_for_other_device = "abcd";
438 ASSERT_TRUE(valid_service_data_for_other_device.size() >= 375 ASSERT_TRUE(valid_service_data_for_other_device.size() >=
439 kMinNumBytesInServiceData); 376 kMinNumBytesInServiceData);
440 377
441 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 378 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
442 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 379 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
443 380
444 InvokeAdapterCallback(); 381 AssertDiscoverySessionRequested();
445 InvokeDiscoveryStartedCallback(); 382 InvokeDiscoveryStartedCallback();
446 383
447 // Device with valid service data connected, but there was no registered 384 // Device with valid service data connected, but there was no registered
448 // device corresponding to the one that just connected. 385 // device corresponding to the one that just connected.
449 mock_local_device_data_provider_->SetPublicKey( 386 mock_local_device_data_provider_->SetPublicKey(
450 base::MakeUnique<std::string>(fake_local_public_key)); 387 base::MakeUnique<std::string>(fake_local_public_key));
451 mock_local_device_data_provider_->SetBeaconSeeds( 388 mock_local_device_data_provider_->SetBeaconSeeds(
452 base::MakeUnique<std::vector<cryptauth::BeaconSeed>>(test_beacon_seeds_)); 389 base::MakeUnique<std::vector<cryptauth::BeaconSeed>>(test_beacon_seeds_));
453 MockBluetoothDeviceWithServiceData device( 390 MockBluetoothDeviceWithServiceData device(
454 mock_adapter_.get(), kDefaultBluetoothAddress, 391 mock_adapter_.get(), kDefaultBluetoothAddress,
455 valid_service_data_for_other_device); 392 valid_service_data_for_other_device);
456 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device); 393 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device);
457 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls()); 394 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls());
458 EXPECT_FALSE(mock_observer_->GetNumCalls()); 395 EXPECT_FALSE(mock_observer_->GetNumCalls());
459 } 396 }
460 397
461 TEST_F(BleScannerTest, TestDiscovery_Success) { 398 TEST_F(BleScannerTest, TestDiscovery_Success) {
462 std::string valid_service_data_for_registered_device = "abcde"; 399 std::string valid_service_data_for_registered_device = "abcde";
463 ASSERT_TRUE(valid_service_data_for_registered_device.size() >= 400 ASSERT_TRUE(valid_service_data_for_registered_device.size() >=
464 kMinNumBytesInServiceData); 401 kMinNumBytesInServiceData);
465 402
466 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 403 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
467 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 404 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
468 405
469 InvokeAdapterCallback(); 406 AssertDiscoverySessionRequested();
470 InvokeDiscoveryStartedCallback(); 407 InvokeDiscoveryStartedCallback();
471 408
472 // Registered device connects. 409 // Registered device connects.
473 MockBluetoothDeviceWithServiceData device( 410 MockBluetoothDeviceWithServiceData device(
474 mock_adapter_.get(), kDefaultBluetoothAddress, 411 mock_adapter_.get(), kDefaultBluetoothAddress,
475 valid_service_data_for_registered_device); 412 valid_service_data_for_registered_device);
476 mock_eid_generator_->set_identified_device(&test_devices_[0]); 413 mock_eid_generator_->set_identified_device(&test_devices_[0]);
477 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device); 414 ble_scanner_->DeviceAdded(mock_adapter_.get(), &device);
478 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls()); 415 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls());
479 EXPECT_EQ(1, mock_observer_->GetNumCalls()); 416 EXPECT_EQ(1, mock_observer_->GetNumCalls());
480 EXPECT_EQ(1, static_cast<int>(mock_observer_->device_addresses().size())); 417 EXPECT_EQ(1, static_cast<int>(mock_observer_->device_addresses().size()));
481 EXPECT_EQ(device.GetAddress(), mock_observer_->device_addresses()[0]); 418 EXPECT_EQ(device.GetAddress(), mock_observer_->device_addresses()[0]);
482 EXPECT_EQ(1, static_cast<int>(mock_observer_->remote_devices().size())); 419 EXPECT_EQ(1, static_cast<int>(mock_observer_->remote_devices().size()));
483 EXPECT_EQ(test_devices_[0], mock_observer_->remote_devices()[0]); 420 EXPECT_EQ(test_devices_[0], mock_observer_->remote_devices()[0]);
484 421
485 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 422 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
486 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 423 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
487 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls()); 424 EXPECT_EQ(1, mock_eid_generator_->num_identify_calls());
488 EXPECT_EQ(1, mock_observer_->GetNumCalls()); 425 EXPECT_EQ(1, mock_observer_->GetNumCalls());
489 } 426 }
490 427
491 TEST_F(BleScannerTest, TestDiscovery_MultipleObservers) { 428 TEST_F(BleScannerTest, TestDiscovery_MultipleObservers) {
492 MockBleScannerObserver extra_observer; 429 MockBleScannerObserver extra_observer;
493 ble_scanner_->AddObserver(&extra_observer); 430 ble_scanner_->AddObserver(&extra_observer);
494 431
495 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 432 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
496 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 433 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
497 434
498 InvokeAdapterCallback(); 435 AssertDiscoverySessionRequested();
499 InvokeDiscoveryStartedCallback(); 436 InvokeDiscoveryStartedCallback();
500 437
501 MockBluetoothDeviceWithServiceData mock_bluetooth_device( 438 MockBluetoothDeviceWithServiceData mock_bluetooth_device(
502 mock_adapter_.get(), kDefaultBluetoothAddress, "fakeServiceData"); 439 mock_adapter_.get(), kDefaultBluetoothAddress, "fakeServiceData");
503 mock_eid_generator_->set_identified_device(&test_devices_[0]); 440 mock_eid_generator_->set_identified_device(&test_devices_[0]);
504 ble_scanner_->DeviceAdded(mock_adapter_.get(), &mock_bluetooth_device); 441 ble_scanner_->DeviceAdded(mock_adapter_.get(), &mock_bluetooth_device);
505 442
506 EXPECT_EQ(1, mock_observer_->GetNumCalls()); 443 EXPECT_EQ(1, mock_observer_->GetNumCalls());
507 EXPECT_EQ(1, static_cast<int>(mock_observer_->device_addresses().size())); 444 EXPECT_EQ(1, static_cast<int>(mock_observer_->device_addresses().size()));
508 EXPECT_EQ(mock_bluetooth_device.GetAddress(), 445 EXPECT_EQ(mock_bluetooth_device.GetAddress(),
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 // complete another discovery session. 516 // complete another discovery session.
580 EXPECT_CALL(*mock_adapter_, IsPowered()) 517 EXPECT_CALL(*mock_adapter_, IsPowered())
581 .WillOnce(Return(true)) 518 .WillOnce(Return(true))
582 .WillOnce(Return(false)) 519 .WillOnce(Return(false))
583 .WillOnce(Return(true)) 520 .WillOnce(Return(true))
584 .WillOnce(Return(false)) 521 .WillOnce(Return(false))
585 .WillOnce(Return(true)); 522 .WillOnce(Return(true));
586 523
587 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0])); 524 EXPECT_TRUE(ble_scanner_->RegisterScanFilterForDevice(test_devices_[0]));
588 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 525 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
589 InvokeAdapterCallback(); 526 AssertDiscoverySessionRequested();
590 527
591 // The discovery session should have been requested but not yet initialized. 528 // The discovery session should have been requested but not yet initialized.
592 EXPECT_TRUE(stored_discovery_filter_.get()); 529 EXPECT_TRUE(stored_discovery_filter_.get());
593 EXPECT_FALSE(mock_discovery_session_); 530 EXPECT_FALSE(mock_discovery_session_);
594 531
595 // Turn the adapter off before the discovery session starts. 532 // Turn the adapter off before the discovery session starts.
596 ble_scanner_->AdapterPoweredChanged(mock_adapter_.get(), false); 533 ble_scanner_->AdapterPoweredChanged(mock_adapter_.get(), false);
597 534
598 // Turn the adapter back on, and finish initializing discovery this time. 535 // Turn the adapter back on, and finish initializing discovery this time.
599 ble_scanner_->AdapterPoweredChanged(mock_adapter_.get(), true); 536 ble_scanner_->AdapterPoweredChanged(mock_adapter_.get(), true);
(...skipping 19 matching lines...) Expand all
619 // Unregister device. 556 // Unregister device.
620 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 557 EXPECT_TRUE(ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
621 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0])); 558 EXPECT_TRUE(ble_scanner_->UnregisterScanFilterForDevice(test_devices_[0]));
622 EXPECT_FALSE( 559 EXPECT_FALSE(
623 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId())); 560 ble_scanner_->IsDeviceRegistered(test_devices_[0].GetDeviceId()));
624 } 561 }
625 562
626 } // namespace tether 563 } // namespace tether
627 564
628 } // namespace chromeos 565 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/components/tether/ble_scanner.cc ('k') | chromeos/components/tether/fake_ble_connection_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698