@@ -12,45 +12,60 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
1212 ));
1313static char const *accessKey;
1414static char const *secretKey;
15+ static char const *sessionToken;
1516
1617static GstElement *
1718setup_kinesisvideoproducersink (void )
1819{
1920 GstElement *kinesisvideoproducersink;
20- GST_DEBUG (" Setup kinesisvideoproducersink" );
21+ GST_DEBUG (" Setup kinesisvideoproducersink" );
2122 kinesisvideoproducersink = gst_check_setup_element (" kvssink" );
23+ fail_unless (kinesisvideoproducersink != nullptr , " Failed to create kvssink element (is GST_PLUGIN_PATH set?)" );
24+
2225 g_object_set (G_OBJECT (kinesisvideoproducersink),
2326 " access-key" , accessKey,
2427 " secret-key" , secretKey,
28+ " session-token" , sessionToken,
2529 NULL );
30+
31+ // https://gitlab.freedesktop.org/gstreamer/gst-docs/-/issues/91
32+ // Use gst_element_request_pad_simple in newer GStreamer versions
33+ GstPad *sinkpad = gst_element_get_request_pad (kinesisvideoproducersink, " video_0" );
34+ fail_unless (sinkpad != nullptr , " Failed to request video pad" );
35+ gst_object_unref (sinkpad);
36+
2637 return kinesisvideoproducersink;
2738}
2839
2940static void
3041cleanup_kinesisvideoproducersink (GstElement * kinesisvideoproducersink)
3142{
43+ GstPad *sinkpad = gst_element_get_static_pad (kinesisvideoproducersink, " video_0" );
44+ if (sinkpad) {
45+ gst_element_release_request_pad (kinesisvideoproducersink, sinkpad);
46+ gst_object_unref (sinkpad);
47+ }
3248
33- gst_check_teardown_src_pad (kinesisvideoproducersink);
3449 gst_check_teardown_element (kinesisvideoproducersink);
3550}
3651
37- GST_START_TEST (kvsproducersinktestplay )
52+ GST_START_TEST (kvsproducersinktestplayandstop )
3853 {
39- GstElement *pElement =
40- setup_kinesisvideoproducersink ();
41- fail_unless_equals_int (gst_element_set_state (pElement, GST_STATE_PLAYING), GST_STATE_CHANGE_ASYNC);
42- cleanup_kinesisvideoproducersink (pElement);
54+ GstElement *pElement = setup_kinesisvideoproducersink ();
4355
44- }
45- GST_END_TEST;
56+ // Set up source pad
57+ GstPad *srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, " video_0" );
58+ fail_unless (srcpad != nullptr , " Failed to setup source pad" );
59+ gst_pad_set_active (srcpad, TRUE );
4660
47- GST_START_TEST (kvsproducersinktestpause)
48- {
49- GstElement *pElement =
50- setup_kinesisvideoproducersink ();
51- fail_unless_equals_int (gst_element_set_state (pElement, GST_STATE_PAUSED), GST_STATE_CHANGE_ASYNC);
52- cleanup_kinesisvideoproducersink (pElement);
61+ // Set to PLAYING state (NULL -> PLAYING)
62+ fail_unless_equals_int (GST_STATE_CHANGE_SUCCESS, gst_element_set_state (pElement, GST_STATE_PLAYING));
63+
64+ // Set back to NULL state (PLAYING -> NULL)
65+ fail_unless_equals_int (GST_STATE_CHANGE_SUCCESS, gst_element_set_state (pElement, GST_STATE_NULL));
5366
67+ gst_pad_set_active (srcpad, FALSE );
68+ cleanup_kinesisvideoproducersink (pElement);
5469 }
5570GST_END_TEST;
5671
@@ -60,7 +75,7 @@ GST_START_TEST(kvsproducersinktestplaytopausetoplay)
6075 setup_kinesisvideoproducersink ();
6176 GstPad *srcpad;
6277
63- srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, " sink " );
78+ srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, " video_0 " );
6479
6580 gst_pad_set_active (srcpad, TRUE );
6681
@@ -206,7 +221,7 @@ GST_START_TEST(check_playing_to_paused_and_back_to_playing)
206221 setup_kinesisvideoproducersink ();
207222 GstPad *srcpad;
208223
209- srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, " sink " );
224+ srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, " video_0 " );
210225
211226 gst_pad_set_active (srcpad, TRUE );
212227
@@ -221,16 +236,37 @@ GST_START_TEST(check_playing_to_paused_and_back_to_playing)
221236 }
222237GST_END_TEST;
223238
239+ GST_START_TEST (test_check_credentials)
240+ {
241+ ck_abort_msg (" Required environment variables (ACCESS_KEY and/or SECRET_KEY) are not set" );
242+ }
243+ GST_END_TEST;
244+
224245// Verify all State change events and direct state set events.
225246
226247Suite *gst_kinesisvideoproducer_suite (void ) {
227248 Suite *s = suite_create (" GstKinesisVideoSinkPlugin" );
228249 TCase *tc = tcase_create (" AllStateChangeTests" );
229- accessKey = getenv (ACCESS_KEY_ENV_VAR);
230- secretKey = getenv (SECRET_KEY_ENV_VAR);
231250
232- tcase_add_test (tc, kvsproducersinktestplay);
233- tcase_add_test (tc, kvsproducersinktestpause);
251+ accessKey = GETENV (ACCESS_KEY_ENV_VAR);
252+ secretKey = GETENV (SECRET_KEY_ENV_VAR);
253+ sessionToken = GETENV (SESSION_TOKEN_ENV_VAR);
254+
255+ accessKey = accessKey ? accessKey : " " ;
256+ secretKey = secretKey ? secretKey : " " ;
257+ sessionToken = sessionToken ? sessionToken : " " ;
258+
259+ // Check if required environment variables are set
260+ if (accessKey[0 ] == ' \0 ' || secretKey[0 ] == ' \0 ' ) {
261+ TCase *tc_env = tcase_create (" Credentials check" );
262+ tcase_add_test_raise_signal (tc_env, test_check_credentials, SIGABRT);
263+ suite_add_tcase (s, tc_env);
264+
265+ // Return the suite with only this failing test
266+ return s;
267+ }
268+
269+ tcase_add_test (tc, kvsproducersinktestplayandstop);
234270 tcase_add_test (tc, kvsproducersinktestplaytopausetoplay);
235271 tcase_add_test (tc, kvsproducersinkteststop);
236272 tcase_add_test (tc, check_properties_are_passed_correctly);
0 commit comments