From f02b313b7e02bb92f181bddaff340a6f4e8cbc71 Mon Sep 17 00:00:00 2001 From: Chris Manton Date: Sun, 7 Feb 2021 20:27:05 -0800 Subject: [PATCH] Introduce bta_test Towards testable code Bug: 176960731 Tag: #refactor Test: gd/cert/run Change-Id: I653ee9dcbb63fa0d9d52f8db17e498f8820fc2dc --- bta/test/bta_dm_test.cc | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/bta/test/bta_dm_test.cc b/bta/test/bta_dm_test.cc index 321ee28bf..e95b2b29f 100644 --- a/bta/test/bta_dm_test.cc +++ b/bta/test/bta_dm_test.cc @@ -21,6 +21,7 @@ #include "bta/dm/bta_dm_int.h" #include "bta/hf_client/bta_hf_client_int.h" #include "bta/include/bta_hf_client_api.h" +#include "bta/test/common/fake_osi.h" #include "common/message_loop_thread.h" std::map mock_function_count_map; @@ -67,3 +68,59 @@ TEST_F(BtaDmTest, nop) { bool status = true; ASSERT_EQ(true, status); } + +extern struct fake_osi_alarm_set_on_mloop fake_osi_alarm_set_on_mloop_; + +TEST_F(BtaDmTest, disable_no_acl_links) { + bta_dm_cb.disabling = true; + + bta_dm_disable(); // Waiting for all ACL connections to drain + ASSERT_EQ(0, mock_function_count_map["btm_remove_acl"]); + ASSERT_EQ(1, mock_function_count_map["alarm_set_on_mloop"]); + + // Execute timer callback + fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data); + ASSERT_EQ(1, mock_function_count_map["alarm_set_on_mloop"]); + ASSERT_EQ(0, mock_function_count_map["BTIF_dm_disable"]); + ASSERT_EQ(1, mock_function_count_map["future_ready"]); + ASSERT_TRUE(!bta_dm_cb.disabling); +} + +extern uint16_t mock_stack_acl_num_links; +TEST_F(BtaDmTest, disable_first_pass_with_acl_links) { + bta_dm_cb.disabling = true; + // ACL link is open + mock_stack_acl_num_links = bta_dm_cb.device_list.count = 1; + + bta_dm_disable(); // Waiting for all ACL connections to drain + mock_stack_acl_num_links = 0; // ACL link has closed + ASSERT_EQ(1, mock_function_count_map["alarm_set_on_mloop"]); + ASSERT_EQ(0, mock_function_count_map["BTIF_dm_disable"]); + + // First disable pass + fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data); + ASSERT_EQ(1, mock_function_count_map["alarm_set_on_mloop"]); + ASSERT_EQ(1, mock_function_count_map["BTIF_dm_disable"]); + ASSERT_TRUE(!bta_dm_cb.disabling); +} + +TEST_F(BtaDmTest, disable_second_pass_with_acl_links) { + bta_dm_cb.disabling = true; + // ACL link is open + mock_stack_acl_num_links = bta_dm_cb.device_list.count = 1; + + bta_dm_disable(); // Waiting for all ACL connections to drain + ASSERT_EQ(1, mock_function_count_map["alarm_set_on_mloop"]); + ASSERT_EQ(0, mock_function_count_map["BTIF_dm_disable"]); + + // First disable pass + fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data); + ASSERT_EQ(2, mock_function_count_map["alarm_set_on_mloop"]); + ASSERT_EQ(0, mock_function_count_map["BTIF_dm_disable"]); + ASSERT_EQ(1, mock_function_count_map["btm_remove_acl"]); + + // Second disable pass + fake_osi_alarm_set_on_mloop_.cb(fake_osi_alarm_set_on_mloop_.data); + ASSERT_EQ(1, mock_function_count_map["BTIF_dm_disable"]); + ASSERT_TRUE(!bta_dm_cb.disabling); +} -- 2.11.0