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 |