| 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) |
| 11 #include "device/bluetooth/test/bluetooth_test_android.h" | 11 #include "device/bluetooth/test/bluetooth_test_android.h" |
| 12 #elif defined(OS_MACOSX) | 12 #elif defined(OS_MACOSX) |
| 13 #include "device/bluetooth/test/bluetooth_test_mac.h" | 13 #include "device/bluetooth/test/bluetooth_test_mac.h" |
| 14 #endif | 14 #endif |
| 15 | 15 |
| 16 namespace device { | 16 namespace device { |
| 17 | 17 |
| 18 #if defined(OS_ANDROID) || defined(OS_MACOSX) | 18 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 19 class BluetoothRemoteGattDescriptorTest : public BluetoothTest { | 19 class BluetoothRemoteGattDescriptorTest : public BluetoothTest { |
| 20 public: | 20 public: |
| 21 // Creates adapter_, device_, service_, characteristic_, | 21 // Creates adapter_, device_, service_, characteristic_, |
| 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 std::vector<std::string> services; | 31 std::vector<std::string> services; |
| 31 std::string uuid("00000000-0000-1000-8000-00805f9b34fb"); | 32 std::string uuid("00000000-0000-1000-8000-00805f9b34fb"); |
| 32 services.push_back(uuid); | 33 services.push_back(uuid); |
| 33 SimulateGattServicesDiscovered(device_, services); | 34 SimulateGattServicesDiscovered(device_, services); |
| 35 base::RunLoop().RunUntilIdle(); |
| 34 ASSERT_EQ(1u, device_->GetGattServices().size()); | 36 ASSERT_EQ(1u, device_->GetGattServices().size()); |
| 35 service_ = device_->GetGattServices()[0]; | 37 service_ = device_->GetGattServices()[0]; |
| 36 SimulateGattCharacteristic(service_, uuid, 0); | 38 SimulateGattCharacteristic(service_, uuid, 0); |
| 37 ASSERT_EQ(1u, service_->GetCharacteristics().size()); | 39 ASSERT_EQ(1u, service_->GetCharacteristics().size()); |
| 38 characteristic_ = service_->GetCharacteristics()[0]; | 40 characteristic_ = service_->GetCharacteristics()[0]; |
| 39 SimulateGattDescriptor(characteristic_, | 41 SimulateGattDescriptor(characteristic_, |
| 40 "00000001-0000-1000-8000-00805f9b34fb"); | 42 "00000001-0000-1000-8000-00805f9b34fb"); |
| 41 SimulateGattDescriptor(characteristic_, | 43 SimulateGattDescriptor(characteristic_, |
| 42 "00000002-0000-1000-8000-00805f9b34fb"); | 44 "00000002-0000-1000-8000-00805f9b34fb"); |
| 43 ASSERT_EQ(2u, characteristic_->GetDescriptors().size()); | 45 ASSERT_EQ(2u, characteristic_->GetDescriptors().size()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 64 StartLowEnergyDiscoverySession(); | 66 StartLowEnergyDiscoverySession(); |
| 65 // 2 devices to verify that descriptors on them have distinct IDs. | 67 // 2 devices to verify that descriptors on them have distinct IDs. |
| 66 BluetoothDevice* device1 = SimulateLowEnergyDevice(3); | 68 BluetoothDevice* device1 = SimulateLowEnergyDevice(3); |
| 67 BluetoothDevice* device2 = SimulateLowEnergyDevice(4); | 69 BluetoothDevice* device2 = SimulateLowEnergyDevice(4); |
| 68 device1->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 70 device1->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 69 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 71 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 70 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 72 device2->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 71 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 73 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 72 SimulateGattConnection(device1); | 74 SimulateGattConnection(device1); |
| 73 SimulateGattConnection(device2); | 75 SimulateGattConnection(device2); |
| 76 base::RunLoop().RunUntilIdle(); |
| 74 | 77 |
| 75 // 3 services (all with same UUID). | 78 // 3 services (all with same UUID). |
| 76 // 1 on the first device (to test characteristic instances across devices). | 79 // 1 on the first device (to test characteristic instances across devices). |
| 77 // 2 on the second device (to test same device, multiple service instances). | 80 // 2 on the second device (to test same device, multiple service instances). |
| 78 std::vector<std::string> services; | 81 std::vector<std::string> services; |
| 79 std::string uuid = "00000000-0000-1000-8000-00805f9b34fb"; | 82 std::string uuid = "00000000-0000-1000-8000-00805f9b34fb"; |
| 80 services.push_back(uuid); | 83 services.push_back(uuid); |
| 81 SimulateGattServicesDiscovered(device1, services); | 84 SimulateGattServicesDiscovered(device1, services); |
| 85 base::RunLoop().RunUntilIdle(); |
| 82 services.push_back(uuid); | 86 services.push_back(uuid); |
| 83 SimulateGattServicesDiscovered(device2, services); | 87 SimulateGattServicesDiscovered(device2, services); |
| 88 base::RunLoop().RunUntilIdle(); |
| 84 BluetoothRemoteGattService* service1 = device1->GetGattServices()[0]; | 89 BluetoothRemoteGattService* service1 = device1->GetGattServices()[0]; |
| 85 BluetoothRemoteGattService* service2 = device2->GetGattServices()[0]; | 90 BluetoothRemoteGattService* service2 = device2->GetGattServices()[0]; |
| 86 BluetoothRemoteGattService* service3 = device2->GetGattServices()[1]; | 91 BluetoothRemoteGattService* service3 = device2->GetGattServices()[1]; |
| 87 // 6 characteristics (same UUID), 2 on each service. | 92 // 6 characteristics (same UUID), 2 on each service. |
| 88 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 93 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); |
| 89 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); | 94 SimulateGattCharacteristic(service1, uuid, /* properties */ 0); |
| 90 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 95 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); |
| 91 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); | 96 SimulateGattCharacteristic(service2, uuid, /* properties */ 0); |
| 92 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 97 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); |
| 93 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); | 98 SimulateGattCharacteristic(service3, uuid, /* properties */ 0); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 } | 149 } |
| 145 InitWithFakeAdapter(); | 150 InitWithFakeAdapter(); |
| 146 StartLowEnergyDiscoverySession(); | 151 StartLowEnergyDiscoverySession(); |
| 147 BluetoothDevice* device = SimulateLowEnergyDevice(3); | 152 BluetoothDevice* device = SimulateLowEnergyDevice(3); |
| 148 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 153 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 149 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 154 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 150 SimulateGattConnection(device); | 155 SimulateGattConnection(device); |
| 151 std::vector<std::string> services; | 156 std::vector<std::string> services; |
| 152 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); | 157 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); |
| 153 SimulateGattServicesDiscovered(device, services); | 158 SimulateGattServicesDiscovered(device, services); |
| 159 base::RunLoop().RunUntilIdle(); |
| 154 ASSERT_EQ(1u, device->GetGattServices().size()); | 160 ASSERT_EQ(1u, device->GetGattServices().size()); |
| 155 BluetoothRemoteGattService* service = device->GetGattServices()[0]; | 161 BluetoothRemoteGattService* service = device->GetGattServices()[0]; |
| 156 | 162 |
| 157 SimulateGattCharacteristic(service, "00000000-0000-1000-8000-00805f9b34fb", | 163 SimulateGattCharacteristic(service, "00000000-0000-1000-8000-00805f9b34fb", |
| 158 /* properties */ 0); | 164 /* properties */ 0); |
| 159 ASSERT_EQ(1u, service->GetCharacteristics().size()); | 165 ASSERT_EQ(1u, service->GetCharacteristics().size()); |
| 160 BluetoothRemoteGattCharacteristic* characteristic = | 166 BluetoothRemoteGattCharacteristic* characteristic = |
| 161 service->GetCharacteristics()[0]; | 167 service->GetCharacteristics()[0]; |
| 162 | 168 |
| 163 // Create 2 descriptors. | 169 // Create 2 descriptors. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 185 #if defined(OS_ANDROID) | 191 #if defined(OS_ANDROID) |
| 186 // Tests ReadRemoteDescriptor and GetValue with empty value buffer. | 192 // Tests ReadRemoteDescriptor and GetValue with empty value buffer. |
| 187 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_Empty) { | 193 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_Empty) { |
| 188 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 194 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 189 | 195 |
| 190 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 196 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 191 GetGattErrorCallback(Call::NOT_EXPECTED)); | 197 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 192 EXPECT_EQ(1, gatt_read_descriptor_attempts_); | 198 EXPECT_EQ(1, gatt_read_descriptor_attempts_); |
| 193 std::vector<uint8_t> empty_vector; | 199 std::vector<uint8_t> empty_vector; |
| 194 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 200 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 201 base::RunLoop().RunUntilIdle(); |
| 195 | 202 |
| 196 // Duplicate read reported from OS shouldn't cause a problem: | 203 // Duplicate read reported from OS shouldn't cause a problem: |
| 197 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 204 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 205 base::RunLoop().RunUntilIdle(); |
| 198 | 206 |
| 199 EXPECT_EQ(empty_vector, last_read_value_); | 207 EXPECT_EQ(empty_vector, last_read_value_); |
| 200 EXPECT_EQ(empty_vector, descriptor1_->GetValue()); | 208 EXPECT_EQ(empty_vector, descriptor1_->GetValue()); |
| 201 } | 209 } |
| 202 #endif // defined(OS_ANDROID) | 210 #endif // defined(OS_ANDROID) |
| 203 | 211 |
| 204 #if defined(OS_ANDROID) | 212 #if defined(OS_ANDROID) |
| 205 // Tests WriteRemoteDescriptor with empty value buffer. | 213 // Tests WriteRemoteDescriptor with empty value buffer. |
| 206 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_Empty) { | 214 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_Empty) { |
| 207 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 215 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 208 | 216 |
| 209 std::vector<uint8_t> empty_vector; | 217 std::vector<uint8_t> empty_vector; |
| 210 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), | 218 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), |
| 211 GetGattErrorCallback(Call::NOT_EXPECTED)); | 219 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 212 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 220 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 213 SimulateGattDescriptorWrite(descriptor1_); | 221 SimulateGattDescriptorWrite(descriptor1_); |
| 222 base::RunLoop().RunUntilIdle(); |
| 214 | 223 |
| 215 // Duplicate write reported from OS shouldn't cause a problem: | 224 // Duplicate write reported from OS shouldn't cause a problem: |
| 216 SimulateGattDescriptorWrite(descriptor1_); | 225 SimulateGattDescriptorWrite(descriptor1_); |
| 226 base::RunLoop().RunUntilIdle(); |
| 217 | 227 |
| 218 EXPECT_EQ(empty_vector, last_write_value_); | 228 EXPECT_EQ(empty_vector, last_write_value_); |
| 219 } | 229 } |
| 220 #endif // defined(OS_ANDROID) | 230 #endif // defined(OS_ANDROID) |
| 221 | 231 |
| 222 #if defined(OS_ANDROID) | 232 #if defined(OS_ANDROID) |
| 223 // Tests ReadRemoteDescriptor completing after Chrome objects are deleted. | 233 // Tests ReadRemoteDescriptor completing after Chrome objects are deleted. |
| 224 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_AfterDeleted) { | 234 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_AfterDeleted) { |
| 225 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 235 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 226 | 236 |
| 227 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), | 237 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), |
| 228 GetGattErrorCallback(Call::NOT_EXPECTED)); | 238 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 229 | 239 |
| 230 RememberDescriptorForSubsequentAction(descriptor1_); | 240 RememberDescriptorForSubsequentAction(descriptor1_); |
| 231 DeleteDevice(device_); // TODO(576906) delete only the descriptor. | 241 DeleteDevice(device_); // TODO(576906) delete only the descriptor. |
| 232 | 242 |
| 233 std::vector<uint8_t> empty_vector; | 243 std::vector<uint8_t> empty_vector; |
| 234 SimulateGattDescriptorRead(/* use remembered descriptor */ nullptr, | 244 SimulateGattDescriptorRead(/* use remembered descriptor */ nullptr, |
| 235 empty_vector); | 245 empty_vector); |
| 246 base::RunLoop().RunUntilIdle(); |
| 236 EXPECT_TRUE("Did not crash!"); | 247 EXPECT_TRUE("Did not crash!"); |
| 237 } | 248 } |
| 238 #endif // defined(OS_ANDROID) | 249 #endif // defined(OS_ANDROID) |
| 239 | 250 |
| 240 #if defined(OS_ANDROID) | 251 #if defined(OS_ANDROID) |
| 241 // Tests WriteRemoteDescriptor completing after Chrome objects are deleted. | 252 // Tests WriteRemoteDescriptor completing after Chrome objects are deleted. |
| 242 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_AfterDeleted) { | 253 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_AfterDeleted) { |
| 243 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 254 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 244 | 255 |
| 245 std::vector<uint8_t> empty_vector; | 256 std::vector<uint8_t> empty_vector; |
| 246 descriptor1_->WriteRemoteDescriptor(empty_vector, | 257 descriptor1_->WriteRemoteDescriptor(empty_vector, |
| 247 GetCallback(Call::NOT_EXPECTED), | 258 GetCallback(Call::NOT_EXPECTED), |
| 248 GetGattErrorCallback(Call::NOT_EXPECTED)); | 259 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 249 | 260 |
| 250 RememberDescriptorForSubsequentAction(descriptor1_); | 261 RememberDescriptorForSubsequentAction(descriptor1_); |
| 251 DeleteDevice(device_); // TODO(576906) delete only the descriptor. | 262 DeleteDevice(device_); // TODO(576906) delete only the descriptor. |
| 252 | 263 |
| 253 SimulateGattDescriptorWrite(/* use remembered descriptor */ nullptr); | 264 SimulateGattDescriptorWrite(/* use remembered descriptor */ nullptr); |
| 265 base::RunLoop().RunUntilIdle(); |
| 254 EXPECT_TRUE("Did not crash!"); | 266 EXPECT_TRUE("Did not crash!"); |
| 255 } | 267 } |
| 256 #endif // defined(OS_ANDROID) | 268 #endif // defined(OS_ANDROID) |
| 257 | 269 |
| 258 #if defined(OS_ANDROID) | 270 #if defined(OS_ANDROID) |
| 259 // Tests ReadRemoteDescriptor and GetValue with non-empty value buffer. | 271 // Tests ReadRemoteDescriptor and GetValue with non-empty value buffer. |
| 260 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor) { | 272 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor) { |
| 261 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 273 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 262 | 274 |
| 263 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 275 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 264 GetGattErrorCallback(Call::NOT_EXPECTED)); | 276 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 265 EXPECT_EQ(1, gatt_read_descriptor_attempts_); | 277 EXPECT_EQ(1, gatt_read_descriptor_attempts_); |
| 266 | 278 |
| 267 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 279 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 268 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 280 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 269 SimulateGattDescriptorRead(descriptor1_, test_vector); | 281 SimulateGattDescriptorRead(descriptor1_, test_vector); |
| 282 base::RunLoop().RunUntilIdle(); |
| 270 | 283 |
| 271 // Duplicate read reported from OS shouldn't cause a problem: | 284 // Duplicate read reported from OS shouldn't cause a problem: |
| 272 std::vector<uint8_t> empty_vector; | 285 std::vector<uint8_t> empty_vector; |
| 273 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 286 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 287 base::RunLoop().RunUntilIdle(); |
| 274 | 288 |
| 275 EXPECT_EQ(test_vector, last_read_value_); | 289 EXPECT_EQ(test_vector, last_read_value_); |
| 276 EXPECT_EQ(test_vector, descriptor1_->GetValue()); | 290 EXPECT_EQ(test_vector, descriptor1_->GetValue()); |
| 277 } | 291 } |
| 278 #endif // defined(OS_ANDROID) | 292 #endif // defined(OS_ANDROID) |
| 279 | 293 |
| 280 #if defined(OS_ANDROID) | 294 #if defined(OS_ANDROID) |
| 281 // Tests WriteRemoteDescriptor with non-empty value buffer. | 295 // Tests WriteRemoteDescriptor with non-empty value buffer. |
| 282 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor) { | 296 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor) { |
| 283 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 297 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 284 | 298 |
| 285 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 299 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 286 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 300 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 287 descriptor1_->WriteRemoteDescriptor(test_vector, GetCallback(Call::EXPECTED), | 301 descriptor1_->WriteRemoteDescriptor(test_vector, GetCallback(Call::EXPECTED), |
| 288 GetGattErrorCallback(Call::NOT_EXPECTED)); | 302 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 289 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 303 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 290 | 304 |
| 291 SimulateGattDescriptorWrite(descriptor1_); | 305 SimulateGattDescriptorWrite(descriptor1_); |
| 306 base::RunLoop().RunUntilIdle(); |
| 292 | 307 |
| 293 EXPECT_EQ(test_vector, last_write_value_); | 308 EXPECT_EQ(test_vector, last_write_value_); |
| 294 } | 309 } |
| 295 #endif // defined(OS_ANDROID) | 310 #endif // defined(OS_ANDROID) |
| 296 | 311 |
| 297 #if defined(OS_ANDROID) | 312 #if defined(OS_ANDROID) |
| 298 // Tests ReadRemoteDescriptor and GetValue multiple times. | 313 // Tests ReadRemoteDescriptor and GetValue multiple times. |
| 299 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_Twice) { | 314 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_Twice) { |
| 300 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 315 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 301 | 316 |
| 302 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 317 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 303 GetGattErrorCallback(Call::NOT_EXPECTED)); | 318 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 304 EXPECT_EQ(1, gatt_read_descriptor_attempts_); | 319 EXPECT_EQ(1, gatt_read_descriptor_attempts_); |
| 305 | 320 |
| 306 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 321 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 307 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 322 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 308 SimulateGattDescriptorRead(descriptor1_, test_vector); | 323 SimulateGattDescriptorRead(descriptor1_, test_vector); |
| 324 base::RunLoop().RunUntilIdle(); |
| 309 EXPECT_EQ(1, callback_count_); | 325 EXPECT_EQ(1, callback_count_); |
| 310 EXPECT_EQ(0, error_callback_count_); | 326 EXPECT_EQ(0, error_callback_count_); |
| 311 EXPECT_EQ(test_vector, last_read_value_); | 327 EXPECT_EQ(test_vector, last_read_value_); |
| 312 EXPECT_EQ(test_vector, descriptor1_->GetValue()); | 328 EXPECT_EQ(test_vector, descriptor1_->GetValue()); |
| 313 | 329 |
| 314 // Read again, with different value: | 330 // Read again, with different value: |
| 315 ResetEventCounts(); | 331 ResetEventCounts(); |
| 316 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 332 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 317 GetGattErrorCallback(Call::NOT_EXPECTED)); | 333 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 318 EXPECT_EQ(1, gatt_read_descriptor_attempts_); | 334 EXPECT_EQ(1, gatt_read_descriptor_attempts_); |
| 319 std::vector<uint8_t> empty_vector; | 335 std::vector<uint8_t> empty_vector; |
| 320 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 336 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 337 base::RunLoop().RunUntilIdle(); |
| 321 EXPECT_EQ(1, callback_count_); | 338 EXPECT_EQ(1, callback_count_); |
| 322 EXPECT_EQ(0, error_callback_count_); | 339 EXPECT_EQ(0, error_callback_count_); |
| 323 EXPECT_EQ(empty_vector, last_read_value_); | 340 EXPECT_EQ(empty_vector, last_read_value_); |
| 324 EXPECT_EQ(empty_vector, descriptor1_->GetValue()); | 341 EXPECT_EQ(empty_vector, descriptor1_->GetValue()); |
| 325 } | 342 } |
| 326 #endif // defined(OS_ANDROID) | 343 #endif // defined(OS_ANDROID) |
| 327 | 344 |
| 328 #if defined(OS_ANDROID) | 345 #if defined(OS_ANDROID) |
| 329 // Tests WriteRemoteDescriptor multiple times. | 346 // Tests WriteRemoteDescriptor multiple times. |
| 330 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_Twice) { | 347 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_Twice) { |
| 331 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 348 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 332 | 349 |
| 333 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; | 350 uint8_t values[] = {0, 1, 2, 3, 4, 0xf, 0xf0, 0xff}; |
| 334 std::vector<uint8_t> test_vector(values, values + arraysize(values)); | 351 std::vector<uint8_t> test_vector(values, values + arraysize(values)); |
| 335 descriptor1_->WriteRemoteDescriptor(test_vector, GetCallback(Call::EXPECTED), | 352 descriptor1_->WriteRemoteDescriptor(test_vector, GetCallback(Call::EXPECTED), |
| 336 GetGattErrorCallback(Call::NOT_EXPECTED)); | 353 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 337 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 354 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 338 | 355 |
| 339 SimulateGattDescriptorWrite(descriptor1_); | 356 SimulateGattDescriptorWrite(descriptor1_); |
| 357 base::RunLoop().RunUntilIdle(); |
| 340 EXPECT_EQ(1, callback_count_); | 358 EXPECT_EQ(1, callback_count_); |
| 341 EXPECT_EQ(0, error_callback_count_); | 359 EXPECT_EQ(0, error_callback_count_); |
| 342 EXPECT_EQ(test_vector, last_write_value_); | 360 EXPECT_EQ(test_vector, last_write_value_); |
| 343 | 361 |
| 344 // Write again, with different value: | 362 // Write again, with different value: |
| 345 ResetEventCounts(); | 363 ResetEventCounts(); |
| 346 std::vector<uint8_t> empty_vector; | 364 std::vector<uint8_t> empty_vector; |
| 347 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), | 365 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), |
| 348 GetGattErrorCallback(Call::NOT_EXPECTED)); | 366 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 349 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 367 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 350 SimulateGattDescriptorWrite(descriptor1_); | 368 SimulateGattDescriptorWrite(descriptor1_); |
| 369 base::RunLoop().RunUntilIdle(); |
| 351 EXPECT_EQ(1, callback_count_); | 370 EXPECT_EQ(1, callback_count_); |
| 352 EXPECT_EQ(0, error_callback_count_); | 371 EXPECT_EQ(0, error_callback_count_); |
| 353 EXPECT_EQ(empty_vector, last_write_value_); | 372 EXPECT_EQ(empty_vector, last_write_value_); |
| 354 } | 373 } |
| 355 #endif // defined(OS_ANDROID) | 374 #endif // defined(OS_ANDROID) |
| 356 | 375 |
| 357 #if defined(OS_ANDROID) | 376 #if defined(OS_ANDROID) |
| 358 // Tests ReadRemoteDescriptor on two descriptors. | 377 // Tests ReadRemoteDescriptor on two descriptors. |
| 359 TEST_F(BluetoothRemoteGattDescriptorTest, | 378 TEST_F(BluetoothRemoteGattDescriptorTest, |
| 360 ReadRemoteDescriptor_MultipleDescriptors) { | 379 ReadRemoteDescriptor_MultipleDescriptors) { |
| 361 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 380 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 362 | 381 |
| 363 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 382 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 364 GetGattErrorCallback(Call::NOT_EXPECTED)); | 383 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 365 descriptor2_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 384 descriptor2_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 366 GetGattErrorCallback(Call::NOT_EXPECTED)); | 385 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 367 EXPECT_EQ(2, gatt_read_descriptor_attempts_); | 386 EXPECT_EQ(2, gatt_read_descriptor_attempts_); |
| 368 EXPECT_EQ(0, callback_count_); | 387 EXPECT_EQ(0, callback_count_); |
| 369 EXPECT_EQ(0, error_callback_count_); | 388 EXPECT_EQ(0, error_callback_count_); |
| 370 | 389 |
| 371 std::vector<uint8_t> test_vector1; | 390 std::vector<uint8_t> test_vector1; |
| 372 test_vector1.push_back(111); | 391 test_vector1.push_back(111); |
| 373 SimulateGattDescriptorRead(descriptor1_, test_vector1); | 392 SimulateGattDescriptorRead(descriptor1_, test_vector1); |
| 393 base::RunLoop().RunUntilIdle(); |
| 374 EXPECT_EQ(test_vector1, last_read_value_); | 394 EXPECT_EQ(test_vector1, last_read_value_); |
| 375 | 395 |
| 376 std::vector<uint8_t> test_vector2; | 396 std::vector<uint8_t> test_vector2; |
| 377 test_vector2.push_back(222); | 397 test_vector2.push_back(222); |
| 378 SimulateGattDescriptorRead(descriptor2_, test_vector2); | 398 SimulateGattDescriptorRead(descriptor2_, test_vector2); |
| 399 base::RunLoop().RunUntilIdle(); |
| 379 EXPECT_EQ(test_vector2, last_read_value_); | 400 EXPECT_EQ(test_vector2, last_read_value_); |
| 380 | 401 |
| 381 EXPECT_EQ(2, callback_count_); | 402 EXPECT_EQ(2, callback_count_); |
| 382 EXPECT_EQ(0, error_callback_count_); | 403 EXPECT_EQ(0, error_callback_count_); |
| 383 EXPECT_EQ(test_vector1, descriptor1_->GetValue()); | 404 EXPECT_EQ(test_vector1, descriptor1_->GetValue()); |
| 384 EXPECT_EQ(test_vector2, descriptor2_->GetValue()); | 405 EXPECT_EQ(test_vector2, descriptor2_->GetValue()); |
| 385 } | 406 } |
| 386 #endif // defined(OS_ANDROID) | 407 #endif // defined(OS_ANDROID) |
| 387 | 408 |
| 388 #if defined(OS_ANDROID) | 409 #if defined(OS_ANDROID) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 402 descriptor2_->WriteRemoteDescriptor(test_vector2, GetCallback(Call::EXPECTED), | 423 descriptor2_->WriteRemoteDescriptor(test_vector2, GetCallback(Call::EXPECTED), |
| 403 GetGattErrorCallback(Call::NOT_EXPECTED)); | 424 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 404 EXPECT_EQ(test_vector2, last_write_value_); | 425 EXPECT_EQ(test_vector2, last_write_value_); |
| 405 | 426 |
| 406 EXPECT_EQ(2, gatt_write_descriptor_attempts_); | 427 EXPECT_EQ(2, gatt_write_descriptor_attempts_); |
| 407 EXPECT_EQ(0, callback_count_); | 428 EXPECT_EQ(0, callback_count_); |
| 408 EXPECT_EQ(0, error_callback_count_); | 429 EXPECT_EQ(0, error_callback_count_); |
| 409 | 430 |
| 410 SimulateGattDescriptorWrite(descriptor1_); | 431 SimulateGattDescriptorWrite(descriptor1_); |
| 411 SimulateGattDescriptorWrite(descriptor2_); | 432 SimulateGattDescriptorWrite(descriptor2_); |
| 433 base::RunLoop().RunUntilIdle(); |
| 412 | 434 |
| 413 EXPECT_EQ(2, callback_count_); | 435 EXPECT_EQ(2, callback_count_); |
| 414 EXPECT_EQ(0, error_callback_count_); | 436 EXPECT_EQ(0, error_callback_count_); |
| 415 } | 437 } |
| 416 #endif // defined(OS_ANDROID) | 438 #endif // defined(OS_ANDROID) |
| 417 | 439 |
| 418 #if defined(OS_ANDROID) | 440 #if defined(OS_ANDROID) |
| 419 // Tests ReadRemoteDescriptor asynchronous error. | 441 // Tests ReadRemoteDescriptor asynchronous error. |
| 420 TEST_F(BluetoothRemoteGattDescriptorTest, ReadError) { | 442 TEST_F(BluetoothRemoteGattDescriptorTest, ReadError) { |
| 421 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 443 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 422 | 444 |
| 423 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), | 445 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), |
| 424 GetGattErrorCallback(Call::EXPECTED)); | 446 GetGattErrorCallback(Call::EXPECTED)); |
| 425 SimulateGattDescriptorReadError( | 447 SimulateGattDescriptorReadError( |
| 426 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); | 448 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); |
| 427 SimulateGattDescriptorReadError( | 449 SimulateGattDescriptorReadError( |
| 428 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); | 450 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 451 base::RunLoop().RunUntilIdle(); |
| 429 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, | 452 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, |
| 430 last_gatt_error_code_); | 453 last_gatt_error_code_); |
| 431 } | 454 } |
| 432 #endif // defined(OS_ANDROID) | 455 #endif // defined(OS_ANDROID) |
| 433 | 456 |
| 434 #if defined(OS_ANDROID) | 457 #if defined(OS_ANDROID) |
| 435 // Tests WriteRemoteDescriptor asynchronous error. | 458 // Tests WriteRemoteDescriptor asynchronous error. |
| 436 TEST_F(BluetoothRemoteGattDescriptorTest, WriteError) { | 459 TEST_F(BluetoothRemoteGattDescriptorTest, WriteError) { |
| 437 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 460 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 438 | 461 |
| 439 std::vector<uint8_t> empty_vector; | 462 std::vector<uint8_t> empty_vector; |
| 440 descriptor1_->WriteRemoteDescriptor(empty_vector, | 463 descriptor1_->WriteRemoteDescriptor(empty_vector, |
| 441 GetCallback(Call::NOT_EXPECTED), | 464 GetCallback(Call::NOT_EXPECTED), |
| 442 GetGattErrorCallback(Call::EXPECTED)); | 465 GetGattErrorCallback(Call::EXPECTED)); |
| 443 SimulateGattDescriptorWriteError( | 466 SimulateGattDescriptorWriteError( |
| 444 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); | 467 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH); |
| 445 SimulateGattDescriptorWriteError( | 468 SimulateGattDescriptorWriteError( |
| 446 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); | 469 descriptor1_, BluetoothRemoteGattService::GATT_ERROR_FAILED); |
| 470 base::RunLoop().RunUntilIdle(); |
| 447 | 471 |
| 448 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, | 472 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH, |
| 449 last_gatt_error_code_); | 473 last_gatt_error_code_); |
| 450 } | 474 } |
| 451 #endif // defined(OS_ANDROID) | 475 #endif // defined(OS_ANDROID) |
| 452 | 476 |
| 453 #if defined(OS_ANDROID) | 477 #if defined(OS_ANDROID) |
| 454 // Tests ReadRemoteDescriptor synchronous error. | 478 // Tests ReadRemoteDescriptor synchronous error. |
| 455 TEST_F(BluetoothRemoteGattDescriptorTest, ReadSynchronousError) { | 479 TEST_F(BluetoothRemoteGattDescriptorTest, ReadSynchronousError) { |
| 456 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 480 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 457 | 481 |
| 458 SimulateGattDescriptorReadWillFailSynchronouslyOnce(descriptor1_); | 482 SimulateGattDescriptorReadWillFailSynchronouslyOnce(descriptor1_); |
| 459 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), | 483 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), |
| 460 GetGattErrorCallback(Call::EXPECTED)); | 484 GetGattErrorCallback(Call::EXPECTED)); |
| 461 EXPECT_EQ(0, gatt_read_descriptor_attempts_); | 485 EXPECT_EQ(0, gatt_read_descriptor_attempts_); |
| 462 base::RunLoop().RunUntilIdle(); | 486 base::RunLoop().RunUntilIdle(); |
| 463 EXPECT_EQ(0, callback_count_); | 487 EXPECT_EQ(0, callback_count_); |
| 464 EXPECT_EQ(1, error_callback_count_); | 488 EXPECT_EQ(1, error_callback_count_); |
| 465 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | 489 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 466 last_gatt_error_code_); | 490 last_gatt_error_code_); |
| 467 | 491 |
| 468 // After failing once, can succeed: | 492 // After failing once, can succeed: |
| 469 ResetEventCounts(); | 493 ResetEventCounts(); |
| 470 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 494 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 471 GetGattErrorCallback(Call::NOT_EXPECTED)); | 495 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 472 EXPECT_EQ(1, gatt_read_descriptor_attempts_); | 496 EXPECT_EQ(1, gatt_read_descriptor_attempts_); |
| 473 std::vector<uint8_t> empty_vector; | 497 std::vector<uint8_t> empty_vector; |
| 474 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 498 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 499 base::RunLoop().RunUntilIdle(); |
| 475 EXPECT_EQ(1, callback_count_); | 500 EXPECT_EQ(1, callback_count_); |
| 476 EXPECT_EQ(0, error_callback_count_); | 501 EXPECT_EQ(0, error_callback_count_); |
| 477 } | 502 } |
| 478 #endif // defined(OS_ANDROID) | 503 #endif // defined(OS_ANDROID) |
| 479 | 504 |
| 480 #if defined(OS_ANDROID) | 505 #if defined(OS_ANDROID) |
| 481 // Tests WriteRemoteDescriptor synchronous error. | 506 // Tests WriteRemoteDescriptor synchronous error. |
| 482 TEST_F(BluetoothRemoteGattDescriptorTest, WriteSynchronousError) { | 507 TEST_F(BluetoothRemoteGattDescriptorTest, WriteSynchronousError) { |
| 483 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 508 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 484 | 509 |
| 485 SimulateGattDescriptorWriteWillFailSynchronouslyOnce(descriptor1_); | 510 SimulateGattDescriptorWriteWillFailSynchronouslyOnce(descriptor1_); |
| 486 std::vector<uint8_t> empty_vector; | 511 std::vector<uint8_t> empty_vector; |
| 487 descriptor1_->WriteRemoteDescriptor(empty_vector, | 512 descriptor1_->WriteRemoteDescriptor(empty_vector, |
| 488 GetCallback(Call::NOT_EXPECTED), | 513 GetCallback(Call::NOT_EXPECTED), |
| 489 GetGattErrorCallback(Call::EXPECTED)); | 514 GetGattErrorCallback(Call::EXPECTED)); |
| 490 EXPECT_EQ(0, gatt_write_descriptor_attempts_); | 515 EXPECT_EQ(0, gatt_write_descriptor_attempts_); |
| 491 base::RunLoop().RunUntilIdle(); | 516 base::RunLoop().RunUntilIdle(); |
| 492 EXPECT_EQ(0, callback_count_); | 517 EXPECT_EQ(0, callback_count_); |
| 493 EXPECT_EQ(1, error_callback_count_); | 518 EXPECT_EQ(1, error_callback_count_); |
| 494 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | 519 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, |
| 495 last_gatt_error_code_); | 520 last_gatt_error_code_); |
| 496 | 521 |
| 497 // After failing once, can succeed: | 522 // After failing once, can succeed: |
| 498 ResetEventCounts(); | 523 ResetEventCounts(); |
| 499 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), | 524 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), |
| 500 GetGattErrorCallback(Call::NOT_EXPECTED)); | 525 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 501 EXPECT_EQ(1, gatt_write_descriptor_attempts_); | 526 EXPECT_EQ(1, gatt_write_descriptor_attempts_); |
| 502 SimulateGattDescriptorWrite(descriptor1_); | 527 SimulateGattDescriptorWrite(descriptor1_); |
| 528 base::RunLoop().RunUntilIdle(); |
| 503 EXPECT_EQ(1, callback_count_); | 529 EXPECT_EQ(1, callback_count_); |
| 504 EXPECT_EQ(0, error_callback_count_); | 530 EXPECT_EQ(0, error_callback_count_); |
| 505 } | 531 } |
| 506 #endif // defined(OS_ANDROID) | 532 #endif // defined(OS_ANDROID) |
| 507 | 533 |
| 508 #if defined(OS_ANDROID) | 534 #if defined(OS_ANDROID) |
| 509 // Tests ReadRemoteDescriptor error with a pending read operation. | 535 // Tests ReadRemoteDescriptor error with a pending read operation. |
| 510 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_ReadPending) { | 536 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_ReadPending) { |
| 511 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 537 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 512 | 538 |
| 513 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 539 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 514 GetGattErrorCallback(Call::NOT_EXPECTED)); | 540 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 515 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), | 541 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), |
| 516 GetGattErrorCallback(Call::EXPECTED)); | 542 GetGattErrorCallback(Call::EXPECTED)); |
| 517 | 543 |
| 518 base::RunLoop().RunUntilIdle(); | 544 base::RunLoop().RunUntilIdle(); |
| 519 | 545 |
| 520 EXPECT_EQ(0, callback_count_); | 546 EXPECT_EQ(0, callback_count_); |
| 521 EXPECT_EQ(1, error_callback_count_); | 547 EXPECT_EQ(1, error_callback_count_); |
| 522 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, | 548 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 523 last_gatt_error_code_); | 549 last_gatt_error_code_); |
| 524 | 550 |
| 525 // Initial read should still succeed: | 551 // Initial read should still succeed: |
| 526 ResetEventCounts(); | 552 ResetEventCounts(); |
| 527 std::vector<uint8_t> empty_vector; | 553 std::vector<uint8_t> empty_vector; |
| 528 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 554 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 555 base::RunLoop().RunUntilIdle(); |
| 529 EXPECT_EQ(1, callback_count_); | 556 EXPECT_EQ(1, callback_count_); |
| 530 EXPECT_EQ(0, error_callback_count_); | 557 EXPECT_EQ(0, error_callback_count_); |
| 531 } | 558 } |
| 532 #endif // defined(OS_ANDROID) | 559 #endif // defined(OS_ANDROID) |
| 533 | 560 |
| 534 #if defined(OS_ANDROID) | 561 #if defined(OS_ANDROID) |
| 535 // Tests WriteRemoteDescriptor error with a pending write operation. | 562 // Tests WriteRemoteDescriptor error with a pending write operation. |
| 536 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_WritePending) { | 563 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_WritePending) { |
| 537 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 564 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 538 | 565 |
| 539 std::vector<uint8_t> empty_vector; | 566 std::vector<uint8_t> empty_vector; |
| 540 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), | 567 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), |
| 541 GetGattErrorCallback(Call::NOT_EXPECTED)); | 568 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 542 descriptor1_->WriteRemoteDescriptor(empty_vector, | 569 descriptor1_->WriteRemoteDescriptor(empty_vector, |
| 543 GetCallback(Call::NOT_EXPECTED), | 570 GetCallback(Call::NOT_EXPECTED), |
| 544 GetGattErrorCallback(Call::EXPECTED)); | 571 GetGattErrorCallback(Call::EXPECTED)); |
| 545 | 572 |
| 546 base::RunLoop().RunUntilIdle(); | 573 base::RunLoop().RunUntilIdle(); |
| 547 | 574 |
| 548 EXPECT_EQ(0, callback_count_); | 575 EXPECT_EQ(0, callback_count_); |
| 549 EXPECT_EQ(1, error_callback_count_); | 576 EXPECT_EQ(1, error_callback_count_); |
| 550 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, | 577 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 551 last_gatt_error_code_); | 578 last_gatt_error_code_); |
| 552 | 579 |
| 553 // Initial write should still succeed: | 580 // Initial write should still succeed: |
| 554 ResetEventCounts(); | 581 ResetEventCounts(); |
| 555 SimulateGattDescriptorWrite(descriptor1_); | 582 SimulateGattDescriptorWrite(descriptor1_); |
| 583 base::RunLoop().RunUntilIdle(); |
| 556 EXPECT_EQ(1, callback_count_); | 584 EXPECT_EQ(1, callback_count_); |
| 557 EXPECT_EQ(0, error_callback_count_); | 585 EXPECT_EQ(0, error_callback_count_); |
| 558 } | 586 } |
| 559 #endif // defined(OS_ANDROID) | 587 #endif // defined(OS_ANDROID) |
| 560 | 588 |
| 561 #if defined(OS_ANDROID) | 589 #if defined(OS_ANDROID) |
| 562 // Tests ReadRemoteDescriptor error with a pending write operation. | 590 // Tests ReadRemoteDescriptor error with a pending write operation. |
| 563 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_WritePending) { | 591 TEST_F(BluetoothRemoteGattDescriptorTest, ReadRemoteDescriptor_WritePending) { |
| 564 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 592 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 565 | 593 |
| 566 std::vector<uint8_t> empty_vector; | 594 std::vector<uint8_t> empty_vector; |
| 567 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), | 595 descriptor1_->WriteRemoteDescriptor(empty_vector, GetCallback(Call::EXPECTED), |
| 568 GetGattErrorCallback(Call::NOT_EXPECTED)); | 596 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 569 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), | 597 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::NOT_EXPECTED), |
| 570 GetGattErrorCallback(Call::EXPECTED)); | 598 GetGattErrorCallback(Call::EXPECTED)); |
| 571 | 599 |
| 572 base::RunLoop().RunUntilIdle(); | 600 base::RunLoop().RunUntilIdle(); |
| 573 | 601 |
| 574 EXPECT_EQ(0, callback_count_); | 602 EXPECT_EQ(0, callback_count_); |
| 575 EXPECT_EQ(1, error_callback_count_); | 603 EXPECT_EQ(1, error_callback_count_); |
| 576 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, | 604 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 577 last_gatt_error_code_); | 605 last_gatt_error_code_); |
| 578 | 606 |
| 579 // Initial write should still succeed: | 607 // Initial write should still succeed: |
| 580 ResetEventCounts(); | 608 ResetEventCounts(); |
| 581 SimulateGattDescriptorWrite(descriptor1_); | 609 SimulateGattDescriptorWrite(descriptor1_); |
| 610 base::RunLoop().RunUntilIdle(); |
| 582 EXPECT_EQ(1, callback_count_); | 611 EXPECT_EQ(1, callback_count_); |
| 583 EXPECT_EQ(0, error_callback_count_); | 612 EXPECT_EQ(0, error_callback_count_); |
| 584 } | 613 } |
| 585 #endif // defined(OS_ANDROID) | 614 #endif // defined(OS_ANDROID) |
| 586 | 615 |
| 587 #if defined(OS_ANDROID) | 616 #if defined(OS_ANDROID) |
| 588 // Tests WriteRemoteDescriptor error with a pending Read operation. | 617 // Tests WriteRemoteDescriptor error with a pending Read operation. |
| 589 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_ReadPending) { | 618 TEST_F(BluetoothRemoteGattDescriptorTest, WriteRemoteDescriptor_ReadPending) { |
| 590 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); | 619 ASSERT_NO_FATAL_FAILURE(FakeDescriptorBoilerplate()); |
| 591 | 620 |
| 592 std::vector<uint8_t> empty_vector; | 621 std::vector<uint8_t> empty_vector; |
| 593 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), | 622 descriptor1_->ReadRemoteDescriptor(GetReadValueCallback(Call::EXPECTED), |
| 594 GetGattErrorCallback(Call::NOT_EXPECTED)); | 623 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 595 descriptor1_->WriteRemoteDescriptor(empty_vector, | 624 descriptor1_->WriteRemoteDescriptor(empty_vector, |
| 596 GetCallback(Call::NOT_EXPECTED), | 625 GetCallback(Call::NOT_EXPECTED), |
| 597 GetGattErrorCallback(Call::EXPECTED)); | 626 GetGattErrorCallback(Call::EXPECTED)); |
| 598 base::RunLoop().RunUntilIdle(); | 627 base::RunLoop().RunUntilIdle(); |
| 599 | 628 |
| 600 EXPECT_EQ(0, callback_count_); | 629 EXPECT_EQ(0, callback_count_); |
| 601 EXPECT_EQ(1, error_callback_count_); | 630 EXPECT_EQ(1, error_callback_count_); |
| 602 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, | 631 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS, |
| 603 last_gatt_error_code_); | 632 last_gatt_error_code_); |
| 604 | 633 |
| 605 // Initial read should still succeed: | 634 // Initial read should still succeed: |
| 606 ResetEventCounts(); | 635 ResetEventCounts(); |
| 607 SimulateGattDescriptorRead(descriptor1_, empty_vector); | 636 SimulateGattDescriptorRead(descriptor1_, empty_vector); |
| 637 base::RunLoop().RunUntilIdle(); |
| 608 EXPECT_EQ(1, callback_count_); | 638 EXPECT_EQ(1, callback_count_); |
| 609 EXPECT_EQ(0, error_callback_count_); | 639 EXPECT_EQ(0, error_callback_count_); |
| 610 } | 640 } |
| 611 #endif // defined(OS_ANDROID) | 641 #endif // defined(OS_ANDROID) |
| 612 | 642 |
| 613 } // namespace device | 643 } // namespace device |
| OLD | NEW |