summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Manton <cmanton@google.com> 2024-04-03 14:45:02 -0700
committer Chris Manton <cmanton@google.com> 2024-04-04 16:59:22 +0000
commit05520f81c69e98017d01da3c1f1ce42911ca50c4 (patch)
treeb62b9afee8188849914f5276ab9db8062764a8aa
parent14b95b689aca26696c7863388cbc3db0159c20e4 (diff)
stack::btm:: Introduce stack_btm_inq_test
Bug: 332760841 Test: atest net_test_stack_btm Flag: EXEMPT, Test Infrastructure Change-Id: I631a04b54ba9de32f7829ea8ffe68eb7bd819531
-rw-r--r--system/stack/Android.bp1
-rw-r--r--system/stack/test/btm/stack_btm_inq_test.cc138
-rw-r--r--system/test/common/mock_functions.h3
3 files changed, 139 insertions, 3 deletions
diff --git a/system/stack/Android.bp b/system/stack/Android.bp
index bd000f1078..76ba41c2ff 100644
--- a/system/stack/Android.bp
+++ b/system/stack/Android.bp
@@ -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",
diff --git a/system/stack/test/btm/stack_btm_inq_test.cc b/system/stack/test/btm/stack_btm_inq_test.cc
new file mode 100644
index 0000000000..cd52c4fef9
--- /dev/null
+++ b/system/stack/test/btm/stack_btm_inq_test.cc
@@ -0,0 +1,138 @@
+/*
+ * 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);
+}
diff --git a/system/test/common/mock_functions.h b/system/test/common/mock_functions.h
index 54b1281aed..5ba45b39b4 100644
--- a/system/test/common/mock_functions.h
+++ b/system/test/common/mock_functions.h
@@ -16,9 +16,6 @@
#pragma once
-#include <map>
-#include <string>
-
int get_func_call_size();
int get_func_call_count(const char* fn);