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

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

Issue 1465863003: bluetooth: Fix crash when trying to read or write when operation pending (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@my-origin
Patch Set: Address scheib's comments Created 5 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/bluetooth/bluetooth_device.h" 5 #include "device/bluetooth/bluetooth_device.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "device/bluetooth/bluetooth_gatt_service.h" 10 #include "device/bluetooth/bluetooth_gatt_service.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 // file. 115 // file.
116 116
117 #if defined(OS_ANDROID) 117 #if defined(OS_ANDROID)
118 // Basic CreateGattConnection test. 118 // Basic CreateGattConnection test.
119 TEST_F(BluetoothTest, CreateGattConnection) { 119 TEST_F(BluetoothTest, CreateGattConnection) {
120 InitWithFakeAdapter(); 120 InitWithFakeAdapter();
121 StartLowEnergyDiscoverySession(); 121 StartLowEnergyDiscoverySession();
122 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 122 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
123 123
124 ResetEventCounts(); 124 ResetEventCounts();
125 device->CreateGattConnection(GetGattConnectionCallback(), 125 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
126 GetConnectErrorCallback()); 126 GetConnectErrorCallback(Call::NOT_EXPECTED));
127 SimulateGattConnection(device); 127 SimulateGattConnection(device);
128 EXPECT_EQ(1, callback_count_);
129 EXPECT_EQ(0, error_callback_count_);
130 ASSERT_EQ(1u, gatt_connections_.size()); 128 ASSERT_EQ(1u, gatt_connections_.size());
131 EXPECT_TRUE(device->IsGattConnected()); 129 EXPECT_TRUE(device->IsGattConnected());
132 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); 130 EXPECT_TRUE(gatt_connections_[0]->IsConnected());
133 } 131 }
134 #endif // defined(OS_ANDROID) 132 #endif // defined(OS_ANDROID)
135 133
136 #if defined(OS_ANDROID) 134 #if defined(OS_ANDROID)
137 // Creates BluetoothGattConnection instances and tests that the interface 135 // Creates BluetoothGattConnection instances and tests that the interface
138 // functions even when some Disconnect and the BluetoothDevice is destroyed. 136 // functions even when some Disconnect and the BluetoothDevice is destroyed.
139 TEST_F(BluetoothTest, BluetoothGattConnection) { 137 TEST_F(BluetoothTest, BluetoothGattConnection) {
140 InitWithFakeAdapter(); 138 InitWithFakeAdapter();
141 StartLowEnergyDiscoverySession(); 139 StartLowEnergyDiscoverySession();
142 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 140 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
143 std::string device_address = device->GetAddress(); 141 std::string device_address = device->GetAddress();
144 142
145 // CreateGattConnection 143 // CreateGattConnection
146 ResetEventCounts(); 144 ResetEventCounts();
147 device->CreateGattConnection(GetGattConnectionCallback(), 145 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
148 GetConnectErrorCallback()); 146 GetConnectErrorCallback(Call::NOT_EXPECTED));
149 EXPECT_EQ(1, gatt_connection_attempts_); 147 EXPECT_EQ(1, gatt_connection_attempts_);
150 SimulateGattConnection(device); 148 SimulateGattConnection(device);
151 EXPECT_EQ(1, callback_count_); 149 EXPECT_EQ(1, callback_count_);
152 EXPECT_EQ(0, error_callback_count_); 150 EXPECT_EQ(0, error_callback_count_);
153 ASSERT_EQ(1u, gatt_connections_.size()); 151 ASSERT_EQ(1u, gatt_connections_.size());
154 EXPECT_TRUE(device->IsGattConnected()); 152 EXPECT_TRUE(device->IsGattConnected());
155 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); 153 EXPECT_TRUE(gatt_connections_[0]->IsConnected());
156 154
157 // Connect again once already connected. 155 // Connect again once already connected.
158 ResetEventCounts(); 156 ResetEventCounts();
159 device->CreateGattConnection(GetGattConnectionCallback(), 157 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
160 GetConnectErrorCallback()); 158 GetConnectErrorCallback(Call::NOT_EXPECTED));
161 device->CreateGattConnection(GetGattConnectionCallback(), 159 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
162 GetConnectErrorCallback()); 160 GetConnectErrorCallback(Call::NOT_EXPECTED));
163 EXPECT_EQ(0, gatt_connection_attempts_); 161 EXPECT_EQ(0, gatt_connection_attempts_);
164 EXPECT_EQ(2, callback_count_); 162 EXPECT_EQ(2, callback_count_);
165 EXPECT_EQ(0, error_callback_count_); 163 EXPECT_EQ(0, error_callback_count_);
166 ASSERT_EQ(3u, gatt_connections_.size()); 164 ASSERT_EQ(3u, gatt_connections_.size());
167 165
168 // Test GetDeviceAddress 166 // Test GetDeviceAddress
169 EXPECT_EQ(device_address, gatt_connections_[0]->GetDeviceAddress()); 167 EXPECT_EQ(device_address, gatt_connections_[0]->GetDeviceAddress());
170 168
171 // Test IsConnected 169 // Test IsConnected
172 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); 170 EXPECT_TRUE(gatt_connections_[0]->IsConnected());
(...skipping 25 matching lines...) Expand all
198 // Calls CreateGattConnection then simulates multiple connections from platform. 196 // Calls CreateGattConnection then simulates multiple connections from platform.
199 TEST_F(BluetoothTest, 197 TEST_F(BluetoothTest,
200 BluetoothGattConnection_ConnectWithMultipleOSConnections) { 198 BluetoothGattConnection_ConnectWithMultipleOSConnections) {
201 InitWithFakeAdapter(); 199 InitWithFakeAdapter();
202 StartLowEnergyDiscoverySession(); 200 StartLowEnergyDiscoverySession();
203 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 201 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
204 202
205 // CreateGattConnection, & multiple connections from platform only invoke 203 // CreateGattConnection, & multiple connections from platform only invoke
206 // callbacks once: 204 // callbacks once:
207 ResetEventCounts(); 205 ResetEventCounts();
208 device->CreateGattConnection(GetGattConnectionCallback(), 206 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
209 GetConnectErrorCallback()); 207 GetConnectErrorCallback(Call::NOT_EXPECTED));
210 SimulateGattConnection(device); 208 SimulateGattConnection(device);
211 SimulateGattConnection(device); 209 SimulateGattConnection(device);
212 EXPECT_EQ(1, gatt_connection_attempts_); 210 EXPECT_EQ(1, gatt_connection_attempts_);
213 EXPECT_EQ(1, callback_count_); 211 EXPECT_EQ(1, callback_count_);
214 EXPECT_EQ(0, error_callback_count_); 212 EXPECT_EQ(0, error_callback_count_);
215 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); 213 EXPECT_TRUE(gatt_connections_[0]->IsConnected());
216 214
217 // Become disconnected: 215 // Become disconnected:
218 ResetEventCounts();
219 SimulateGattDisconnection(device); 216 SimulateGattDisconnection(device);
220 EXPECT_EQ(0, callback_count_);
221 EXPECT_EQ(0, error_callback_count_);
222 EXPECT_FALSE(gatt_connections_[0]->IsConnected()); 217 EXPECT_FALSE(gatt_connections_[0]->IsConnected());
223 } 218 }
224 #endif // defined(OS_ANDROID) 219 #endif // defined(OS_ANDROID)
225 220
226 #if defined(OS_ANDROID) 221 #if defined(OS_ANDROID)
227 // Calls CreateGattConnection after already connected. 222 // Calls CreateGattConnection after already connected.
228 TEST_F(BluetoothTest, BluetoothGattConnection_AlreadyConnected) { 223 TEST_F(BluetoothTest, BluetoothGattConnection_AlreadyConnected) {
229 InitWithFakeAdapter(); 224 InitWithFakeAdapter();
230 StartLowEnergyDiscoverySession(); 225 StartLowEnergyDiscoverySession();
231 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 226 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
232 227
233 // Be already connected: 228 // Be already connected:
234 device->CreateGattConnection(GetGattConnectionCallback(), 229 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
235 GetConnectErrorCallback()); 230 GetConnectErrorCallback(Call::NOT_EXPECTED));
236 SimulateGattConnection(device); 231 SimulateGattConnection(device);
237 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); 232 EXPECT_TRUE(gatt_connections_[0]->IsConnected());
238 233
239 // Then CreateGattConnection: 234 // Then CreateGattConnection:
240 ResetEventCounts(); 235 ResetEventCounts();
241 device->CreateGattConnection(GetGattConnectionCallback(), 236 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
242 GetConnectErrorCallback()); 237 GetConnectErrorCallback(Call::NOT_EXPECTED));
243 EXPECT_EQ(0, gatt_connection_attempts_); 238 EXPECT_EQ(0, gatt_connection_attempts_);
244 EXPECT_EQ(1, callback_count_);
245 EXPECT_EQ(0, error_callback_count_);
246 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); 239 EXPECT_TRUE(gatt_connections_[1]->IsConnected());
247 } 240 }
248 #endif // defined(OS_ANDROID) 241 #endif // defined(OS_ANDROID)
249 242
250 #if defined(OS_ANDROID) 243 #if defined(OS_ANDROID)
251 // Creates BluetoothGattConnection after one exists that has disconnected. 244 // Creates BluetoothGattConnection after one exists that has disconnected.
252 TEST_F(BluetoothTest, 245 TEST_F(BluetoothTest,
253 BluetoothGattConnection_NewConnectionLeavesPreviousDisconnected) { 246 BluetoothGattConnection_NewConnectionLeavesPreviousDisconnected) {
254 InitWithFakeAdapter(); 247 InitWithFakeAdapter();
255 StartLowEnergyDiscoverySession(); 248 StartLowEnergyDiscoverySession();
256 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 249 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
257 250
258 // Create connection: 251 // Create connection:
259 device->CreateGattConnection(GetGattConnectionCallback(), 252 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
260 GetConnectErrorCallback()); 253 GetConnectErrorCallback(Call::NOT_EXPECTED));
261 SimulateGattConnection(device); 254 SimulateGattConnection(device);
262 255
263 // Disconnect connection: 256 // Disconnect connection:
264 gatt_connections_[0]->Disconnect(); 257 gatt_connections_[0]->Disconnect();
265 SimulateGattDisconnection(device); 258 SimulateGattDisconnection(device);
266 259
267 // Create 2nd connection: 260 // Create 2nd connection:
268 device->CreateGattConnection(GetGattConnectionCallback(), 261 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
269 GetConnectErrorCallback()); 262 GetConnectErrorCallback(Call::NOT_EXPECTED));
270 SimulateGattConnection(device); 263 SimulateGattConnection(device);
271 264
272 EXPECT_FALSE(gatt_connections_[0]->IsConnected()) 265 EXPECT_FALSE(gatt_connections_[0]->IsConnected())
273 << "The disconnected connection shouldn't become connected when another " 266 << "The disconnected connection shouldn't become connected when another "
274 "connection is created."; 267 "connection is created.";
275 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); 268 EXPECT_TRUE(gatt_connections_[1]->IsConnected());
276 } 269 }
277 #endif // defined(OS_ANDROID) 270 #endif // defined(OS_ANDROID)
278 271
279 #if defined(OS_ANDROID) 272 #if defined(OS_ANDROID)
280 // Deletes BluetoothGattConnection causing disconnection. 273 // Deletes BluetoothGattConnection causing disconnection.
281 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectWhenObjectsDestroyed) { 274 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectWhenObjectsDestroyed) {
282 InitWithFakeAdapter(); 275 InitWithFakeAdapter();
283 StartLowEnergyDiscoverySession(); 276 StartLowEnergyDiscoverySession();
284 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 277 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
285 278
286 // Create multiple connections and simulate connection complete: 279 // Create multiple connections and simulate connection complete:
287 device->CreateGattConnection(GetGattConnectionCallback(), 280 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
288 GetConnectErrorCallback()); 281 GetConnectErrorCallback(Call::NOT_EXPECTED));
289 device->CreateGattConnection(GetGattConnectionCallback(), 282 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
290 GetConnectErrorCallback()); 283 GetConnectErrorCallback(Call::NOT_EXPECTED));
291 SimulateGattConnection(device); 284 SimulateGattConnection(device);
292 285
293 // Delete all CreateGattConnection objects, observe disconnection: 286 // Delete all CreateGattConnection objects, observe disconnection:
294 ResetEventCounts(); 287 ResetEventCounts();
295 gatt_connections_.clear(); 288 gatt_connections_.clear();
296 EXPECT_EQ(1, gatt_disconnection_attempts_); 289 EXPECT_EQ(1, gatt_disconnection_attempts_);
297 } 290 }
298 #endif // defined(OS_ANDROID) 291 #endif // defined(OS_ANDROID)
299 292
300 #if defined(OS_ANDROID) 293 #if defined(OS_ANDROID)
301 // Starts process of disconnecting and then calls BluetoothGattConnection. 294 // Starts process of disconnecting and then calls BluetoothGattConnection.
302 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectInProgress) { 295 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectInProgress) {
303 InitWithFakeAdapter(); 296 InitWithFakeAdapter();
304 StartLowEnergyDiscoverySession(); 297 StartLowEnergyDiscoverySession();
305 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 298 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
306 299
307 // Create multiple connections and simulate connection complete: 300 // Create multiple connections and simulate connection complete:
308 device->CreateGattConnection(GetGattConnectionCallback(), 301 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
309 GetConnectErrorCallback()); 302 GetConnectErrorCallback(Call::NOT_EXPECTED));
310 device->CreateGattConnection(GetGattConnectionCallback(), 303 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
311 GetConnectErrorCallback()); 304 GetConnectErrorCallback(Call::NOT_EXPECTED));
312 SimulateGattConnection(device); 305 SimulateGattConnection(device);
313 306
314 // Disconnect all CreateGattConnection objects & create a new connection. 307 // Disconnect all CreateGattConnection objects & create a new connection.
315 // But, don't yet simulate the device disconnecting: 308 // But, don't yet simulate the device disconnecting:
316 ResetEventCounts(); 309 ResetEventCounts();
317 for (BluetoothGattConnection* connection : gatt_connections_) 310 for (BluetoothGattConnection* connection : gatt_connections_)
318 connection->Disconnect(); 311 connection->Disconnect();
319 EXPECT_EQ(1, gatt_disconnection_attempts_); 312 EXPECT_EQ(1, gatt_disconnection_attempts_);
320 313
321 // Create a connection. 314 // Create a connection.
322 device->CreateGattConnection(GetGattConnectionCallback(), 315 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
323 GetConnectErrorCallback()); 316 GetConnectErrorCallback(Call::NOT_EXPECTED));
324 EXPECT_EQ(0, gatt_connection_attempts_); // No connection attempt. 317 EXPECT_EQ(0, gatt_connection_attempts_); // No connection attempt.
325 EXPECT_EQ(1, callback_count_); // Device is assumed still connected. 318 EXPECT_EQ(1, callback_count_); // Device is assumed still connected.
326 EXPECT_EQ(0, error_callback_count_); 319 EXPECT_EQ(0, error_callback_count_);
327 EXPECT_FALSE(gatt_connections_.front()->IsConnected()); 320 EXPECT_FALSE(gatt_connections_.front()->IsConnected());
328 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); 321 EXPECT_TRUE(gatt_connections_.back()->IsConnected());
329 322
330 // Actually disconnect: 323 // Actually disconnect:
331 ResetEventCounts();
332 SimulateGattDisconnection(device); 324 SimulateGattDisconnection(device);
333 EXPECT_EQ(0, callback_count_);
334 EXPECT_EQ(0, error_callback_count_);
335 for (BluetoothGattConnection* connection : gatt_connections_) 325 for (BluetoothGattConnection* connection : gatt_connections_)
336 EXPECT_FALSE(connection->IsConnected()); 326 EXPECT_FALSE(connection->IsConnected());
337 } 327 }
338 #endif // defined(OS_ANDROID) 328 #endif // defined(OS_ANDROID)
339 329
340 #if defined(OS_ANDROID) 330 #if defined(OS_ANDROID)
341 // Calls CreateGattConnection but receives notice that the device disconnected 331 // Calls CreateGattConnection but receives notice that the device disconnected
342 // before it ever connects. 332 // before it ever connects.
343 TEST_F(BluetoothTest, BluetoothGattConnection_SimulateDisconnect) { 333 TEST_F(BluetoothTest, BluetoothGattConnection_SimulateDisconnect) {
344 InitWithFakeAdapter(); 334 InitWithFakeAdapter();
345 StartLowEnergyDiscoverySession(); 335 StartLowEnergyDiscoverySession();
346 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 336 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
347 337
348 ResetEventCounts(); 338 ResetEventCounts();
349 device->CreateGattConnection(GetGattConnectionCallback(), 339 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED),
350 GetConnectErrorCallback()); 340 GetConnectErrorCallback(Call::EXPECTED));
351 EXPECT_EQ(1, gatt_connection_attempts_); 341 EXPECT_EQ(1, gatt_connection_attempts_);
352 SimulateGattDisconnection(device); 342 SimulateGattDisconnection(device);
353 EXPECT_EQ(0, callback_count_);
354 EXPECT_EQ(1, error_callback_count_);
355 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); 343 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_);
356 for (BluetoothGattConnection* connection : gatt_connections_) 344 for (BluetoothGattConnection* connection : gatt_connections_)
357 EXPECT_FALSE(connection->IsConnected()); 345 EXPECT_FALSE(connection->IsConnected());
358 } 346 }
359 #endif // defined(OS_ANDROID) 347 #endif // defined(OS_ANDROID)
360 348
361 #if defined(OS_ANDROID) 349 #if defined(OS_ANDROID)
362 // Calls CreateGattConnection & DisconnectGatt, then simulates connection. 350 // Calls CreateGattConnection & DisconnectGatt, then simulates connection.
363 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_SimulateConnect) { 351 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_SimulateConnect) {
364 InitWithFakeAdapter(); 352 InitWithFakeAdapter();
365 StartLowEnergyDiscoverySession(); 353 StartLowEnergyDiscoverySession();
366 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 354 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
367 355
368 ResetEventCounts(); 356 ResetEventCounts();
369 device->CreateGattConnection(GetGattConnectionCallback(), 357 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
370 GetConnectErrorCallback()); 358 GetConnectErrorCallback(Call::NOT_EXPECTED));
371 device->DisconnectGatt(); 359 device->DisconnectGatt();
372 EXPECT_EQ(1, gatt_connection_attempts_); 360 EXPECT_EQ(1, gatt_connection_attempts_);
373 EXPECT_EQ(1, gatt_disconnection_attempts_); 361 EXPECT_EQ(1, gatt_disconnection_attempts_);
374 SimulateGattConnection(device); 362 SimulateGattConnection(device);
375 EXPECT_EQ(1, callback_count_); 363 EXPECT_EQ(1, callback_count_);
376 EXPECT_EQ(0, error_callback_count_); 364 EXPECT_EQ(0, error_callback_count_);
377 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); 365 EXPECT_TRUE(gatt_connections_.back()->IsConnected());
378 ResetEventCounts(); 366 ResetEventCounts();
379 SimulateGattDisconnection(device); 367 SimulateGattDisconnection(device);
380 EXPECT_EQ(0, callback_count_); 368 EXPECT_EQ(0, callback_count_);
381 EXPECT_EQ(0, error_callback_count_); 369 EXPECT_EQ(0, error_callback_count_);
382 } 370 }
383 #endif // defined(OS_ANDROID) 371 #endif // defined(OS_ANDROID)
384 372
385 #if defined(OS_ANDROID) 373 #if defined(OS_ANDROID)
386 // Calls CreateGattConnection & DisconnectGatt, then simulates disconnection. 374 // Calls CreateGattConnection & DisconnectGatt, then simulates disconnection.
387 TEST_F(BluetoothTest, 375 TEST_F(BluetoothTest,
388 BluetoothGattConnection_DisconnectGatt_SimulateDisconnect) { 376 BluetoothGattConnection_DisconnectGatt_SimulateDisconnect) {
389 InitWithFakeAdapter(); 377 InitWithFakeAdapter();
390 StartLowEnergyDiscoverySession(); 378 StartLowEnergyDiscoverySession();
391 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 379 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
392 380
393 ResetEventCounts(); 381 ResetEventCounts();
394 device->CreateGattConnection(GetGattConnectionCallback(), 382 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED),
395 GetConnectErrorCallback()); 383 GetConnectErrorCallback(Call::EXPECTED));
396 device->DisconnectGatt(); 384 device->DisconnectGatt();
397 EXPECT_EQ(1, gatt_connection_attempts_); 385 EXPECT_EQ(1, gatt_connection_attempts_);
398 EXPECT_EQ(1, gatt_disconnection_attempts_); 386 EXPECT_EQ(1, gatt_disconnection_attempts_);
399 SimulateGattDisconnection(device); 387 SimulateGattDisconnection(device);
400 EXPECT_EQ(0, callback_count_);
401 EXPECT_EQ(1, error_callback_count_);
402 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); 388 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_);
403 for (BluetoothGattConnection* connection : gatt_connections_) 389 for (BluetoothGattConnection* connection : gatt_connections_)
404 EXPECT_FALSE(connection->IsConnected()); 390 EXPECT_FALSE(connection->IsConnected());
405 } 391 }
406 #endif // defined(OS_ANDROID) 392 #endif // defined(OS_ANDROID)
407 393
408 #if defined(OS_ANDROID) 394 #if defined(OS_ANDROID)
409 // Calls CreateGattConnection, but simulate errors connecting. Also, verifies 395 // Calls CreateGattConnection, but simulate errors connecting. Also, verifies
410 // multiple errors should only invoke callbacks once. 396 // multiple errors should only invoke callbacks once.
411 TEST_F(BluetoothTest, BluetoothGattConnection_ErrorAfterConnection) { 397 TEST_F(BluetoothTest, BluetoothGattConnection_ErrorAfterConnection) {
412 InitWithFakeAdapter(); 398 InitWithFakeAdapter();
413 StartLowEnergyDiscoverySession(); 399 StartLowEnergyDiscoverySession();
414 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 400 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
415 401
416 ResetEventCounts(); 402 ResetEventCounts();
417 device->CreateGattConnection(GetGattConnectionCallback(), 403 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED),
418 GetConnectErrorCallback()); 404 GetConnectErrorCallback(Call::EXPECTED));
419 EXPECT_EQ(1, gatt_connection_attempts_); 405 EXPECT_EQ(1, gatt_connection_attempts_);
420 SimulateGattConnectionError(device, BluetoothDevice::ERROR_AUTH_FAILED); 406 SimulateGattConnectionError(device, BluetoothDevice::ERROR_AUTH_FAILED);
421 SimulateGattConnectionError(device, BluetoothDevice::ERROR_FAILED); 407 SimulateGattConnectionError(device, BluetoothDevice::ERROR_FAILED);
422 EXPECT_EQ(0, callback_count_);
423 EXPECT_EQ(1, error_callback_count_);
424 EXPECT_EQ(BluetoothDevice::ERROR_AUTH_FAILED, last_connect_error_code_); 408 EXPECT_EQ(BluetoothDevice::ERROR_AUTH_FAILED, last_connect_error_code_);
425 for (BluetoothGattConnection* connection : gatt_connections_) 409 for (BluetoothGattConnection* connection : gatt_connections_)
426 EXPECT_FALSE(connection->IsConnected()); 410 EXPECT_FALSE(connection->IsConnected());
427 } 411 }
428 #endif // defined(OS_ANDROID) 412 #endif // defined(OS_ANDROID)
429 413
430 #if defined(OS_ANDROID) 414 #if defined(OS_ANDROID)
431 TEST_F(BluetoothTest, GattServices_ObserversCalls) { 415 TEST_F(BluetoothTest, GattServices_ObserversCalls) {
432 InitWithFakeAdapter(); 416 InitWithFakeAdapter();
433 StartLowEnergyDiscoverySession(); 417 StartLowEnergyDiscoverySession();
434 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 418 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
435 device->CreateGattConnection(GetGattConnectionCallback(), 419 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
436 GetConnectErrorCallback()); 420 GetConnectErrorCallback(Call::NOT_EXPECTED));
437 TestBluetoothAdapterObserver observer(adapter_); 421 TestBluetoothAdapterObserver observer(adapter_);
438 ResetEventCounts(); 422 ResetEventCounts();
439 SimulateGattConnection(device); 423 SimulateGattConnection(device);
440 EXPECT_EQ(1, gatt_discovery_attempts_); 424 EXPECT_EQ(1, gatt_discovery_attempts_);
441 425
442 std::vector<std::string> services; 426 std::vector<std::string> services;
443 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); 427 services.push_back("00000000-0000-1000-8000-00805f9b34fb");
444 services.push_back("00000001-0000-1000-8000-00805f9b34fb"); 428 services.push_back("00000001-0000-1000-8000-00805f9b34fb");
445 SimulateGattServicesDiscovered(device, services); 429 SimulateGattServicesDiscovered(device, services);
446 430
447 EXPECT_EQ(1, observer.gatt_services_discovered_count()); 431 EXPECT_EQ(1, observer.gatt_services_discovered_count());
448 EXPECT_EQ(2, observer.gatt_service_added_count()); 432 EXPECT_EQ(2, observer.gatt_service_added_count());
449 } 433 }
450 #endif // defined(OS_ANDROID) 434 #endif // defined(OS_ANDROID)
451 435
452 #if defined(OS_ANDROID) 436 #if defined(OS_ANDROID)
453 TEST_F(BluetoothTest, GetGattServices_and_GetGattService) { 437 TEST_F(BluetoothTest, GetGattServices_and_GetGattService) {
454 InitWithFakeAdapter(); 438 InitWithFakeAdapter();
455 StartLowEnergyDiscoverySession(); 439 StartLowEnergyDiscoverySession();
456 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 440 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
457 device->CreateGattConnection(GetGattConnectionCallback(), 441 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
458 GetConnectErrorCallback()); 442 GetConnectErrorCallback(Call::NOT_EXPECTED));
459 ResetEventCounts(); 443 ResetEventCounts();
460 SimulateGattConnection(device); 444 SimulateGattConnection(device);
461 EXPECT_EQ(1, gatt_discovery_attempts_); 445 EXPECT_EQ(1, gatt_discovery_attempts_);
462 446
463 std::vector<std::string> services; 447 std::vector<std::string> services;
464 services.push_back("00000000-0000-1000-8000-00805f9b34fb"); 448 services.push_back("00000000-0000-1000-8000-00805f9b34fb");
465 // 2 duplicate UUIDs creating 2 instances. 449 // 2 duplicate UUIDs creating 2 instances.
466 services.push_back("00000001-0000-1000-8000-00805f9b34fb"); 450 services.push_back("00000001-0000-1000-8000-00805f9b34fb");
467 services.push_back("00000001-0000-1000-8000-00805f9b34fb"); 451 services.push_back("00000001-0000-1000-8000-00805f9b34fb");
468 SimulateGattServicesDiscovered(device, services); 452 SimulateGattServicesDiscovered(device, services);
469 EXPECT_EQ(3u, device->GetGattServices().size()); 453 EXPECT_EQ(3u, device->GetGattServices().size());
470 454
471 // Test GetGattService: 455 // Test GetGattService:
472 std::string service_id1 = device->GetGattServices()[0]->GetIdentifier(); 456 std::string service_id1 = device->GetGattServices()[0]->GetIdentifier();
473 std::string service_id2 = device->GetGattServices()[1]->GetIdentifier(); 457 std::string service_id2 = device->GetGattServices()[1]->GetIdentifier();
474 std::string service_id3 = device->GetGattServices()[2]->GetIdentifier(); 458 std::string service_id3 = device->GetGattServices()[2]->GetIdentifier();
475 EXPECT_TRUE(device->GetGattService(service_id1)); 459 EXPECT_TRUE(device->GetGattService(service_id1));
476 EXPECT_TRUE(device->GetGattService(service_id2)); 460 EXPECT_TRUE(device->GetGattService(service_id2));
477 EXPECT_TRUE(device->GetGattService(service_id3)); 461 EXPECT_TRUE(device->GetGattService(service_id3));
478 } 462 }
479 #endif // defined(OS_ANDROID) 463 #endif // defined(OS_ANDROID)
480 464
481 #if defined(OS_ANDROID) 465 #if defined(OS_ANDROID)
482 TEST_F(BluetoothTest, GetGattServices_DiscoveryError) { 466 TEST_F(BluetoothTest, GetGattServices_DiscoveryError) {
483 InitWithFakeAdapter(); 467 InitWithFakeAdapter();
484 StartLowEnergyDiscoverySession(); 468 StartLowEnergyDiscoverySession();
485 BluetoothDevice* device = DiscoverLowEnergyDevice(3); 469 BluetoothDevice* device = DiscoverLowEnergyDevice(3);
486 device->CreateGattConnection(GetGattConnectionCallback(), 470 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED),
487 GetConnectErrorCallback()); 471 GetConnectErrorCallback(Call::NOT_EXPECTED));
488 ResetEventCounts(); 472 ResetEventCounts();
489 SimulateGattConnection(device); 473 SimulateGattConnection(device);
490 EXPECT_EQ(1, gatt_discovery_attempts_); 474 EXPECT_EQ(1, gatt_discovery_attempts_);
491 475
492 SimulateGattServicesDiscoveryError(device); 476 SimulateGattServicesDiscoveryError(device);
493 EXPECT_EQ(0u, device->GetGattServices().size()); 477 EXPECT_EQ(0u, device->GetGattServices().size());
494 } 478 }
495 #endif // defined(OS_ANDROID) 479 #endif // defined(OS_ANDROID)
496 480
497 } // namespace device 481 } // namespace device
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_adapter_unittest.cc ('k') | device/bluetooth/bluetooth_gatt_characteristic_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698