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

Side by Side Diff: device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc

Issue 1898643002: Refactor device::BluetoothGattXXX classes to split into remote/local. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 2014 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/memory/scoped_vector.h" 11 #include "base/memory/scoped_vector.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "dbus/object_path.h" 14 #include "dbus/object_path.h"
15 #include "device/bluetooth/bluetooth_adapter.h" 15 #include "device/bluetooth/bluetooth_adapter.h"
16 #include "device/bluetooth/bluetooth_adapter_factory.h" 16 #include "device/bluetooth/bluetooth_adapter_factory.h"
17 #include "device/bluetooth/bluetooth_device.h" 17 #include "device/bluetooth/bluetooth_device.h"
18 #include "device/bluetooth/bluetooth_gatt_characteristic.h"
19 #include "device/bluetooth/bluetooth_gatt_connection.h" 18 #include "device/bluetooth/bluetooth_gatt_connection.h"
20 #include "device/bluetooth/bluetooth_gatt_descriptor.h"
21 #include "device/bluetooth/bluetooth_gatt_notify_session.h" 19 #include "device/bluetooth/bluetooth_gatt_notify_session.h"
22 #include "device/bluetooth/bluetooth_gatt_service.h" 20 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
21 #include "device/bluetooth/bluetooth_remote_gatt_descriptor.h"
22 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
23 #include "device/bluetooth/bluetooth_uuid.h" 23 #include "device/bluetooth/bluetooth_uuid.h"
24 #include "device/bluetooth/dbus/bluez_dbus_manager.h" 24 #include "device/bluetooth/dbus/bluez_dbus_manager.h"
25 #include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" 25 #include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h"
26 #include "device/bluetooth/dbus/fake_bluetooth_agent_manager_client.h" 26 #include "device/bluetooth/dbus/fake_bluetooth_agent_manager_client.h"
27 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h" 27 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h"
28 #include "device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.h" 28 #include "device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.h"
29 #include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.h" 29 #include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.h"
30 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" 30 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h"
31 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h" 31 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h"
32 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" 32 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h"
33 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
34 34
35 using device::BluetoothAdapter; 35 using device::BluetoothAdapter;
36 using device::BluetoothDevice; 36 using device::BluetoothDevice;
37 using device::BluetoothGattCharacteristic; 37 using device::BluetoothRemoteGattCharacteristic;
38 using device::BluetoothGattConnection; 38 using device::BluetoothGattConnection;
39 using device::BluetoothGattDescriptor; 39 using device::BluetoothRemoteGattDescriptor;
40 using device::BluetoothGattService; 40 using device::BluetoothRemoteGattService;
41 using device::BluetoothGattNotifySession; 41 using device::BluetoothGattNotifySession;
42 using device::BluetoothUUID; 42 using device::BluetoothUUID;
43 using device::TestBluetoothAdapterObserver; 43 using device::TestBluetoothAdapterObserver;
44 44
45 namespace bluez { 45 namespace bluez {
46 46
47 namespace { 47 namespace {
48 48
49 const BluetoothUUID kHeartRateMeasurementUUID( 49 const BluetoothUUID kHeartRateMeasurementUUID(
50 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateMeasurementUUID); 50 bluez::FakeBluetoothGattCharacteristicClient::kHeartRateMeasurementUUID);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 gatt_conn_ = std::move(conn); 149 gatt_conn_ = std::move(conn);
150 } 150 }
151 151
152 void NotifySessionCallback( 152 void NotifySessionCallback(
153 std::unique_ptr<BluetoothGattNotifySession> session) { 153 std::unique_ptr<BluetoothGattNotifySession> session) {
154 ++success_callback_count_; 154 ++success_callback_count_;
155 update_sessions_.push_back(session.release()); 155 update_sessions_.push_back(session.release());
156 QuitMessageLoop(); 156 QuitMessageLoop();
157 } 157 }
158 158
159 void ServiceErrorCallback(BluetoothGattService::GattErrorCode err) { 159 void ServiceErrorCallback(BluetoothRemoteGattService::GattErrorCode err) {
160 ++error_callback_count_; 160 ++error_callback_count_;
161 last_service_error_ = err; 161 last_service_error_ = err;
162 } 162 }
163 163
164 void ErrorCallback() { ++error_callback_count_; } 164 void ErrorCallback() { ++error_callback_count_; }
165 165
166 void DBusErrorCallback(const std::string& error_name, 166 void DBusErrorCallback(const std::string& error_name,
167 const std::string& error_message) { 167 const std::string& error_message) {
168 ++error_callback_count_; 168 ++error_callback_count_;
169 } 169 }
(...skipping 17 matching lines...) Expand all
187 fake_bluetooth_gatt_characteristic_client_; 187 fake_bluetooth_gatt_characteristic_client_;
188 bluez::FakeBluetoothGattDescriptorClient* 188 bluez::FakeBluetoothGattDescriptorClient*
189 fake_bluetooth_gatt_descriptor_client_; 189 fake_bluetooth_gatt_descriptor_client_;
190 std::unique_ptr<device::BluetoothGattConnection> gatt_conn_; 190 std::unique_ptr<device::BluetoothGattConnection> gatt_conn_;
191 ScopedVector<BluetoothGattNotifySession> update_sessions_; 191 ScopedVector<BluetoothGattNotifySession> update_sessions_;
192 scoped_refptr<BluetoothAdapter> adapter_; 192 scoped_refptr<BluetoothAdapter> adapter_;
193 193
194 int success_callback_count_; 194 int success_callback_count_;
195 int error_callback_count_; 195 int error_callback_count_;
196 std::vector<uint8_t> last_read_value_; 196 std::vector<uint8_t> last_read_value_;
197 BluetoothGattService::GattErrorCode last_service_error_; 197 BluetoothRemoteGattService::GattErrorCode last_service_error_;
198 }; 198 };
199 199
200 TEST_F(BluetoothGattBlueZTest, GattConnection) { 200 TEST_F(BluetoothGattBlueZTest, GattConnection) {
201 fake_bluetooth_device_client_->CreateDevice( 201 fake_bluetooth_device_client_->CreateDevice(
202 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 202 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
203 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 203 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
204 BluetoothDevice* device = 204 BluetoothDevice* device =
205 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); 205 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
206 ASSERT_TRUE(device); 206 ASSERT_TRUE(device);
207 ASSERT_FALSE(device->IsConnected()); 207 ASSERT_FALSE(device->IsConnected());
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 290 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
291 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 291 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
292 EXPECT_EQ(1, observer.gatt_service_added_count()); 292 EXPECT_EQ(1, observer.gatt_service_added_count());
293 EXPECT_EQ(0, observer.gatt_service_removed_count()); 293 EXPECT_EQ(0, observer.gatt_service_removed_count());
294 EXPECT_FALSE(observer.last_gatt_service_id().empty()); 294 EXPECT_FALSE(observer.last_gatt_service_id().empty());
295 EXPECT_EQ(1U, device->GetGattServices().size()); 295 EXPECT_EQ(1U, device->GetGattServices().size());
296 EXPECT_EQ(BluetoothUUID( 296 EXPECT_EQ(BluetoothUUID(
297 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID), 297 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
298 observer.last_gatt_service_uuid()); 298 observer.last_gatt_service_uuid());
299 299
300 BluetoothGattService* service = 300 BluetoothRemoteGattService* service =
301 device->GetGattService(observer.last_gatt_service_id()); 301 device->GetGattService(observer.last_gatt_service_id());
302 EXPECT_FALSE(service->IsLocal());
303 EXPECT_TRUE(service->IsPrimary()); 302 EXPECT_TRUE(service->IsPrimary());
304 EXPECT_EQ(service, device->GetGattServices()[0]); 303 EXPECT_EQ(service, device->GetGattServices()[0]);
305 EXPECT_EQ(service, device->GetGattService(service->GetIdentifier())); 304 EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
306 305
307 EXPECT_EQ(observer.last_gatt_service_uuid(), service->GetUUID()); 306 EXPECT_EQ(observer.last_gatt_service_uuid(), service->GetUUID());
308 307
309 // Hide the service. 308 // Hide the service.
310 observer.last_gatt_service_uuid() = BluetoothUUID(); 309 observer.last_gatt_service_uuid() = BluetoothUUID();
311 observer.last_gatt_service_id().clear(); 310 observer.last_gatt_service_id().clear();
312 fake_bluetooth_gatt_service_client_->HideHeartRateService(); 311 fake_bluetooth_gatt_service_client_->HideHeartRateService();
(...skipping 18 matching lines...) Expand all
331 EXPECT_FALSE(observer.last_gatt_service_id().empty()); 330 EXPECT_FALSE(observer.last_gatt_service_id().empty());
332 EXPECT_EQ(1U, device->GetGattServices().size()); 331 EXPECT_EQ(1U, device->GetGattServices().size());
333 EXPECT_EQ(BluetoothUUID( 332 EXPECT_EQ(BluetoothUUID(
334 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID), 333 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
335 observer.last_gatt_service_uuid()); 334 observer.last_gatt_service_uuid());
336 335
337 // The object |service| points to should have been deallocated. |device| 336 // The object |service| points to should have been deallocated. |device|
338 // should contain a brand new instance. 337 // should contain a brand new instance.
339 service = device->GetGattService(observer.last_gatt_service_id()); 338 service = device->GetGattService(observer.last_gatt_service_id());
340 EXPECT_EQ(service, device->GetGattServices()[0]); 339 EXPECT_EQ(service, device->GetGattServices()[0]);
341 EXPECT_FALSE(service->IsLocal());
342 EXPECT_TRUE(service->IsPrimary()); 340 EXPECT_TRUE(service->IsPrimary());
343 341
344 EXPECT_EQ(observer.last_gatt_service_uuid(), service->GetUUID()); 342 EXPECT_EQ(observer.last_gatt_service_uuid(), service->GetUUID());
345 343
346 // Remove the device. The observer should be notified of the removed service. 344 // Remove the device. The observer should be notified of the removed service.
347 // |device| becomes invalid after this. 345 // |device| becomes invalid after this.
348 observer.last_gatt_service_uuid() = BluetoothUUID(); 346 observer.last_gatt_service_uuid() = BluetoothUUID();
349 observer.last_gatt_service_id().clear(); 347 observer.last_gatt_service_id().clear();
350 fake_bluetooth_device_client_->RemoveDevice( 348 fake_bluetooth_device_client_->RemoveDevice(
351 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 349 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 ASSERT_TRUE(device); 430 ASSERT_TRUE(device);
433 431
434 TestBluetoothAdapterObserver observer(adapter_); 432 TestBluetoothAdapterObserver observer(adapter_);
435 433
436 // Expose the fake Heart Rate service. This will asynchronously expose 434 // Expose the fake Heart Rate service. This will asynchronously expose
437 // characteristics. 435 // characteristics.
438 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 436 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
439 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 437 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
440 ASSERT_EQ(1, observer.gatt_service_added_count()); 438 ASSERT_EQ(1, observer.gatt_service_added_count());
441 439
442 BluetoothGattService* service = 440 BluetoothRemoteGattService* service =
443 device->GetGattService(observer.last_gatt_service_id()); 441 device->GetGattService(observer.last_gatt_service_id());
444 442
445 EXPECT_EQ(0, observer.gatt_service_changed_count()); 443 EXPECT_EQ(0, observer.gatt_service_changed_count());
446 EXPECT_EQ(0, observer.gatt_discovery_complete_count()); 444 EXPECT_EQ(0, observer.gatt_discovery_complete_count());
447 EXPECT_EQ(0, observer.gatt_characteristic_added_count()); 445 EXPECT_EQ(0, observer.gatt_characteristic_added_count());
448 EXPECT_EQ(0, observer.gatt_characteristic_removed_count()); 446 EXPECT_EQ(0, observer.gatt_characteristic_removed_count());
449 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 447 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
450 EXPECT_TRUE(service->GetCharacteristics().empty()); 448 EXPECT_TRUE(service->GetCharacteristics().empty());
451 449
452 // Run the message loop so that the characteristics appear. 450 // Run the message loop so that the characteristics appear.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 ASSERT_TRUE(device); 498 ASSERT_TRUE(device);
501 499
502 TestBluetoothAdapterObserver observer(adapter_); 500 TestBluetoothAdapterObserver observer(adapter_);
503 501
504 // Expose the fake Heart Rate service. This will asynchronously expose 502 // Expose the fake Heart Rate service. This will asynchronously expose
505 // characteristics. 503 // characteristics.
506 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 504 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
507 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 505 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
508 ASSERT_EQ(1, observer.gatt_service_added_count()); 506 ASSERT_EQ(1, observer.gatt_service_added_count());
509 507
510 BluetoothGattService* service = 508 BluetoothRemoteGattService* service =
511 device->GetGattService(observer.last_gatt_service_id()); 509 device->GetGattService(observer.last_gatt_service_id());
512 510
513 EXPECT_EQ(0, observer.gatt_service_changed_count()); 511 EXPECT_EQ(0, observer.gatt_service_changed_count());
514 EXPECT_EQ(0, observer.gatt_descriptor_added_count()); 512 EXPECT_EQ(0, observer.gatt_descriptor_added_count());
515 EXPECT_EQ(0, observer.gatt_descriptor_removed_count()); 513 EXPECT_EQ(0, observer.gatt_descriptor_removed_count());
516 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count()); 514 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count());
517 515
518 EXPECT_TRUE(service->GetCharacteristics().empty()); 516 EXPECT_TRUE(service->GetCharacteristics().empty());
519 517
520 // Run the message loop so that the characteristics appear. 518 // Run the message loop so that the characteristics appear.
521 base::MessageLoop::current()->Run(); 519 base::MessageLoop::current()->Run();
522 EXPECT_EQ(0, observer.gatt_service_changed_count()); 520 EXPECT_EQ(0, observer.gatt_service_changed_count());
523 521
524 // Only the Heart Rate Measurement characteristic has a descriptor. 522 // Only the Heart Rate Measurement characteristic has a descriptor.
525 EXPECT_EQ(1, observer.gatt_descriptor_added_count()); 523 EXPECT_EQ(1, observer.gatt_descriptor_added_count());
526 EXPECT_EQ(0, observer.gatt_descriptor_removed_count()); 524 EXPECT_EQ(0, observer.gatt_descriptor_removed_count());
527 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count()); 525 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count());
528 526
529 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 527 BluetoothRemoteGattCharacteristic* characteristic =
530 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 528 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
531 .value()); 529 ->GetBodySensorLocationPath()
530 .value());
532 ASSERT_TRUE(characteristic); 531 ASSERT_TRUE(characteristic);
533 EXPECT_TRUE(characteristic->GetDescriptors().empty()); 532 EXPECT_TRUE(characteristic->GetDescriptors().empty());
534 533
535 characteristic = service->GetCharacteristic( 534 characteristic = service->GetCharacteristic(
536 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath() 535 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath()
537 .value()); 536 .value());
538 ASSERT_TRUE(characteristic); 537 ASSERT_TRUE(characteristic);
539 EXPECT_TRUE(characteristic->GetDescriptors().empty()); 538 EXPECT_TRUE(characteristic->GetDescriptors().empty());
540 539
541 characteristic = service->GetCharacteristic( 540 characteristic = service->GetCharacteristic(
542 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 541 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath()
543 .value()); 542 .value());
544 ASSERT_TRUE(characteristic); 543 ASSERT_TRUE(characteristic);
545 EXPECT_EQ(1U, characteristic->GetDescriptors().size()); 544 EXPECT_EQ(1U, characteristic->GetDescriptors().size());
546 545
547 BluetoothGattDescriptor* descriptor = characteristic->GetDescriptors()[0]; 546 BluetoothRemoteGattDescriptor* descriptor =
548 EXPECT_FALSE(descriptor->IsLocal()); 547 characteristic->GetDescriptors()[0];
549 EXPECT_EQ(BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid(), 548 EXPECT_EQ(
550 descriptor->GetUUID()); 549 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
550 descriptor->GetUUID());
551 EXPECT_EQ(descriptor->GetUUID(), observer.last_gatt_descriptor_uuid()); 551 EXPECT_EQ(descriptor->GetUUID(), observer.last_gatt_descriptor_uuid());
552 EXPECT_EQ(descriptor->GetIdentifier(), observer.last_gatt_descriptor_id()); 552 EXPECT_EQ(descriptor->GetIdentifier(), observer.last_gatt_descriptor_id());
553 553
554 // Hide the descriptor. 554 // Hide the descriptor.
555 fake_bluetooth_gatt_descriptor_client_->HideDescriptor( 555 fake_bluetooth_gatt_descriptor_client_->HideDescriptor(
556 dbus::ObjectPath(descriptor->GetIdentifier())); 556 dbus::ObjectPath(descriptor->GetIdentifier()));
557 EXPECT_TRUE(characteristic->GetDescriptors().empty()); 557 EXPECT_TRUE(characteristic->GetDescriptors().empty());
558 EXPECT_EQ(0, observer.gatt_service_changed_count()); 558 EXPECT_EQ(0, observer.gatt_service_changed_count());
559 EXPECT_EQ(1, observer.gatt_descriptor_added_count()); 559 EXPECT_EQ(1, observer.gatt_descriptor_added_count());
560 EXPECT_EQ(1, observer.gatt_descriptor_removed_count()); 560 EXPECT_EQ(1, observer.gatt_descriptor_removed_count());
561 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count()); 561 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count());
562 562
563 // Expose the descriptor again. 563 // Expose the descriptor again.
564 observer.last_gatt_descriptor_id().clear(); 564 observer.last_gatt_descriptor_id().clear();
565 observer.last_gatt_descriptor_uuid() = BluetoothUUID(); 565 observer.last_gatt_descriptor_uuid() = BluetoothUUID();
566 fake_bluetooth_gatt_descriptor_client_->ExposeDescriptor( 566 fake_bluetooth_gatt_descriptor_client_->ExposeDescriptor(
567 dbus::ObjectPath(characteristic->GetIdentifier()), 567 dbus::ObjectPath(characteristic->GetIdentifier()),
568 bluez::FakeBluetoothGattDescriptorClient:: 568 bluez::FakeBluetoothGattDescriptorClient::
569 kClientCharacteristicConfigurationUUID); 569 kClientCharacteristicConfigurationUUID);
570 EXPECT_EQ(0, observer.gatt_service_changed_count()); 570 EXPECT_EQ(0, observer.gatt_service_changed_count());
571 EXPECT_EQ(1U, characteristic->GetDescriptors().size()); 571 EXPECT_EQ(1U, characteristic->GetDescriptors().size());
572 EXPECT_EQ(2, observer.gatt_descriptor_added_count()); 572 EXPECT_EQ(2, observer.gatt_descriptor_added_count());
573 EXPECT_EQ(1, observer.gatt_descriptor_removed_count()); 573 EXPECT_EQ(1, observer.gatt_descriptor_removed_count());
574 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count()); 574 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count());
575 575
576 descriptor = characteristic->GetDescriptors()[0]; 576 descriptor = characteristic->GetDescriptors()[0];
577 EXPECT_FALSE(descriptor->IsLocal()); 577 EXPECT_EQ(
578 EXPECT_EQ(BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid(), 578 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
579 descriptor->GetUUID()); 579 descriptor->GetUUID());
580 EXPECT_EQ(descriptor->GetUUID(), observer.last_gatt_descriptor_uuid()); 580 EXPECT_EQ(descriptor->GetUUID(), observer.last_gatt_descriptor_uuid());
581 EXPECT_EQ(descriptor->GetIdentifier(), observer.last_gatt_descriptor_id()); 581 EXPECT_EQ(descriptor->GetIdentifier(), observer.last_gatt_descriptor_id());
582 } 582 }
583 583
584 TEST_F(BluetoothGattBlueZTest, AdapterAddedAfterGattService) { 584 TEST_F(BluetoothGattBlueZTest, AdapterAddedAfterGattService) {
585 // This unit test tests that all remote GATT objects are created for D-Bus 585 // This unit test tests that all remote GATT objects are created for D-Bus
586 // objects that were already exposed. 586 // objects that were already exposed.
587 adapter_ = NULL; 587 adapter_ = NULL;
588 ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting()); 588 ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
589 589
590 // Create the fake D-Bus objects. 590 // Create the fake D-Bus objects.
591 fake_bluetooth_device_client_->CreateDevice( 591 fake_bluetooth_device_client_->CreateDevice(
592 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 592 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
593 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 593 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
594 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 594 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
595 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 595 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
596 while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible()) 596 while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
597 base::RunLoop().RunUntilIdle(); 597 base::RunLoop().RunUntilIdle();
598 ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible()); 598 ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
599 ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible()); 599 ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
600 600
601 // Create the adapter. This should create all the GATT objects. 601 // Create the adapter. This should create all the GATT objects.
602 GetAdapter(); 602 GetAdapter();
603 BluetoothDevice* device = 603 BluetoothDevice* device =
604 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); 604 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
605 ASSERT_TRUE(device); 605 ASSERT_TRUE(device);
606 EXPECT_EQ(1U, device->GetGattServices().size()); 606 EXPECT_EQ(1U, device->GetGattServices().size());
607 607
608 BluetoothGattService* service = device->GetGattServices()[0]; 608 BluetoothRemoteGattService* service = device->GetGattServices()[0];
609 ASSERT_TRUE(service); 609 ASSERT_TRUE(service);
610 EXPECT_FALSE(service->IsLocal());
611 EXPECT_TRUE(service->IsPrimary()); 610 EXPECT_TRUE(service->IsPrimary());
612 EXPECT_EQ(BluetoothUUID( 611 EXPECT_EQ(BluetoothUUID(
613 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID), 612 bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
614 service->GetUUID()); 613 service->GetUUID());
615 EXPECT_EQ(service, device->GetGattServices()[0]); 614 EXPECT_EQ(service, device->GetGattServices()[0]);
616 EXPECT_EQ(service, device->GetGattService(service->GetIdentifier())); 615 EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
617 EXPECT_FALSE(service->IsLocal());
618 EXPECT_EQ(3U, service->GetCharacteristics().size()); 616 EXPECT_EQ(3U, service->GetCharacteristics().size());
619 617
620 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 618 BluetoothRemoteGattCharacteristic* characteristic =
621 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 619 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
622 .value()); 620 ->GetBodySensorLocationPath()
621 .value());
623 ASSERT_TRUE(characteristic); 622 ASSERT_TRUE(characteristic);
624 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: 623 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
625 kBodySensorLocationUUID), 624 kBodySensorLocationUUID),
626 characteristic->GetUUID()); 625 characteristic->GetUUID());
627 EXPECT_FALSE(characteristic->IsLocal());
628 EXPECT_TRUE(characteristic->GetDescriptors().empty()); 626 EXPECT_TRUE(characteristic->GetDescriptors().empty());
629 627
630 characteristic = service->GetCharacteristic( 628 characteristic = service->GetCharacteristic(
631 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath() 629 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath()
632 .value()); 630 .value());
633 ASSERT_TRUE(characteristic); 631 ASSERT_TRUE(characteristic);
634 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: 632 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
635 kHeartRateControlPointUUID), 633 kHeartRateControlPointUUID),
636 characteristic->GetUUID()); 634 characteristic->GetUUID());
637 EXPECT_FALSE(characteristic->IsLocal());
638 EXPECT_TRUE(characteristic->GetDescriptors().empty()); 635 EXPECT_TRUE(characteristic->GetDescriptors().empty());
639 636
640 characteristic = service->GetCharacteristic( 637 characteristic = service->GetCharacteristic(
641 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 638 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath()
642 .value()); 639 .value());
643 ASSERT_TRUE(characteristic); 640 ASSERT_TRUE(characteristic);
644 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: 641 EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
645 kHeartRateMeasurementUUID), 642 kHeartRateMeasurementUUID),
646 characteristic->GetUUID()); 643 characteristic->GetUUID());
647 EXPECT_FALSE(characteristic->IsLocal());
648 EXPECT_EQ(1U, characteristic->GetDescriptors().size()); 644 EXPECT_EQ(1U, characteristic->GetDescriptors().size());
649 645
650 BluetoothGattDescriptor* descriptor = characteristic->GetDescriptors()[0]; 646 BluetoothRemoteGattDescriptor* descriptor =
647 characteristic->GetDescriptors()[0];
651 ASSERT_TRUE(descriptor); 648 ASSERT_TRUE(descriptor);
652 EXPECT_EQ(BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid(), 649 EXPECT_EQ(
653 descriptor->GetUUID()); 650 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
654 EXPECT_FALSE(descriptor->IsLocal()); 651 descriptor->GetUUID());
655 } 652 }
656 653
657 TEST_F(BluetoothGattBlueZTest, GattCharacteristicValue) { 654 TEST_F(BluetoothGattBlueZTest, GattCharacteristicValue) {
658 fake_bluetooth_device_client_->CreateDevice( 655 fake_bluetooth_device_client_->CreateDevice(
659 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 656 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
660 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 657 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
661 BluetoothDevice* device = 658 BluetoothDevice* device =
662 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); 659 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
663 ASSERT_TRUE(device); 660 ASSERT_TRUE(device);
664 661
665 TestBluetoothAdapterObserver observer(adapter_); 662 TestBluetoothAdapterObserver observer(adapter_);
666 663
667 // Expose the fake Heart Rate service. This will asynchronously expose 664 // Expose the fake Heart Rate service. This will asynchronously expose
668 // characteristics. 665 // characteristics.
669 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 666 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
670 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 667 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
671 ASSERT_EQ(1, observer.gatt_service_added_count()); 668 ASSERT_EQ(1, observer.gatt_service_added_count());
672 669
673 BluetoothGattService* service = 670 BluetoothRemoteGattService* service =
674 device->GetGattService(observer.last_gatt_service_id()); 671 device->GetGattService(observer.last_gatt_service_id());
675 672
676 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 673 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
677 674
678 // Run the message loop so that the characteristics appear. 675 // Run the message loop so that the characteristics appear.
679 base::MessageLoop::current()->Run(); 676 base::MessageLoop::current()->Run();
680 677
681 // Issue write request to non-writable characteristics. 678 // Issue write request to non-writable characteristics.
682 observer.Reset(); 679 observer.Reset();
683 680
684 std::vector<uint8_t> write_value; 681 std::vector<uint8_t> write_value;
685 write_value.push_back(0x01); 682 write_value.push_back(0x01);
686 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 683 BluetoothRemoteGattCharacteristic* characteristic =
687 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 684 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
688 .value()); 685 ->GetHeartRateMeasurementPath()
686 .value());
689 ASSERT_TRUE(characteristic); 687 ASSERT_TRUE(characteristic);
690 EXPECT_FALSE(characteristic->IsNotifying()); 688 EXPECT_FALSE(characteristic->IsNotifying());
691 EXPECT_EQ( 689 EXPECT_EQ(
692 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 690 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath()
693 .value(), 691 .value(),
694 characteristic->GetIdentifier()); 692 characteristic->GetIdentifier());
695 EXPECT_EQ(kHeartRateMeasurementUUID, characteristic->GetUUID()); 693 EXPECT_EQ(kHeartRateMeasurementUUID, characteristic->GetUUID());
696 characteristic->WriteRemoteCharacteristic( 694 characteristic->WriteRemoteCharacteristic(
697 write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, 695 write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback,
698 base::Unretained(this)), 696 base::Unretained(this)),
699 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 697 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
700 base::Unretained(this))); 698 base::Unretained(this)));
701 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty()); 699 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty());
702 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid()); 700 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid());
703 EXPECT_EQ(0, success_callback_count_); 701 EXPECT_EQ(0, success_callback_count_);
704 EXPECT_EQ(1, error_callback_count_); 702 EXPECT_EQ(1, error_callback_count_);
705 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_SUPPORTED, 703 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_SUPPORTED,
706 last_service_error_); 704 last_service_error_);
707 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 705 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
708 706
709 characteristic = service->GetCharacteristic( 707 characteristic = service->GetCharacteristic(
710 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 708 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath()
711 .value()); 709 .value());
712 ASSERT_TRUE(characteristic); 710 ASSERT_TRUE(characteristic);
713 EXPECT_EQ( 711 EXPECT_EQ(
714 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 712 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath()
715 .value(), 713 .value(),
716 characteristic->GetIdentifier()); 714 characteristic->GetIdentifier());
717 EXPECT_EQ(kBodySensorLocationUUID, characteristic->GetUUID()); 715 EXPECT_EQ(kBodySensorLocationUUID, characteristic->GetUUID());
718 characteristic->WriteRemoteCharacteristic( 716 characteristic->WriteRemoteCharacteristic(
719 write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, 717 write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback,
720 base::Unretained(this)), 718 base::Unretained(this)),
721 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 719 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
722 base::Unretained(this))); 720 base::Unretained(this)));
723 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty()); 721 EXPECT_TRUE(observer.last_gatt_characteristic_id().empty());
724 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid()); 722 EXPECT_FALSE(observer.last_gatt_characteristic_uuid().IsValid());
725 EXPECT_EQ(0, success_callback_count_); 723 EXPECT_EQ(0, success_callback_count_);
726 EXPECT_EQ(2, error_callback_count_); 724 EXPECT_EQ(2, error_callback_count_);
727 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_PERMITTED, 725 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_PERMITTED,
728 last_service_error_); 726 last_service_error_);
729 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 727 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
730 728
731 // Issue write request to writable characteristic. The "Body Sensor Location" 729 // Issue write request to writable characteristic. The "Body Sensor Location"
732 // characteristic does not send notifications and WriteValue does not result 730 // characteristic does not send notifications and WriteValue does not result
733 // in a CharacteristicValueChanged event, thus no such event should be 731 // in a CharacteristicValueChanged event, thus no such event should be
734 // received. 732 // received.
735 characteristic = service->GetCharacteristic( 733 characteristic = service->GetCharacteristic(
736 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath() 734 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath()
737 .value()); 735 .value());
(...skipping 20 matching lines...) Expand all
758 std::vector<uint8_t> invalid_write_length; 756 std::vector<uint8_t> invalid_write_length;
759 invalid_write_length.push_back(0x01); 757 invalid_write_length.push_back(0x01);
760 invalid_write_length.push_back(0x00); 758 invalid_write_length.push_back(0x00);
761 characteristic->WriteRemoteCharacteristic( 759 characteristic->WriteRemoteCharacteristic(
762 invalid_write_length, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, 760 invalid_write_length, base::Bind(&BluetoothGattBlueZTest::SuccessCallback,
763 base::Unretained(this)), 761 base::Unretained(this)),
764 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 762 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
765 base::Unretained(this))); 763 base::Unretained(this)));
766 EXPECT_EQ(1, success_callback_count_); 764 EXPECT_EQ(1, success_callback_count_);
767 EXPECT_EQ(3, error_callback_count_); 765 EXPECT_EQ(3, error_callback_count_);
768 EXPECT_EQ(BluetoothGattService::GATT_ERROR_INVALID_LENGTH, 766 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_INVALID_LENGTH,
769 last_service_error_); 767 last_service_error_);
770 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 768 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
771 769
772 std::vector<uint8_t> invalid_write_value; 770 std::vector<uint8_t> invalid_write_value;
773 invalid_write_value.push_back(0x02); 771 invalid_write_value.push_back(0x02);
774 characteristic->WriteRemoteCharacteristic( 772 characteristic->WriteRemoteCharacteristic(
775 invalid_write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, 773 invalid_write_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback,
776 base::Unretained(this)), 774 base::Unretained(this)),
777 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 775 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
778 base::Unretained(this))); 776 base::Unretained(this)));
779 EXPECT_EQ(1, success_callback_count_); 777 EXPECT_EQ(1, success_callback_count_);
780 EXPECT_EQ(4, error_callback_count_); 778 EXPECT_EQ(4, error_callback_count_);
781 EXPECT_EQ(BluetoothGattService::GATT_ERROR_FAILED, last_service_error_); 779 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, last_service_error_);
782 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 780 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
783 781
784 // Issue a read request. A successful read results in a 782 // Issue a read request. A successful read results in a
785 // CharacteristicValueChanged notification. 783 // CharacteristicValueChanged notification.
786 characteristic = service->GetCharacteristic( 784 characteristic = service->GetCharacteristic(
787 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 785 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath()
788 .value()); 786 .value());
789 ASSERT_TRUE(characteristic); 787 ASSERT_TRUE(characteristic);
790 EXPECT_EQ( 788 EXPECT_EQ(
791 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 789 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath()
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 EXPECT_EQ(4, error_callback_count_); 823 EXPECT_EQ(4, error_callback_count_);
826 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); 824 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count());
827 825
828 // Next read should error because IN_PROGRESS 826 // Next read should error because IN_PROGRESS
829 characteristic->ReadRemoteCharacteristic( 827 characteristic->ReadRemoteCharacteristic(
830 base::Bind(&BluetoothGattBlueZTest::ValueCallback, 828 base::Bind(&BluetoothGattBlueZTest::ValueCallback,
831 base::Unretained(this)), 829 base::Unretained(this)),
832 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 830 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
833 base::Unretained(this))); 831 base::Unretained(this)));
834 EXPECT_EQ(5, error_callback_count_); 832 EXPECT_EQ(5, error_callback_count_);
835 EXPECT_EQ(BluetoothGattService::GATT_ERROR_IN_PROGRESS, last_service_error_); 833 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_IN_PROGRESS,
834 last_service_error_);
836 835
837 // But previous call finished. 836 // But previous call finished.
838 EXPECT_EQ(3, success_callback_count_); 837 EXPECT_EQ(3, success_callback_count_);
839 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); 838 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count());
840 EXPECT_TRUE(ValuesEqual(characteristic->GetValue(), last_read_value_)); 839 EXPECT_TRUE(ValuesEqual(characteristic->GetValue(), last_read_value_));
841 fake_bluetooth_gatt_characteristic_client_->SetExtraProcessing(0); 840 fake_bluetooth_gatt_characteristic_client_->SetExtraProcessing(0);
842 841
843 // Test unauthorized actions. 842 // Test unauthorized actions.
844 fake_bluetooth_gatt_characteristic_client_->SetAuthorized(false); 843 fake_bluetooth_gatt_characteristic_client_->SetAuthorized(false);
845 characteristic->ReadRemoteCharacteristic( 844 characteristic->ReadRemoteCharacteristic(
846 base::Bind(&BluetoothGattBlueZTest::ValueCallback, 845 base::Bind(&BluetoothGattBlueZTest::ValueCallback,
847 base::Unretained(this)), 846 base::Unretained(this)),
848 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 847 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
849 base::Unretained(this))); 848 base::Unretained(this)));
850 EXPECT_EQ(3, success_callback_count_); 849 EXPECT_EQ(3, success_callback_count_);
851 EXPECT_EQ(6, error_callback_count_); 850 EXPECT_EQ(6, error_callback_count_);
852 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_AUTHORIZED, 851 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_AUTHORIZED,
853 last_service_error_); 852 last_service_error_);
854 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); 853 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count());
855 fake_bluetooth_gatt_characteristic_client_->SetAuthorized(true); 854 fake_bluetooth_gatt_characteristic_client_->SetAuthorized(true);
856 855
857 // Test unauthenticated / needs login. 856 // Test unauthenticated / needs login.
858 fake_bluetooth_gatt_characteristic_client_->SetAuthenticated(false); 857 fake_bluetooth_gatt_characteristic_client_->SetAuthenticated(false);
859 characteristic->ReadRemoteCharacteristic( 858 characteristic->ReadRemoteCharacteristic(
860 base::Bind(&BluetoothGattBlueZTest::ValueCallback, 859 base::Bind(&BluetoothGattBlueZTest::ValueCallback,
861 base::Unretained(this)), 860 base::Unretained(this)),
862 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 861 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
863 base::Unretained(this))); 862 base::Unretained(this)));
864 EXPECT_EQ(3, success_callback_count_); 863 EXPECT_EQ(3, success_callback_count_);
865 EXPECT_EQ(7, error_callback_count_); 864 EXPECT_EQ(7, error_callback_count_);
866 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_PAIRED, last_service_error_); 865 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_PAIRED,
866 last_service_error_);
867 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count()); 867 EXPECT_EQ(2, observer.gatt_characteristic_value_changed_count());
868 fake_bluetooth_gatt_characteristic_client_->SetAuthenticated(true); 868 fake_bluetooth_gatt_characteristic_client_->SetAuthenticated(true);
869 } 869 }
870 870
871 TEST_F(BluetoothGattBlueZTest, GattCharacteristicProperties) { 871 TEST_F(BluetoothGattBlueZTest, GattCharacteristicProperties) {
872 fake_bluetooth_device_client_->CreateDevice( 872 fake_bluetooth_device_client_->CreateDevice(
873 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 873 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
874 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 874 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
875 BluetoothDevice* device = 875 BluetoothDevice* device =
876 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); 876 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
877 ASSERT_TRUE(device); 877 ASSERT_TRUE(device);
878 878
879 TestBluetoothAdapterObserver observer(adapter_); 879 TestBluetoothAdapterObserver observer(adapter_);
880 880
881 // Expose the fake Heart Rate service. This will asynchronously expose 881 // Expose the fake Heart Rate service. This will asynchronously expose
882 // characteristics. 882 // characteristics.
883 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 883 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
884 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 884 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
885 885
886 BluetoothGattService* service = 886 BluetoothRemoteGattService* service =
887 device->GetGattService(observer.last_gatt_service_id()); 887 device->GetGattService(observer.last_gatt_service_id());
888 888
889 EXPECT_TRUE(service->GetCharacteristics().empty()); 889 EXPECT_TRUE(service->GetCharacteristics().empty());
890 890
891 // Run the message loop so that the characteristics appear. 891 // Run the message loop so that the characteristics appear.
892 base::MessageLoop::current()->Run(); 892 base::MessageLoop::current()->Run();
893 893
894 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 894 BluetoothRemoteGattCharacteristic* characteristic =
895 fake_bluetooth_gatt_characteristic_client_->GetBodySensorLocationPath() 895 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
896 .value()); 896 ->GetBodySensorLocationPath()
897 EXPECT_EQ(BluetoothGattCharacteristic::PROPERTY_READ, 897 .value());
898 EXPECT_EQ(BluetoothRemoteGattCharacteristic::PROPERTY_READ,
898 characteristic->GetProperties()); 899 characteristic->GetProperties());
899 900
900 characteristic = service->GetCharacteristic( 901 characteristic = service->GetCharacteristic(
901 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath() 902 fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath()
902 .value()); 903 .value());
903 EXPECT_EQ(BluetoothGattCharacteristic::PROPERTY_WRITE, 904 EXPECT_EQ(BluetoothRemoteGattCharacteristic::PROPERTY_WRITE,
904 characteristic->GetProperties()); 905 characteristic->GetProperties());
905 906
906 characteristic = service->GetCharacteristic( 907 characteristic = service->GetCharacteristic(
907 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 908 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath()
908 .value()); 909 .value());
909 EXPECT_EQ(BluetoothGattCharacteristic::PROPERTY_NOTIFY, 910 EXPECT_EQ(BluetoothRemoteGattCharacteristic::PROPERTY_NOTIFY,
910 characteristic->GetProperties()); 911 characteristic->GetProperties());
911 } 912 }
912 913
913 TEST_F(BluetoothGattBlueZTest, GattDescriptorValue) { 914 TEST_F(BluetoothGattBlueZTest, GattDescriptorValue) {
914 fake_bluetooth_device_client_->CreateDevice( 915 fake_bluetooth_device_client_->CreateDevice(
915 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), 916 dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
916 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 917 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
917 BluetoothDevice* device = 918 BluetoothDevice* device =
918 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress); 919 adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
919 ASSERT_TRUE(device); 920 ASSERT_TRUE(device);
920 921
921 TestBluetoothAdapterObserver observer(adapter_); 922 TestBluetoothAdapterObserver observer(adapter_);
922 923
923 // Expose the fake Heart Rate service. This will asynchronously expose 924 // Expose the fake Heart Rate service. This will asynchronously expose
924 // characteristics. 925 // characteristics.
925 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 926 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
926 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 927 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
927 ASSERT_EQ(1, observer.gatt_service_added_count()); 928 ASSERT_EQ(1, observer.gatt_service_added_count());
928 929
929 BluetoothGattService* service = 930 BluetoothRemoteGattService* service =
930 device->GetGattService(observer.last_gatt_service_id()); 931 device->GetGattService(observer.last_gatt_service_id());
931 932
932 EXPECT_EQ(0, observer.gatt_service_changed_count()); 933 EXPECT_EQ(0, observer.gatt_service_changed_count());
933 EXPECT_EQ(0, observer.gatt_discovery_complete_count()); 934 EXPECT_EQ(0, observer.gatt_discovery_complete_count());
934 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count()); 935 EXPECT_EQ(0, observer.gatt_descriptor_value_changed_count());
935 EXPECT_TRUE(service->GetCharacteristics().empty()); 936 EXPECT_TRUE(service->GetCharacteristics().empty());
936 937
937 // Run the message loop so that the characteristics appear. 938 // Run the message loop so that the characteristics appear.
938 base::MessageLoop::current()->Run(); 939 base::MessageLoop::current()->Run();
939 EXPECT_EQ(0, observer.gatt_service_changed_count()); 940 EXPECT_EQ(0, observer.gatt_service_changed_count());
940 EXPECT_EQ(1, observer.gatt_discovery_complete_count()); 941 EXPECT_EQ(1, observer.gatt_discovery_complete_count());
941 942
942 // Only the Heart Rate Measurement characteristic has a descriptor. 943 // Only the Heart Rate Measurement characteristic has a descriptor.
943 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 944 BluetoothRemoteGattCharacteristic* characteristic =
944 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 945 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
945 .value()); 946 ->GetHeartRateMeasurementPath()
947 .value());
946 ASSERT_TRUE(characteristic); 948 ASSERT_TRUE(characteristic);
947 EXPECT_EQ(1U, characteristic->GetDescriptors().size()); 949 EXPECT_EQ(1U, characteristic->GetDescriptors().size());
948 EXPECT_FALSE(characteristic->IsNotifying()); 950 EXPECT_FALSE(characteristic->IsNotifying());
949 951
950 BluetoothGattDescriptor* descriptor = characteristic->GetDescriptors()[0]; 952 BluetoothRemoteGattDescriptor* descriptor =
951 EXPECT_FALSE(descriptor->IsLocal()); 953 characteristic->GetDescriptors()[0];
952 EXPECT_EQ(BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid(), 954 EXPECT_EQ(
953 descriptor->GetUUID()); 955 BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
956 descriptor->GetUUID());
954 957
955 std::vector<uint8_t> desc_value = {0x00, 0x00}; 958 std::vector<uint8_t> desc_value = {0x00, 0x00};
956 959
957 /* The cached value will be empty until the first read request */ 960 /* The cached value will be empty until the first read request */
958 EXPECT_FALSE(ValuesEqual(desc_value, descriptor->GetValue())); 961 EXPECT_FALSE(ValuesEqual(desc_value, descriptor->GetValue()));
959 EXPECT_TRUE(descriptor->GetValue().empty()); 962 EXPECT_TRUE(descriptor->GetValue().empty());
960 963
961 EXPECT_EQ(0, success_callback_count_); 964 EXPECT_EQ(0, success_callback_count_);
962 EXPECT_EQ(0, error_callback_count_); 965 EXPECT_EQ(0, error_callback_count_);
963 EXPECT_TRUE(last_read_value_.empty()); 966 EXPECT_TRUE(last_read_value_.empty());
(...skipping 14 matching lines...) Expand all
978 981
979 // Write value. Writes to this descriptor will fail. 982 // Write value. Writes to this descriptor will fail.
980 desc_value[0] = 0x03; 983 desc_value[0] = 0x03;
981 descriptor->WriteRemoteDescriptor( 984 descriptor->WriteRemoteDescriptor(
982 desc_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback, 985 desc_value, base::Bind(&BluetoothGattBlueZTest::SuccessCallback,
983 base::Unretained(this)), 986 base::Unretained(this)),
984 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 987 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
985 base::Unretained(this))); 988 base::Unretained(this)));
986 EXPECT_EQ(1, success_callback_count_); 989 EXPECT_EQ(1, success_callback_count_);
987 EXPECT_EQ(1, error_callback_count_); 990 EXPECT_EQ(1, error_callback_count_);
988 EXPECT_EQ(BluetoothGattService::GATT_ERROR_NOT_PERMITTED, 991 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_NOT_PERMITTED,
989 last_service_error_); 992 last_service_error_);
990 EXPECT_TRUE(ValuesEqual(last_read_value_, descriptor->GetValue())); 993 EXPECT_TRUE(ValuesEqual(last_read_value_, descriptor->GetValue()));
991 EXPECT_FALSE(ValuesEqual(desc_value, descriptor->GetValue())); 994 EXPECT_FALSE(ValuesEqual(desc_value, descriptor->GetValue()));
992 EXPECT_EQ(0, observer.gatt_service_changed_count()); 995 EXPECT_EQ(0, observer.gatt_service_changed_count());
993 EXPECT_EQ(1, observer.gatt_descriptor_value_changed_count()); 996 EXPECT_EQ(1, observer.gatt_descriptor_value_changed_count());
994 997
995 // Read value. The value should remain unchanged. 998 // Read value. The value should remain unchanged.
996 descriptor->ReadRemoteDescriptor( 999 descriptor->ReadRemoteDescriptor(
997 base::Bind(&BluetoothGattBlueZTest::ValueCallback, 1000 base::Bind(&BluetoothGattBlueZTest::ValueCallback,
998 base::Unretained(this)), 1001 base::Unretained(this)),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 ASSERT_TRUE(device); 1044 ASSERT_TRUE(device);
1042 1045
1043 TestBluetoothAdapterObserver observer(adapter_); 1046 TestBluetoothAdapterObserver observer(adapter_);
1044 1047
1045 // Expose the fake Heart Rate service. This will asynchronously expose 1048 // Expose the fake Heart Rate service. This will asynchronously expose
1046 // characteristics. 1049 // characteristics.
1047 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 1050 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
1048 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 1051 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
1049 ASSERT_EQ(1, observer.gatt_service_added_count()); 1052 ASSERT_EQ(1, observer.gatt_service_added_count());
1050 1053
1051 BluetoothGattService* service = 1054 BluetoothRemoteGattService* service =
1052 device->GetGattService(observer.last_gatt_service_id()); 1055 device->GetGattService(observer.last_gatt_service_id());
1053 1056
1054 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 1057 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
1055 1058
1056 // Run the message loop so that the characteristics appear. 1059 // Run the message loop so that the characteristics appear.
1057 base::MessageLoop::current()->Run(); 1060 base::MessageLoop::current()->Run();
1058 1061
1059 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 1062 BluetoothRemoteGattCharacteristic* characteristic =
1060 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 1063 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
1061 .value()); 1064 ->GetHeartRateMeasurementPath()
1065 .value());
1062 ASSERT_TRUE(characteristic); 1066 ASSERT_TRUE(characteristic);
1063 EXPECT_FALSE(characteristic->IsNotifying()); 1067 EXPECT_FALSE(characteristic->IsNotifying());
1064 EXPECT_TRUE(update_sessions_.empty()); 1068 EXPECT_TRUE(update_sessions_.empty());
1065 1069
1066 // Request to start notifications. 1070 // Request to start notifications.
1067 characteristic->StartNotifySession( 1071 characteristic->StartNotifySession(
1068 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, 1072 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback,
1069 base::Unretained(this)), 1073 base::Unretained(this)),
1070 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 1074 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
1071 base::Unretained(this))); 1075 base::Unretained(this)));
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 ASSERT_TRUE(device); 1194 ASSERT_TRUE(device);
1191 1195
1192 TestBluetoothAdapterObserver observer(adapter_); 1196 TestBluetoothAdapterObserver observer(adapter_);
1193 1197
1194 // Expose the fake Heart Rate service. This will asynchronously expose 1198 // Expose the fake Heart Rate service. This will asynchronously expose
1195 // characteristics. 1199 // characteristics.
1196 fake_bluetooth_gatt_service_client_->ExposeHeartRateService( 1200 fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
1197 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); 1201 dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
1198 ASSERT_EQ(1, observer.gatt_service_added_count()); 1202 ASSERT_EQ(1, observer.gatt_service_added_count());
1199 1203
1200 BluetoothGattService* service = 1204 BluetoothRemoteGattService* service =
1201 device->GetGattService(observer.last_gatt_service_id()); 1205 device->GetGattService(observer.last_gatt_service_id());
1202 1206
1203 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count()); 1207 EXPECT_EQ(0, observer.gatt_characteristic_value_changed_count());
1204 1208
1205 // Run the message loop so that the characteristics appear. 1209 // Run the message loop so that the characteristics appear.
1206 base::MessageLoop::current()->Run(); 1210 base::MessageLoop::current()->Run();
1207 1211
1208 BluetoothGattCharacteristic* characteristic = service->GetCharacteristic( 1212 BluetoothRemoteGattCharacteristic* characteristic =
1209 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath() 1213 service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
1210 .value()); 1214 ->GetHeartRateMeasurementPath()
1215 .value());
1211 ASSERT_TRUE(characteristic); 1216 ASSERT_TRUE(characteristic);
1212 EXPECT_FALSE(characteristic->IsNotifying()); 1217 EXPECT_FALSE(characteristic->IsNotifying());
1213 EXPECT_TRUE(update_sessions_.empty()); 1218 EXPECT_TRUE(update_sessions_.empty());
1214 1219
1215 // Send several requests to start notifications. 1220 // Send several requests to start notifications.
1216 characteristic->StartNotifySession( 1221 characteristic->StartNotifySession(
1217 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, 1222 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback,
1218 base::Unretained(this)), 1223 base::Unretained(this)),
1219 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, 1224 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback,
1220 base::Unretained(this))); 1225 base::Unretained(this)));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 1297
1293 EXPECT_EQ(1, success_callback_count_); 1298 EXPECT_EQ(1, success_callback_count_);
1294 EXPECT_EQ(0, error_callback_count_); 1299 EXPECT_EQ(0, error_callback_count_);
1295 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); 1300 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count());
1296 EXPECT_TRUE(characteristic->IsNotifying()); 1301 EXPECT_TRUE(characteristic->IsNotifying());
1297 EXPECT_EQ(1U, update_sessions_.size()); 1302 EXPECT_EQ(1U, update_sessions_.size());
1298 EXPECT_TRUE(update_sessions_[0]->IsActive()); 1303 EXPECT_TRUE(update_sessions_[0]->IsActive());
1299 } 1304 }
1300 1305
1301 } // namespace bluez 1306 } // namespace bluez
OLDNEW
« no previous file with comments | « device/bluetooth/bluez/bluetooth_device_bluez.cc ('k') | device/bluetooth/bluez/bluetooth_gatt_characteristic_bluez.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698