Index: device/bluetooth/bluez/bluetooth_bluez_unittest.cc |
diff --git a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc |
index 68687c56bcf05433722b4c24cf50bbf3de8c0f0e..4fab2e1fcdb59ab8a56be643dd526a95114bbf06 100644 |
--- a/device/bluetooth/bluez/bluetooth_bluez_unittest.cc |
+++ b/device/bluetooth/bluez/bluetooth_bluez_unittest.cc |
@@ -4550,4 +4550,102 @@ TEST_F(BluetoothBlueZTest, ServiceDataChanged) { |
EXPECT_EQ(nullptr, device->GetServiceDataForUUID(BluetoothUUID(kGattUuid))); |
} |
+TEST_F(BluetoothBlueZTest, ManufacturerDataChanged) { |
+ const BluetoothDevice::ManufacturerId kManufacturerId1 = 0x1234; |
+ const BluetoothDevice::ManufacturerId kManufacturerId2 = 0x2345; |
+ const BluetoothDevice::ManufacturerId kManufacturerId3 = 0x3456; |
+ |
+ // Simulate a change of manufacturer data of a device. |
+ GetAdapter(); |
+ |
+ BluetoothDevice* device = adapter_->GetDevice( |
+ bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
+ |
+ // Install an observer; expect the DeviceChanged method to be called |
+ // when we change the service data. |
+ TestBluetoothAdapterObserver observer(adapter_); |
+ |
+ bluez::FakeBluetoothDeviceClient::Properties* properties = |
+ fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
+ bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
+ |
+ properties->manufacturer_data.set_valid(true); |
+ |
+ // Check that ManufacturerDataChanged is correctly invoke. |
+ properties->manufacturer_data.ReplaceValue({{kManufacturerId1, {1, 2, 3}}}); |
+ EXPECT_EQ(1, observer.device_changed_count()); |
+ EXPECT_EQ(device, observer.last_device()); |
+ EXPECT_EQ( |
+ BluetoothDevice::ManufacturerDataMap({{kManufacturerId1, {1, 2, 3}}}), |
+ device->GetManufacturerData()); |
+ EXPECT_EQ(BluetoothDevice::ManufacturerIDSet({kManufacturerId1}), |
+ device->GetManufacturerDataIDs()); |
+ EXPECT_EQ(std::vector<uint8_t>({1, 2, 3}), |
+ *(device->GetManufacturerDataForID(kManufacturerId1))); |
+ |
+ // Check that we can update service data with same uuid / add more uuid. |
+ properties->manufacturer_data.ReplaceValue( |
+ {{kManufacturerId1, {3, 2, 1}}, {kManufacturerId2, {1}}}); |
+ EXPECT_EQ(2, observer.device_changed_count()); |
+ EXPECT_EQ(device, observer.last_device()); |
+ |
+ EXPECT_EQ(BluetoothDevice::ManufacturerDataMap( |
+ {{kManufacturerId1, {3, 2, 1}}, {kManufacturerId2, {1}}}), |
+ device->GetManufacturerData()); |
+ EXPECT_EQ( |
+ BluetoothDevice::ManufacturerIDSet({kManufacturerId1, kManufacturerId2}), |
+ device->GetManufacturerDataIDs()); |
+ EXPECT_EQ(std::vector<uint8_t>({3, 2, 1}), |
+ *(device->GetManufacturerDataForID(kManufacturerId1))); |
+ EXPECT_EQ(std::vector<uint8_t>({1}), |
+ *(device->GetManufacturerDataForID(kManufacturerId2))); |
+ |
+ // Check that we can remove uuid / change uuid with same data. |
+ properties->manufacturer_data.ReplaceValue({{kManufacturerId3, {3, 2, 1}}}); |
+ EXPECT_EQ(3, observer.device_changed_count()); |
+ EXPECT_EQ(device, observer.last_device()); |
+ |
+ EXPECT_EQ( |
+ BluetoothDevice::ManufacturerDataMap({{kManufacturerId3, {3, 2, 1}}}), |
+ device->GetManufacturerData()); |
+ EXPECT_EQ(BluetoothDevice::ManufacturerIDSet({kManufacturerId3}), |
+ device->GetManufacturerDataIDs()); |
+ EXPECT_EQ(std::vector<uint8_t>({3, 2, 1}), |
+ *(device->GetManufacturerDataForID(kManufacturerId3))); |
+ EXPECT_EQ(nullptr, device->GetManufacturerDataForID(kManufacturerId1)); |
+ EXPECT_EQ(nullptr, device->GetManufacturerDataForID(kManufacturerId2)); |
+} |
+ |
+TEST_F(BluetoothBlueZTest, AdvertisingDataFlagsChanged) { |
+ // Simulate a change of advertising data flags of a device. |
+ GetAdapter(); |
+ |
+ BluetoothDevice* device = adapter_->GetDevice( |
+ bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
+ |
+ // Install an observer; expect the DeviceChanged method to be called |
+ // when we change the service data. |
+ TestBluetoothAdapterObserver observer(adapter_); |
+ |
+ bluez::FakeBluetoothDeviceClient::Properties* properties = |
+ fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
+ bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
+ |
+ properties->advertising_data_flags.set_valid(true); |
+ |
+ // Check that AdvertisingDataFlagsChanged is correctly invoke. |
+ properties->advertising_data_flags.ReplaceValue(std::vector<uint8_t>({0x12})); |
+ EXPECT_EQ(1, observer.device_changed_count()); |
+ EXPECT_EQ(device, observer.last_device()); |
+ EXPECT_TRUE(device->GetAdvertisingDataFlags().has_value()); |
+ EXPECT_EQ(0x12u, device->GetAdvertisingDataFlags().value()); |
+ |
+ // Check that we can update advertising data flags. |
+ properties->advertising_data_flags.ReplaceValue(std::vector<uint8_t>({0x23})); |
+ EXPECT_EQ(2, observer.device_changed_count()); |
+ EXPECT_EQ(device, observer.last_device()); |
+ EXPECT_TRUE(device->GetAdvertisingDataFlags().has_value()); |
+ EXPECT_EQ(0x23u, device->GetAdvertisingDataFlags().value()); |
+} |
+ |
} // namespace bluez |