| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "device/bluetooth/bluetooth_device.h" | 5 #include "device/bluetooth/bluetooth_device.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 } | 115 } |
| 116 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 116 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 117 | 117 |
| 118 // TODO(scheib): Test with a device with no name. http://crbug.com/506415 | 118 // TODO(scheib): Test with a device with no name. http://crbug.com/506415 |
| 119 // BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() will run, which | 119 // BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() will run, which |
| 120 // requires string resources to be loaded. For that, something like | 120 // requires string resources to be loaded. For that, something like |
| 121 // InitSharedInstance must be run. See unittest files that call that. It will | 121 // InitSharedInstance must be run. See unittest files that call that. It will |
| 122 // also require build configuration to generate string resources into a .pak | 122 // also require build configuration to generate string resources into a .pak |
| 123 // file. | 123 // file. |
| 124 | 124 |
| 125 #if defined(OS_ANDROID) | 125 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 126 // Basic CreateGattConnection test. | 126 // Basic CreateGattConnection test. |
| 127 TEST_F(BluetoothTest, CreateGattConnection) { | 127 TEST_F(BluetoothTest, CreateGattConnection) { |
| 128 if (!PlatformSupportsLowEnergy()) { |
| 129 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 130 return; |
| 131 } |
| 128 InitWithFakeAdapter(); | 132 InitWithFakeAdapter(); |
| 129 StartLowEnergyDiscoverySession(); | 133 StartLowEnergyDiscoverySession(); |
| 130 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 134 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 131 | 135 |
| 132 ResetEventCounts(); | 136 ResetEventCounts(); |
| 133 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 137 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 134 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 138 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 135 SimulateGattConnection(device); | 139 SimulateGattConnection(device); |
| 136 ASSERT_EQ(1u, gatt_connections_.size()); | 140 ASSERT_EQ(1u, gatt_connections_.size()); |
| 137 EXPECT_TRUE(device->IsGattConnected()); | 141 EXPECT_TRUE(device->IsGattConnected()); |
| 138 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); | 142 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); |
| 139 } | 143 } |
| 140 #endif // defined(OS_ANDROID) | 144 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 141 | 145 |
| 142 #if defined(OS_ANDROID) | 146 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 143 // Creates BluetoothGattConnection instances and tests that the interface | 147 // Creates BluetoothGattConnection instances and tests that the interface |
| 144 // functions even when some Disconnect and the BluetoothDevice is destroyed. | 148 // functions even when some Disconnect and the BluetoothDevice is destroyed. |
| 145 TEST_F(BluetoothTest, BluetoothGattConnection) { | 149 TEST_F(BluetoothTest, BluetoothGattConnection) { |
| 150 if (!PlatformSupportsLowEnergy()) { |
| 151 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 152 return; |
| 153 } |
| 146 InitWithFakeAdapter(); | 154 InitWithFakeAdapter(); |
| 147 StartLowEnergyDiscoverySession(); | 155 StartLowEnergyDiscoverySession(); |
| 148 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 156 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 149 std::string device_address = device->GetAddress(); | 157 std::string device_address = device->GetAddress(); |
| 150 | 158 |
| 151 // CreateGattConnection | 159 // CreateGattConnection |
| 152 ResetEventCounts(); | 160 ResetEventCounts(); |
| 153 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 161 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 154 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 162 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 155 EXPECT_EQ(1, gatt_connection_attempts_); | 163 EXPECT_EQ(1, gatt_connection_attempts_); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 gatt_disconnection_attempts_ = 0; | 199 gatt_disconnection_attempts_ = 0; |
| 192 DeleteDevice(device); | 200 DeleteDevice(device); |
| 193 EXPECT_EQ(1, gatt_disconnection_attempts_); | 201 EXPECT_EQ(1, gatt_disconnection_attempts_); |
| 194 EXPECT_FALSE(gatt_connections_[0]->IsConnected()); | 202 EXPECT_FALSE(gatt_connections_[0]->IsConnected()); |
| 195 EXPECT_FALSE(gatt_connections_[1]->IsConnected()); | 203 EXPECT_FALSE(gatt_connections_[1]->IsConnected()); |
| 196 | 204 |
| 197 // Test GetDeviceAddress after device deleted. | 205 // Test GetDeviceAddress after device deleted. |
| 198 EXPECT_EQ(device_address, gatt_connections_[0]->GetDeviceAddress()); | 206 EXPECT_EQ(device_address, gatt_connections_[0]->GetDeviceAddress()); |
| 199 EXPECT_EQ(device_address, gatt_connections_[1]->GetDeviceAddress()); | 207 EXPECT_EQ(device_address, gatt_connections_[1]->GetDeviceAddress()); |
| 200 } | 208 } |
| 201 #endif // defined(OS_ANDROID) | 209 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 202 | 210 |
| 203 #if defined(OS_ANDROID) | 211 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 204 // Calls CreateGattConnection then simulates multiple connections from platform. | 212 // Calls CreateGattConnection then simulates multiple connections from platform. |
| 205 TEST_F(BluetoothTest, | 213 TEST_F(BluetoothTest, |
| 206 BluetoothGattConnection_ConnectWithMultipleOSConnections) { | 214 BluetoothGattConnection_ConnectWithMultipleOSConnections) { |
| 215 if (!PlatformSupportsLowEnergy()) { |
| 216 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 217 return; |
| 218 } |
| 207 InitWithFakeAdapter(); | 219 InitWithFakeAdapter(); |
| 208 StartLowEnergyDiscoverySession(); | 220 StartLowEnergyDiscoverySession(); |
| 209 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 221 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 210 | 222 |
| 211 // CreateGattConnection, & multiple connections from platform only invoke | 223 // CreateGattConnection, & multiple connections from platform only invoke |
| 212 // callbacks once: | 224 // callbacks once: |
| 213 ResetEventCounts(); | 225 ResetEventCounts(); |
| 214 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 226 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 215 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 227 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 216 SimulateGattConnection(device); | 228 SimulateGattConnection(device); |
| 217 SimulateGattConnection(device); | 229 SimulateGattConnection(device); |
| 218 EXPECT_EQ(1, gatt_connection_attempts_); | 230 EXPECT_EQ(1, gatt_connection_attempts_); |
| 219 EXPECT_EQ(1, callback_count_); | 231 EXPECT_EQ(1, callback_count_); |
| 220 EXPECT_EQ(0, error_callback_count_); | 232 EXPECT_EQ(0, error_callback_count_); |
| 221 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); | 233 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); |
| 222 | 234 |
| 223 // Become disconnected: | 235 // Become disconnected: |
| 224 SimulateGattDisconnection(device); | 236 SimulateGattDisconnection(device); |
| 225 EXPECT_FALSE(gatt_connections_[0]->IsConnected()); | 237 EXPECT_FALSE(gatt_connections_[0]->IsConnected()); |
| 226 } | 238 } |
| 227 #endif // defined(OS_ANDROID) | 239 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 228 | 240 |
| 229 #if defined(OS_ANDROID) | 241 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 230 // Calls CreateGattConnection after already connected. | 242 // Calls CreateGattConnection after already connected. |
| 231 TEST_F(BluetoothTest, BluetoothGattConnection_AlreadyConnected) { | 243 TEST_F(BluetoothTest, BluetoothGattConnection_AlreadyConnected) { |
| 244 if (!PlatformSupportsLowEnergy()) { |
| 245 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 246 return; |
| 247 } |
| 232 InitWithFakeAdapter(); | 248 InitWithFakeAdapter(); |
| 233 StartLowEnergyDiscoverySession(); | 249 StartLowEnergyDiscoverySession(); |
| 234 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 250 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 235 | 251 |
| 236 // Be already connected: | 252 // Be already connected: |
| 237 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 253 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 238 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 254 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 239 SimulateGattConnection(device); | 255 SimulateGattConnection(device); |
| 240 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); | 256 EXPECT_TRUE(gatt_connections_[0]->IsConnected()); |
| 241 | 257 |
| 242 // Then CreateGattConnection: | 258 // Then CreateGattConnection: |
| 243 ResetEventCounts(); | 259 ResetEventCounts(); |
| 244 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 260 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 245 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 261 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 246 EXPECT_EQ(0, gatt_connection_attempts_); | 262 EXPECT_EQ(0, gatt_connection_attempts_); |
| 247 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); | 263 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); |
| 248 } | 264 } |
| 249 #endif // defined(OS_ANDROID) | 265 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 250 | 266 |
| 251 #if defined(OS_ANDROID) | 267 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 252 // Creates BluetoothGattConnection after one exists that has disconnected. | 268 // Creates BluetoothGattConnection after one exists that has disconnected. |
| 253 TEST_F(BluetoothTest, | 269 TEST_F(BluetoothTest, |
| 254 BluetoothGattConnection_NewConnectionLeavesPreviousDisconnected) { | 270 BluetoothGattConnection_NewConnectionLeavesPreviousDisconnected) { |
| 271 if (!PlatformSupportsLowEnergy()) { |
| 272 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 273 return; |
| 274 } |
| 255 InitWithFakeAdapter(); | 275 InitWithFakeAdapter(); |
| 256 StartLowEnergyDiscoverySession(); | 276 StartLowEnergyDiscoverySession(); |
| 257 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 277 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 258 | 278 |
| 259 // Create connection: | 279 // Create connection: |
| 260 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 280 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 261 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 281 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 262 SimulateGattConnection(device); | 282 SimulateGattConnection(device); |
| 263 | 283 |
| 264 // Disconnect connection: | 284 // Disconnect connection: |
| 265 gatt_connections_[0]->Disconnect(); | 285 gatt_connections_[0]->Disconnect(); |
| 266 SimulateGattDisconnection(device); | 286 SimulateGattDisconnection(device); |
| 267 | 287 |
| 268 // Create 2nd connection: | 288 // Create 2nd connection: |
| 269 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 289 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 270 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 290 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 271 SimulateGattConnection(device); | 291 SimulateGattConnection(device); |
| 272 | 292 |
| 273 EXPECT_FALSE(gatt_connections_[0]->IsConnected()) | 293 EXPECT_FALSE(gatt_connections_[0]->IsConnected()) |
| 274 << "The disconnected connection shouldn't become connected when another " | 294 << "The disconnected connection shouldn't become connected when another " |
| 275 "connection is created."; | 295 "connection is created."; |
| 276 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); | 296 EXPECT_TRUE(gatt_connections_[1]->IsConnected()); |
| 277 } | 297 } |
| 278 #endif // defined(OS_ANDROID) | 298 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 279 | 299 |
| 280 #if defined(OS_ANDROID) | 300 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 281 // Deletes BluetoothGattConnection causing disconnection. | 301 // Deletes BluetoothGattConnection causing disconnection. |
| 282 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectWhenObjectsDestroyed) { | 302 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectWhenObjectsDestroyed) { |
| 303 if (!PlatformSupportsLowEnergy()) { |
| 304 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 305 return; |
| 306 } |
| 283 InitWithFakeAdapter(); | 307 InitWithFakeAdapter(); |
| 284 StartLowEnergyDiscoverySession(); | 308 StartLowEnergyDiscoverySession(); |
| 285 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 309 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 286 | 310 |
| 287 // Create multiple connections and simulate connection complete: | 311 // Create multiple connections and simulate connection complete: |
| 288 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 312 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 289 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 313 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 290 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 314 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 291 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 315 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 292 SimulateGattConnection(device); | 316 SimulateGattConnection(device); |
| 293 | 317 |
| 294 // Delete all CreateGattConnection objects, observe disconnection: | 318 // Delete all CreateGattConnection objects, observe disconnection: |
| 295 ResetEventCounts(); | 319 ResetEventCounts(); |
| 296 gatt_connections_.clear(); | 320 gatt_connections_.clear(); |
| 297 EXPECT_EQ(1, gatt_disconnection_attempts_); | 321 EXPECT_EQ(1, gatt_disconnection_attempts_); |
| 298 } | 322 } |
| 299 #endif // defined(OS_ANDROID) | 323 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 300 | 324 |
| 301 #if defined(OS_ANDROID) | 325 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 302 // Starts process of disconnecting and then calls BluetoothGattConnection. | 326 // Starts process of disconnecting and then calls BluetoothGattConnection. |
| 303 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectInProgress) { | 327 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectInProgress) { |
| 328 if (!PlatformSupportsLowEnergy()) { |
| 329 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 330 return; |
| 331 } |
| 304 InitWithFakeAdapter(); | 332 InitWithFakeAdapter(); |
| 305 StartLowEnergyDiscoverySession(); | 333 StartLowEnergyDiscoverySession(); |
| 306 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 334 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 307 | 335 |
| 308 // Create multiple connections and simulate connection complete: | 336 // Create multiple connections and simulate connection complete: |
| 309 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 337 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 310 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 338 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 311 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 339 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 312 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 340 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 313 SimulateGattConnection(device); | 341 SimulateGattConnection(device); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 326 EXPECT_EQ(1, callback_count_); // Device is assumed still connected. | 354 EXPECT_EQ(1, callback_count_); // Device is assumed still connected. |
| 327 EXPECT_EQ(0, error_callback_count_); | 355 EXPECT_EQ(0, error_callback_count_); |
| 328 EXPECT_FALSE(gatt_connections_.front()->IsConnected()); | 356 EXPECT_FALSE(gatt_connections_.front()->IsConnected()); |
| 329 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); | 357 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); |
| 330 | 358 |
| 331 // Actually disconnect: | 359 // Actually disconnect: |
| 332 SimulateGattDisconnection(device); | 360 SimulateGattDisconnection(device); |
| 333 for (BluetoothGattConnection* connection : gatt_connections_) | 361 for (BluetoothGattConnection* connection : gatt_connections_) |
| 334 EXPECT_FALSE(connection->IsConnected()); | 362 EXPECT_FALSE(connection->IsConnected()); |
| 335 } | 363 } |
| 336 #endif // defined(OS_ANDROID) | 364 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 337 | 365 |
| 338 #if defined(OS_ANDROID) | 366 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 339 // Calls CreateGattConnection but receives notice that the device disconnected | 367 // Calls CreateGattConnection but receives notice that the device disconnected |
| 340 // before it ever connects. | 368 // before it ever connects. |
| 341 TEST_F(BluetoothTest, BluetoothGattConnection_SimulateDisconnect) { | 369 TEST_F(BluetoothTest, BluetoothGattConnection_SimulateDisconnect) { |
| 370 if (!PlatformSupportsLowEnergy()) { |
| 371 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 372 return; |
| 373 } |
| 342 InitWithFakeAdapter(); | 374 InitWithFakeAdapter(); |
| 343 StartLowEnergyDiscoverySession(); | 375 StartLowEnergyDiscoverySession(); |
| 344 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 376 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 345 | 377 |
| 346 ResetEventCounts(); | 378 ResetEventCounts(); |
| 347 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), | 379 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), |
| 348 GetConnectErrorCallback(Call::EXPECTED)); | 380 GetConnectErrorCallback(Call::EXPECTED)); |
| 349 EXPECT_EQ(1, gatt_connection_attempts_); | 381 EXPECT_EQ(1, gatt_connection_attempts_); |
| 350 SimulateGattDisconnection(device); | 382 SimulateGattDisconnection(device); |
| 351 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); | 383 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); |
| 352 for (BluetoothGattConnection* connection : gatt_connections_) | 384 for (BluetoothGattConnection* connection : gatt_connections_) |
| 353 EXPECT_FALSE(connection->IsConnected()); | 385 EXPECT_FALSE(connection->IsConnected()); |
| 354 } | 386 } |
| 355 #endif // defined(OS_ANDROID) | 387 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 356 | 388 |
| 357 #if defined(OS_ANDROID) | 389 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 358 // Calls CreateGattConnection & DisconnectGatt, then simulates connection. | 390 // Calls CreateGattConnection & DisconnectGatt, then simulates connection. |
| 359 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_SimulateConnect) { | 391 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_SimulateConnect) { |
| 392 if (!PlatformSupportsLowEnergy()) { |
| 393 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 394 return; |
| 395 } |
| 360 InitWithFakeAdapter(); | 396 InitWithFakeAdapter(); |
| 361 StartLowEnergyDiscoverySession(); | 397 StartLowEnergyDiscoverySession(); |
| 362 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 398 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 363 | 399 |
| 364 ResetEventCounts(); | 400 ResetEventCounts(); |
| 365 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 401 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 366 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 402 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 367 device->DisconnectGatt(); | 403 device->DisconnectGatt(); |
| 368 EXPECT_EQ(1, gatt_connection_attempts_); | 404 EXPECT_EQ(1, gatt_connection_attempts_); |
| 369 EXPECT_EQ(1, gatt_disconnection_attempts_); | 405 EXPECT_EQ(1, gatt_disconnection_attempts_); |
| 370 SimulateGattConnection(device); | 406 SimulateGattConnection(device); |
| 371 EXPECT_EQ(1, callback_count_); | 407 EXPECT_EQ(1, callback_count_); |
| 372 EXPECT_EQ(0, error_callback_count_); | 408 EXPECT_EQ(0, error_callback_count_); |
| 373 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); | 409 EXPECT_TRUE(gatt_connections_.back()->IsConnected()); |
| 374 ResetEventCounts(); | 410 ResetEventCounts(); |
| 375 SimulateGattDisconnection(device); | 411 SimulateGattDisconnection(device); |
| 376 EXPECT_EQ(0, callback_count_); | 412 EXPECT_EQ(0, callback_count_); |
| 377 EXPECT_EQ(0, error_callback_count_); | 413 EXPECT_EQ(0, error_callback_count_); |
| 378 } | 414 } |
| 379 #endif // defined(OS_ANDROID) | 415 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 380 | 416 |
| 381 #if defined(OS_ANDROID) | 417 #if defined(OS_ANDROID) || defined(OS_MACOSX) |
| 382 // Calls CreateGattConnection & DisconnectGatt, then simulates disconnection. | 418 // Calls CreateGattConnection & DisconnectGatt, then simulates disconnection. |
| 383 TEST_F(BluetoothTest, | 419 TEST_F(BluetoothTest, |
| 384 BluetoothGattConnection_DisconnectGatt_SimulateDisconnect) { | 420 BluetoothGattConnection_DisconnectGatt_SimulateDisconnect) { |
| 421 if (!PlatformSupportsLowEnergy()) { |
| 422 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 423 return; |
| 424 } |
| 385 InitWithFakeAdapter(); | 425 InitWithFakeAdapter(); |
| 386 StartLowEnergyDiscoverySession(); | 426 StartLowEnergyDiscoverySession(); |
| 387 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 427 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 388 | 428 |
| 389 ResetEventCounts(); | 429 ResetEventCounts(); |
| 390 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), | 430 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), |
| 391 GetConnectErrorCallback(Call::EXPECTED)); | 431 GetConnectErrorCallback(Call::EXPECTED)); |
| 392 device->DisconnectGatt(); | 432 device->DisconnectGatt(); |
| 393 EXPECT_EQ(1, gatt_connection_attempts_); | 433 EXPECT_EQ(1, gatt_connection_attempts_); |
| 394 EXPECT_EQ(1, gatt_disconnection_attempts_); | 434 EXPECT_EQ(1, gatt_disconnection_attempts_); |
| 395 SimulateGattDisconnection(device); | 435 SimulateGattDisconnection(device); |
| 396 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); | 436 EXPECT_EQ(BluetoothDevice::ERROR_FAILED, last_connect_error_code_); |
| 397 for (BluetoothGattConnection* connection : gatt_connections_) | 437 for (BluetoothGattConnection* connection : gatt_connections_) |
| 398 EXPECT_FALSE(connection->IsConnected()); | 438 EXPECT_FALSE(connection->IsConnected()); |
| 399 } | 439 } |
| 400 #endif // defined(OS_ANDROID) | 440 #endif // defined(OS_ANDROID) || defined(OS_MACOSX) |
| 401 | 441 |
| 402 #if defined(OS_ANDROID) | 442 #if defined(OS_ANDROID) |
| 403 // Calls CreateGattConnection & DisconnectGatt, then checks that gatt services | 443 // Calls CreateGattConnection & DisconnectGatt, then checks that gatt services |
| 404 // have been cleaned up. | 444 // have been cleaned up. |
| 405 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_Cleanup) { | 445 TEST_F(BluetoothTest, BluetoothGattConnection_DisconnectGatt_Cleanup) { |
| 446 if (!PlatformSupportsLowEnergy()) { |
| 447 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 448 return; |
| 449 } |
| 406 InitWithFakeAdapter(); | 450 InitWithFakeAdapter(); |
| 407 StartLowEnergyDiscoverySession(); | 451 StartLowEnergyDiscoverySession(); |
| 408 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 452 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 409 EXPECT_FALSE(device->IsConnected()); | 453 EXPECT_FALSE(device->IsConnected()); |
| 410 | 454 |
| 411 // Connect to the device | 455 // Connect to the device |
| 412 ResetEventCounts(); | 456 ResetEventCounts(); |
| 413 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 457 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 414 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 458 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 415 TestBluetoothAdapterObserver observer(adapter_); | 459 TestBluetoothAdapterObserver observer(adapter_); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 445 EXPECT_TRUE(device->IsGattServicesDiscoveryComplete()); | 489 EXPECT_TRUE(device->IsGattServicesDiscoveryComplete()); |
| 446 EXPECT_EQ(1u, device->GetGattServices().size()); | 490 EXPECT_EQ(1u, device->GetGattServices().size()); |
| 447 EXPECT_EQ(2, observer.gatt_services_discovered_count()); | 491 EXPECT_EQ(2, observer.gatt_services_discovered_count()); |
| 448 } | 492 } |
| 449 #endif // defined(OS_ANDROID) | 493 #endif // defined(OS_ANDROID) |
| 450 | 494 |
| 451 #if defined(OS_ANDROID) | 495 #if defined(OS_ANDROID) |
| 452 // Calls CreateGattConnection, but simulate errors connecting. Also, verifies | 496 // Calls CreateGattConnection, but simulate errors connecting. Also, verifies |
| 453 // multiple errors should only invoke callbacks once. | 497 // multiple errors should only invoke callbacks once. |
| 454 TEST_F(BluetoothTest, BluetoothGattConnection_ErrorAfterConnection) { | 498 TEST_F(BluetoothTest, BluetoothGattConnection_ErrorAfterConnection) { |
| 499 if (!PlatformSupportsLowEnergy()) { |
| 500 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 501 return; |
| 502 } |
| 455 InitWithFakeAdapter(); | 503 InitWithFakeAdapter(); |
| 456 StartLowEnergyDiscoverySession(); | 504 StartLowEnergyDiscoverySession(); |
| 457 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 505 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 458 | 506 |
| 459 ResetEventCounts(); | 507 ResetEventCounts(); |
| 460 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), | 508 device->CreateGattConnection(GetGattConnectionCallback(Call::NOT_EXPECTED), |
| 461 GetConnectErrorCallback(Call::EXPECTED)); | 509 GetConnectErrorCallback(Call::EXPECTED)); |
| 462 EXPECT_EQ(1, gatt_connection_attempts_); | 510 EXPECT_EQ(1, gatt_connection_attempts_); |
| 463 SimulateGattConnectionError(device, BluetoothDevice::ERROR_AUTH_FAILED); | 511 SimulateGattConnectionError(device, BluetoothDevice::ERROR_AUTH_FAILED); |
| 464 SimulateGattConnectionError(device, BluetoothDevice::ERROR_FAILED); | 512 SimulateGattConnectionError(device, BluetoothDevice::ERROR_FAILED); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 std::string service_id2 = device->GetGattServices()[1]->GetIdentifier(); | 574 std::string service_id2 = device->GetGattServices()[1]->GetIdentifier(); |
| 527 std::string service_id3 = device->GetGattServices()[2]->GetIdentifier(); | 575 std::string service_id3 = device->GetGattServices()[2]->GetIdentifier(); |
| 528 EXPECT_TRUE(device->GetGattService(service_id1)); | 576 EXPECT_TRUE(device->GetGattService(service_id1)); |
| 529 EXPECT_TRUE(device->GetGattService(service_id2)); | 577 EXPECT_TRUE(device->GetGattService(service_id2)); |
| 530 EXPECT_TRUE(device->GetGattService(service_id3)); | 578 EXPECT_TRUE(device->GetGattService(service_id3)); |
| 531 } | 579 } |
| 532 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 580 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 533 | 581 |
| 534 #if defined(OS_ANDROID) | 582 #if defined(OS_ANDROID) |
| 535 TEST_F(BluetoothTest, GetGattServices_DiscoveryError) { | 583 TEST_F(BluetoothTest, GetGattServices_DiscoveryError) { |
| 584 if (!PlatformSupportsLowEnergy()) { |
| 585 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 586 return; |
| 587 } |
| 536 InitWithFakeAdapter(); | 588 InitWithFakeAdapter(); |
| 537 StartLowEnergyDiscoverySession(); | 589 StartLowEnergyDiscoverySession(); |
| 538 BluetoothDevice* device = DiscoverLowEnergyDevice(3); | 590 BluetoothDevice* device = DiscoverLowEnergyDevice(3); |
| 539 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), | 591 device->CreateGattConnection(GetGattConnectionCallback(Call::EXPECTED), |
| 540 GetConnectErrorCallback(Call::NOT_EXPECTED)); | 592 GetConnectErrorCallback(Call::NOT_EXPECTED)); |
| 541 ResetEventCounts(); | 593 ResetEventCounts(); |
| 542 SimulateGattConnection(device); | 594 SimulateGattConnection(device); |
| 543 EXPECT_EQ(1, gatt_discovery_attempts_); | 595 EXPECT_EQ(1, gatt_discovery_attempts_); |
| 544 | 596 |
| 545 SimulateGattServicesDiscoveryError(device); | 597 SimulateGattServicesDiscoveryError(device); |
| 546 EXPECT_EQ(0u, device->GetGattServices().size()); | 598 EXPECT_EQ(0u, device->GetGattServices().size()); |
| 547 } | 599 } |
| 548 #endif // defined(OS_ANDROID) | 600 #endif // defined(OS_ANDROID) |
| 549 | 601 |
| 550 } // namespace device | 602 } // namespace device |
| OLD | NEW |