1 /* main.c - Application main entry point */
2
3 /*
4 * Copyright (c) 2023-2024 Nordic Semiconductor ASA
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 */
8
9 #include <stdint.h>
10 #include <stdlib.h>
11 #include <string.h>
12
13 #include <zephyr/bluetooth/audio/audio.h>
14 #include <zephyr/bluetooth/audio/bap.h>
15 #include <zephyr/bluetooth/audio/lc3.h>
16 #include <zephyr/bluetooth/byteorder.h>
17 #include <zephyr/bluetooth/hci_types.h>
18 #include <zephyr/bluetooth/iso.h>
19 #include <zephyr/fff.h>
20 #include <zephyr/kernel.h>
21 #include <zephyr/net_buf.h>
22 #include <zephyr/sys/printk.h>
23 #include <zephyr/sys/util_macro.h>
24
25 #include "bap_broadcast_source.h"
26 #include "bap_stream.h"
27 #include "bluetooth.h"
28 #include "expects_util.h"
29 #include "ztest_assert.h"
30 #include "ztest_test.h"
31
32 DEFINE_FFF_GLOBALS;
33
mock_init_rule_before(const struct ztest_unit_test * test,void * fixture)34 static void mock_init_rule_before(const struct ztest_unit_test *test, void *fixture)
35 {
36 mock_bap_broadcast_source_init();
37 mock_bap_stream_init();
38 }
39
mock_destroy_rule_after(const struct ztest_unit_test * test,void * fixture)40 static void mock_destroy_rule_after(const struct ztest_unit_test *test, void *fixture)
41 {
42 mock_bap_stream_cleanup();
43 }
44
45 ZTEST_RULE(mock_rule, mock_init_rule_before, mock_destroy_rule_after);
46
47 struct bap_broadcast_source_test_suite_fixture {
48 struct bt_bap_broadcast_source_param *param;
49 size_t stream_cnt;
50 struct bt_bap_broadcast_source *source;
51 };
52
bap_broadcast_source_test_suite_fixture_init(struct bap_broadcast_source_test_suite_fixture * fixture)53 static void bap_broadcast_source_test_suite_fixture_init(
54 struct bap_broadcast_source_test_suite_fixture *fixture)
55 {
56 const uint8_t bis_cfg_data[] = {
57 BT_AUDIO_CODEC_DATA(BT_AUDIO_CODEC_CFG_CHAN_ALLOC,
58 BT_BYTES_LIST_LE32(BT_AUDIO_LOCATION_FRONT_LEFT |
59 BT_AUDIO_LOCATION_FRONT_RIGHT)),
60 };
61 const size_t streams_per_subgroup = CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT /
62 CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT;
63 const enum bt_audio_context ctx = BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED;
64 const enum bt_audio_location loc = BT_AUDIO_LOCATION_FRONT_LEFT;
65 struct bt_bap_broadcast_source_subgroup_param *subgroup_param;
66 struct bt_bap_broadcast_source_stream_param *stream_params;
67 struct bt_audio_codec_cfg *codec_cfg;
68 struct bt_bap_qos_cfg *qos_cfg;
69 struct bt_bap_stream *streams;
70 const uint16_t latency = 10U; /* ms*/
71 const uint32_t pd = 40000U; /* us */
72 const uint16_t sdu = 40U; /* octets */
73 const uint8_t rtn = 2U;
74 uint8_t *bis_data;
75
76 zassert_true(streams_per_subgroup > 0U);
77 zassert_true(sizeof(bis_cfg_data) <= CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE);
78
79 /* Allocate memory for everything */
80 fixture->param = malloc(sizeof(struct bt_bap_broadcast_source_param));
81 subgroup_param = malloc(sizeof(struct bt_bap_broadcast_source_subgroup_param) *
82 CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT);
83 zassert_not_null(subgroup_param);
84 stream_params = malloc(sizeof(struct bt_bap_broadcast_source_stream_param) *
85 CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT);
86 zassert_not_null(stream_params);
87 codec_cfg = malloc(sizeof(struct bt_audio_codec_cfg));
88 zassert_not_null(codec_cfg);
89 qos_cfg = malloc(sizeof(struct bt_bap_qos_cfg));
90 zassert_not_null(qos_cfg);
91 streams = malloc(sizeof(struct bt_bap_stream) * CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT);
92 zassert_not_null(streams);
93 bis_data = malloc(CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE);
94 zassert_not_null(bis_data);
95
96 /* Memset everything to 0 */
97 memset(fixture->param, 0, sizeof(*fixture->param));
98 memset(subgroup_param, 0,
99 sizeof(struct bt_bap_broadcast_source_subgroup_param) *
100 CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT);
101 memset(stream_params, 0,
102 sizeof(struct bt_bap_broadcast_source_stream_param) *
103 CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT);
104 memset(codec_cfg, 0, sizeof(struct bt_audio_codec_cfg));
105 memset(qos_cfg, 0, sizeof(struct bt_bap_qos_cfg));
106 memset(streams, 0, sizeof(struct bt_bap_stream) * CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT);
107 memset(bis_data, 0, CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE);
108
109 /* Initialize default values*/
110 *codec_cfg = BT_AUDIO_CODEC_LC3_CONFIG(BT_AUDIO_CODEC_CFG_FREQ_16KHZ,
111 BT_AUDIO_CODEC_CFG_DURATION_10, loc, 40U, 1, ctx);
112 *qos_cfg = BT_BAP_QOS_CFG_UNFRAMED(10000u, sdu, rtn, latency, pd);
113 memcpy(bis_data, bis_cfg_data, sizeof(bis_cfg_data));
114
115 for (size_t i = 0U; i < CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT; i++) {
116 subgroup_param[i].params_count = streams_per_subgroup;
117 subgroup_param[i].params = stream_params + i * streams_per_subgroup;
118 subgroup_param[i].codec_cfg = codec_cfg;
119 }
120
121 for (size_t i = 0U; i < CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT; i++) {
122 stream_params[i].stream = &streams[i];
123 stream_params[i].data = bis_data;
124 stream_params[i].data_len = sizeof(bis_cfg_data);
125 bt_bap_stream_cb_register(stream_params[i].stream, &mock_bap_stream_ops);
126 }
127
128 fixture->param->params_count = CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT;
129 fixture->param->params = subgroup_param;
130 fixture->param->qos = qos_cfg;
131 fixture->param->encryption = false;
132 memset(fixture->param->broadcast_code, 0, sizeof(fixture->param->broadcast_code));
133 fixture->param->packing = BT_ISO_PACKING_SEQUENTIAL;
134
135 fixture->stream_cnt = fixture->param->params_count * streams_per_subgroup;
136 }
137
bap_broadcast_source_test_suite_setup(void)138 static void *bap_broadcast_source_test_suite_setup(void)
139 {
140 struct bap_broadcast_source_test_suite_fixture *fixture;
141
142 fixture = malloc(sizeof(*fixture));
143 zassert_not_null(fixture);
144
145 return fixture;
146 }
147
bap_broadcast_source_test_suite_before(void * f)148 static void bap_broadcast_source_test_suite_before(void *f)
149 {
150 int err;
151
152 memset(f, 0, sizeof(struct bap_broadcast_source_test_suite_fixture));
153 bap_broadcast_source_test_suite_fixture_init(f);
154
155 err = bt_bap_broadcast_source_register_cb(&mock_bap_broadcast_source_cb);
156 zassert_equal(0, err, "Unexpected return value %d", err);
157 }
158
bap_broadcast_source_test_suite_after(void * f)159 static void bap_broadcast_source_test_suite_after(void *f)
160 {
161 struct bap_broadcast_source_test_suite_fixture *fixture = f;
162 struct bt_bap_broadcast_source_param *param;
163
164 if (fixture->source != NULL) {
165 int err;
166
167 (void)bt_bap_broadcast_source_stop(fixture->source);
168
169 err = bt_bap_broadcast_source_delete(fixture->source);
170 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
171 fixture->source = NULL;
172 }
173
174 param = fixture->param;
175
176 free(param->params[0].params[0].data);
177 free(param->params[0].params[0].stream);
178 free(param->params[0].params);
179 free(param->params[0].codec_cfg);
180 free(param->params);
181 free(param->qos);
182 free(param);
183
184 bt_bap_broadcast_source_unregister_cb(&mock_bap_broadcast_source_cb);
185 }
186
bap_broadcast_source_test_suite_teardown(void * f)187 static void bap_broadcast_source_test_suite_teardown(void *f)
188 {
189 free(f);
190 }
191
192 ZTEST_SUITE(bap_broadcast_source_test_suite, NULL, bap_broadcast_source_test_suite_setup,
193 bap_broadcast_source_test_suite_before, bap_broadcast_source_test_suite_after,
194 bap_broadcast_source_test_suite_teardown);
195
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_delete)196 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_delete)
197 {
198 struct bt_bap_broadcast_source_param *create_param = fixture->param;
199 int err;
200
201 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
202 create_param->params_count, fixture->stream_cnt);
203
204 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
205 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
206
207 for (size_t i = 0u; i < create_param->params_count; i++) {
208 for (size_t j = 0u; j < create_param->params[i].params_count; j++) {
209 const struct bt_bap_stream *stream =
210 create_param->params[i].params[j].stream;
211
212 zassert_equal(create_param->qos->sdu, stream->qos->sdu,
213 "Unexpected stream SDU");
214 zassert_equal(create_param->qos->rtn, stream->qos->rtn,
215 "Unexpected stream RTN");
216 zassert_equal(create_param->qos->phy, stream->qos->phy,
217 "Unexpected stream PHY");
218 }
219 }
220
221 err = bt_bap_broadcast_source_delete(fixture->source);
222 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
223 fixture->source = NULL;
224 }
225
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_start_send_stop_delete)226 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_start_send_stop_delete)
227 {
228 struct bt_bap_broadcast_source_param *create_param = fixture->param;
229 struct bt_le_ext_adv ext_adv = {0};
230 int err;
231
232 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
233 create_param->params_count, fixture->stream_cnt);
234
235 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
236 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
237
238 err = bt_bap_broadcast_source_start(fixture->source, &ext_adv);
239 zassert_equal(0, err, "Unable to start broadcast source: err %d", err);
240
241 zexpect_call_count("bt_bap_stream_ops.connected", fixture->stream_cnt,
242 mock_bap_stream_connected_cb_fake.call_count);
243 zexpect_call_count("bt_bap_stream_ops.started", fixture->stream_cnt,
244 mock_bap_stream_started_cb_fake.call_count);
245 zexpect_call_count("bt_bap_broadcast_source_cb.started", 1,
246 mock_bap_broadcast_source_started_cb_fake.call_count);
247
248 for (size_t i = 0U; i < create_param->params_count; i++) {
249 for (size_t j = 0U; j < create_param->params[i].params_count; j++) {
250 struct bt_bap_stream *bap_stream = create_param->params[i].params[j].stream;
251
252 /* verify bap stream started cb stream parameter */
253 zassert_equal(mock_bap_stream_started_cb_fake.arg0_history[i], bap_stream);
254 struct bt_audio_codec_cfg *codec_cfg = bap_stream->codec_cfg;
255 enum bt_audio_location chan_allocation;
256 /* verify subgroup codec data */
257 zassert_equal(bt_audio_codec_cfg_get_freq(codec_cfg),
258 BT_AUDIO_CODEC_CFG_FREQ_16KHZ);
259 zassert_equal(bt_audio_codec_cfg_get_frame_dur(codec_cfg),
260 BT_AUDIO_CODEC_CFG_DURATION_10);
261 /* verify bis specific codec data */
262 bt_audio_codec_cfg_get_chan_allocation(codec_cfg, &chan_allocation, false);
263 zassert_equal(chan_allocation,
264 BT_AUDIO_LOCATION_FRONT_LEFT | BT_AUDIO_LOCATION_FRONT_RIGHT);
265 /* Since BAP doesn't care about the `buf` we can just provide NULL */
266 err = bt_bap_stream_send(bap_stream, NULL, 0);
267 zassert_equal(0, err,
268 "Unable to send on broadcast stream[%zu][%zu]: err %d", i, j,
269 err);
270 }
271 }
272
273 zexpect_call_count("bt_bap_stream_ops.sent", fixture->stream_cnt,
274 mock_bap_stream_sent_cb_fake.call_count);
275
276 err = bt_bap_broadcast_source_stop(fixture->source);
277 zassert_equal(0, err, "Unable to stop broadcast source: err %d", err);
278
279 zexpect_call_count("bt_bap_stream_ops.disconnected", fixture->stream_cnt,
280 mock_bap_stream_disconnected_cb_fake.call_count);
281 zexpect_call_count("bt_bap_stream_ops.stopped", fixture->stream_cnt,
282 mock_bap_stream_stopped_cb_fake.call_count);
283 zexpect_call_count("bt_bap_broadcast_source_cb.stopped", 1,
284 mock_bap_broadcast_source_stopped_cb_fake.call_count);
285
286 err = bt_bap_broadcast_source_delete(fixture->source);
287 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
288 fixture->source = NULL;
289 }
290
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_param_null)291 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_param_null)
292 {
293 int err;
294
295 err = bt_bap_broadcast_source_create(NULL, &fixture->source);
296 zassert_not_equal(0, err, "Did not fail with null params");
297 }
298
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_source_null)299 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_source_null)
300 {
301 struct bt_bap_broadcast_source_param *create_param = fixture->param;
302 int err;
303
304 err = bt_bap_broadcast_source_create(create_param, NULL);
305 zassert_not_equal(0, err, "Did not fail with null source");
306 }
307
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_count_0)308 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_subgroup_params_count_0)
309 {
310 struct bt_bap_broadcast_source_param *create_param = fixture->param;
311 int err;
312
313 create_param->params_count = 0U;
314 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
315 zassert_not_equal(0, err, "Did not fail with params_count %u", create_param->params_count);
316 }
317
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_count_above_max)318 ZTEST_F(bap_broadcast_source_test_suite,
319 test_broadcast_source_create_inval_subgroup_params_count_above_max)
320 {
321 struct bt_bap_broadcast_source_param *create_param = fixture->param;
322 int err;
323
324 create_param->params_count = CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT + 1;
325 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
326 zassert_not_equal(0, err, "Did not fail with params_count %u", create_param->params_count);
327 }
328
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_null)329 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_subgroup_params_null)
330 {
331 struct bt_bap_broadcast_source_param *create_param = fixture->param;
332 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
333 int err;
334
335 create_param->params = NULL;
336 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
337 /* Restore the params for the cleanup after function */
338 create_param->params = subgroup_params;
339 zassert_not_equal(0, err, "Did not fail with NULL subgroup params");
340 }
341
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_qos_null)342 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_qos_null)
343 {
344 struct bt_bap_broadcast_source_param *create_param = fixture->param;
345 struct bt_bap_qos_cfg *qos = create_param->qos;
346 int err;
347
348 create_param->qos = NULL;
349 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
350 /* Restore the params for the cleanup after function */
351 create_param->qos = qos;
352 zassert_not_equal(0, err, "Did not fail with NULL qos");
353 }
354
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_packing)355 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_packing)
356 {
357 struct bt_bap_broadcast_source_param *create_param = fixture->param;
358 int err;
359
360 create_param->packing = 0x02;
361 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
362 zassert_not_equal(0, err, "Did not fail with packing %u", create_param->packing);
363 }
364
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_params_count_0)365 ZTEST_F(bap_broadcast_source_test_suite,
366 test_broadcast_source_create_inval_subgroup_params_params_count_0)
367 {
368 struct bt_bap_broadcast_source_param *create_param = fixture->param;
369 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
370 int err;
371
372 subgroup_params->params_count = 0U;
373 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
374 zassert_not_equal(0, err, "Did not fail with %u stream params",
375 subgroup_params->params_count);
376 }
377
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_params_count_above_max)378 ZTEST_F(bap_broadcast_source_test_suite,
379 test_broadcast_source_create_inval_subgroup_params_params_count_above_max)
380 {
381 struct bt_bap_broadcast_source_param *create_param = fixture->param;
382 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
383 int err;
384
385 subgroup_params->params_count = CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT + 1;
386 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
387 zassert_not_equal(0, err, "Did not fail with %u stream params",
388 subgroup_params->params_count);
389 }
390
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_stream_params_null)391 ZTEST_F(bap_broadcast_source_test_suite,
392 test_broadcast_source_create_inval_subgroup_params_stream_params_null)
393 {
394 struct bt_bap_broadcast_source_param *create_param = fixture->param;
395 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
396 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
397 int err;
398
399 subgroup_params->params = NULL;
400 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
401 /* Restore the params for the cleanup after function */
402 subgroup_params->params = stream_params;
403 zassert_not_equal(0, err, "Did not fail with NULL stream params");
404 }
405
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_codec_cfg_null)406 ZTEST_F(bap_broadcast_source_test_suite,
407 test_broadcast_source_create_inval_subgroup_params_codec_cfg_null)
408 {
409 struct bt_bap_broadcast_source_param *create_param = fixture->param;
410 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
411 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
412 int err;
413
414 subgroup_params->codec_cfg = NULL;
415 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
416 /* Restore the params for the cleanup after function */
417 subgroup_params->codec_cfg = codec_cfg;
418 zassert_not_equal(0, err, "Did not fail with NULL codec_cfg");
419 }
420
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_codec_cfg_data_len)421 ZTEST_F(bap_broadcast_source_test_suite,
422 test_broadcast_source_create_inval_subgroup_params_codec_cfg_data_len)
423 {
424 struct bt_bap_broadcast_source_param *create_param = fixture->param;
425 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
426 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
427 int err;
428
429 codec_cfg->data_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE + 1;
430 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
431 zassert_not_equal(0, err, "Did not fail with codec_cfg->data_len %zu", codec_cfg->data_len);
432 }
433
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_codec_cfg_meta_len)434 ZTEST_F(bap_broadcast_source_test_suite,
435 test_broadcast_source_create_inval_subgroup_params_codec_cfg_meta_len)
436 {
437 struct bt_bap_broadcast_source_param *create_param = fixture->param;
438 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
439 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
440 int err;
441
442 codec_cfg->meta_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE + 1;
443 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
444 zassert_not_equal(0, err, "Did not fail with codec_cfg->meta_len %zu", codec_cfg->meta_len);
445 }
446
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_codec_cfg_cid)447 ZTEST_F(bap_broadcast_source_test_suite,
448 test_broadcast_source_create_inval_subgroup_params_codec_cfg_cid)
449 {
450 struct bt_bap_broadcast_source_param *create_param = fixture->param;
451 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
452 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
453 int err;
454
455 codec_cfg->id = BT_HCI_CODING_FORMAT_LC3;
456 codec_cfg->cid = 0x01; /* Shall be 0 if id == 0x06 (LC3)*/
457 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
458 zassert_not_equal(0, err, "Did not fail with codec_cfg->cid %u", codec_cfg->cid);
459 }
460
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_subgroup_params_codec_cfg_vid)461 ZTEST_F(bap_broadcast_source_test_suite,
462 test_broadcast_source_create_inval_subgroup_params_codec_cfg_vid)
463 {
464 struct bt_bap_broadcast_source_param *create_param = fixture->param;
465 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
466 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
467 int err;
468
469 codec_cfg->id = BT_HCI_CODING_FORMAT_LC3;
470 codec_cfg->vid = 0x01; /* Shall be 0 if id == 0x06 (LC3)*/
471 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
472 zassert_not_equal(0, err, "Did not fail with codec_cfg->vid %u", codec_cfg->vid);
473 }
474
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_stream_params_stream_null)475 ZTEST_F(bap_broadcast_source_test_suite,
476 test_broadcast_source_create_inval_stream_params_stream_null)
477 {
478 struct bt_bap_broadcast_source_param *create_param = fixture->param;
479 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
480 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
481 struct bt_bap_stream *stream = stream_params->stream;
482 int err;
483
484 stream_params->stream = NULL;
485 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
486 /* Restore the params for the cleanup after function */
487 stream_params->stream = stream;
488 zassert_not_equal(0, err, "Did not fail with NULL stream_params->stream");
489 }
490
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_stream_params_data_null)491 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_stream_params_data_null)
492 {
493 struct bt_bap_broadcast_source_param *create_param = fixture->param;
494 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
495 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
496 uint8_t *data = stream_params->data;
497 int err;
498
499 stream_params->data = NULL;
500 stream_params->data_len = 1;
501 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
502 /* Restore the params for the cleanup after function */
503 stream_params->data = data;
504 zassert_not_equal(
505 0, err,
506 "Did not fail with NULL stream_params->data and stream_params_>data_len %zu",
507 stream_params->data_len);
508 }
509
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_create_inval_stream_params_data_len)510 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_create_inval_stream_params_data_len)
511 {
512 struct bt_bap_broadcast_source_param *create_param = fixture->param;
513 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = &create_param->params[0];
514 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
515 int err;
516
517 stream_params->data_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE + 1;
518 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
519 zassert_not_equal(0, err, "Did not fail with stream_params_>data_len %zu",
520 stream_params->data_len);
521 }
522
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_start_inval_source_null)523 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_start_inval_source_null)
524 {
525 struct bt_bap_broadcast_source_param *create_param = fixture->param;
526 struct bt_le_ext_adv ext_adv = {0};
527 int err;
528
529 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
530 create_param->params_count, fixture->stream_cnt);
531
532 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
533 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
534
535 err = bt_bap_broadcast_source_start(NULL, &ext_adv);
536 zassert_not_equal(0, err, "Did not fail with null source");
537 }
538
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_start_inval_ext_adv_null)539 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_start_inval_ext_adv_null)
540 {
541 struct bt_bap_broadcast_source_param *create_param = fixture->param;
542 int err;
543
544 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
545 create_param->params_count, fixture->stream_cnt);
546
547 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
548 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
549
550 err = bt_bap_broadcast_source_start(fixture->source, NULL);
551 zassert_not_equal(0, err, "Did not fail with null ext_adv");
552 }
553
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_start_inval_double_start)554 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_start_inval_double_start)
555 {
556 struct bt_bap_broadcast_source_param *create_param = fixture->param;
557 struct bt_le_ext_adv ext_adv = {0};
558 int err;
559
560 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
561 create_param->params_count, fixture->stream_cnt);
562
563 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
564 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
565
566 err = bt_bap_broadcast_source_start(fixture->source, &ext_adv);
567 zassert_equal(0, err, "Unable to start broadcast source: err %d", err);
568
569 err = bt_bap_broadcast_source_start(fixture->source, &ext_adv);
570 zassert_not_equal(0, err, "Did not fail with starting already started source");
571 }
572
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_single_subgroup)573 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_single_subgroup)
574 {
575 struct bt_bap_broadcast_source_param *reconf_param = fixture->param;
576 const size_t subgroup_cnt = reconf_param->params_count;
577 int err;
578
579 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
580 reconf_param->params_count, fixture->stream_cnt);
581
582 err = bt_bap_broadcast_source_create(reconf_param, &fixture->source);
583 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
584
585 for (size_t i = 0u; i < reconf_param->params_count; i++) {
586 for (size_t j = 0u; j < reconf_param->params[i].params_count; j++) {
587 const struct bt_bap_stream *stream =
588 reconf_param->params[i].params[j].stream;
589
590 zassert_equal(reconf_param->qos->sdu, stream->qos->sdu,
591 "Unexpected stream SDU");
592 zassert_equal(reconf_param->qos->rtn, stream->qos->rtn,
593 "Unexpected stream RTN");
594 zassert_equal(reconf_param->qos->phy, stream->qos->phy,
595 "Unexpected stream PHY");
596 }
597 }
598
599 reconf_param->params_count = 1U;
600 reconf_param->qos->sdu = 100U;
601 reconf_param->qos->rtn = 3U;
602 reconf_param->qos->phy = 1U;
603
604 err = bt_bap_broadcast_source_reconfig(fixture->source, reconf_param);
605 zassert_equal(0, err, "Unable to reconfigure broadcast source: err %d", err);
606
607 for (size_t i = 0u; i < subgroup_cnt; i++) {
608 for (size_t j = 0u; j < reconf_param->params[i].params_count; j++) {
609 const struct bt_bap_stream *stream =
610 reconf_param->params[i].params[j].stream;
611
612 zassert_equal(reconf_param->qos->sdu, stream->qos->sdu,
613 "Unexpected stream SDU");
614 zassert_equal(reconf_param->qos->rtn, stream->qos->rtn,
615 "Unexpected stream RTN");
616 zassert_equal(reconf_param->qos->phy, stream->qos->phy,
617 "Unexpected stream PHY");
618 }
619 }
620
621 err = bt_bap_broadcast_source_delete(fixture->source);
622 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
623 fixture->source = NULL;
624 }
625
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_all)626 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_all)
627 {
628 struct bt_bap_broadcast_source_param *reconf_param = fixture->param;
629 int err;
630
631 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
632 reconf_param->params_count, fixture->stream_cnt);
633
634 err = bt_bap_broadcast_source_create(reconf_param, &fixture->source);
635 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
636
637 for (size_t i = 0u; i < reconf_param->params_count; i++) {
638 for (size_t j = 0u; j < reconf_param->params[i].params_count; j++) {
639 const struct bt_bap_stream *stream =
640 reconf_param->params[i].params[j].stream;
641
642 zassert_equal(reconf_param->qos->sdu, stream->qos->sdu,
643 "Unexpected stream SDU");
644 zassert_equal(reconf_param->qos->rtn, stream->qos->rtn,
645 "Unexpected stream RTN");
646 zassert_equal(reconf_param->qos->phy, stream->qos->phy,
647 "Unexpected stream PHY");
648 }
649 }
650
651 reconf_param->qos->sdu = 100U;
652 reconf_param->qos->rtn = 3U;
653 reconf_param->qos->phy = 1U;
654
655 err = bt_bap_broadcast_source_reconfig(fixture->source, reconf_param);
656 zassert_equal(0, err, "Unable to reconfigure broadcast source: err %d", err);
657
658 for (size_t i = 0u; i < reconf_param->params_count; i++) {
659 for (size_t j = 0u; j < reconf_param->params[i].params_count; j++) {
660 const struct bt_bap_stream *stream =
661 reconf_param->params[i].params[j].stream;
662
663 zassert_equal(reconf_param->qos->sdu, stream->qos->sdu,
664 "Unexpected stream SDU");
665 zassert_equal(reconf_param->qos->rtn, stream->qos->rtn,
666 "Unexpected stream RTN");
667 zassert_equal(reconf_param->qos->phy, stream->qos->phy,
668 "Unexpected stream PHY");
669 }
670 }
671
672 err = bt_bap_broadcast_source_delete(fixture->source);
673 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
674 fixture->source = NULL;
675 }
676
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_param_null)677 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_inval_param_null)
678 {
679 struct bt_bap_broadcast_source_param *param = fixture->param;
680 int err;
681
682 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
683 param->params_count, fixture->stream_cnt);
684
685 err = bt_bap_broadcast_source_create(param, &fixture->source);
686 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
687
688 err = bt_bap_broadcast_source_reconfig(fixture->source, NULL);
689 zassert_not_equal(0, err, "Did not fail with null params");
690
691 err = bt_bap_broadcast_source_delete(fixture->source);
692 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
693 fixture->source = NULL;
694 }
695
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_source_null)696 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_inval_source_null)
697 {
698 struct bt_bap_broadcast_source_param *param = fixture->param;
699 int err;
700
701 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
702 param->params_count, fixture->stream_cnt);
703
704 err = bt_bap_broadcast_source_create(param, &fixture->source);
705 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
706
707 err = bt_bap_broadcast_source_reconfig(NULL, param);
708 zassert_not_equal(0, err, "Did not fail with null source");
709
710 err = bt_bap_broadcast_source_delete(fixture->source);
711 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
712 fixture->source = NULL;
713 }
714
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_count_0)715 ZTEST_F(bap_broadcast_source_test_suite,
716 test_broadcast_source_reconfigure_inval_subgroup_params_count_0)
717 {
718 struct bt_bap_broadcast_source_param *param = fixture->param;
719 int err;
720
721 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
722 param->params_count, fixture->stream_cnt);
723
724 err = bt_bap_broadcast_source_create(param, &fixture->source);
725 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
726
727 param->params_count = 0U;
728 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
729 zassert_not_equal(0, err, "Did not fail with params_count %u", param->params_count);
730
731 err = bt_bap_broadcast_source_delete(fixture->source);
732 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
733 fixture->source = NULL;
734 }
735
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_count_above_max)736 ZTEST_F(bap_broadcast_source_test_suite,
737 test_broadcast_source_reconfigure_inval_subgroup_params_count_above_max)
738 {
739 struct bt_bap_broadcast_source_param *param = fixture->param;
740 int err;
741
742 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
743 param->params_count, fixture->stream_cnt);
744
745 err = bt_bap_broadcast_source_create(param, &fixture->source);
746 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
747
748 param->params_count = CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT + 1;
749 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
750 zassert_not_equal(0, err, "Did not fail with params_count %u", param->params_count);
751
752 err = bt_bap_broadcast_source_delete(fixture->source);
753 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
754 fixture->source = NULL;
755 }
756
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_null)757 ZTEST_F(bap_broadcast_source_test_suite,
758 test_broadcast_source_reconfigure_inval_subgroup_params_null)
759 {
760 struct bt_bap_broadcast_source_param *param = fixture->param;
761 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
762 int err;
763
764 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
765 param->params_count, fixture->stream_cnt);
766
767 err = bt_bap_broadcast_source_create(param, &fixture->source);
768 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
769
770 param->params = NULL;
771 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
772 /* Restore the params for the cleanup after function */
773 param->params = subgroup_params;
774 zassert_not_equal(0, err, "Did not fail with NULL subgroup params");
775
776 err = bt_bap_broadcast_source_delete(fixture->source);
777 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
778 fixture->source = NULL;
779 }
780
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_qos_null)781 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_inval_qos_null)
782 {
783 struct bt_bap_broadcast_source_param *param = fixture->param;
784 struct bt_bap_qos_cfg *qos = param->qos;
785 int err;
786
787 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
788 param->params_count, fixture->stream_cnt);
789
790 err = bt_bap_broadcast_source_create(param, &fixture->source);
791 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
792
793 param->qos = NULL;
794 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
795 /* Restore the params for the cleanup after function */
796 param->qos = qos;
797 zassert_not_equal(0, err, "Did not fail with NULL qos");
798
799 err = bt_bap_broadcast_source_delete(fixture->source);
800 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
801 fixture->source = NULL;
802 }
803
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_packing)804 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_inval_packing)
805 {
806 struct bt_bap_broadcast_source_param *param = fixture->param;
807 int err;
808
809 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
810 param->params_count, fixture->stream_cnt);
811
812 err = bt_bap_broadcast_source_create(param, &fixture->source);
813 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
814
815 param->packing = 0x02;
816 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
817 zassert_not_equal(0, err, "Did not fail with packing %u", param->packing);
818
819 err = bt_bap_broadcast_source_delete(fixture->source);
820 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
821 fixture->source = NULL;
822 }
823
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_params_count_0)824 ZTEST_F(bap_broadcast_source_test_suite,
825 test_broadcast_source_reconfigure_inval_subgroup_params_params_count_0)
826 {
827 struct bt_bap_broadcast_source_param *param = fixture->param;
828 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
829 int err;
830
831 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
832 param->params_count, fixture->stream_cnt);
833
834 err = bt_bap_broadcast_source_create(param, &fixture->source);
835 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
836
837 subgroup_params->params_count = 0U;
838 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
839 zassert_not_equal(0, err, "Did not fail with %u stream params",
840 subgroup_params->params_count);
841
842 err = bt_bap_broadcast_source_delete(fixture->source);
843 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
844 fixture->source = NULL;
845 }
846
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_params_count_above_max)847 ZTEST_F(bap_broadcast_source_test_suite,
848 test_broadcast_source_reconfigure_inval_subgroup_params_params_count_above_max)
849 {
850 struct bt_bap_broadcast_source_param *param = fixture->param;
851 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
852 int err;
853
854 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
855 param->params_count, fixture->stream_cnt);
856
857 err = bt_bap_broadcast_source_create(param, &fixture->source);
858 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
859
860 subgroup_params->params_count = CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT + 1;
861 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
862 zassert_not_equal(0, err, "Did not fail with %u stream params",
863 subgroup_params->params_count);
864
865 err = bt_bap_broadcast_source_delete(fixture->source);
866 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
867 fixture->source = NULL;
868 }
869
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_stream_params_null)870 ZTEST_F(bap_broadcast_source_test_suite,
871 test_broadcast_source_reconfigure_inval_subgroup_params_stream_params_null)
872 {
873 struct bt_bap_broadcast_source_param *param = fixture->param;
874 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
875 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
876 int err;
877
878 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
879 param->params_count, fixture->stream_cnt);
880
881 err = bt_bap_broadcast_source_create(param, &fixture->source);
882 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
883
884 subgroup_params->params = NULL;
885 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
886 /* Restore the params for the cleanup after function */
887 subgroup_params->params = stream_params;
888 zassert_not_equal(0, err, "Did not fail with NULL stream params");
889
890 err = bt_bap_broadcast_source_delete(fixture->source);
891 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
892 fixture->source = NULL;
893 }
894
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_null)895 ZTEST_F(bap_broadcast_source_test_suite,
896 test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_null)
897 {
898 struct bt_bap_broadcast_source_param *param = fixture->param;
899 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
900 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
901 int err;
902
903 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
904 param->params_count, fixture->stream_cnt);
905
906 err = bt_bap_broadcast_source_create(param, &fixture->source);
907 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
908
909 subgroup_params->codec_cfg = NULL;
910 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
911 /* Restore the params for the cleanup after function */
912 subgroup_params->codec_cfg = codec_cfg;
913 zassert_not_equal(0, err, "Did not fail with NULL codec_cfg");
914
915 err = bt_bap_broadcast_source_delete(fixture->source);
916 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
917 fixture->source = NULL;
918 }
919
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_data_len)920 ZTEST_F(bap_broadcast_source_test_suite,
921 test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_data_len)
922 {
923 struct bt_bap_broadcast_source_param *param = fixture->param;
924 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
925 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
926 int err;
927
928 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
929 param->params_count, fixture->stream_cnt);
930
931 err = bt_bap_broadcast_source_create(param, &fixture->source);
932 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
933
934 codec_cfg->data_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE + 1;
935 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
936 zassert_not_equal(0, err, "Did not fail with codec_cfg->data_len %zu", codec_cfg->data_len);
937
938 err = bt_bap_broadcast_source_delete(fixture->source);
939 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
940 fixture->source = NULL;
941 }
942
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_meta_len)943 ZTEST_F(bap_broadcast_source_test_suite,
944 test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_meta_len)
945 {
946 struct bt_bap_broadcast_source_param *param = fixture->param;
947 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
948 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
949 int err;
950
951 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
952 param->params_count, fixture->stream_cnt);
953
954 err = bt_bap_broadcast_source_create(param, &fixture->source);
955 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
956
957 codec_cfg->meta_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE + 1;
958 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
959 zassert_not_equal(0, err, "Did not fail with codec_cfg->meta_len %zu", codec_cfg->meta_len);
960
961 err = bt_bap_broadcast_source_delete(fixture->source);
962 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
963 fixture->source = NULL;
964 }
965
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_cid)966 ZTEST_F(bap_broadcast_source_test_suite,
967 test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_cid)
968 {
969 struct bt_bap_broadcast_source_param *param = fixture->param;
970 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
971 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
972 int err;
973
974 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
975 param->params_count, fixture->stream_cnt);
976
977 err = bt_bap_broadcast_source_create(param, &fixture->source);
978 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
979
980 codec_cfg->id = 0x06;
981 codec_cfg->cid = 0x01; /* Shall be 0 if id == 0x06 (LC3)*/
982 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
983 zassert_not_equal(0, err, "Did not fail with codec_cfg->cid %u", codec_cfg->cid);
984
985 err = bt_bap_broadcast_source_delete(fixture->source);
986 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
987 fixture->source = NULL;
988 }
989
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_vid)990 ZTEST_F(bap_broadcast_source_test_suite,
991 test_broadcast_source_reconfigure_inval_subgroup_params_codec_cfg_vid)
992 {
993 struct bt_bap_broadcast_source_param *param = fixture->param;
994 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
995 struct bt_audio_codec_cfg *codec_cfg = subgroup_params->codec_cfg;
996 int err;
997
998 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
999 param->params_count, fixture->stream_cnt);
1000
1001 err = bt_bap_broadcast_source_create(param, &fixture->source);
1002 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1003
1004 codec_cfg->id = 0x06;
1005 codec_cfg->vid = 0x01; /* Shall be 0 if id == 0x06 (LC3)*/
1006 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
1007 zassert_not_equal(0, err, "Did not fail with codec_cfg->vid %u", codec_cfg->vid);
1008
1009 err = bt_bap_broadcast_source_delete(fixture->source);
1010 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1011 fixture->source = NULL;
1012 }
1013
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_stream_params_stream_null)1014 ZTEST_F(bap_broadcast_source_test_suite,
1015 test_broadcast_source_reconfigure_inval_stream_params_stream_null)
1016 {
1017 struct bt_bap_broadcast_source_param *param = fixture->param;
1018 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
1019 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
1020 struct bt_bap_stream *stream = stream_params->stream;
1021 int err;
1022
1023 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1024 param->params_count, fixture->stream_cnt);
1025
1026 err = bt_bap_broadcast_source_create(param, &fixture->source);
1027 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1028
1029 stream_params->stream = NULL;
1030 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
1031 /* Restore the params for the cleanup after function */
1032 stream_params->stream = stream;
1033 zassert_not_equal(0, err, "Did not fail with NULL stream_params->stream");
1034
1035 err = bt_bap_broadcast_source_delete(fixture->source);
1036 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1037 fixture->source = NULL;
1038 }
1039
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_stream_params_data_null)1040 ZTEST_F(bap_broadcast_source_test_suite,
1041 test_broadcast_source_reconfigure_inval_stream_params_data_null)
1042 {
1043 struct bt_bap_broadcast_source_param *param = fixture->param;
1044 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
1045 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
1046 uint8_t *data = stream_params->data;
1047 int err;
1048
1049 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1050 param->params_count, fixture->stream_cnt);
1051
1052 err = bt_bap_broadcast_source_create(param, &fixture->source);
1053 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1054
1055 stream_params->data = NULL;
1056 stream_params->data_len = 1;
1057 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
1058 /* Restore the params for the cleanup after function */
1059 stream_params->data = data;
1060 zassert_not_equal(
1061 0, err,
1062 "Did not fail with NULL stream_params->data and stream_params_>data_len %zu",
1063 stream_params->data_len);
1064
1065 err = bt_bap_broadcast_source_delete(fixture->source);
1066 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1067 fixture->source = NULL;
1068 }
1069
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_stream_params_data_len)1070 ZTEST_F(bap_broadcast_source_test_suite,
1071 test_broadcast_source_reconfigure_inval_stream_params_data_len)
1072 {
1073 struct bt_bap_broadcast_source_param *param = fixture->param;
1074 struct bt_bap_broadcast_source_subgroup_param *subgroup_params = ¶m->params[0];
1075 struct bt_bap_broadcast_source_stream_param *stream_params = &subgroup_params->params[0];
1076 int err;
1077
1078 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1079 param->params_count, fixture->stream_cnt);
1080
1081 err = bt_bap_broadcast_source_create(param, &fixture->source);
1082 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1083
1084 stream_params->data_len = CONFIG_BT_AUDIO_CODEC_CFG_MAX_DATA_SIZE + 1;
1085 err = bt_bap_broadcast_source_reconfig(fixture->source, param);
1086 zassert_not_equal(0, err, "Did not fail with stream_params_>data_len %zu",
1087 stream_params->data_len);
1088
1089 err = bt_bap_broadcast_source_delete(fixture->source);
1090 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1091 fixture->source = NULL;
1092 }
1093
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_reconfigure_inval_state)1094 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_reconfigure_inval_state)
1095 {
1096 struct bt_bap_broadcast_source_param *param = fixture->param;
1097 struct bt_bap_broadcast_source *source;
1098 int err;
1099
1100 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1101 param->params_count, fixture->stream_cnt);
1102
1103 err = bt_bap_broadcast_source_create(param, &fixture->source);
1104 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1105 source = fixture->source;
1106
1107 err = bt_bap_broadcast_source_delete(fixture->source);
1108 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1109 fixture->source = NULL;
1110
1111 err = bt_bap_broadcast_source_reconfig(source, param);
1112 zassert_not_equal(0, err, "Did not fail with deleted broadcast source");
1113 }
1114
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_stop_inval_source_null)1115 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_stop_inval_source_null)
1116 {
1117 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1118 struct bt_le_ext_adv ext_adv = {0};
1119 int err;
1120
1121 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1122 create_param->params_count, fixture->stream_cnt);
1123
1124 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1125 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1126
1127 err = bt_bap_broadcast_source_start(fixture->source, &ext_adv);
1128 zassert_equal(0, err, "Unable to start broadcast source: err %d", err);
1129
1130 err = bt_bap_broadcast_source_stop(NULL);
1131 zassert_not_equal(0, err, "Did not fail with null source");
1132 }
1133
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_stop_inval_state)1134 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_stop_inval_state)
1135 {
1136 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1137 struct bt_le_ext_adv ext_adv = {0};
1138 int err;
1139
1140 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1141 create_param->params_count, fixture->stream_cnt);
1142
1143 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1144 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1145
1146 err = bt_bap_broadcast_source_start(fixture->source, &ext_adv);
1147 zassert_equal(0, err, "Unable to start broadcast source: err %d", err);
1148
1149 err = bt_bap_broadcast_source_stop(fixture->source);
1150 zassert_equal(0, err, "Unable to stop broadcast source: err %d", err);
1151
1152 err = bt_bap_broadcast_source_stop(NULL);
1153 zassert_not_equal(0, err, "Did not fail with stopping already stopped source");
1154 }
1155
1156
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_delete_inval_source_null)1157 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_delete_inval_source_null)
1158 {
1159 int err;
1160
1161 err = bt_bap_broadcast_source_delete(NULL);
1162 zassert_not_equal(0, err, "Did not fail with null source");
1163 }
1164
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_delete_inval_double_start)1165 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_delete_inval_double_start)
1166 {
1167 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1168 struct bt_bap_broadcast_source *source;
1169 int err;
1170
1171 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1172 create_param->params_count, fixture->stream_cnt);
1173
1174 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1175 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1176
1177 err = bt_bap_broadcast_source_delete(fixture->source);
1178 zassert_equal(0, err, "Unable to start broadcast source: err %d", err);
1179
1180 source = fixture->source;
1181 /* Set to NULL to avoid deleting it in bap_broadcast_source_test_suite_after */
1182 fixture->source = NULL;
1183
1184 err = bt_bap_broadcast_source_delete(source);
1185 zassert_not_equal(0, err, "Did not fail with deleting already deleting source");
1186 }
1187
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_single_bis)1188 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_single_bis)
1189 {
1190 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1191 int err;
1192
1193 const uint8_t expected_base[] = {
1194 0x51, 0x18, /* uuid */
1195 0x40, 0x9C, 0x00, /* pd */
1196 0x01, /* subgroup count */
1197 0x01, /* bis count */
1198 0x06, 0x00, 0x00, 0x00, 0x00, /* LC3 codec_id*/
1199 0x10, /* cc length */
1200 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x05, 0x03,
1201 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x28, 0x00, /* cc */
1202 0x04, /* meta length */
1203 0x03, 0x02, 0x01, 0x00, /* meta */
1204 0x01, /* bis index */
1205 0x06, /* bis cc length */
1206 0x05, 0x03, 0x03, 0x00, 0x00, 0x00 /* bis cc length */
1207 };
1208
1209 NET_BUF_SIMPLE_DEFINE(base_buf, 64);
1210
1211 /* Make the create param simpler for verification */
1212 create_param->params_count = 1U;
1213 create_param->params[0].params_count = 1U;
1214
1215 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1216 create_param->params_count, fixture->stream_cnt);
1217
1218 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1219 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1220
1221 err = bt_bap_broadcast_source_get_base(fixture->source, &base_buf);
1222 zassert_equal(0, err, "Unable to get broadcast source BASE: err %d", err);
1223
1224 zassert_equal(sizeof(expected_base), base_buf.len, "Incorrect base_buf.len %u, expected %u",
1225 base_buf.len, sizeof(expected_base));
1226
1227 /* Use memcmp to print the buffers if they are not identical as zassert_mem_equal does not
1228 * do that
1229 */
1230 if (memcmp(expected_base, base_buf.data, base_buf.len) != 0) {
1231 for (size_t i = 0U; i < base_buf.len; i++) {
1232 printk("[%zu]: 0x%02X %s 0x%02X\n", i, expected_base[i],
1233 expected_base[i] == base_buf.data[i] ? "==" : "!=",
1234 base_buf.data[i]);
1235 }
1236
1237 zassert_mem_equal(expected_base, base_buf.data, base_buf.len);
1238 }
1239
1240 err = bt_bap_broadcast_source_delete(fixture->source);
1241 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1242 fixture->source = NULL;
1243 }
1244
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base)1245 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base)
1246 {
1247 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1248 int err;
1249
1250 const uint8_t expected_base[] = {
1251 0x51, 0x18, /* uuid */
1252 0x40, 0x9C, 0x00, /* pd */
1253 0x02, /* subgroup count */
1254 0x01, /* Subgroup 1: bis count */
1255 0x06, 0x00, 0x00, 0x00, 0x00, /* LC3 codec_id*/
1256 0x10, /* cc length */
1257 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x05, 0x03,
1258 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x28, 0x00, /* cc */
1259 0x04, /* meta length */
1260 0x03, 0x02, 0x01, 0x00, /* meta */
1261 0x01, /* bis index */
1262 0x06, /* bis cc length */
1263 0x05, 0x03, 0x03, 0x00, 0x00, 0x00, /* bis cc length */
1264 0x01, /* Subgroup 1: bis count */
1265 0x06, 0x00, 0x00, 0x00, 0x00, /* LC3 codec_id*/
1266 0x10, /* cc length */
1267 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x05, 0x03,
1268 0x01, 0x00, 0x00, 0x00, 0x03, 0x04, 0x28, 0x00, /* cc */
1269 0x04, /* meta length */
1270 0x03, 0x02, 0x01, 0x00, /* meta */
1271 0x02, /* bis index */
1272 0x06, /* bis cc length */
1273 0x05, 0x03, 0x03, 0x00, 0x00, 0x00 /* bis cc length */
1274 };
1275
1276 NET_BUF_SIMPLE_DEFINE(base_buf, 128);
1277
1278 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1279 create_param->params_count, fixture->stream_cnt);
1280
1281 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1282 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1283
1284 err = bt_bap_broadcast_source_get_base(fixture->source, &base_buf);
1285 zassert_equal(0, err, "Unable to get broadcast source BASE: err %d", err);
1286
1287 zassert_equal(sizeof(expected_base), base_buf.len, "Incorrect base_buf.len %u, expected %u",
1288 base_buf.len, sizeof(expected_base));
1289
1290 /* Use memcmp to print the buffers if they are not identical as zassert_mem_equal does not
1291 * do that
1292 */
1293 if (memcmp(expected_base, base_buf.data, base_buf.len) != 0) {
1294 for (size_t i = 0U; i < base_buf.len; i++) {
1295 printk("[%zu]: 0x%02X %s 0x%02X\n", i, expected_base[i],
1296 expected_base[i] == base_buf.data[i] ? "==" : "!=",
1297 base_buf.data[i]);
1298 }
1299
1300 zassert_mem_equal(expected_base, base_buf.data, base_buf.len);
1301 }
1302
1303 err = bt_bap_broadcast_source_delete(fixture->source);
1304 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1305 fixture->source = NULL;
1306 }
1307
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_inval_source_null)1308 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_inval_source_null)
1309 {
1310 int err;
1311
1312 NET_BUF_SIMPLE_DEFINE(base_buf, 64);
1313
1314 err = bt_bap_broadcast_source_get_base(NULL, &base_buf);
1315 zassert_not_equal(0, err, "Did not fail with null source");
1316 }
1317
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_inval_base_buf_null)1318 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_inval_base_buf_null)
1319 {
1320 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1321 int err;
1322
1323 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1324 create_param->params_count, fixture->stream_cnt);
1325
1326 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1327 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1328
1329 err = bt_bap_broadcast_source_get_base(fixture->source, NULL);
1330 zassert_not_equal(0, err, "Did not fail with null BASE buffer");
1331
1332 err = bt_bap_broadcast_source_delete(fixture->source);
1333 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1334 fixture->source = NULL;
1335 }
1336
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_inval_state)1337 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_inval_state)
1338 {
1339 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1340 struct bt_bap_broadcast_source *source;
1341 int err;
1342
1343 NET_BUF_SIMPLE_DEFINE(base_buf, 64);
1344
1345 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1346 create_param->params_count, fixture->stream_cnt);
1347
1348 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1349 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1350
1351 source = fixture->source;
1352
1353 err = bt_bap_broadcast_source_delete(fixture->source);
1354 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1355 fixture->source = NULL;
1356
1357 err = bt_bap_broadcast_source_get_base(source, &base_buf);
1358 zassert_not_equal(0, err, "Did not fail with deleted broadcast source");
1359 }
1360
1361 /** This tests that providing a buffer too small for _any_ BASE fails correctly */
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_inval_very_small_buf)1362 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_inval_very_small_buf)
1363 {
1364 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1365 int err;
1366
1367 NET_BUF_SIMPLE_DEFINE(base_buf, 15); /* Too small to hold any BASE */
1368
1369 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1370 create_param->params_count, fixture->stream_cnt);
1371
1372 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1373 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1374
1375 err = bt_bap_broadcast_source_get_base(fixture->source, &base_buf);
1376 zassert_not_equal(0, err, "Did not fail with too small base_buf (%u)", base_buf.size);
1377
1378 err = bt_bap_broadcast_source_delete(fixture->source);
1379 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1380 fixture->source = NULL;
1381 }
1382
1383 /** This tests that providing a buffer too small for the BASE we want to setup fails correctly */
ZTEST_F(bap_broadcast_source_test_suite,test_broadcast_source_get_base_inval_small_buf)1384 ZTEST_F(bap_broadcast_source_test_suite, test_broadcast_source_get_base_inval_small_buf)
1385 {
1386 struct bt_bap_broadcast_source_param *create_param = fixture->param;
1387 int err;
1388
1389 /* Can hold a base, but not large enough for this configuration */
1390 NET_BUF_SIMPLE_DEFINE(base_buf, 64);
1391
1392 printk("Creating broadcast source with %zu subgroups with %zu streams\n",
1393 create_param->params_count, fixture->stream_cnt);
1394
1395 err = bt_bap_broadcast_source_create(create_param, &fixture->source);
1396 zassert_equal(0, err, "Unable to create broadcast source: err %d", err);
1397
1398 err = bt_bap_broadcast_source_get_base(fixture->source, &base_buf);
1399 zassert_not_equal(0, err, "Did not fail with too small base_buf (%u)", base_buf.size);
1400
1401 err = bt_bap_broadcast_source_delete(fixture->source);
1402 zassert_equal(0, err, "Unable to delete broadcast source: err %d", err);
1403 fixture->source = NULL;
1404 }
1405