Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "device/bluetooth/bluetooth_adapter.h" | 5 #include "device/bluetooth/bluetooth_adapter.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 #include "device/bluetooth/test/bluetooth_test_android.h" | 29 #include "device/bluetooth/test/bluetooth_test_android.h" |
| 30 #elif defined(OS_MACOSX) | 30 #elif defined(OS_MACOSX) |
| 31 #include "device/bluetooth/test/bluetooth_test_mac.h" | 31 #include "device/bluetooth/test/bluetooth_test_mac.h" |
| 32 #elif defined(OS_WIN) | 32 #elif defined(OS_WIN) |
| 33 #include "device/bluetooth/test/bluetooth_test_win.h" | 33 #include "device/bluetooth/test/bluetooth_test_win.h" |
| 34 #elif defined(OS_CHROMEOS) || defined(OS_LINUX) | 34 #elif defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 35 #include "device/bluetooth/test/bluetooth_test_bluez.h" | 35 #include "device/bluetooth/test/bluetooth_test_bluez.h" |
| 36 #endif | 36 #endif |
| 37 | 37 |
| 38 using device::BluetoothDevice; | 38 using device::BluetoothDevice; |
| 39 using UUIDSet = BluetoothDevice::UUIDSet; | |
| 40 using DeviceToUUIDs = std::unordered_map<BluetoothDevice*, UUIDSet>; | |
| 39 | 41 |
| 40 namespace device { | 42 namespace device { |
| 41 | 43 |
| 42 class TestBluetoothAdapter : public BluetoothAdapter { | 44 class TestBluetoothAdapter : public BluetoothAdapter { |
| 43 public: | 45 public: |
| 44 TestBluetoothAdapter() { | 46 TestBluetoothAdapter() { |
| 45 } | 47 } |
| 46 | 48 |
| 47 std::string GetAddress() const override { return ""; } | 49 std::string GetAddress() const override { return ""; } |
| 48 | 50 |
| (...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 858 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 860 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 859 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 861 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 860 SimulateGattConnection(device); | 862 SimulateGattConnection(device); |
| 861 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 863 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 862 RemoveTimedOutDevices(); | 864 RemoveTimedOutDevices(); |
| 863 EXPECT_EQ(0, observer.device_removed_count()); | 865 EXPECT_EQ(0, observer.device_removed_count()); |
| 864 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 866 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 865 } | 867 } |
| 866 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | 868 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 867 | 869 |
| 868 #if defined(OS_MACOSX) | 870 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 871 // Make sure devices have a timestamp when they are added. | |
| 872 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDevice_Timestamp) { | |
| 873 if (!PlatformSupportsLowEnergy()) { | |
| 874 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | |
| 875 return; | |
| 876 } | |
| 877 InitWithFakeAdapter(); | |
| 878 TestBluetoothAdapterObserver observer(adapter_); | |
| 879 | |
| 880 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | |
| 881 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | |
| 882 | |
| 883 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | |
| 884 std::unordered_map<BluetoothDevice*, UUIDSet> result = | |
| 885 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | |
| 886 discovery_filter); | |
| 887 | |
| 888 EXPECT_EQ(2, observer.device_added_count()); | |
| 889 EXPECT_EQ(0, observer.device_removed_count()); | |
| 890 EXPECT_EQ(2u, adapter_->GetDevices().size()); | |
| 891 | |
| 892 observer.Reset(); | |
| 893 RemoveTimedOutDevices(); | |
| 894 | |
| 895 EXPECT_EQ(0, observer.device_removed_count()); | |
| 896 EXPECT_EQ(2u, adapter_->GetDevices().size()); | |
| 897 } | |
| 898 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 899 | |
| 900 #if defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 869 // Simulate two devices being connected before calling | 901 // Simulate two devices being connected before calling |
| 870 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with no service filter. | 902 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with no service filter. |
| 871 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithNoFilter) { | 903 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithNoFilter) { |
| 872 if (!PlatformSupportsLowEnergy()) { | 904 if (!PlatformSupportsLowEnergy()) { |
| 873 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 905 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 874 return; | 906 return; |
| 875 } | 907 } |
| 876 InitWithFakeAdapter(); | 908 InitWithFakeAdapter(); |
| 877 TestBluetoothAdapterObserver observer(adapter_); | 909 TestBluetoothAdapterObserver observer(adapter_); |
| 878 | 910 |
| 879 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | 911 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); |
| 880 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | 912 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); |
| 913 | |
| 881 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | 914 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); |
| 882 std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result = | 915 std::unordered_map<BluetoothDevice*, UUIDSet> result = |
| 883 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 916 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 884 discovery_filter); | 917 discovery_filter); |
| 885 | 918 |
| 886 EXPECT_EQ(2u, result.size()); | |
| 887 for (const auto& pair : result) { | |
| 888 EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress())); | |
| 889 EXPECT_TRUE(pair.second.empty()); | |
| 890 } | |
| 891 EXPECT_EQ(BluetoothDevice::UUIDSet({BluetoothUUID(kTestUUIDGenericAccess)}), | |
| 892 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 893 EXPECT_EQ(2, observer.device_added_count()); | 919 EXPECT_EQ(2, observer.device_added_count()); |
| 894 EXPECT_EQ(2u, adapter_->GetDevices().size()); | 920 EXPECT_EQ(2u, adapter_->GetDevices().size()); |
| 921 | |
| 922 BluetoothDevice* device1 = adapter_->GetDevice(kTestDeviceAddress1); | |
| 923 ASSERT_TRUE(device1); | |
| 924 BluetoothDevice* device2 = adapter_->GetDevice(kTestDeviceAddress2); | |
| 925 ASSERT_TRUE(device2); | |
| 926 | |
| 927 EXPECT_EQ(DeviceToUUIDs({{device1, UUIDSet()}, {device2, UUIDSet()}}), | |
| 928 result); | |
| 929 | |
| 930 #if defined(OS_MACOSX) | |
|
scheib
2016/11/28 20:42:22
RetrieveConnectedPeripheralServiceUUIDs is confusi
| |
| 931 EXPECT_EQ(UUIDSet({BluetoothUUID(kTestUUIDGenericAccess)}), | |
| 932 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 933 #elif defined(OS_ANDROID) | |
| 934 EXPECT_EQ(1, manager_get_connected_devices_attempts_); | |
| 935 #endif // defined(OS_MACOSX) | |
| 895 } | 936 } |
| 937 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 896 | 938 |
| 939 #if defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 897 // Simulate two devices being connected before calling | 940 // Simulate two devices being connected before calling |
| 898 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter. | 941 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter. |
| 899 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithFilter) { | 942 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithFilter) { |
| 900 if (!PlatformSupportsLowEnergy()) { | 943 if (!PlatformSupportsLowEnergy()) { |
| 901 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 944 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 902 return; | 945 return; |
| 903 } | 946 } |
| 904 InitWithFakeAdapter(); | 947 InitWithFakeAdapter(); |
| 905 TestBluetoothAdapterObserver observer(adapter_); | 948 TestBluetoothAdapterObserver observer(adapter_); |
| 906 | 949 |
| 907 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | 950 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); |
| 908 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | 951 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); |
| 952 | |
| 909 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | 953 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); |
| 910 device::BluetoothUUID heart_service_uuid = | 954 device::BluetoothUUID heart_service_uuid = |
| 911 device::BluetoothUUID(kTestUUIDHeartRate); | 955 device::BluetoothUUID(kTestUUIDHeartRate); |
| 912 discovery_filter.AddUUID(heart_service_uuid); | 956 discovery_filter.AddUUID(heart_service_uuid); |
| 913 std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result = | 957 std::unordered_map<BluetoothDevice*, UUIDSet> result = |
| 914 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 958 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 915 discovery_filter); | 959 discovery_filter); |
| 916 | 960 |
| 917 EXPECT_EQ(1u, result.size()); | |
| 918 for (const auto& pair : result) { | |
| 919 EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress()); | |
| 920 EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress())); | |
| 921 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second); | |
| 922 } | |
| 923 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), | |
| 924 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 925 EXPECT_EQ(1, observer.device_added_count()); | 961 EXPECT_EQ(1, observer.device_added_count()); |
| 926 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 962 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 963 | |
| 964 BluetoothDevice* device = adapter_->GetDevice(kTestDeviceAddress2); | |
| 965 ASSERT_TRUE(device); | |
| 966 EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result); | |
| 967 | |
| 968 #if defined(OS_MACOSX) | |
| 969 EXPECT_EQ(UUIDSet({heart_service_uuid}), | |
| 970 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 971 #elif defined(OS_ANDROID) | |
| 972 EXPECT_EQ(1, manager_get_connected_devices_attempts_); | |
| 973 #endif // defined(OS_MACOSX) | |
| 927 } | 974 } |
| 975 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 928 | 976 |
| 929 // Simulate two devices being connected before calling | 977 // Simulate two devices being connected before calling |
| 930 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter | 978 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter |
| 931 // that doesn't match. | 979 // that doesn't match. |
| 980 #if defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 932 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithWrongFilter) { | 981 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithWrongFilter) { |
| 933 if (!PlatformSupportsLowEnergy()) { | 982 if (!PlatformSupportsLowEnergy()) { |
| 934 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 983 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 935 return; | 984 return; |
| 936 } | 985 } |
| 937 InitWithFakeAdapter(); | 986 InitWithFakeAdapter(); |
| 938 TestBluetoothAdapterObserver observer(adapter_); | 987 TestBluetoothAdapterObserver observer(adapter_); |
| 939 | 988 |
| 940 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | 989 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); |
| 941 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | 990 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); |
| 991 | |
| 942 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | 992 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); |
| 943 discovery_filter.AddUUID(device::BluetoothUUID(kTestUUIDLinkLoss)); | 993 discovery_filter.AddUUID(device::BluetoothUUID(kTestUUIDLinkLoss)); |
| 944 std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result = | 994 std::unordered_map<BluetoothDevice*, UUIDSet> result = |
| 945 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 995 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 946 discovery_filter); | 996 discovery_filter); |
| 947 | 997 |
| 948 EXPECT_TRUE(result.empty()); | |
| 949 EXPECT_EQ( | |
| 950 BluetoothDevice::UUIDSet({device::BluetoothUUID(kTestUUIDLinkLoss)}), | |
| 951 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 952 EXPECT_EQ(0, observer.device_added_count()); | 998 EXPECT_EQ(0, observer.device_added_count()); |
| 953 EXPECT_EQ(0u, adapter_->GetDevices().size()); | 999 EXPECT_EQ(0u, adapter_->GetDevices().size()); |
| 1000 | |
| 1001 EXPECT_TRUE(result.empty()); | |
| 1002 | |
| 1003 #if defined(OS_MACOSX) | |
| 1004 EXPECT_EQ(UUIDSet({device::BluetoothUUID(kTestUUIDLinkLoss)}), | |
| 1005 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1006 #elif defined(OS_ANDROID) | |
| 1007 EXPECT_EQ(1, manager_get_connected_devices_attempts_); | |
| 1008 #endif // defined(OS_MACOSX) | |
| 954 } | 1009 } |
| 1010 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 955 | 1011 |
| 956 // Simulate two devices being connected before calling | 1012 // Simulate two devices being connected before calling |
| 957 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with two service filters | 1013 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with two service filters |
| 958 // that both match. | 1014 // that both match. |
| 1015 #if defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 959 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithTwoFilters) { | 1016 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceWithTwoFilters) { |
| 960 if (!PlatformSupportsLowEnergy()) { | 1017 if (!PlatformSupportsLowEnergy()) { |
| 961 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 1018 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 962 return; | 1019 return; |
| 963 } | 1020 } |
| 964 InitWithFakeAdapter(); | 1021 InitWithFakeAdapter(); |
| 965 TestBluetoothAdapterObserver observer(adapter_); | 1022 TestBluetoothAdapterObserver observer(adapter_); |
| 966 | 1023 |
| 967 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | 1024 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); |
| 968 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | 1025 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); |
| 1026 | |
| 969 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | 1027 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); |
| 970 device::BluetoothUUID heart_service_uuid = | 1028 device::BluetoothUUID heart_service_uuid = |
| 971 device::BluetoothUUID(kTestUUIDHeartRate); | 1029 device::BluetoothUUID(kTestUUIDHeartRate); |
| 972 discovery_filter.AddUUID(heart_service_uuid); | 1030 discovery_filter.AddUUID(heart_service_uuid); |
| 973 device::BluetoothUUID generic_service_uuid = | 1031 device::BluetoothUUID generic_service_uuid = |
| 974 device::BluetoothUUID(kTestUUIDGenericAccess); | 1032 device::BluetoothUUID(kTestUUIDGenericAccess); |
| 975 discovery_filter.AddUUID(generic_service_uuid); | 1033 discovery_filter.AddUUID(generic_service_uuid); |
| 976 std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result = | 1034 std::unordered_map<BluetoothDevice*, UUIDSet> result = |
| 977 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 1035 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 978 discovery_filter); | 1036 discovery_filter); |
| 979 | 1037 |
| 980 EXPECT_EQ(2u, result.size()); | |
| 981 for (const auto& pair : result) { | |
| 982 EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress())); | |
| 983 if (pair.first->GetAddress() == kTestDeviceAddress2) { | |
| 984 EXPECT_EQ( | |
| 985 BluetoothDevice::UUIDSet({heart_service_uuid, generic_service_uuid}), | |
| 986 pair.second); | |
| 987 } else if (pair.first->GetAddress() == kTestDeviceAddress1) { | |
| 988 EXPECT_EQ(BluetoothDevice::UUIDSet({generic_service_uuid}), pair.second); | |
| 989 } else { | |
| 990 // Unknown device. | |
| 991 EXPECT_TRUE(false); | |
| 992 } | |
| 993 } | |
| 994 EXPECT_EQ( | |
| 995 BluetoothDevice::UUIDSet({generic_service_uuid, heart_service_uuid}), | |
| 996 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 997 EXPECT_EQ(2, observer.device_added_count()); | 1038 EXPECT_EQ(2, observer.device_added_count()); |
| 998 EXPECT_EQ(2u, adapter_->GetDevices().size()); | 1039 EXPECT_EQ(2u, adapter_->GetDevices().size()); |
| 1040 | |
| 1041 BluetoothDevice* device1 = adapter_->GetDevice(kTestDeviceAddress1); | |
| 1042 ASSERT_TRUE(device1); | |
| 1043 BluetoothDevice* device2 = adapter_->GetDevice(kTestDeviceAddress2); | |
| 1044 ASSERT_TRUE(device2); | |
| 1045 | |
| 1046 EXPECT_EQ( | |
| 1047 DeviceToUUIDs( | |
| 1048 {{device1, UUIDSet({generic_service_uuid})}, | |
| 1049 {device2, UUIDSet({heart_service_uuid, generic_service_uuid})}}), | |
| 1050 result); | |
| 1051 | |
| 1052 #if defined(OS_MACOSX) | |
| 1053 EXPECT_EQ(UUIDSet({generic_service_uuid, heart_service_uuid}), | |
| 1054 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1055 #elif defined(OS_ANDROID) | |
| 1056 EXPECT_EQ(1, manager_get_connected_devices_attempts_); | |
| 1057 #endif // defined(OS_MACOSX) | |
| 999 } | 1058 } |
| 1059 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 1000 | 1060 |
| 1001 // Simulate two devices being connected before calling | 1061 // Simulate two devices being connected before calling |
| 1002 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter | 1062 // RetrieveGattConnectedDevicesWithDiscoveryFilter() with one service filter |
| 1003 // that one match device, and then | 1063 // that one match device, and then |
| 1004 // RetrieveGattConnectedDevicesWithDiscoveryFilter() again. | 1064 // RetrieveGattConnectedDevicesWithDiscoveryFilter() again. |
| 1065 #if defined(OS_ANDROID) || defined(OS_MACOSX) | |
| 1005 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceTwice) { | 1066 TEST_F(BluetoothTest, DiscoverConnectedLowEnergyDeviceTwice) { |
| 1006 if (!PlatformSupportsLowEnergy()) { | 1067 if (!PlatformSupportsLowEnergy()) { |
| 1007 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 1068 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 1008 return; | 1069 return; |
| 1009 } | 1070 } |
| 1010 InitWithFakeAdapter(); | 1071 InitWithFakeAdapter(); |
| 1011 TestBluetoothAdapterObserver observer(adapter_); | 1072 TestBluetoothAdapterObserver observer(adapter_); |
| 1012 | 1073 |
| 1013 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); | 1074 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::GENERIC_DEVICE); |
| 1014 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); | 1075 SimulateConnectedLowEnergyDevice(ConnectedDeviceType::HEART_RATE_DEVICE); |
| 1076 | |
| 1015 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); | 1077 BluetoothDiscoveryFilter discovery_filter(BLUETOOTH_TRANSPORT_LE); |
| 1016 device::BluetoothUUID heart_service_uuid = | 1078 device::BluetoothUUID heart_service_uuid = |
| 1017 device::BluetoothUUID(kTestUUIDHeartRate); | 1079 device::BluetoothUUID(kTestUUIDHeartRate); |
| 1018 discovery_filter.AddUUID(heart_service_uuid); | 1080 discovery_filter.AddUUID(heart_service_uuid); |
| 1019 std::unordered_map<BluetoothDevice*, BluetoothDevice::UUIDSet> result = | 1081 std::unordered_map<BluetoothDevice*, UUIDSet> result = |
| 1020 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 1082 adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 1021 discovery_filter); | 1083 discovery_filter); |
| 1022 | 1084 |
| 1023 EXPECT_EQ(1u, result.size()); | |
| 1024 for (const auto& pair : result) { | |
| 1025 EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress()); | |
| 1026 EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress())); | |
| 1027 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second); | |
| 1028 } | |
| 1029 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), | |
| 1030 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1031 EXPECT_EQ(1, observer.device_added_count()); | 1085 EXPECT_EQ(1, observer.device_added_count()); |
| 1032 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 1086 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 1033 | 1087 |
| 1088 BluetoothDevice* device = adapter_->GetDevice(kTestDeviceAddress2); | |
| 1089 ASSERT_TRUE(device); | |
| 1090 EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result); | |
| 1091 | |
| 1092 #if defined(OS_MACOSX) | |
| 1093 EXPECT_EQ(UUIDSet({heart_service_uuid}), | |
| 1094 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1095 #elif defined(OS_ANDROID) | |
| 1096 EXPECT_EQ(1, manager_get_connected_devices_attempts_); | |
| 1097 #endif // defined(OS_MACOSX) | |
| 1098 | |
| 1034 observer.Reset(); | 1099 observer.Reset(); |
| 1100 #if defined(OS_MACOSX) | |
| 1035 ResetRetrieveConnectedPeripheralServiceUUIDs(); | 1101 ResetRetrieveConnectedPeripheralServiceUUIDs(); |
| 1102 #endif // defined(OS_MACOSX) | |
| 1103 | |
| 1036 result = adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( | 1104 result = adapter_->RetrieveGattConnectedDevicesWithDiscoveryFilter( |
| 1037 discovery_filter); | 1105 discovery_filter); |
| 1038 | 1106 |
| 1039 EXPECT_EQ(1u, result.size()); | |
| 1040 for (const auto& pair : result) { | |
| 1041 EXPECT_EQ(kTestDeviceAddress2, pair.first->GetAddress()); | |
| 1042 EXPECT_TRUE(adapter_->GetDevice(pair.first->GetAddress())); | |
| 1043 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), pair.second); | |
| 1044 } | |
| 1045 EXPECT_EQ(BluetoothDevice::UUIDSet({heart_service_uuid}), | |
| 1046 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1047 | |
| 1048 EXPECT_EQ(0, observer.device_added_count()); | 1107 EXPECT_EQ(0, observer.device_added_count()); |
| 1049 EXPECT_EQ(1u, adapter_->GetDevices().size()); | 1108 EXPECT_EQ(1u, adapter_->GetDevices().size()); |
| 1109 | |
| 1110 EXPECT_EQ(DeviceToUUIDs({{device, UUIDSet({heart_service_uuid})}}), result); | |
| 1111 | |
| 1112 #if defined(OS_MACOSX) | |
| 1113 EXPECT_EQ(UUIDSet({heart_service_uuid}), | |
| 1114 RetrieveConnectedPeripheralServiceUUIDs()); | |
| 1115 #elif defined(OS_ANDROID) | |
| 1116 EXPECT_EQ(2, manager_get_connected_devices_attempts_); | |
| 1117 #endif // defined(OS_MACOSX) | |
| 1050 } | 1118 } |
| 1051 #endif // defined(OS_MACOSX) | 1119 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 1052 | 1120 |
| 1053 } // namespace device | 1121 } // namespace device |
| OLD | NEW |