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 "base/run_loop.h" | 5 #include "base/run_loop.h" |
6 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" | 6 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" |
7 #include "device/bluetooth/bluetooth_remote_gatt_service.h" | 7 #include "device/bluetooth/bluetooth_remote_gatt_service.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 #if defined(OS_ANDROID) | 10 #if defined(OS_ANDROID) |
(...skipping 11 matching lines...) Expand all Loading... |
22 // descriptor1_, & descriptor2_. | 22 // descriptor1_, & descriptor2_. |
23 void FakeDescriptorBoilerplate() { | 23 void FakeDescriptorBoilerplate() { |
24 InitWithFakeAdapter(); | 24 InitWithFakeAdapter(); |
25 StartLowEnergyDiscoverySession(); | 25 StartLowEnergyDiscoverySession(); |
26 device_ = SimulateLowEnergyDevice(3); | 26 device_ = SimulateLowEnergyDevice(3); |
27 device_->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 27 device_->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
28 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 28 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
29 SimulateGattConnection(device_); | 29 SimulateGattConnection(device_); |
30 base::RunLoop().RunUntilIdle(); | 30 base::RunLoop().RunUntilIdle(); |
31 std::vector<std::string> services; | 31 std::vector<std::string> services; |
32 std::string uuid("00000000-0000-1000-8000-00805f9b34fb"); | 32 services.push_back(kTestUUIDGenericAccess); |
33 services.push_back(uuid); | |
34 SimulateGattServicesDiscovered(device_, services); | 33 SimulateGattServicesDiscovered(device_, services); |
35 base::RunLoop().RunUntilIdle(); | 34 base::RunLoop().RunUntilIdle(); |
36 ASSERT_EQ(1u, device_->GetGattServices().size()); | 35 ASSERT_EQ(1u, device_->GetGattServices().size()); |
37 service_ = device_->GetGattServices()[0]; | 36 service_ = device_->GetGattServices()[0]; |
38 SimulateGattCharacteristic(service_, uuid, 0); | 37 SimulateGattCharacteristic(service_, kTestUUIDDeviceName, 0); |
39 ASSERT_EQ(1u, service_->GetCharacteristics().size()); | 38 ASSERT_EQ(1u, service_->GetCharacteristics().size()); |
40 characteristic_ = service_->GetCharacteristics()[0]; | 39 characteristic_ = service_->GetCharacteristics()[0]; |
41 SimulateGattDescriptor(characteristic_, | 40 SimulateGattDescriptor(characteristic_, |
42 "00000001-0000-1000-8000-00805f9b34fb"); | 41 kTestUUIDCharacteristicUserDescription); |
43 SimulateGattDescriptor(characteristic_, | 42 SimulateGattDescriptor(characteristic_, |
44 "00000002-0000-1000-8000-00805f9b34fb"); | 43 kTestUUIDClientCharacteristicConfiguration); |
45 ASSERT_EQ(2u, characteristic_->GetDescriptors().size()); | 44 ASSERT_EQ(2u, characteristic_->GetDescriptors().size()); |
46 descriptor1_ = characteristic_->GetDescriptors()[0]; | 45 descriptor1_ = characteristic_->GetDescriptors()[0]; |
47 descriptor2_ = characteristic_->GetDescriptors()[1]; | 46 descriptor2_ = characteristic_->GetDescriptors()[1]; |
48 ResetEventCounts(); | 47 ResetEventCounts(); |
49 } | 48 } |
50 | 49 |
51 BluetoothDevice* device_ = nullptr; | 50 BluetoothDevice* device_ = nullptr; |
52 BluetoothRemoteGattService* service_ = nullptr; | 51 BluetoothRemoteGattService* service_ = nullptr; |
53 BluetoothRemoteGattCharacteristic* characteristic_ = nullptr; | 52 BluetoothRemoteGattCharacteristic* characteristic_ = nullptr; |
54 BluetoothRemoteGattDescriptor* descriptor1_ = nullptr; | 53 BluetoothRemoteGattDescriptor* descriptor1_ = nullptr; |
(...skipping 17 matching lines...) Expand all Loading... |
72 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 71 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
73 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 72 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
74 SimulateGattConnection(device1); | 73 SimulateGattConnection(device1); |
75 SimulateGattConnection(device2); | 74 SimulateGattConnection(device2); |
76 base::RunLoop().RunUntilIdle(); | 75 base::RunLoop().RunUntilIdle(); |
77 | 76 |
78 // 3 services (all with same UUID). | 77 // 3 services (all with same UUID). |
79 // 1 on the first device (to test characteristic instances across devices). | 78 // 1 on the first device (to test characteristic instances across devices). |
80 // 2 on the second device (to test same device, multiple service instances). | 79 // 2 on the second device (to test same device, multiple service instances). |
81 std::vector<std::string> services; | 80 std::vector<std::string> services; |
82 std::string uuid = "00000000-0000-1000-8000-00805f9b34fb"; | 81 services.push_back(kTestUUIDGenericAccess); |
83 services.push_back(uuid); | |
84 SimulateGattServicesDiscovered(device1, services); | 82 SimulateGattServicesDiscovered(device1, services); |
85 base::RunLoop().RunUntilIdle(); | 83 base::RunLoop().RunUntilIdle(); |
86 services.push_back(uuid); | 84 services.push_back(kTestUUIDGenericAccess); |
87 SimulateGattServicesDiscovered(device2, services); | 85 SimulateGattServicesDiscovered(device2, services); |
88 base::RunLoop().RunUntilIdle(); | 86 base::RunLoop().RunUntilIdle(); |
89 BluetoothRemoteGattService* service1 = device1->GetGattServices()[0]; | 87 BluetoothRemoteGattService* service1 = device1->GetGattServices()[0]; |
90 BluetoothRemoteGattService* service2 = device2->GetGattServices()[0]; | 88 BluetoothRemoteGattService* service2 = device2->GetGattServices()[0]; |
91 BluetoothRemoteGattService* service3 = device2->GetGattServices()[1]; | 89 BluetoothRemoteGattService* service3 = device2->GetGattServices()[1]; |
92 // 6 characteristics (same UUID), 2 on each service. | 90 // 6 characteristics (same UUID), 2 on each service. |
93 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 91 SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0); |
94 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 92 SimulateGattCharacteristic(service1, kTestUUIDDeviceName, /* properties */ 0); |
95 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 93 SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0); |
96 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 94 SimulateGattCharacteristic(service2, kTestUUIDDeviceName, /* properties */ 0); |
97 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 95 SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0); |
98 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 96 SimulateGattCharacteristic(service3, kTestUUIDDeviceName, /* properties */ 0); |
99 BluetoothRemoteGattCharacteristic* char1 = service1->GetCharacteristics()[0]; | 97 BluetoothRemoteGattCharacteristic* char1 = service1->GetCharacteristics()[0]; |
100 BluetoothRemoteGattCharacteristic* char2 = service1->GetCharacteristics()[1]; | 98 BluetoothRemoteGattCharacteristic* char2 = service1->GetCharacteristics()[1]; |
101 BluetoothRemoteGattCharacteristic* char3 = service2->GetCharacteristics()[0]; | 99 BluetoothRemoteGattCharacteristic* char3 = service2->GetCharacteristics()[0]; |
102 BluetoothRemoteGattCharacteristic* char4 = service2->GetCharacteristics()[1]; | 100 BluetoothRemoteGattCharacteristic* char4 = service2->GetCharacteristics()[1]; |
103 BluetoothRemoteGattCharacteristic* char5 = service3->GetCharacteristics()[0]; | 101 BluetoothRemoteGattCharacteristic* char5 = service3->GetCharacteristics()[0]; |
104 BluetoothRemoteGattCharacteristic* char6 = service3->GetCharacteristics()[1]; | 102 BluetoothRemoteGattCharacteristic* char6 = service3->GetCharacteristics()[1]; |
105 // 6 descriptors (same UUID), 1 on each characteristic | 103 // 6 descriptors (same UUID), 1 on each characteristic |
106 // TODO(576900) Test multiple descriptors with same UUID on one | 104 // TODO(576900) Test multiple descriptors with same UUID on one |
107 // characteristic. | 105 // characteristic. |
108 SimulateGattDescriptor(char1, uuid); | 106 SimulateGattDescriptor(char1, kTestUUIDCharacteristicUserDescription); |
109 SimulateGattDescriptor(char2, uuid); | 107 SimulateGattDescriptor(char2, kTestUUIDCharacteristicUserDescription); |
110 SimulateGattDescriptor(char3, uuid); | 108 SimulateGattDescriptor(char3, kTestUUIDCharacteristicUserDescription); |
111 SimulateGattDescriptor(char4, uuid); | 109 SimulateGattDescriptor(char4, kTestUUIDCharacteristicUserDescription); |
112 SimulateGattDescriptor(char5, uuid); | 110 SimulateGattDescriptor(char5, kTestUUIDCharacteristicUserDescription); |
113 SimulateGattDescriptor(char6, uuid); | 111 SimulateGattDescriptor(char6, kTestUUIDCharacteristicUserDescription); |
114 BluetoothRemoteGattDescriptor* desc1 = char1->GetDescriptors()[0]; | 112 BluetoothRemoteGattDescriptor* desc1 = char1->GetDescriptors()[0]; |
115 BluetoothRemoteGattDescriptor* desc2 = char2->GetDescriptors()[0]; | 113 BluetoothRemoteGattDescriptor* desc2 = char2->GetDescriptors()[0]; |
116 BluetoothRemoteGattDescriptor* desc3 = char3->GetDescriptors()[0]; | 114 BluetoothRemoteGattDescriptor* desc3 = char3->GetDescriptors()[0]; |
117 BluetoothRemoteGattDescriptor* desc4 = char4->GetDescriptors()[0]; | 115 BluetoothRemoteGattDescriptor* desc4 = char4->GetDescriptors()[0]; |
118 BluetoothRemoteGattDescriptor* desc5 = char5->GetDescriptors()[0]; | 116 BluetoothRemoteGattDescriptor* desc5 = char5->GetDescriptors()[0]; |
119 BluetoothRemoteGattDescriptor* desc6 = char6->GetDescriptors()[0]; | 117 BluetoothRemoteGattDescriptor* desc6 = char6->GetDescriptors()[0]; |
120 | 118 |
121 // All IDs are unique. | 119 // All IDs are unique. |
122 EXPECT_NE(desc1->GetIdentifier(), desc2->GetIdentifier()); | 120 EXPECT_NE(desc1->GetIdentifier(), desc2->GetIdentifier()); |
123 EXPECT_NE(desc1->GetIdentifier(), desc3->GetIdentifier()); | 121 EXPECT_NE(desc1->GetIdentifier(), desc3->GetIdentifier()); |
(...skipping 23 matching lines...) Expand all Loading... |
147 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 145 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
148 return; | 146 return; |
149 } | 147 } |
150 InitWithFakeAdapter(); | 148 InitWithFakeAdapter(); |
151 StartLowEnergyDiscoverySession(); | 149 StartLowEnergyDiscoverySession(); |
152 BluetoothDevice* device = SimulateLowEnergyDevice(3); | 150 BluetoothDevice* device = SimulateLowEnergyDevice(3); |
153 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 151 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
154 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 152 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
155 SimulateGattConnection(device); | 153 SimulateGattConnection(device); |
156 std::vector<std::string> services; | 154 std::vector<std::string> services; |
157 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); | 155 services.push_back(kTestUUIDGenericAccess); |
158 SimulateGattServicesDiscovered(device, services); | 156 SimulateGattServicesDiscovered(device, services); |
159 base::RunLoop().RunUntilIdle(); | 157 base::RunLoop().RunUntilIdle(); |
160 ASSERT_EQ(1u, device->GetGattServices().size()); | 158 ASSERT_EQ(1u, device->GetGattServices().size()); |
161 BluetoothRemoteGattService* service = device->GetGattServices()[0]; | 159 BluetoothRemoteGattService* service = device->GetGattServices()[0]; |
162 | 160 |
163 SimulateGattCharacteristic(service, "00000000-0000-1000-8000-00805f9b34fb", | 161 SimulateGattCharacteristic(service, kTestUUIDDeviceName, |
164 /* properties */ 0); | 162 /* properties */ 0); |
165 ASSERT_EQ(1u, service->GetCharacteristics().size()); | 163 ASSERT_EQ(1u, service->GetCharacteristics().size()); |
166 BluetoothRemoteGattCharacteristic* characteristic = | 164 BluetoothRemoteGattCharacteristic* characteristic = |
167 service->GetCharacteristics()[0]; | 165 service->GetCharacteristics()[0]; |
168 | 166 |
169 // Create 2 descriptors. | 167 // Create 2 descriptors. |
170 std::string uuid_str1("11111111-0000-1000-8000-00805f9b34fb"); | 168 BluetoothUUID uuid1(kTestUUIDCharacteristicUserDescription); |
171 std::string uuid_str2("22222222-0000-1000-8000-00805f9b34fb"); | 169 BluetoothUUID uuid2(kTestUUIDClientCharacteristicConfiguration); |
172 BluetoothUUID uuid1(uuid_str1); | 170 SimulateGattDescriptor(characteristic, |
173 BluetoothUUID uuid2(uuid_str2); | 171 kTestUUIDCharacteristicUserDescription); |
174 SimulateGattDescriptor(characteristic, uuid_str1); | 172 SimulateGattDescriptor(characteristic, |
175 SimulateGattDescriptor(characteristic, uuid_str2); | 173 kTestUUIDClientCharacteristicConfiguration); |
176 ASSERT_EQ(2u, characteristic->GetDescriptors().size()); | 174 ASSERT_EQ(2u, characteristic->GetDescriptors().size()); |
177 BluetoothRemoteGattDescriptor* descriptor1 = | 175 BluetoothRemoteGattDescriptor* descriptor1 = |
178 characteristic->GetDescriptors()[0]; | 176 characteristic->GetDescriptors()[0]; |
179 BluetoothRemoteGattDescriptor* descriptor2 = | 177 BluetoothRemoteGattDescriptor* descriptor2 = |
180 characteristic->GetDescriptors()[1]; | 178 characteristic->GetDescriptors()[1]; |
181 | 179 |
182 // Swap as needed to have descriptor1 be the one with uuid1. | 180 // Swap as needed to have descriptor1 be the one with uuid1. |
183 if (descriptor2->GetUUID() == uuid1) | 181 if (descriptor2->GetUUID() == uuid1) |
184 std::swap(descriptor1, descriptor2); | 182 std::swap(descriptor1, descriptor2); |
185 | 183 |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 std::vector<uint8_t>(), GetCallback(Call::NOT_EXPECTED), | 681 std::vector<uint8_t>(), GetCallback(Call::NOT_EXPECTED), |
684 // TODO(crbug.com/621901): Expect an error. | 682 // TODO(crbug.com/621901): Expect an error. |
685 GetGattErrorCallback(Call::NOT_EXPECTED)); | 683 GetGattErrorCallback(Call::NOT_EXPECTED)); |
686 | 684 |
687 base::RunLoop().RunUntilIdle(); | 685 base::RunLoop().RunUntilIdle(); |
688 // TODO(crbug.com/621901): Test that an error was returned. | 686 // TODO(crbug.com/621901): Test that an error was returned. |
689 } | 687 } |
690 #endif // defined(OS_ANDROID) | 688 #endif // defined(OS_ANDROID) |
691 | 689 |
692 } // namespace device | 690 } // namespace device |
OLD | NEW |