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

Commit 05520f81 authored by Chris Manton's avatar Chris Manton
Browse files

stack::btm:: Introduce stack_btm_inq_test

Bug: 332760841
Test: atest net_test_stack_btm
Flag: EXEMPT, Test Infrastructure
Change-Id: I631a04b54ba9de32f7829ea8ffe68eb7bd819531
parent 14b95b68
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1615,6 +1615,7 @@ cc_test {
        "test/btm/sco_hci_test.cc",
        "test/btm/sco_pkt_status_test.cc",
        "test/btm/stack_btm_dev_test.cc",
        "test/btm/stack_btm_inq_test.cc",
        "test/btm/stack_btm_power_mode_test.cc",
        "test/btm/stack_btm_regression_tests.cc",
        "test/btm/stack_btm_sec_test.cc",
+138 −0
Original line number Diff line number Diff line
/*
 * Copyright 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <base/strings/stringprintf.h>
#include <gtest/gtest.h>
#include <stdlib.h>

#include "hci_error_code.h"
#include "stack/btm/btm_int_types.h"
#include "stack/include/inq_hci_link_interface.h"
#include "stack/test/btm/btm_test_fixtures.h"
#include "test/fake/fake_looper.h"
#include "test/mock/mock_osi_allocator.h"
#include "test/mock/mock_osi_thread.h"
#include "types/raw_address.h"

extern tBTM_CB btm_cb;

namespace {
const RawAddress kRawAddress = RawAddress({0x11, 0x22, 0x33, 0x44, 0x55, 0x66});
const RawAddress kRawAddress2 =
    RawAddress({0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc});
const BD_NAME kBdName = {'A', ' ', 'B', 'd', ' ', 'N', 'a', 'm', 'e', '\0'};
const BD_NAME kEmptyName = "";

tBTM_REMOTE_DEV_NAME gBTM_REMOTE_DEV_NAME{};
bool gBTM_REMOTE_DEV_NAME_sent{false};

}  // namespace

class BtmInqTest : public BtmWithMocksTest {
 protected:
  void SetUp() override {
    BtmWithMocksTest::SetUp();
    btm_cb = {};
  }

  void TearDown() override { BtmWithMocksTest::TearDown(); }
};

class BtmInqActiveTest : public BtmInqTest {
 protected:
  void SetUp() override {
    BtmInqTest::SetUp();
    gBTM_REMOTE_DEV_NAME = {};
    gBTM_REMOTE_DEV_NAME_sent = false;

    btm_cb.btm_inq_vars.remname_active = true;
    btm_cb.btm_inq_vars.remname_bda = kRawAddress;
    btm_cb.btm_inq_vars.p_remname_cmpl_cb =
        [](const tBTM_REMOTE_DEV_NAME* name) {
          gBTM_REMOTE_DEV_NAME = *name;
          gBTM_REMOTE_DEV_NAME_sent = true;
        };
  }

  void TearDown() override { BtmInqTest::TearDown(); }
};

TEST_F(BtmInqActiveTest, btm_process_remote_name__typical) {
  btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS);
  ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb);
  ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active);
  ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty);
  ASSERT_EQ(1, get_func_call_count("alarm_cancel"));

  ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent);
  ASSERT_EQ(BTM_SUCCESS, gBTM_REMOTE_DEV_NAME.status);
  ASSERT_EQ(HCI_SUCCESS, gBTM_REMOTE_DEV_NAME.hci_status);
  ASSERT_EQ(kRawAddress, gBTM_REMOTE_DEV_NAME.bd_addr);
  ASSERT_STREQ((char*)kBdName, (char*)gBTM_REMOTE_DEV_NAME.remote_bd_name);
}

TEST_F(BtmInqActiveTest, DISABLED_btm_process_remote_name__no_name) {
  btm_process_remote_name(&kRawAddress, nullptr, 0, HCI_SUCCESS);
  ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb);
  ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active);
  ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty);
  ASSERT_EQ(1, get_func_call_count("alarm_cancel"));

  ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent);
  ASSERT_EQ(BTM_SUCCESS, gBTM_REMOTE_DEV_NAME.status);
  ASSERT_EQ(HCI_SUCCESS, gBTM_REMOTE_DEV_NAME.hci_status);
  ASSERT_EQ(kRawAddress, gBTM_REMOTE_DEV_NAME.bd_addr);
  ASSERT_STREQ((char*)kEmptyName, (char*)gBTM_REMOTE_DEV_NAME.remote_bd_name);
}

TEST_F(BtmInqActiveTest, btm_process_remote_name__bad_status) {
  btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_ERR_PAGE_TIMEOUT);
  ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb);
  ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active);
  ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty);
  ASSERT_EQ(1, get_func_call_count("alarm_cancel"));

  ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent);
  ASSERT_EQ(BTM_BAD_VALUE_RET, gBTM_REMOTE_DEV_NAME.status);
  ASSERT_EQ(HCI_ERR_PAGE_TIMEOUT, gBTM_REMOTE_DEV_NAME.hci_status);
  ASSERT_EQ(kRawAddress, gBTM_REMOTE_DEV_NAME.bd_addr);
  ASSERT_STREQ((char*)kEmptyName, (char*)gBTM_REMOTE_DEV_NAME.remote_bd_name);
}

TEST_F(BtmInqActiveTest, btm_process_remote_name__no_address) {
  btm_process_remote_name(nullptr, kBdName, 0, HCI_SUCCESS);
  ASSERT_FALSE(btm_cb.btm_inq_vars.p_remname_cmpl_cb);
  ASSERT_FALSE(btm_cb.btm_inq_vars.remname_active);
  ASSERT_EQ(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty);
  ASSERT_EQ(1, get_func_call_count("alarm_cancel"));

  ASSERT_TRUE(gBTM_REMOTE_DEV_NAME_sent);
  ASSERT_EQ(BTM_SUCCESS, gBTM_REMOTE_DEV_NAME.status);
  ASSERT_EQ(HCI_SUCCESS, gBTM_REMOTE_DEV_NAME.hci_status);
  ASSERT_EQ(RawAddress::kEmpty, gBTM_REMOTE_DEV_NAME.bd_addr);
  ASSERT_STREQ((char*)kBdName, (char*)gBTM_REMOTE_DEV_NAME.remote_bd_name);
}

TEST_F(BtmInqActiveTest, btm_process_remote_name__different_address) {
  btm_cb.btm_inq_vars.remname_bda = kRawAddress2;
  btm_process_remote_name(&kRawAddress, kBdName, 0, HCI_SUCCESS);
  ASSERT_TRUE(btm_cb.btm_inq_vars.p_remname_cmpl_cb);
  ASSERT_TRUE(btm_cb.btm_inq_vars.remname_active);
  ASSERT_NE(btm_cb.btm_inq_vars.remname_bda, RawAddress::kEmpty);
  ASSERT_EQ(0, get_func_call_count("alarm_cancel"));

  ASSERT_FALSE(gBTM_REMOTE_DEV_NAME_sent);
}
+0 −3
Original line number Diff line number Diff line
@@ -16,9 +16,6 @@

#pragma once

#include <map>
#include <string>

int get_func_call_size();

int get_func_call_count(const char* fn);