diff options
-rw-r--r-- | system/main/test/main_shim_test.cc | 100 | ||||
-rw-r--r-- | system/test/mock/mock_main_shim_entry.cc | 17 | ||||
-rw-r--r-- | system/test/mock/mock_main_shim_entry.h | 7 |
3 files changed, 117 insertions, 7 deletions
diff --git a/system/main/test/main_shim_test.cc b/system/main/test/main_shim_test.cc index a04739d517..602a559ac7 100644 --- a/system/main/test/main_shim_test.cc +++ b/system/main/test/main_shim_test.cc @@ -24,18 +24,36 @@ #include "btaa/activity_attribution.h" #include "btif/include/btif_hh.h" #include "device/include/controller.h" +#include "hal/hci_hal.h" +#include "hci/acl_manager.h" +#include "hci/acl_manager/classic_acl_connection.h" +#include "hci/acl_manager/connection_callbacks.h" +#include "hci/acl_manager/connection_management_callbacks.h" +#include "hci/acl_manager/le_acl_connection.h" +#include "hci/acl_manager/le_connection_callbacks.h" +#include "hci/acl_manager/le_connection_management_callbacks.h" #include "hci/acl_manager_mock.h" #include "hci/controller_mock.h" +#include "hci/le_advertising_manager_mock.h" +#include "hci/le_scanning_manager_mock.h" +#include "include/hardware/ble_scanner.h" #include "include/hardware/bt_activity_attribution.h" #include "main/shim/acl.h" #include "main/shim/acl_legacy_interface.h" +#include "main/shim/ble_scanner_interface_impl.h" #include "main/shim/helpers.h" +#include "main/shim/le_advertising_manager.h" +#include "main/shim/le_scanning_manager.h" #include "os/handler.h" +#include "os/mock_queue.h" +#include "os/queue.h" #include "os/thread.h" +#include "packet/packet_view.h" #include "stack/btm/btm_int_types.h" #include "stack/include/bt_hdr.h" #include "stack/include/hci_error_code.h" #include "stack/l2cap/l2c_int.h" +#include "test/common/jni_thread.h" #include "test/common/main_handler.h" #include "test/common/mock_functions.h" #include "test/mock/mock_main_shim_entry.h" @@ -43,6 +61,8 @@ #include "types/hci_role.h" #include "types/raw_address.h" +using ::testing::_; + using namespace bluetooth; using namespace testing; @@ -55,6 +75,9 @@ tL2C_CB l2cb; tBTM_CB btm_cb; btif_hh_cb_t btif_hh_cb; +struct bluetooth::hci::LeScanningManager::impl + : public bluetooth::hci::LeAddressManagerCallback {}; + namespace { std::map<std::string, std::promise<uint16_t>> mock_function_handle_promise_map; } @@ -160,6 +183,8 @@ const shim::legacy::acl_interface_t GetMockAclInterface() { struct hci_packet_parser_t; const hci_packet_parser_t* hci_packet_parser_get_interface() { return nullptr; } +struct hci_t; +const hci_t* hci_layer_get_interface() { return nullptr; } struct packet_fragmenter_t; const packet_fragmenter_t* packet_fragmenter_get_interface() { return nullptr; } void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) {} @@ -256,6 +281,8 @@ class MainShimTest : public testing::Test { public: protected: void SetUp() override { + reset_mock_function_count_map(); + main_thread_start_up(); thread_ = new os::Thread("acl_thread", os::Thread::Priority::NORMAL); @@ -265,12 +292,20 @@ class MainShimTest : public testing::Test { new bluetooth::hci::testing::MockController(); /* extern */ test::mock_acl_manager_ = new bluetooth::hci::testing::MockAclManager(); + /* extern */ test::mock_le_scanning_manager_ = + new bluetooth::hci::testing::MockLeScanningManager(); + /* extern */ test::mock_le_advertising_manager_ = + new bluetooth::hci::testing::MockLeAdvertisingManager(); } void TearDown() override { delete test::mock_controller_; test::mock_controller_ = nullptr; delete test::mock_acl_manager_; test::mock_acl_manager_ = nullptr; + delete test::mock_le_advertising_manager_; + test::mock_le_advertising_manager_ = nullptr; + delete test::mock_le_scanning_manager_; + test::mock_le_scanning_manager_ = nullptr; handler_->Clear(); delete handler_; @@ -361,6 +396,8 @@ TEST_F(MainShimTest, connect_and_disconnect) { handler_->Call([](std::promise<void> done) { done.set_value(); }, std::move(done)); future.wait(); + + connection.reset(); } TEST_F(MainShimTest, is_flushable) { @@ -403,3 +440,66 @@ TEST_F(MainShimTest, is_flushable) { ASSERT_TRUE(IsPacketFlushable(bt_hdr)); } } + +TEST_F(MainShimTest, BleScannerInterfaceImpl_nop) { + auto* ble = static_cast<bluetooth::shim::BleScannerInterfaceImpl*>( + bluetooth::shim::get_ble_scanner_instance()); + ASSERT_NE(nullptr, ble); +} + +class TestScanningCallbacks : public ::ScanningCallbacks { + public: + ~TestScanningCallbacks() {} + void OnScannerRegistered(const bluetooth::Uuid app_uuid, uint8_t scannerId, + uint8_t status) override {} + void OnSetScannerParameterComplete(uint8_t scannerId, + uint8_t status) override {} + void OnScanResult(uint16_t event_type, uint8_t addr_type, RawAddress bda, + uint8_t primary_phy, uint8_t secondary_phy, + uint8_t advertising_sid, int8_t tx_power, int8_t rssi, + uint16_t periodic_adv_int, + std::vector<uint8_t> adv_data) override {} + void OnTrackAdvFoundLost( + AdvertisingTrackInfo advertising_track_info) override {} + void OnBatchScanReports(int client_if, int status, int report_format, + int num_records, std::vector<uint8_t> data) override { + } + void OnBatchScanThresholdCrossed(int client_if) override {} +}; + +TEST_F(MainShimTest, BleScannerInterfaceImpl_OnScanResult) { + auto* ble = static_cast<bluetooth::shim::BleScannerInterfaceImpl*>( + bluetooth::shim::get_ble_scanner_instance()); + + EXPECT_CALL(*hci::testing::mock_le_scanning_manager_, + RegisterScanningCallback(_)) + .Times(1); + ; + bluetooth::shim::init_scanning_manager(); + + TestScanningCallbacks cb; + ble->RegisterCallbacks(&cb); + + // Simulate scan results from the lower layers + for (int i = 0; i < 2048; i++) { + uint16_t event_type = 0; + uint8_t address_type = BLE_ADDR_ANONYMOUS; + bluetooth::hci::Address address; + uint8_t primary_phy = 0; + uint8_t secondary_phy = 0; + uint8_t advertising_sid = 0; + int8_t tx_power = 0; + int8_t rssi = 0; + uint16_t periodic_advertising_interval = 0; + std::vector<uint8_t> advertising_data; + + ble->OnScanResult(event_type, address_type, address, primary_phy, + secondary_phy, advertising_sid, tx_power, rssi, + periodic_advertising_interval, advertising_data); + } + + ASSERT_EQ(2 * 2048UL, do_in_jni_thread_task_queue.size()); + ASSERT_EQ(0, mock_function_count_map["btm_ble_process_adv_addr"]); + + run_all_jni_thread_task(); +} diff --git a/system/test/mock/mock_main_shim_entry.cc b/system/test/mock/mock_main_shim_entry.cc index 3fd4811a83..8a2fc1a7ea 100644 --- a/system/test/mock/mock_main_shim_entry.cc +++ b/system/test/mock/mock_main_shim_entry.cc @@ -14,14 +14,11 @@ * limitations under the License. */ -// #include "gd/btaa/activity_attribution.h" -#include "gd/module.h" - #include "gd/hci/acl_manager_mock.h" #include "gd/hci/controller_mock.h" #include "gd/hci/hci_layer.h" -#include "gd/hci/le_advertising_manager.h" -#include "gd/hci/le_scanning_manager.h" +#include "gd/hci/le_advertising_manager_mock.h" +#include "gd/hci/le_scanning_manager_mock.h" #include "gd/neighbor/connectability.h" #include "gd/neighbor/discoverability.h" #include "gd/neighbor/inquiry.h" @@ -41,6 +38,8 @@ namespace testing { MockAclManager* mock_acl_manager_{nullptr}; MockController* mock_controller_{nullptr}; os::Handler* mock_gd_shim_handler_{nullptr}; +MockLeAdvertisingManager* mock_le_advertising_manager_{nullptr}; +MockLeScanningManager* mock_le_scanning_manager_{nullptr}; } // namespace testing } // namespace hci @@ -56,8 +55,12 @@ activity_attribution::ActivityAttribution* GetActivityAttribution() { hci::AclManager* GetAclManager() { return hci::testing::mock_acl_manager_; } hci::Controller* GetController() { return hci::testing::mock_controller_; } hci::HciLayer* GetHciLayer() { return nullptr; } -hci::LeAdvertisingManager* GetAdvertising() { return nullptr; } -hci::LeScanningManager* GetScanning() { return nullptr; } +hci::LeAdvertisingManager* GetAdvertising() { + return hci::testing::mock_le_advertising_manager_; +} +hci::LeScanningManager* GetScanning() { + return hci::testing::mock_le_scanning_manager_; +} hci::VendorSpecificEventManager* GetVendorSpecificEventManager() { return nullptr; } diff --git a/system/test/mock/mock_main_shim_entry.h b/system/test/mock/mock_main_shim_entry.h index 4f6aa70cbc..c955e930ed 100644 --- a/system/test/mock/mock_main_shim_entry.h +++ b/system/test/mock/mock_main_shim_entry.h @@ -14,12 +14,19 @@ * limitations under the License. */ +#include "hci/acl_manager_mock.h" +#include "hci/controller_mock.h" +#include "hci/le_advertising_manager_mock.h" +#include "hci/le_scanning_manager_mock.h" + namespace bluetooth { namespace hci { namespace testing { extern MockAclManager* mock_acl_manager_; extern MockController* mock_controller_; +extern MockLeAdvertisingManager* mock_le_advertising_manager_; +extern MockLeScanningManager* mock_le_scanning_manager_; } // namespace testing } // namespace hci |