summaryrefslogtreecommitdiff
path: root/tools/l2cap-tester.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2015-11-12 12:33:16 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2015-11-12 12:33:57 +0200
commitb6521c4eff79b06b3d7b44955853c7e3b78b2e09 (patch)
tree71452745f82251d020b15b08aa320c124d680f66 /tools/l2cap-tester.c
parent7d1d5cdd6dbc464b2f3c0b1d341dd72c08ed2611 (diff)
downloadbluez-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.c51
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);