OSDN Git Service

Introduce bta_test
authorChris Manton <cmanton@google.com>
Mon, 8 Feb 2021 04:27:05 +0000 (20:27 -0800)
committerChris Manton <cmanton@google.com>
Tue, 16 Feb 2021 16:27:18 +0000 (08:27 -0800)
Towards testable code

Bug: 176960731
Tag: #refactor
Test: gd/cert/run

Change-Id: I653ee9dcbb63fa0d9d52f8db17e498f8820fc2dc

bta/test/bta_dm_test.cc

index 321ee28..e95b2b2 100644 (file)
@@ -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<std::string, int> 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);
+}