summaryrefslogtreecommitdiff
path: root/tools/l2cap-tester.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@intel.com>2014-01-23 15:15:17 +0200
committerJohan Hedberg <johan.hedberg@intel.com>2014-01-23 15:15:17 +0200
commitde33c9823c54d258e5e84d435b549835fd81ba85 (patch)
tree43e0e5d225db7511c4dbe3d95bcf50a8a00ec97f /tools/l2cap-tester.c
parent1189258e8ee6348ae8085803b85bb7685323635f (diff)
downloadbluez-de33c9823c54d258e5e84d435b549835fd81ba85.tar.gz
tools/l2cap-tester: Add basic ATT Client test case
Diffstat (limited to 'tools/l2cap-tester.c')
-rw-r--r--tools/l2cap-tester.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/tools/l2cap-tester.c b/tools/l2cap-tester.c
index 1f730477b..b3fdbd518 100644
--- a/tools/l2cap-tester.c
+++ b/tools/l2cap-tester.c
@@ -58,6 +58,7 @@ struct test_data {
struct l2cap_data {
uint16_t client_psm;
uint16_t server_psm;
+ uint16_t cid;
int expect_err;
uint8_t send_cmd_code;
@@ -458,6 +459,10 @@ static const struct l2cap_data le_server_success_test = {
.expect_cmd_code = BT_L2CAP_PDU_LE_CONN_RSP,
};
+static const struct l2cap_data le_att_client_connect_success_test_1 = {
+ .cid = 0x0004,
+};
+
static void client_cmd_complete(uint16_t opcode, uint8_t status,
const void *param, uint8_t len,
void *user_data)
@@ -876,7 +881,7 @@ static gboolean l2cap_connect_cb(GIOChannel *io, GIOCondition cond,
}
static int create_l2cap_sock(struct test_data *data, uint16_t psm,
- int sec_level)
+ uint16_t cid, int sec_level)
{
const uint8_t *master_bdaddr;
struct sockaddr_l2 addr;
@@ -901,6 +906,7 @@ static int create_l2cap_sock(struct test_data *data, uint16_t psm,
memset(&addr, 0, sizeof(addr));
addr.l2_family = AF_BLUETOOTH;
addr.l2_psm = htobs(psm);
+ addr.l2_cid = htobs(cid);
bacpy(&addr.l2_bdaddr, (void *) master_bdaddr);
if (data->hciemu_type == HCIEMU_TYPE_LE)
addr.l2_bdaddr_type = BDADDR_LE_PUBLIC;
@@ -934,7 +940,8 @@ static int create_l2cap_sock(struct test_data *data, uint16_t psm,
return sk;
}
-static int connect_l2cap_sock(struct test_data *data, int sk, uint16_t psm)
+static int connect_l2cap_sock(struct test_data *data, int sk, uint16_t psm,
+ uint16_t cid)
{
const uint8_t *client_bdaddr;
struct sockaddr_l2 addr;
@@ -950,6 +957,7 @@ static int connect_l2cap_sock(struct test_data *data, int sk, uint16_t psm)
addr.l2_family = AF_BLUETOOTH;
bacpy(&addr.l2_bdaddr, (void *) client_bdaddr);
addr.l2_psm = htobs(psm);
+ addr.l2_cid = htobs(cid);
if (data->hciemu_type == HCIEMU_TYPE_LE)
addr.l2_bdaddr_type = BDADDR_LE_PUBLIC;
else
@@ -993,13 +1001,14 @@ static void test_connect(const void *test_data)
client_l2cap_connect_cb, data);
}
- sk = create_l2cap_sock(data, 0, l2data->sec_level);
+ sk = create_l2cap_sock(data, 0, l2data->cid, l2data->sec_level);
if (sk < 0) {
tester_test_failed();
return;
}
- if (connect_l2cap_sock(data, sk, l2data->client_psm) < 0) {
+ if (connect_l2cap_sock(data, sk, l2data->client_psm,
+ l2data->cid) < 0) {
close(sk);
tester_test_failed();
return;
@@ -1165,7 +1174,7 @@ static void test_server(const void *test_data)
if (l2data->server_psm) {
sk = create_l2cap_sock(data, l2data->server_psm,
- l2data->sec_level);
+ l2data->cid, l2data->sec_level);
if (sk < 0) {
tester_test_failed();
return;
@@ -1292,5 +1301,10 @@ int main(int argc, char *argv[])
test_l2cap_le("L2CAP LE Server - Success", &le_server_success_test,
setup_powered_server, test_server);
+
+ test_l2cap_le("L2CAP LE ATT Client - Success",
+ &le_att_client_connect_success_test_1,
+ setup_powered_client, test_connect);
+
return tester_run();
}