Skip to content

Commit 3eb4d79

Browse files
Thalleyjhedberg
authored andcommitted
tests: Bluetooth: CAP: Add verification of CAP unicast start callbacks
Add verification of the CAP Unicast Audio Start callback parameters. There was a missing part in the BAP Unicast Client mock that did not set the ISO state correctly, which caused the procedures to fail, but without the verification that was not caught. Signed-off-by: Emil Gydesen <[email protected]>
1 parent 12a866f commit 3eb4d79

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

tests/bluetooth/audio/cap_initiator/src/test_unicast_start.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* test_unicast_start.c - unit test for unicast start procedure */
22

33
/*
4-
* Copyright (c) 2024 Nordic Semiconductor ASA
4+
* Copyright (c) 2024-2025 Nordic Semiconductor ASA
55
*
66
* SPDX-License-Identifier: Apache-2.0
77
*/
@@ -23,6 +23,7 @@
2323
#include <sys/errno.h>
2424

2525
#include "bap_endpoint.h"
26+
#include "bap_iso.h"
2627
#include "cap_initiator.h"
2728
#include "conn.h"
2829
#include "expects_util.h"
@@ -33,6 +34,7 @@
3334
struct cap_initiator_test_unicast_start_fixture {
3435
struct bt_cap_stream cap_streams[CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT];
3536
struct bt_bap_ep eps[CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT];
37+
struct bt_bap_iso bap_iso[CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT];
3638
struct bt_bap_unicast_group unicast_group;
3739
struct bt_conn conns[CONFIG_BT_MAX_CONN];
3840
struct bt_bap_lc3_preset preset;
@@ -57,6 +59,7 @@ static void cap_initiator_test_unicast_start_fixture_init(
5759

5860
for (size_t i = 0U; i < ARRAY_SIZE(fixture->eps); i++) {
5961
fixture->eps[i].dir = (i & 1) + 1; /* Makes it either 1 or 2 (sink or source)*/
62+
fixture->eps[i].iso = &fixture->bap_iso[i];
6063
}
6164
}
6265

@@ -129,6 +132,11 @@ static ZTEST_F(cap_initiator_test_unicast_start, test_initiator_unicast_start)
129132
zexpect_call_count("bt_cap_initiator_cb.unicast_start_complete_cb", 1,
130133
mock_cap_initiator_unicast_start_complete_cb_fake.call_count);
131134

135+
zassert_equal(0, mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0], "%d",
136+
mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0]);
137+
zassert_equal_ptr(NULL, mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0],
138+
"%p", mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0]);
139+
132140
for (size_t i = 0U; i < ARRAY_SIZE(stream_params); i++) {
133141
const struct bt_bap_stream *bap_stream = &fixture->cap_streams[i].bap_stream;
134142
const enum bt_bap_ep_state state = bap_stream->ep->status.state;
@@ -415,6 +423,10 @@ static ZTEST_F(cap_initiator_test_unicast_start,
415423

416424
zexpect_call_count("bt_cap_initiator_cb.unicast_start_complete_cb", 1,
417425
mock_cap_initiator_unicast_start_complete_cb_fake.call_count);
426+
zassert_equal(0, mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0], "%d",
427+
mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0]);
428+
zassert_equal_ptr(NULL, mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0],
429+
"%p", mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0]);
418430

419431
for (size_t i = 0U; i < ARRAY_SIZE(stream_params); i++) {
420432
const struct bt_bap_stream *bap_stream = &fixture->cap_streams[i].bap_stream;
@@ -452,6 +464,10 @@ static ZTEST_F(cap_initiator_test_unicast_start, test_initiator_unicast_start_st
452464

453465
zexpect_call_count("bt_cap_initiator_cb.unicast_start_complete_cb", 1,
454466
mock_cap_initiator_unicast_start_complete_cb_fake.call_count);
467+
zassert_equal(0, mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0], "%d",
468+
mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0]);
469+
zassert_equal_ptr(NULL, mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0],
470+
"%p", mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0]);
455471

456472
for (size_t i = 0U; i < ARRAY_SIZE(stream_params); i++) {
457473
const struct bt_bap_stream *bap_stream = &fixture->cap_streams[i].bap_stream;
@@ -489,6 +505,10 @@ static ZTEST_F(cap_initiator_test_unicast_start, test_initiator_unicast_start_st
489505

490506
zexpect_call_count("bt_cap_initiator_cb.unicast_start_complete_cb", 1,
491507
mock_cap_initiator_unicast_start_complete_cb_fake.call_count);
508+
zassert_equal(0, mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0], "%d",
509+
mock_cap_initiator_unicast_start_complete_cb_fake.arg0_history[0]);
510+
zassert_equal_ptr(NULL, mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0],
511+
"%p", mock_cap_initiator_unicast_start_complete_cb_fake.arg1_history[0]);
492512

493513
for (size_t i = 0U; i < ARRAY_SIZE(stream_params); i++) {
494514
const struct bt_bap_stream *bap_stream = &fixture->cap_streams[i].bap_stream;

tests/bluetooth/audio/cap_initiator/uut/bap_unicast_client.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <zephyr/bluetooth/audio/bap.h>
1515
#include <zephyr/bluetooth/conn.h>
1616
#include <zephyr/bluetooth/hci_types.h>
17+
#include <zephyr/bluetooth/iso.h>
1718
#include <zephyr/sys/printk.h>
1819
#include <zephyr/sys/slist.h>
1920
#include <zephyr/ztest_assert.h>
@@ -156,25 +157,30 @@ int bt_bap_unicast_client_metadata(struct bt_bap_stream *stream, const uint8_t m
156157

157158
int bt_bap_unicast_client_connect(struct bt_bap_stream *stream)
158159
{
160+
struct bt_bap_ep *ep;
161+
159162
if (stream == NULL) {
160163
return -EINVAL;
161164
}
162165

163-
switch (stream->ep->status.state) {
166+
ep = stream->ep;
167+
168+
switch (ep->status.state) {
164169
case BT_BAP_EP_STATE_QOS_CONFIGURED:
165170
case BT_BAP_EP_STATE_ENABLING:
166171
break;
167172
default:
168173
return -EINVAL;
169174
}
170175

176+
ep->iso->chan.state = BT_ISO_STATE_CONNECTED;
171177
if (stream->ops != NULL && stream->ops->connected != NULL) {
172178
stream->ops->connected(stream);
173179
}
174180

175-
if (stream->ep != NULL && stream->ep->dir == BT_AUDIO_DIR_SINK) {
181+
if (ep->dir == BT_AUDIO_DIR_SINK) {
176182
/* Mocking that the unicast server automatically starts the stream */
177-
stream->ep->status.state = BT_BAP_EP_STATE_STREAMING;
183+
ep->status.state = BT_BAP_EP_STATE_STREAMING;
178184

179185
if (stream->ops != NULL && stream->ops->started != NULL) {
180186
stream->ops->started(stream);

0 commit comments

Comments
 (0)