@@ -92,6 +92,9 @@ static void cap_initiator_test_unicast_start_after(void *f)
9292 for (size_t i = 0 ; i < ARRAY_SIZE (fixture -> conns ); i ++ ) {
9393 mock_bt_conn_disconnected (& fixture -> conns [i ], BT_HCI_ERR_REMOTE_USER_TERM_CONN );
9494 }
95+
96+ /* In the case of a test failing, we cancel the procedure so that subsequent won't fail */
97+ bt_cap_initiator_unicast_audio_cancel ();
9598}
9699
97100static void cap_initiator_test_unicast_start_teardown (void * f )
@@ -117,6 +120,7 @@ static ZTEST_F(cap_initiator_test_unicast_start, test_initiator_unicast_start)
117120 for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
118121 stream_params [i ].stream = & fixture -> cap_streams [i ];
119122 stream_params [i ].codec_cfg = & fixture -> preset .codec_cfg ;
123+ /* Distribute the streams equally among the connections */
120124 stream_params [i ].member .member = & fixture -> conns [i % ARRAY_SIZE (fixture -> conns )];
121125 stream_params [i ].ep = & fixture -> eps [i ];
122126 }
@@ -128,11 +132,11 @@ static ZTEST_F(cap_initiator_test_unicast_start, test_initiator_unicast_start)
128132 mock_cap_initiator_unicast_start_complete_cb_fake .call_count );
129133
130134 for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
131- const enum bt_bap_ep_state state =
132- fixture -> cap_streams [ i ]. bap_stream . ep -> status .state ;
135+ const struct bt_bap_stream * bap_stream = & fixture -> cap_streams [ i ]. bap_stream ;
136+ const enum bt_bap_ep_state state = bap_stream -> ep -> status .state ;
133137
134- zassert_equal (state , BT_BAP_EP_STATE_STREAMING , "[%zu] Unexpected state: %d" , i ,
135- state );
138+ zassert_equal (state , BT_BAP_EP_STATE_STREAMING ,
139+ "[%zu]: Stream %p unexpected state: %d" , i , bap_stream , state );
136140 }
137141}
138142
@@ -384,3 +388,115 @@ static ZTEST_F(cap_initiator_test_unicast_start,
384388 zexpect_call_count ("bt_cap_initiator_cb.unicast_start_complete_cb" , 0 ,
385389 mock_cap_initiator_unicast_start_complete_cb_fake .call_count );
386390}
391+
392+ static ZTEST_F (cap_initiator_test_unicast_start ,
393+ test_initiator_unicast_start_state_codec_configured )
394+ {
395+ struct bt_cap_unicast_audio_start_stream_param
396+ stream_params [CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT ] = {0 };
397+ const struct bt_cap_unicast_audio_start_param param = {
398+ .type = BT_CAP_SET_TYPE_AD_HOC ,
399+ .count = ARRAY_SIZE (stream_params ),
400+ .stream_params = stream_params ,
401+ };
402+ int err ;
403+
404+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
405+ stream_params [i ].stream = & fixture -> cap_streams [i ];
406+ stream_params [i ].codec_cfg = & fixture -> preset .codec_cfg ;
407+ stream_params [i ].member .member = & fixture -> conns [i % ARRAY_SIZE (fixture -> conns )];
408+ stream_params [i ].ep = & fixture -> eps [i ];
409+
410+ test_unicast_set_state (stream_params [i ].stream , stream_params [i ].member .member ,
411+ stream_params [i ].ep , & fixture -> preset ,
412+ BT_BAP_EP_STATE_CODEC_CONFIGURED );
413+ }
414+
415+ err = bt_cap_initiator_unicast_audio_start (& param );
416+ zassert_equal (err , 0 , "Unexpected return value %d" , err );
417+
418+ zexpect_call_count ("bt_cap_initiator_cb.unicast_start_complete_cb" , 1 ,
419+ mock_cap_initiator_unicast_start_complete_cb_fake .call_count );
420+
421+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
422+ const struct bt_bap_stream * bap_stream = & fixture -> cap_streams [i ].bap_stream ;
423+ const enum bt_bap_ep_state state = bap_stream -> ep -> status .state ;
424+
425+ zassert_equal (state , BT_BAP_EP_STATE_STREAMING ,
426+ "[%zu]: Stream %p unexpected state: %d" , i , bap_stream , state );
427+ }
428+ }
429+
430+ static ZTEST_F (cap_initiator_test_unicast_start , test_initiator_unicast_start_state_qos_configured )
431+ {
432+ struct bt_cap_unicast_audio_start_stream_param
433+ stream_params [CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT ] = {0 };
434+ const struct bt_cap_unicast_audio_start_param param = {
435+ .type = BT_CAP_SET_TYPE_AD_HOC ,
436+ .count = ARRAY_SIZE (stream_params ),
437+ .stream_params = stream_params ,
438+ };
439+ int err ;
440+
441+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
442+ stream_params [i ].stream = & fixture -> cap_streams [i ];
443+ stream_params [i ].codec_cfg = & fixture -> preset .codec_cfg ;
444+ stream_params [i ].member .member = & fixture -> conns [i % ARRAY_SIZE (fixture -> conns )];
445+ stream_params [i ].ep = & fixture -> eps [i ];
446+
447+ test_unicast_set_state (stream_params [i ].stream , stream_params [i ].member .member ,
448+ stream_params [i ].ep , & fixture -> preset ,
449+ BT_BAP_EP_STATE_QOS_CONFIGURED );
450+ }
451+
452+ err = bt_cap_initiator_unicast_audio_start (& param );
453+ zassert_equal (err , 0 , "Unexpected return value %d" , err );
454+
455+ zexpect_call_count ("bt_cap_initiator_cb.unicast_start_complete_cb" , 1 ,
456+ mock_cap_initiator_unicast_start_complete_cb_fake .call_count );
457+
458+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
459+ const struct bt_bap_stream * bap_stream = & fixture -> cap_streams [i ].bap_stream ;
460+ const enum bt_bap_ep_state state = bap_stream -> ep -> status .state ;
461+
462+ zassert_equal (state , BT_BAP_EP_STATE_STREAMING ,
463+ "[%zu]: Stream %p unexpected state: %d" , i , bap_stream , state );
464+ }
465+ }
466+
467+ static ZTEST_F (cap_initiator_test_unicast_start , test_initiator_unicast_start_state_enabling )
468+ {
469+ struct bt_cap_unicast_audio_start_stream_param
470+ stream_params [CONFIG_BT_BAP_UNICAST_CLIENT_GROUP_STREAM_COUNT ] = {0 };
471+ const struct bt_cap_unicast_audio_start_param param = {
472+ .type = BT_CAP_SET_TYPE_AD_HOC ,
473+ .count = ARRAY_SIZE (stream_params ),
474+ .stream_params = stream_params ,
475+ };
476+ int err ;
477+
478+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
479+ stream_params [i ].stream = & fixture -> cap_streams [i ];
480+ stream_params [i ].codec_cfg = & fixture -> preset .codec_cfg ;
481+ stream_params [i ].member .member = & fixture -> conns [i % ARRAY_SIZE (fixture -> conns )];
482+ stream_params [i ].ep = & fixture -> eps [i ];
483+
484+ test_unicast_set_state (stream_params [i ].stream , stream_params [i ].member .member ,
485+ stream_params [i ].ep , & fixture -> preset ,
486+ BT_BAP_EP_STATE_ENABLING );
487+ }
488+
489+ err = bt_cap_initiator_unicast_audio_start (& param );
490+ zassert_equal (err , 0 , "Unexpected return value %d" , err );
491+
492+ zexpect_call_count ("bt_cap_initiator_cb.unicast_start_complete_cb" , 1 ,
493+ mock_cap_initiator_unicast_start_complete_cb_fake .call_count );
494+
495+ for (size_t i = 0U ; i < ARRAY_SIZE (stream_params ); i ++ ) {
496+ const struct bt_bap_stream * bap_stream = & fixture -> cap_streams [i ].bap_stream ;
497+ const enum bt_bap_ep_state state = bap_stream -> ep -> status .state ;
498+
499+ zassert_equal (state , BT_BAP_EP_STATE_STREAMING ,
500+ "[%zu]: Stream %p unexpected state: %d" , i , bap_stream , state );
501+ }
502+ }
0 commit comments