From f5043771c27b5d9c19b1415e4e4c1eb5f7d470f8 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sun, 16 Nov 2025 15:51:58 +0200 Subject: [PATCH] mgmt-tester: add tests for discoverable timeout Test that the discoverable timeout can be set successfully and that the timeout actually triggers: Set discoverable on timeout - Success 1 Set discoverable on timeout - Success 2 (Timeout) --- tools/mgmt-tester.c | 63 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c index 663879a8f..90dfa3527 100644 --- a/tools/mgmt-tester.c +++ b/tools/mgmt-tester.c @@ -343,6 +343,7 @@ struct generic_data { const void * (*expect_func)(uint16_t *len); uint32_t expect_settings_set; uint32_t expect_settings_unset; + uint32_t expect_settings_spontaneous; uint16_t expect_alt_ev; const void *expect_alt_ev_param; bool (*verify_alt_ev_func)(const void *param, uint16_t length); @@ -1206,6 +1207,7 @@ static const struct generic_data set_bondable_on_invalid_index_test = { static const uint8_t set_discoverable_on_param[] = { 0x01, 0x00, 0x00 }; static const uint8_t set_discoverable_timeout_param[] = { 0x01, 0x0a, 0x00 }; +static const uint8_t set_discoverable_timeout_1_param[] = { 0x01, 0x01, 0x00 }; static const uint8_t set_discoverable_invalid_param[] = { 0x02, 0x00, 0x00 }; static const uint8_t set_discoverable_off_param[] = { 0x00, 0x00, 0x00 }; static const uint8_t set_discoverable_offtimeout_param[] = { 0x00, 0x01, 0x00 }; @@ -1307,6 +1309,36 @@ static const struct generic_data set_discoverable_on_success_test_2 = { .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param), }; +static const struct generic_data set_discoverable_on_timeout_success_test_1 = { + .setup_settings = settings_powered_connectable, + .send_opcode = MGMT_OP_SET_DISCOVERABLE, + .send_param = set_discoverable_timeout_param, + .send_len = sizeof(set_discoverable_timeout_param), + .expect_status = MGMT_STATUS_SUCCESS, + .expect_param = set_discoverable_on_settings_param_2, + .expect_len = sizeof(set_discoverable_on_settings_param_2), + .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE, + .expect_hci_param = set_discoverable_on_scan_enable_param, + .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param), +}; + +static const struct generic_data set_discoverable_on_timeout_success_test_2 = { + .setup_settings = settings_powered_connectable, + .send_opcode = MGMT_OP_SET_DISCOVERABLE, + .send_param = set_discoverable_timeout_1_param, + .send_len = sizeof(set_discoverable_timeout_1_param), + .expect_status = MGMT_STATUS_SUCCESS, + .expect_settings_set = MGMT_SETTING_DISCOVERABLE, + .expect_settings_spontaneous = MGMT_SETTING_POWERED | + MGMT_SETTING_CONNECTABLE | + MGMT_SETTING_BREDR, + .expect_param = set_discoverable_on_settings_param_2, + .expect_len = sizeof(set_discoverable_on_settings_param_2), + .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE, + .expect_hci_param = set_discoverable_on_scan_enable_param, + .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param), +}; + static uint8_t set_discov_on_le_param[] = { 0x0b, 0x06, 0x00, 0x00 }; static uint8_t set_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x06, 0x02, 0x0a, }; @@ -7333,12 +7365,27 @@ static void command_generic_new_settings(uint16_t index, uint16_t length, const void *param, void *user_data) { struct test_data *data = tester_get_data(); + const struct generic_data *test = data->test_data; + uint32_t settings; - tester_print("New settings event received"); + if (length != 4) { + tester_warn("Invalid parameter size for new settings event"); + tester_test_failed(); + return; + } + + settings = get_le32(param); + tester_print("New settings 0x%08x received (local)", settings); mgmt_unregister(data->mgmt, data->mgmt_settings_id); - tester_test_failed(); + if (!test->expect_settings_spontaneous) { + tester_test_failed(); + return; + } + + if (settings == test->expect_settings_spontaneous) + test_condition_complete(data); } static void command_generic_new_settings_alt(uint16_t index, uint16_t length, @@ -11592,7 +11639,8 @@ static void test_command_generic(const void *test_data) index = test->send_index_none ? MGMT_INDEX_NONE : data->mgmt_index; - if (test->expect_settings_set || test->expect_settings_unset) { + if (test->expect_settings_set || test->expect_settings_unset || + test->expect_settings_spontaneous) { tester_print("Registering new settings notification"); id = mgmt_register(data->mgmt, MGMT_EV_NEW_SETTINGS, index, @@ -11603,6 +11651,9 @@ static void test_command_generic(const void *test_data) command_generic_new_settings_alt, NULL, NULL); data->mgmt_alt_settings_id = id; test_add_condition(data); + + if (test->expect_settings_spontaneous) + test_add_condition(data); } if (test->expect_alt_ev) { @@ -13146,6 +13197,12 @@ int main(int argc, char *argv[]) test_bredrle("Set discoverable on - Success 2", &set_discoverable_on_success_test_2, NULL, test_command_generic); + test_bredrle("Set discoverable on timeout - Success 1", + &set_discoverable_on_timeout_success_test_1, + NULL, test_command_generic); + test_bredrle_full("Set discoverable on timeout - Success 2 (Timeout)", + &set_discoverable_on_timeout_success_test_2, + NULL, test_command_generic, 8); test_le("Set discoverable on (LE) - Success 1", &set_discov_on_le_success_1, NULL, test_command_generic); -- 2.47.3