From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> Set Static Address tests needs to power after setting the address since the programming of the address using the HCI command only happens during power on procedure. --- tools/mgmt-tester.c | 63 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c index 7bb219953a7c..a56c38173fb7 100644 --- a/tools/mgmt-tester.c +++ b/tools/mgmt-tester.c @@ -14,6 +14,7 @@ #include <stdlib.h> #include <stdbool.h> +#include <string.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <sys/types.h> @@ -33,6 +34,7 @@ #include "emulator/vhci.h" #include "emulator/bthost.h" #include "emulator/hciemu.h" +#include "emulator/btdev.h" #include "src/shared/util.h" #include "src/shared/tester.h" @@ -299,6 +301,7 @@ struct hci_entry { }; struct generic_data { + bdaddr_t *setup_bdaddr; bool setup_le_states; const uint8_t *le_states; const uint16_t *setup_settings; @@ -416,6 +419,16 @@ static void read_index_list_callback(uint8_t status, uint16_t length, if (tester_use_debug()) hciemu_set_debug(data->hciemu, print_debug, "hciemu: ", NULL); + if (test && test->setup_bdaddr) { + struct vhci *vhci = hciemu_get_vhci(data->hciemu); + struct btdev *btdev = vhci_get_btdev(vhci); + + if (!btdev_set_bdaddr(btdev, test->setup_bdaddr->b)) { + tester_warn("btdev_set_bdaddr failed"); + tester_pre_setup_failed(); + } + } + if (test && test->setup_le_states) hciemu_set_central_le_states(data->hciemu, test->le_states); @@ -4055,30 +4068,38 @@ static const struct generic_data unblock_device_invalid_param_test_1 = { static const char set_static_addr_valid_param[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0xc0 }; -static const char set_static_addr_settings[] = { 0x00, 0x82, 0x00, 0x00 }; +static const char set_static_addr_settings_param[] = { 0x01, 0x82, 0x00, 0x00 }; static const struct generic_data set_static_addr_success_test = { - .send_opcode = MGMT_OP_SET_STATIC_ADDRESS, - .send_param = set_static_addr_valid_param, - .send_len = sizeof(set_static_addr_valid_param), + .setup_bdaddr = BDADDR_ANY, + .setup_send_opcode = MGMT_OP_SET_STATIC_ADDRESS, + .setup_send_param = set_static_addr_valid_param, + .setup_send_len = sizeof(set_static_addr_valid_param), + .send_opcode = MGMT_OP_SET_POWERED, + .send_param = set_powered_on_param, + .send_len = sizeof(set_powered_on_param), .expect_status = MGMT_STATUS_SUCCESS, - .expect_param = set_static_addr_settings, - .expect_len = sizeof(set_static_addr_settings), + .expect_param = set_static_addr_settings_param, + .expect_len = sizeof(set_static_addr_settings_param), .expect_settings_set = MGMT_SETTING_STATIC_ADDRESS, .expect_hci_command = BT_HCI_CMD_LE_SET_RANDOM_ADDRESS, .expect_hci_param = set_static_addr_valid_param, .expect_hci_len = sizeof(set_static_addr_valid_param), }; -static const char set_static_addr_settings_dual[] = { 0x80, 0x00, 0x00, 0x00 }; +static const char set_static_addr_settings_dual[] = { 0x81, 0x80, 0x00, 0x00 }; static const struct generic_data set_static_addr_success_test_2 = { - .send_opcode = MGMT_OP_SET_STATIC_ADDRESS, - .send_param = set_static_addr_valid_param, - .send_len = sizeof(set_static_addr_valid_param), + .setup_send_opcode = MGMT_OP_SET_STATIC_ADDRESS, + .setup_send_param = set_static_addr_valid_param, + .setup_send_len = sizeof(set_static_addr_valid_param), + .send_opcode = MGMT_OP_SET_POWERED, + .send_param = set_powered_on_param, + .send_len = sizeof(set_powered_on_param), .expect_status = MGMT_STATUS_SUCCESS, .expect_param = set_static_addr_settings_dual, .expect_len = sizeof(set_static_addr_settings_dual), + .expect_settings_set = MGMT_SETTING_STATIC_ADDRESS, .expect_hci_command = BT_HCI_CMD_LE_SET_RANDOM_ADDRESS, .expect_hci_param = set_static_addr_valid_param, .expect_hci_len = sizeof(set_static_addr_valid_param), @@ -11386,6 +11407,23 @@ static void test_command_generic(const void *test_data) test_add_condition(data); } +static void setup_set_static_addr_success_2(const void *test_data) +{ + struct test_data *data = tester_get_data(); + struct vhci *vhci = hciemu_get_vhci(data->hciemu); + int err; + + /* Force use of static address */ + err = vhci_set_force_static_address(vhci, true); + if (err) { + tester_warn("Unable to set force_static_address: %s (%d)", + strerror(-err), -err); + tester_test_failed(); + return; + } + setup_command_generic(test_data); +} + static void check_scan(void *user_data) { struct test_data *data = tester_get_data(); @@ -13233,10 +13271,11 @@ int main(int argc, char *argv[]) test_le("Set Static Address - Success 1", &set_static_addr_success_test, - NULL, test_command_generic); + setup_command_generic, test_command_generic); test_bredrle("Set Static Address - Success 2", &set_static_addr_success_test_2, - NULL, test_command_generic); + setup_set_static_addr_success_2, + test_command_generic); test_bredrle("Set Static Address - Failure 1", &set_static_addr_failure_test, NULL, test_command_generic); -- 2.37.3