2022-12-07 01:41:52

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 2/2] iso-tester: Add test when peer rejects CIS

From: Luiz Augusto von Dentz <[email protected]>

This adds the following test for testing when remote stack rejects the
CIS:
---
tools/iso-tester.c | 37 +++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/tools/iso-tester.c b/tools/iso-tester.c
index d29f35695a00..d790b15563a1 100644
--- a/tools/iso-tester.c
+++ b/tools/iso-tester.c
@@ -130,6 +130,7 @@ struct test_data {
uint16_t mgmt_index;
struct hciemu *hciemu;
enum hciemu_type hciemu_type;
+ uint8_t accept_reason;
uint16_t handle;
uint16_t acl_handle;
GIOChannel *io;
@@ -342,7 +343,7 @@ static void test_data_free(void *test_data)
free(data);
}

-#define test_iso_full(name, data, setup, func, num) \
+#define test_iso_full(name, data, setup, func, num, reason) \
do { \
struct test_data *user; \
user = new0(struct test_data, 1); \
@@ -351,16 +352,20 @@ static void test_data_free(void *test_data)
user->hciemu_type = HCIEMU_TYPE_BREDRLE; \
user->test_data = data; \
user->client_num = num; \
+ user->accept_reason = reason; \
tester_add_full(name, data, \
test_pre_setup, setup, func, NULL, \
test_post_teardown, 2, user, test_data_free); \
} while (0)

#define test_iso(name, data, setup, func) \
- test_iso_full(name, data, setup, func, 1)
+ test_iso_full(name, data, setup, func, 1, 0x00)

#define test_iso2(name, data, setup, func) \
- test_iso_full(name, data, setup, func, 2)
+ test_iso_full(name, data, setup, func, 2, 0x00)
+
+#define test_iso_rej(name, data, setup, func, reason) \
+ test_iso_full(name, data, setup, func, 1, reason)

static const struct iso_client_data connect_8_1_1 = {
.qos = QOS_8_1_1,
@@ -537,6 +542,11 @@ static const struct iso_client_data connect_invalid = {
.expect_err = -EINVAL
};

+static const struct iso_client_data connect_reject = {
+ .qos = QOS_16_1_2,
+ .expect_err = -ENOSYS
+};
+
static const uint8_t data_16_2_1[40] = { [0 ... 39] = 0xff };
static const struct iovec send_16_2_1 = {
.iov_base = (void *)data_16_2_1,
@@ -714,6 +724,16 @@ static void iso_new_conn(uint16_t handle, void *user_data)
bthost_iso_disconnected);
}

+static uint8_t iso_accept_conn(uint16_t handle, void *user_data)
+{
+ struct test_data *data = user_data;
+
+ tester_print("Accept client connection with handle 0x%04x: 0x%02x",
+ handle, data->accept_reason);
+
+ return data->accept_reason;
+}
+
static void acl_new_conn(uint16_t handle, void *user_data)
{
struct test_data *data = user_data;
@@ -751,8 +771,10 @@ static void setup_powered_callback(uint8_t status, uint16_t length,
if (!isodata)
continue;

- if (isodata->send || isodata->recv || isodata->disconnect)
- bthost_set_iso_cb(host, NULL, iso_new_conn, data);
+ if (isodata->send || isodata->recv || isodata->disconnect ||
+ data->accept_reason)
+ bthost_set_iso_cb(host, iso_accept_conn, iso_new_conn,
+ data);

if (isodata->bcast) {
bthost_set_pa_params(host);
@@ -1249,7 +1271,7 @@ static gboolean iso_connect(GIOChannel *io, GIOCondition cond,
else
tester_print("Successfully connected");

- if (-err != isodata->expect_err) {
+ if (err != isodata->expect_err) {
tester_warn("Expect error: %s (%d) != %s (%d)",
strerror(-isodata->expect_err),
-isodata->expect_err, strerror(-err), -err);
@@ -1773,6 +1795,9 @@ int main(int argc, char *argv[])
test_iso("ISO QoS - Invalid", &connect_invalid, setup_powered,
test_connect);

+ test_iso_rej("ISO Connect - Reject", &connect_reject, setup_powered,
+ test_connect, BT_HCI_ERR_CONN_FAILED_TO_ESTABLISH);
+
test_iso2("ISO Connect2 CIG 0x01 - Success", &connect_1_16_2_1,
setup_powered,
test_connect2);
--
2.37.3