Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: device/bluetooth/bluetooth_remote_gatt_descriptor_unittest.cc

Issue 2708513002: bluetooth: Post a task when sending GATT events to simulate another thread. (Closed)
Patch Set: Remove unnecessary if statement Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698