Skip to content

Commit d88e505

Browse files
committed
Repair unit tests and CI
1 parent 1ba1872 commit d88e505

File tree

2 files changed

+125
-21
lines changed

2 files changed

+125
-21
lines changed

.github/workflows/kvssink.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: kvssink checks
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
- master
8+
pull_request:
9+
branches:
10+
- develop
11+
- master
12+
13+
jobs:
14+
unit-tests:
15+
runs-on: ubuntu-latest
16+
timeout-minutes: 30
17+
permissions:
18+
id-token: write
19+
contents: read
20+
strategy:
21+
matrix:
22+
include:
23+
- os: Ubuntu 22.04
24+
image: public.ecr.aws/ubuntu/ubuntu:22.04_stable
25+
- os: Ubuntu 20.04
26+
image: public.ecr.aws/ubuntu/ubuntu:20.04_stable
27+
fail-fast: false
28+
29+
name: kvssink unit tests on ${{ matrix.os }}
30+
steps:
31+
- name: Checkout repository
32+
uses: actions/checkout@v4
33+
34+
- name: Install dependencies
35+
run: |
36+
sudo apt-get update
37+
sudo apt-get install -y automake build-essential cmake git \
38+
gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad \
39+
gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly \
40+
gstreamer1.0-tools \
41+
libcurl4-openssl-dev libgstreamer1.0-dev \
42+
libgstreamer-plugins-base1.0-dev liblog4cplus-dev \
43+
libssl-dev pkg-config
44+
45+
- name: Setup build directory
46+
run: |
47+
mkdir -p build
48+
cd build
49+
50+
- name: Build kvssink unit tests
51+
working-directory: ./build
52+
run: |
53+
cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_TEST=ON -DCMAKE_BUILD_TYPE=Debug -DALIGNED_MEMORY_MODEL=ON
54+
make -j$(nproc)
55+
56+
- name: Configure AWS Credentials
57+
uses: aws-actions/configure-aws-credentials@v4
58+
with:
59+
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
60+
role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }}
61+
aws-region: ${{ secrets.AWS_REGION }}
62+
role-duration-seconds: 10800
63+
64+
- name: Run the unit tests
65+
working-directory: ./build
66+
run: |
67+
export GST_PLUGIN_PATH=`pwd`
68+
./tst/gstkvsplugintest

tst/gstreamer/gstkvstest.cpp

Lines changed: 57 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,45 +12,60 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
1212
));
1313
static char const *accessKey;
1414
static char const *secretKey;
15+
static char const *sessionToken;
1516

1617
static GstElement *
1718
setup_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

2940
static void
3041
cleanup_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
}
5570
GST_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
}
222237
GST_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

226247
Suite *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

Comments
 (0)