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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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 = &param->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