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