| Index: device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc
|
| diff --git a/device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc b/device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc
|
| index c5fa376674e42d7fd0d27ab85f7f658b8748117c..d3850164bda0bffdb55bad047272700c1a6a666e 100644
|
| --- a/device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc
|
| +++ b/device/bluetooth/bluez/bluetooth_gatt_bluez_unittest.cc
|
| @@ -129,6 +129,74 @@ class BluetoothGattBlueZTest : public testing::Test {
|
| ASSERT_TRUE(adapter_->IsPresent());
|
| }
|
|
|
| + void BatteryServiceShouldBeComplete(BluetoothDevice* device) {
|
| + ASSERT_TRUE(device);
|
| + ASSERT_GE(device->GetGattServices().size(), 1u);
|
| +
|
| + BluetoothRemoteGattService* service = device->GetGattService(
|
| + fake_bluetooth_gatt_service_client_->GetBatteryServicePath().value());
|
| +
|
| + ASSERT_TRUE(service);
|
| + EXPECT_TRUE(service->IsPrimary());
|
| + EXPECT_EQ(BluetoothUUID(
|
| + bluez::FakeBluetoothGattServiceClient::kBatteryServiceUUID),
|
| + service->GetUUID());
|
| + EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
|
| + }
|
| +
|
| + void HeartRateServiceShouldBeComplete(BluetoothDevice* device) {
|
| + ASSERT_TRUE(device);
|
| + ASSERT_GE(device->GetGattServices().size(), 1u);
|
| +
|
| + BluetoothRemoteGattService* service = device->GetGattService(
|
| + fake_bluetooth_gatt_service_client_->GetHeartRateServicePath().value());
|
| +
|
| + ASSERT_TRUE(service);
|
| + EXPECT_TRUE(service->IsPrimary());
|
| + EXPECT_EQ(BluetoothUUID(
|
| + bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
|
| + service->GetUUID());
|
| + EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
|
| + EXPECT_EQ(3U, service->GetCharacteristics().size());
|
| +
|
| + BluetoothRemoteGattCharacteristic* characteristic =
|
| + service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
|
| + ->GetBodySensorLocationPath()
|
| + .value());
|
| + ASSERT_TRUE(characteristic);
|
| + EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| + kBodySensorLocationUUID),
|
| + characteristic->GetUUID());
|
| + EXPECT_TRUE(characteristic->GetDescriptors().empty());
|
| +
|
| + characteristic =
|
| + service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
|
| + ->GetHeartRateControlPointPath()
|
| + .value());
|
| + ASSERT_TRUE(characteristic);
|
| + EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| + kHeartRateControlPointUUID),
|
| + characteristic->GetUUID());
|
| + EXPECT_TRUE(characteristic->GetDescriptors().empty());
|
| +
|
| + characteristic =
|
| + service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
|
| + ->GetHeartRateMeasurementPath()
|
| + .value());
|
| + ASSERT_TRUE(characteristic);
|
| + EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| + kHeartRateMeasurementUUID),
|
| + characteristic->GetUUID());
|
| +
|
| + ASSERT_EQ(1u, characteristic->GetDescriptors().size());
|
| +
|
| + BluetoothRemoteGattDescriptor* descriptor =
|
| + characteristic->GetDescriptors()[0];
|
| + EXPECT_EQ(
|
| + BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
|
| + descriptor->GetUUID());
|
| + }
|
| +
|
| void AdapterCallback(scoped_refptr<BluetoothAdapter> adapter) {
|
| adapter_ = adapter;
|
| if (base::MessageLoop::current() &&
|
| @@ -366,63 +434,40 @@ TEST_F(BluetoothGattBlueZTest, GattServiceAddedAndRemoved) {
|
| bluez::FakeBluetoothDeviceClient::kLowEnergyAddress));
|
| }
|
|
|
| -TEST_F(BluetoothGattBlueZTest, DiscoveryCompleteForCachedGattService) {
|
| - // This tests if the notifications on service discovered complete are invoked
|
| - // with the cached services and added to the GATT service map of |device|.
|
| - TestBluetoothAdapterObserver observer(adapter_);
|
| -
|
| - // Create the device and pre-expose the fake Heart Rate service. This will
|
| - // synchronously expose characteristics.
|
| - fake_bluetooth_device_client_->CreateDevice(
|
| - dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kCachedLowEnergyPath));
|
| - BluetoothDevice* device =
|
| - adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| - ASSERT_TRUE(device);
|
| -
|
| - device::BluetoothRemoteGattService* service = device->GetGattServices()[0];
|
| - EXPECT_EQ(1u, device->GetGattServices().size());
|
| - EXPECT_EQ(1, observer.gatt_discovery_complete_count());
|
| - EXPECT_EQ(device, service->GetDevice());
|
| - EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
|
| - EXPECT_EQ(3U, service->GetCharacteristics().size());
|
| -}
|
| -
|
| -TEST_F(BluetoothGattBlueZTest, DiscoveryCompleteForNewGattService) {
|
| - TestBluetoothAdapterObserver observer(adapter_);
|
| +TEST_F(BluetoothGattBlueZTest, ServicesDiscoveredBeforeAdapterIsCreated) {
|
| + // Tests that all GATT objects are created for a device whose D-Bus objects
|
| + // were already exposed and for which services have been resolved.
|
| + adapter_ = NULL;
|
| + ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
|
|
|
| - // This tests the discovery complete notification on a newly-added GATT
|
| - // service.
|
| + // Create the fake D-Bus objects.
|
| fake_bluetooth_device_client_->CreateDevice(
|
| dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| - BluetoothDevice* device =
|
| - adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| - ASSERT_TRUE(device);
|
| -
|
| - EXPECT_EQ(0u, device->GetGattServices().size());
|
| - EXPECT_EQ(0, observer.gatt_discovery_complete_count());
|
| + bluez::FakeBluetoothDeviceClient::Properties* properties =
|
| + fake_bluetooth_device_client_->GetProperties(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
|
|
| - // Expose the fake Heart Rate service. This will asynchronously expose
|
| - // characteristics.
|
| fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
|
| dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
|
| + base::RunLoop().RunUntilIdle();
|
| + ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
|
| + ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
|
|
|
| - // Run the message loop so that the characteristics/descriptors appear.
|
| - base::MessageLoop::current()->Run();
|
| + properties->services_resolved.ReplaceValue(true);
|
|
|
| - // The discovery completed event of a newly-added GATT service should not be
|
| - // fired until ServicesResolved property becomes true. And the new service
|
| - // will be added immediately to the GATT service map of |device|.
|
| - BluetoothRemoteGattService* service = device->GetGattServices()[0];
|
| - EXPECT_EQ(1u, device->GetGattServices().size());
|
| - EXPECT_EQ(1, observer.gatt_discovery_complete_count());
|
| - EXPECT_EQ(device, service->GetDevice());
|
| - EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
|
| - EXPECT_EQ(3U, service->GetCharacteristics().size());
|
| + // Create the adapter. This should create all the GATT objects.
|
| + GetAdapter();
|
| +
|
| + BluetoothDevice* device =
|
| + adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| +
|
| + EXPECT_TRUE(device->IsGattServicesDiscoveryComplete());
|
| + HeartRateServiceShouldBeComplete(device);
|
| }
|
|
|
| -TEST_F(BluetoothGattBlueZTest, ServicesDiscovered) {
|
| +TEST_F(BluetoothGattBlueZTest, ServicesDiscoveredAfterAdapterIsCreated) {
|
| // Create a fake LE device. We store the device pointer here because this is a
|
| // test. It's unsafe to do this in production as the device might get deleted.
|
| fake_bluetooth_device_client_->CreateDevice(
|
| @@ -443,6 +488,8 @@ TEST_F(BluetoothGattBlueZTest, ServicesDiscovered) {
|
| dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| // Run the message loop so that the characteristics/descriptors appear.
|
| base::MessageLoop::current()->Run();
|
| + properties->services_resolved.ReplaceValue(true);
|
| +
|
| EXPECT_TRUE(device->IsGattServicesDiscoveryComplete());
|
| EXPECT_EQ(1u, device->GetGattServices().size());
|
| EXPECT_EQ(device, observer.last_device());
|
| @@ -476,10 +523,160 @@ TEST_F(BluetoothGattBlueZTest, ServicesDiscovered) {
|
| dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| // Run the message loop so that the characteristics/descriptors appear.
|
| base::MessageLoop::current()->Run();
|
| + properties->services_resolved.ReplaceValue(true);
|
| +
|
| EXPECT_TRUE(device->IsGattServicesDiscoveryComplete());
|
| EXPECT_EQ(1u, device->GetGattServices().size());
|
| }
|
|
|
| +TEST_F(BluetoothGattBlueZTest, DiscoverCachedServices) {
|
| + // This unit test tests that all remote GATT objects are created for D-Bus
|
| + // objects that were already exposed and all relevant events have been
|
| + // dispatched.
|
| + adapter_ = NULL;
|
| + ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
|
| +
|
| + // Create the fake D-Bus objects.
|
| + fake_bluetooth_device_client_->CreateDevice(
|
| + dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + bluez::FakeBluetoothDeviceClient::Properties* properties =
|
| + fake_bluetooth_device_client_->GetProperties(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + properties->services_resolved.ReplaceValue(false);
|
| +
|
| + fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
|
| + base::RunLoop().RunUntilIdle();
|
| + ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
|
| + ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
|
| +
|
| + // Create the adapter. This should create all the GATT objects.
|
| + GetAdapter();
|
| + TestBluetoothAdapterObserver observer(adapter_);
|
| +
|
| + // The device should exist but contain no cached services while the services
|
| + // haven't been resolved.
|
| + BluetoothDevice* device =
|
| + adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| +
|
| + EXPECT_TRUE(device->GetGattServices().empty());
|
| +
|
| + EXPECT_EQ(0, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(0, observer.gatt_service_added_count());
|
| + EXPECT_EQ(0, observer.gatt_discovery_complete_count());
|
| + EXPECT_EQ(0, observer.gatt_characteristic_added_count());
|
| + EXPECT_EQ(0, observer.gatt_descriptor_added_count());
|
| +
|
| + properties->services_resolved.ReplaceValue(true);
|
| +
|
| + EXPECT_EQ(1, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(1, observer.gatt_service_added_count());
|
| + EXPECT_EQ(1, observer.gatt_discovery_complete_count());
|
| + EXPECT_EQ(3, observer.gatt_characteristic_added_count());
|
| + EXPECT_EQ(1, observer.gatt_descriptor_added_count());
|
| +
|
| + HeartRateServiceShouldBeComplete(device);
|
| +}
|
| +
|
| +TEST_F(BluetoothGattBlueZTest, DiscoverNewServices) {
|
| + // This unit test tests that all remote GATT Objects are created for D-Bus
|
| + // objects that are newly exposed.
|
| + TestBluetoothAdapterObserver observer(adapter_);
|
| +
|
| + // Create the fake D-Bus objects.
|
| + fake_bluetooth_device_client_->CreateDevice(
|
| + dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + bluez::FakeBluetoothDeviceClient::Properties* properties =
|
| + fake_bluetooth_device_client_->GetProperties(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| +
|
| + properties->services_resolved.ReplaceValue(false);
|
| + fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
|
| + base::RunLoop().RunUntilIdle();
|
| + ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
|
| + ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
|
| +
|
| + // The device should exist and contain new services even though the services
|
| + // haven't been resolved.
|
| + BluetoothDevice* device =
|
| + adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| + EXPECT_EQ(1u, device->GetGattServices().size());
|
| + HeartRateServiceShouldBeComplete(device);
|
| +
|
| + EXPECT_EQ(0, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(0, observer.gatt_discovery_complete_count());
|
| + // The rest of the events are tested in the corresponding
|
| + // {GATTObject}AddedAndRemoved tests.
|
| +
|
| + properties->services_resolved.ReplaceValue(true);
|
| +
|
| + EXPECT_EQ(1, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(1, observer.gatt_discovery_complete_count());
|
| +}
|
| +
|
| +TEST_F(BluetoothGattBlueZTest, DiscoverCachedAndNewServices) {
|
| + // This unit test tests that all remote GATT objects are created for D-Bus
|
| + // objects that were already exposed and for new GATT Objects.
|
| + adapter_ = NULL;
|
| + ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
|
| +
|
| + // Create the fake D-Bus objects.
|
| + fake_bluetooth_device_client_->CreateDevice(
|
| + dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + bluez::FakeBluetoothDeviceClient::Properties* properties =
|
| + fake_bluetooth_device_client_->GetProperties(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + properties->services_resolved.ReplaceValue(false);
|
| +
|
| + fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
|
| + base::RunLoop().RunUntilIdle();
|
| + ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
|
| + ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
|
| +
|
| + // Create the adapter. This should create all the GATT objects.
|
| + GetAdapter();
|
| + TestBluetoothAdapterObserver observer(adapter_);
|
| +
|
| + // The device should exist but contain no cached services while the services
|
| + // haven't been resolved.
|
| + BluetoothDevice* device =
|
| + adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| +
|
| + EXPECT_EQ(0, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(0, observer.gatt_discovery_complete_count());
|
| + EXPECT_TRUE(device->GetGattServices().empty());
|
| +
|
| + fake_bluetooth_gatt_service_client_->ExposeBatteryService(
|
| + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| + ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsBatteryServiceVisible());
|
| +
|
| + EXPECT_EQ(0, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(0, observer.gatt_discovery_complete_count());
|
| + EXPECT_EQ(1u, device->GetGattServices().size());
|
| +
|
| + // A newly added service should be complete even if services haven't been
|
| + // resolved.
|
| + BatteryServiceShouldBeComplete(device);
|
| +
|
| + properties->services_resolved.ReplaceValue(true);
|
| +
|
| + EXPECT_EQ(1, observer.gatt_services_discovered_count());
|
| + EXPECT_EQ(2, observer.gatt_discovery_complete_count());
|
| + EXPECT_EQ(2u, device->GetGattServices().size());
|
| +
|
| + // Now that services have been resolved both services should be present.
|
| + HeartRateServiceShouldBeComplete(device);
|
| + BatteryServiceShouldBeComplete(device);
|
| +}
|
| +
|
| TEST_F(BluetoothGattBlueZTest, GattCharacteristicAddedAndRemoved) {
|
| fake_bluetooth_device_client_->CreateDevice(
|
| dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| @@ -638,76 +835,6 @@ TEST_F(BluetoothGattBlueZTest, GattDescriptorAddedAndRemoved) {
|
| EXPECT_EQ(descriptor->GetIdentifier(), observer.last_gatt_descriptor_id());
|
| }
|
|
|
| -TEST_F(BluetoothGattBlueZTest, AdapterAddedAfterGattService) {
|
| - // This unit test tests that all remote GATT objects are created for D-Bus
|
| - // objects that were already exposed.
|
| - adapter_ = NULL;
|
| - ASSERT_FALSE(device::BluetoothAdapterFactory::HasSharedInstanceForTesting());
|
| -
|
| - // Create the fake D-Bus objects.
|
| - fake_bluetooth_device_client_->CreateDevice(
|
| - dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
| - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| - fake_bluetooth_gatt_service_client_->ExposeHeartRateService(
|
| - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath));
|
| - while (!fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible())
|
| - base::RunLoop().RunUntilIdle();
|
| - ASSERT_TRUE(fake_bluetooth_gatt_service_client_->IsHeartRateVisible());
|
| - ASSERT_TRUE(fake_bluetooth_gatt_characteristic_client_->IsHeartRateVisible());
|
| -
|
| - // Create the adapter. This should create all the GATT objects.
|
| - GetAdapter();
|
| - BluetoothDevice* device =
|
| - adapter_->GetDevice(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress);
|
| - ASSERT_TRUE(device);
|
| - EXPECT_EQ(1U, device->GetGattServices().size());
|
| -
|
| - BluetoothRemoteGattService* service = device->GetGattServices()[0];
|
| - ASSERT_TRUE(service);
|
| - EXPECT_TRUE(service->IsPrimary());
|
| - EXPECT_EQ(BluetoothUUID(
|
| - bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID),
|
| - service->GetUUID());
|
| - EXPECT_EQ(service, device->GetGattServices()[0]);
|
| - EXPECT_EQ(service, device->GetGattService(service->GetIdentifier()));
|
| - EXPECT_EQ(3U, service->GetCharacteristics().size());
|
| -
|
| - BluetoothRemoteGattCharacteristic* characteristic =
|
| - service->GetCharacteristic(fake_bluetooth_gatt_characteristic_client_
|
| - ->GetBodySensorLocationPath()
|
| - .value());
|
| - ASSERT_TRUE(characteristic);
|
| - EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| - kBodySensorLocationUUID),
|
| - characteristic->GetUUID());
|
| - EXPECT_TRUE(characteristic->GetDescriptors().empty());
|
| -
|
| - characteristic = service->GetCharacteristic(
|
| - fake_bluetooth_gatt_characteristic_client_->GetHeartRateControlPointPath()
|
| - .value());
|
| - ASSERT_TRUE(characteristic);
|
| - EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| - kHeartRateControlPointUUID),
|
| - characteristic->GetUUID());
|
| - EXPECT_TRUE(characteristic->GetDescriptors().empty());
|
| -
|
| - characteristic = service->GetCharacteristic(
|
| - fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath()
|
| - .value());
|
| - ASSERT_TRUE(characteristic);
|
| - EXPECT_EQ(BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient::
|
| - kHeartRateMeasurementUUID),
|
| - characteristic->GetUUID());
|
| - EXPECT_EQ(1U, characteristic->GetDescriptors().size());
|
| -
|
| - BluetoothRemoteGattDescriptor* descriptor =
|
| - characteristic->GetDescriptors()[0];
|
| - ASSERT_TRUE(descriptor);
|
| - EXPECT_EQ(
|
| - BluetoothRemoteGattDescriptor::ClientCharacteristicConfigurationUuid(),
|
| - descriptor->GetUUID());
|
| -}
|
| -
|
| TEST_F(BluetoothGattBlueZTest, GattCharacteristicValue) {
|
| fake_bluetooth_device_client_->CreateDevice(
|
| dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath),
|
|
|