diff mbox series

[BlueZ,4/4] iso-tester: add test for ACL disconnect before ISO created

Message ID 444c48235fb02ac68871236ce669fd02b4a4736d.1692451184.git.pav@iki.fi (mailing list archive)
State Accepted
Commit 70b4db6803b46d5f9ad08a3f72eef9186b25e50a
Headers show
Series [BlueZ,1/4] vhci: Add function to pause processing input from vhci | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/CheckPatch success CheckPatch PASS
tedd_an/GitLint success Gitlint PASS
tedd_an/IncrementalBuild success Incremental Build PASS

Commit Message

Pauli Virtanen Aug. 19, 2023, 1:31 p.m. UTC
Simulate ACL being disconnected when connecting ISO, before LE Create
CIS got sent.  The kernel shall indicate connection failure for the ISO
socket immediately when the ACL is gone, since connecting the ISO can no
longer proceed.

ISO Connect ACL Disconnect - Failure
---

Notes:
    Current bluetooth-next/master kernel fails this.

 tools/iso-tester.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
diff mbox series

Patch

diff --git a/tools/iso-tester.c b/tools/iso-tester.c
index b1a2afba0..48c8ab52a 100644
--- a/tools/iso-tester.c
+++ b/tools/iso-tester.c
@@ -2628,6 +2628,40 @@  static void test_connect_suspend(const void *test_data)
 	trigger_force_suspend((void *)test_data);
 }
 
+static bool hook_acl_disc(const void *msg, uint16_t len, void *user_data)
+{
+	const uint8_t *msg_data = msg;
+	const struct bt_hci_evt_le_enhanced_conn_complete *ev;
+	struct test_data *data = tester_get_data();
+	struct bthost *bthost;
+
+	if (msg_data[0] != BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE)
+		return true;
+
+	ev = (void *) &msg_data[1];
+
+	tester_print("Disconnect ACL");
+
+	bthost = hciemu_client_get_host(data->hciemu);
+	bthost_hci_disconnect(bthost, le16_to_cpu(ev->handle), 0x13);
+
+	hciemu_flush_client_events(data->hciemu);
+
+	return true;
+}
+
+static void test_connect_acl_disc(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+
+	/* ACL disconnected before ISO is created */
+	hciemu_add_hook(data->hciemu, HCIEMU_HOOK_POST_EVT,
+					BT_HCI_EVT_LE_META_EVENT,
+					hook_acl_disc, NULL);
+
+	test_connect(test_data);
+}
+
 static void test_bcast(const void *test_data)
 {
 	struct test_data *data = tester_get_data();
@@ -2850,6 +2884,10 @@  int main(int argc, char *argv[])
 							setup_powered,
 							test_connect2);
 
+	test_iso("ISO Connect ACL Disconnect - Failure", &connect_suspend,
+							setup_powered,
+							test_connect_acl_disc);
+
 	test_iso("ISO Defer Send - Success", &connect_16_2_1_defer_send,
 							setup_powered,
 							test_connect);