Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit add3f488 authored by Rahul Arya's avatar Rahul Arya Committed by Automerger Merge Worker
Browse files

Merge "Do not change DevType of DUAL devices" am: 645e6f98 am: 09604c16

parents 6db775d9 09604c16
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -420,6 +420,16 @@ bool FixDeviceTypeInconsistencyInSection(
  if (!hci::Address::IsValidAddress(section_name)) {
    return false;
  }
  auto device_type_iter = device_section_entries.find("DevType");
  if (device_type_iter != device_section_entries.end() &&
      device_type_iter->second == std::to_string(hci::DeviceType::DUAL)) {
    // We might only have one of classic/LE keys for a dual device, but it is still a dual device,
    // so we should not change the DevType.
    return false;
  }

  // we will ignore the existing DevType, since it is not known to be a DUAL device so
  // the keys we have should be sufficient to infer the correct DevType
  bool is_le = false;
  bool is_classic = false;
  // default
@@ -441,11 +451,10 @@ bool FixDeviceTypeInconsistencyInSection(
  }
  bool inconsistent = true;
  std::string device_type_str = std::to_string(device_type);
  auto it = device_section_entries.find("DevType");
  if (it != device_section_entries.end()) {
    inconsistent = device_type_str != it->second;
  if (device_type_iter != device_section_entries.end()) {
    inconsistent = device_type_str != device_type_iter->second;
    if (inconsistent) {
      it->second = std::move(device_type_str);
      device_type_iter->second = std::move(device_type_str);
    }
  } else {
    device_section_entries.insert_or_assign("DevType", std::move(device_type_str));
+82 −6
Original line number Diff line number Diff line
@@ -275,34 +275,110 @@ TEST(ConfigCacheTest, persistent_config_changed_callback_test) {
  ASSERT_EQ(num_change, 4);
}

TEST(ConfigCacheTest, fix_device_type_inconsistency_test) {
TEST(ConfigCacheTest, fix_device_type_inconsistency_missing_devtype_no_keys_test) {
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "C", "D");
  ASSERT_TRUE(config.FixDeviceTypeInconsistencies());

  auto hadInconsistencies = config.FixDeviceTypeInconsistencies();

  ASSERT_TRUE(hadInconsistencies);
  ASSERT_THAT(
      config.GetProperty("AA:BB:CC:DD:EE:FF", "DevType"),
      Optional(StrEq(std::to_string(bluetooth::hci::DeviceType::BR_EDR))));
}

TEST(ConfigCacheTest, fix_device_type_inconsistency_consistent_devtype_test) {
  // arrange
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "C", "D");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));

  config.SetProperty("CC:DD:EE:FF:00:11", "B", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));
  config.SetProperty("CC:DD:EE:FF:00:11", "LinkKey", "AABBAABBCCDDEE");
  ASSERT_FALSE(config.FixDeviceTypeInconsistencies());

  // act
  auto hadInconsistencies = config.FixDeviceTypeInconsistencies();

  // assert
  ASSERT_FALSE(hadInconsistencies);
  ASSERT_THAT(
      config.GetProperty("CC:DD:EE:FF:00:11", "DevType"),
      Optional(StrEq(std::to_string(bluetooth::hci::DeviceType::BR_EDR))));
}

TEST(ConfigCacheTest, fix_device_type_inconsistency_devtype_should_be_dual_test) {
  // arrange
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "C", "D");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));

  config.SetProperty("CC:DD:EE:FF:00:11", "B", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));
  config.SetProperty("CC:DD:EE:FF:00:11", "LinkKey", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "LE_KEY_PENC", "AABBAABBCCDDEE");
  ASSERT_TRUE(config.FixDeviceTypeInconsistencies());

  // act
  auto hadInconsistencies = config.FixDeviceTypeInconsistencies();

  // assert
  ASSERT_TRUE(hadInconsistencies);
  ASSERT_THAT(
      config.GetProperty("CC:DD:EE:FF:00:11", "DevType"),
      Optional(StrEq(std::to_string(bluetooth::hci::DeviceType::DUAL))));
  config.RemoveProperty("CC:DD:EE:FF:00:11", "LinkKey");
  ASSERT_TRUE(config.FixDeviceTypeInconsistencies());
}

TEST(ConfigCacheTest, fix_device_type_inconsistency_devtype_should_be_le_not_classic_test) {
  // arrange
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "C", "D");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));

  config.SetProperty("CC:DD:EE:FF:00:11", "B", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));
  config.SetProperty("CC:DD:EE:FF:00:11", "LE_KEY_PENC", "AABBAABBCCDDEE");

  // act
  auto hadInconsistencies = config.FixDeviceTypeInconsistencies();

  // assert
  ASSERT_TRUE(hadInconsistencies);
  ASSERT_THAT(
      config.GetProperty("CC:DD:EE:FF:00:11", "DevType"),
      Optional(StrEq(std::to_string(bluetooth::hci::DeviceType::LE))));
}

TEST(ConfigCacheTest, fix_device_type_inconsistency_devtype_dont_override_dual_test) {
  // arrange
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "B", "C");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "C", "D");
  config.SetProperty("AA:BB:CC:DD:EE:FF", "DevType", std::to_string(bluetooth::hci::DeviceType::BR_EDR));

  config.SetProperty("CC:DD:EE:FF:00:11", "B", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "DevType", std::to_string(bluetooth::hci::DeviceType::DUAL));
  config.SetProperty("CC:DD:EE:FF:00:11", "LinkKey", "AABBAABBCCDDEE");
  config.SetProperty("CC:DD:EE:FF:00:11", "LE_KEY_PENC", "AABBAABBCCDDEE");

  // act
  auto hadInconsistencies = config.FixDeviceTypeInconsistencies();

  // assert
  ASSERT_FALSE(hadInconsistencies);
  ASSERT_THAT(
      config.GetProperty("CC:DD:EE:FF:00:11", "DevType"),
      Optional(StrEq(std::to_string(bluetooth::hci::DeviceType::DUAL))));
}

TEST(ConfigCacheTest, test_get_section_with_property) {
  ConfigCache config(100, Device::kLinkKeyProperties);
  config.SetProperty("A", "B", "C");