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

Commit d985b532 authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

csis: Fix removing filtering after active scan

If active scan was completed and no members was found,
controlelr filtering was not properly cleared.
This patch fixes that

Bug: 274554241
Test: atest --host bluetooth_csis_test
Tag: #feature
Change-Id: Idc71b3024aff21423a36dbed97106cbba79141f4
parent 50093179
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -1309,16 +1309,23 @@ class CsisClientImpl : public CsisClient {
    }
  }

  void CsisActiveObserverSet(bool enable) {
  static void csis_ad_type_filter_set(bool enable) {
    bool is_ad_type_filter_supported =
        bluetooth::shim::is_ad_type_filter_supported();
    LOG_INFO("Group_id %d: enable: %d, is_ad_type_filter_supported: %d",
             discovering_group_, enable, is_ad_type_filter_supported);

    LOG_INFO("enable: %d, is_ad_type_filter_supported: %d", enable,
             is_ad_type_filter_supported);

    if (is_ad_type_filter_supported) {
      bluetooth::shim::set_ad_type_rsi_filter(enable);
    } else {
      bluetooth::shim::set_empty_filter(enable);
    }
  }

  void CsisActiveObserverSet(bool enable) {
    LOG_INFO("Group_id %d: enable: %d", discovering_group_, enable);
    csis_ad_type_filter_set(enable);

    BTA_DmBleCsisObserve(
        enable, [](tBTA_DM_SEARCH_EVT event, tBTA_DM_SEARCH* p_data) {
@@ -1330,6 +1337,7 @@ class CsisClientImpl : public CsisClient {
          if (event == BTA_DM_INQ_CMPL_EVT) {
            LOG(INFO) << "BLE observe complete. Num Resp: "
                      << static_cast<int>(p_data->inq_cmpl.num_resps);
            csis_ad_type_filter_set(false);
            instance->OnCsisObserveCompleted();
            instance->CsisObserverSetBackground(true);
            return;
+34 −0
Original line number Diff line number Diff line
@@ -885,6 +885,40 @@ TEST_F(CsisClientTest, test_get_set_sirk) {
  ASSERT_EQ(g_1->GetSirk(), sirk);
}

TEST_F(CsisClientTest, test_csis_member_not_found) {
  EXPECT_CALL(dm_interface, BTA_DmBleCsisObserve(true, _)).Times(1);
  SetSampleDatabaseDoubleCsis(0x001, 1, 2);
  TestAppRegister();

  /* Here we handle Background Scan request */
  Mock::VerifyAndClearExpectations(&dm_interface);

  tBTA_DM_SEARCH_CBACK* p_results_cb = nullptr;
  /* Here is actual Active Scan request  */
  EXPECT_CALL(dm_interface, BTA_DmBleCsisObserve(true, _))
      .WillOnce(DoAll(SaveArg<1>(&p_results_cb)));

  TestConnect(test_address);
  InjectConnectedEvent(test_address, 1);
  GetSearchCompleteEvent(1);

  Mock::VerifyAndClearExpectations(&dm_interface);
  /* Verify that scanner has been called to start filtering  */
  ASSERT_EQ(1, get_func_call_count("set_empty_filter"));

  /* Check callback is not null and simulate no member found and scan
   * completed*/
  ASSERT_NE(p_results_cb, nullptr);

  tBTA_DM_SEARCH result;
  result.inq_cmpl.num_resps = 80;

  p_results_cb(BTA_DM_INQ_CMPL_EVT, &result);

  /* Verify that scanner has been called to stop filtering  */
  ASSERT_EQ(2, get_func_call_count("set_empty_filter"));
}

class CsisMultiClientTest : public CsisClientTest {
 protected:
  const RawAddress test_address_1 = GetTestAddress(1);