| Index: device/bluetooth/bluetooth_adapter_unittest.cc
|
| diff --git a/device/bluetooth/bluetooth_adapter_unittest.cc b/device/bluetooth/bluetooth_adapter_unittest.cc
|
| index 5217f6edcdfda58fbad879b69d17ac327443f3e3..d4d83bbb7f8dbb1d1f1c85299b8f70db3c393c9f 100644
|
| --- a/device/bluetooth/bluetooth_adapter_unittest.cc
|
| +++ b/device/bluetooth/bluetooth_adapter_unittest.cc
|
| @@ -36,6 +36,8 @@
|
| #endif
|
|
|
| using device::BluetoothDevice;
|
| +using UUIDSet = BluetoothDevice::UUIDSet;
|
| +using DeviceToUUIDs = std::unordered_map<BluetoothDevice*, UUIDSet>;
|
|
|
| namespace device {
|
|
|
| @@ -865,7 +867,37 @@ TEST_F(BluetoothTest, RemoveOutdatedDeviceGattConnect) {
|
| }
|
| #endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| -#if defined(OS_MACOSX)
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| +// Make sure devices have a timestamp when they are added.
|
| +TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDevice_Timestamp) {
|
| + if (!PlatformSupportsLowEnergy()) {
|
| + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
|
| + return;
|
| + }
|
| + InitWithFakeAdapter();
|
| + TestBluetoothAdapterObserver observer(adapter_);
|
| +
|
| + SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| + SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| + BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| + adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| + discovery_filter);
|
| +
|
| + EXPECT_EQ(2, observer.device_added_count());
|
| + EXPECT_EQ(0, observer.device_removed_count());
|
| + EXPECT_EQ(2u, adapter_->GetDevices().size());
|
| +
|
| + observer.Reset();
|
| + RemoveTimedOutDevices();
|
| +
|
| + EXPECT_EQ(0, observer.device_removed_count());
|
| + EXPECT_EQ(2u, adapter_->GetDevices().size());
|
| +}
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
| +
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| // Simulate two devices being connected before calling
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() with no service filter.
|
| TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithNoFilter) {
|
| @@ -878,22 +910,33 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithNoFilter) {
|
|
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| - std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result =
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_EQ(2u, result.size());
|
| - for (const auto& pair : result) {
|
| - EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress()));
|
| - EXPECT_TRUE(pair.second.empty());
|
| - }
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({BluetoothUUID(kTestUUIDGenericAccess)}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| EXPECT_EQ(2, observer.device_added_count());
|
| EXPECT_EQ(2u, adapter_->GetDevices().size());
|
| +
|
| + BluetoothDevice* device1 = adapter_->GetDevice(kTestDeviceAddress1);
|
| + ASSERT_TRUE(device1);
|
| + BluetoothDevice* device2 = adapter_->GetDevice(kTestDeviceAddress2);
|
| + ASSERT_TRUE(device2);
|
| +
|
| + EXPECT_EQ(DeviceToUUIDs({{device1, UUIDSet()}, {device2, UUIDSet()}}),
|
| + result);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({BluetoothUUID(kTestUUIDGenericAccess)}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(1, manager_get_connected_devices_attempts_);
|
| +#endif // defined(OS_MACOSX)
|
| }
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| // Simulate two devices being connected before calling
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter.
|
| TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithFilter) {
|
| @@ -906,29 +949,35 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithFilter) {
|
|
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| device::BluetoothUUID heart_service_uuid =
|
| device::BluetoothUUID(kTestUUIDHeartRate);
|
| discovery_filter.AddUUID(heart_service_uuid);
|
| - std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result =
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_EQ(1u, result.size());
|
| - for (const auto& pair : result) {
|
| - EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress());
|
| - EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress()));
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second);
|
| - }
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| EXPECT_EQ(1, observer.device_added_count());
|
| EXPECT_EQ(1u, adapter_->GetDevices().size());
|
| +
|
| + BluetoothDevice* device = adapter_->GetDevice(kTestDeviceAddress2);
|
| + ASSERT_TRUE(device);
|
| + EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({heart_service_uuid}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(1, manager_get_connected_devices_attempts_);
|
| +#endif // defined(OS_MACOSX)
|
| }
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| // Simulate two devices being connected before calling
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter
|
| // that doesn't match.
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithWrongFilter) {
|
| if (!PlatformSupportsLowEnergy()) {
|
| LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
|
| @@ -939,23 +988,31 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithWrongFilter) {
|
|
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| discovery_filter.AddUUID(device::BluetoothUUID(kTestUUIDLinkLoss));
|
| - std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result =
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_TRUE(result.empty());
|
| - EXPECT_EQ(
|
| - BluetoothDevice::UUIDSet({device::BluetoothUUID(kTestUUIDLinkLoss)}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| EXPECT_EQ(0, observer.device_added_count());
|
| EXPECT_EQ(0u, adapter_->GetDevices().size());
|
| +
|
| + EXPECT_TRUE(result.empty());
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({device::BluetoothUUID(kTestUUIDLinkLoss)}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(1, manager_get_connected_devices_attempts_);
|
| +#endif // defined(OS_MACOSX)
|
| }
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| // Simulate two devices being connected before calling
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() with two service filters
|
| // that both match.
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithTwoFilters) {
|
| if (!PlatformSupportsLowEnergy()) {
|
| LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
|
| @@ -966,6 +1023,7 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithTwoFilters) {
|
|
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| device::BluetoothUUID heart_service_uuid =
|
| device::BluetoothUUID(kTestUUIDHeartRate);
|
| @@ -973,35 +1031,38 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithTwoFilters) {
|
| device::BluetoothUUID generic_service_uuid =
|
| device::BluetoothUUID(kTestUUIDGenericAccess);
|
| discovery_filter.AddUUID(generic_service_uuid);
|
| - std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result =
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_EQ(2u, result.size());
|
| - for (const auto& pair : result) {
|
| - EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress()));
|
| - if (pair.first->GetAddress() == kTestDeviceAddress2) {
|
| - EXPECT_EQ(
|
| - BluetoothDevice::UUIDSet({heart_service_uuid, generic_service_uuid}),
|
| - pair.second);
|
| - } else if (pair.first->GetAddress() == kTestDeviceAddress1) {
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({generic_service_uuid}), pair.second);
|
| - } else {
|
| - // Unknown device.
|
| - EXPECT_TRUE(false);
|
| - }
|
| - }
|
| - EXPECT_EQ(
|
| - BluetoothDevice::UUIDSet({generic_service_uuid, heart_service_uuid}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| EXPECT_EQ(2, observer.device_added_count());
|
| EXPECT_EQ(2u, adapter_->GetDevices().size());
|
| +
|
| + BluetoothDevice* device1 = adapter_->GetDevice(kTestDeviceAddress1);
|
| + ASSERT_TRUE(device1);
|
| + BluetoothDevice* device2 = adapter_->GetDevice(kTestDeviceAddress2);
|
| + ASSERT_TRUE(device2);
|
| +
|
| + EXPECT_EQ(
|
| + DeviceToUUIDs(
|
| + {{device1, UUIDSet({generic_service_uuid})},
|
| + {device2, UUIDSet({heart_service_uuid, generic_service_uuid})}}),
|
| + result);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({generic_service_uuid, heart_service_uuid}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(1, manager_get_connected_devices_attempts_);
|
| +#endif // defined(OS_MACOSX)
|
| }
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| // Simulate two devices being connected before calling
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter
|
| // that one match device, and then
|
| // RetrieveGattConnectedDevicesWithDiscoveryFilter() again.
|
| +#if defined(OS_ANDROID) || defined(OS_MACOSX)
|
| TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceTwice) {
|
| if (!PlatformSupportsLowEnergy()) {
|
| LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
|
| @@ -1012,42 +1073,49 @@ TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceTwice) {
|
|
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE);
|
| SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE);
|
| +
|
| BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE);
|
| device::BluetoothUUID heart_service_uuid =
|
| device::BluetoothUUID(kTestUUIDHeartRate);
|
| discovery_filter.AddUUID(heart_service_uuid);
|
| - std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result =
|
| + std::unordered_map<BluetoothDevice*, UUIDSet> result =
|
| adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_EQ(1u, result.size());
|
| - for (const auto& pair : result) {
|
| - EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress());
|
| - EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress()));
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second);
|
| - }
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| EXPECT_EQ(1, observer.device_added_count());
|
| EXPECT_EQ(1u, adapter_->GetDevices().size());
|
|
|
| + BluetoothDevice* device = adapter_->GetDevice(kTestDeviceAddress2);
|
| + ASSERT_TRUE(device);
|
| + EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({heart_service_uuid}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(1, manager_get_connected_devices_attempts_);
|
| +#endif // defined(OS_MACOSX)
|
| +
|
| observer.Reset();
|
| +#if defined(OS_MACOSX)
|
| ResetRetrieveConnectedPeripheralServiceUUIDs();
|
| +#endif // defined(OS_MACOSX)
|
| +
|
| result = adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter(
|
| discovery_filter);
|
|
|
| - EXPECT_EQ(1u, result.size());
|
| - for (const auto& pair : result) {
|
| - EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress());
|
| - EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress()));
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second);
|
| - }
|
| - EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}),
|
| - RetrieveConnectedPeripheralServiceUUIDs());
|
| -
|
| EXPECT_EQ(0, observer.device_added_count());
|
| EXPECT_EQ(1u, adapter_->GetDevices().size());
|
| -}
|
| +
|
| + EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result);
|
| +
|
| +#if defined(OS_MACOSX)
|
| + EXPECT_EQ(UUIDSet({heart_service_uuid}),
|
| + RetrieveConnectedPeripheralServiceUUIDs());
|
| +#elif defined(OS_ANDROID)
|
| + EXPECT_EQ(2, manager_get_connected_devices_attempts_);
|
| #endif // defined(OS_MACOSX)
|
| +}
|
| +#endif // defined(OS_ANDROID) || defined(OS_MACOSX)
|
|
|
| } // namespace device
|
|
|