| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |