diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2015-11-12 12:33:16 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2015-11-12 12:33:57 +0200 |
commit | b6521c4eff79b06b3d7b44955853c7e3b78b2e09 (patch) | |
tree | 71452745f82251d020b15b08aa320c124d680f66 /tools/l2cap-tester.c | |
parent | 7d1d5cdd6dbc464b2f3c0b1d341dd72c08ed2611 (diff) | |
download | bluez-b6521c4eff79b06b3d7b44955853c7e3b78b2e09.tar.gz |
tools/l2cap-tester: Add test case for direct advertising
Diffstat (limited to 'tools/l2cap-tester.c')
-rw-r--r-- | tools/l2cap-tester.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c index f02cb2479..56671a18f 100644 --- a/tools/l2cap-tester.c +++ b/tools/l2cap-tester.c @@ -90,6 +90,7 @@ struct l2cap_data { uint8_t *client_bdaddr; bool server_not_advertising; + bool direct_advertising; bool close_one_socket; }; @@ -435,6 +436,12 @@ static const struct l2cap_data le_client_connect_success_test_1 = { .server_psm = 0x0080, }; +static const struct l2cap_data le_client_connect_adv_success_test_1 = { + .client_psm = 0x0080, + .server_psm = 0x0080, + .direct_advertising = true, +}; + static const struct l2cap_data le_client_connect_success_test_2 = { .client_psm = 0x0080, .server_psm = 0x0080, @@ -787,6 +794,11 @@ static void setup_powered_client(const void *test_data) bthost_set_connect_cb(bthost, send_rsp_new_conn, data); } + if (test->direct_advertising) + mgmt_send(data->mgmt, MGMT_OP_SET_ADVERTISING, + data->mgmt_index, sizeof(param), param, + NULL, NULL, NULL); + mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index, sizeof(param), param, setup_powered_client_callback, NULL, NULL); @@ -1147,6 +1159,38 @@ static void client_l2cap_connect_cb(uint16_t handle, uint16_t cid, data->handle = handle; } +static void direct_adv_cmd_complete(uint16_t opcode, const void *param, + uint8_t len, void *user_data) +{ + struct test_data *data = tester_get_data(); + const struct bt_hci_cmd_le_set_adv_parameters *cp; + const uint8_t *expect_bdaddr; + + if (opcode != BT_HCI_CMD_LE_SET_ADV_PARAMETERS) + return; + + tester_print("Received advertising parameters HCI command"); + + cp = param; + + /* Advertising as client should be direct advertising */ + if (cp->type != 0x01) { + tester_warn("Invalid advertising type"); + tester_test_failed(); + return; + } + + expect_bdaddr = hciemu_get_client_bdaddr(data->hciemu); + if (memcmp(expect_bdaddr, cp->direct_addr, 6)) { + tester_warn("Invalid direct address in adv params"); + tester_test_failed(); + return; + } + + tester_test_passed(); + +} + static void test_connect(const void *test_data) { struct test_data *data = tester_get_data(); @@ -1165,6 +1209,10 @@ static void test_connect(const void *test_data) client_l2cap_connect_cb, data); } + if (l2data->direct_advertising) + hciemu_add_master_post_command_hook(data->hciemu, + direct_adv_cmd_complete, NULL); + sk = create_l2cap_sock(data, 0, l2data->cid, l2data->sec_level); if (sk < 0) { tester_test_failed(); @@ -1831,6 +1879,9 @@ int main(int argc, char *argv[]) test_l2cap_le("L2CAP LE Client - Success", &le_client_connect_success_test_1, setup_powered_client, test_connect); + test_l2cap_le("L2CAP LE Client, Direct Advertising - Success", + &le_client_connect_adv_success_test_1, + setup_powered_client, test_connect); test_l2cap_le("L2CAP LE Client SMP - Success", &le_client_connect_success_test_2, setup_powered_client, test_connect); |