Skip to content

Commit 9adc3e4

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

File tree

2 files changed

+122
-21
lines changed

2 files changed

+122
-21
lines changed

.github/workflows/kvssink.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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 gtest
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+
./tst/gstkvsplugintest

tst/gstreamer/gstkvstest.cpp

Lines changed: 55 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,45 +12,58 @@ 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+
GstPad *sinkpad = gst_element_request_pad_simple(kinesisvideoproducersink, "video_0");
32+
fail_unless(sinkpad != nullptr, "Failed to request video pad");
33+
gst_object_unref(sinkpad);
34+
2635
return kinesisvideoproducersink;
2736
}
2837

2938
static void
3039
cleanup_kinesisvideoproducersink(GstElement * kinesisvideoproducersink)
3140
{
41+
GstPad *sinkpad = gst_element_get_static_pad(kinesisvideoproducersink, "video_0");
42+
if (sinkpad) {
43+
gst_element_release_request_pad(kinesisvideoproducersink, sinkpad);
44+
gst_object_unref(sinkpad);
45+
}
3246

33-
gst_check_teardown_src_pad (kinesisvideoproducersink);
3447
gst_check_teardown_element (kinesisvideoproducersink);
3548
}
3649

37-
GST_START_TEST(kvsproducersinktestplay)
50+
GST_START_TEST(kvsproducersinktestplayandstop)
3851
{
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);
52+
GstElement *pElement = setup_kinesisvideoproducersink();
4353

44-
}
45-
GST_END_TEST;
54+
// Set up source pad
55+
GstPad *srcpad = gst_check_setup_src_pad_by_name(pElement, &srctemplate, "video_0");
56+
fail_unless(srcpad != nullptr, "Failed to setup source pad");
57+
gst_pad_set_active(srcpad, TRUE);
4658

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);
59+
// Set to PLAYING state (NULL -> PLAYING)
60+
fail_unless_equals_int(GST_STATE_CHANGE_SUCCESS, gst_element_set_state(pElement, GST_STATE_PLAYING));
61+
62+
// Set back to NULL state (PLAYING -> NULL)
63+
fail_unless_equals_int(GST_STATE_CHANGE_SUCCESS, gst_element_set_state(pElement, GST_STATE_NULL));
5364

65+
gst_pad_set_active(srcpad, FALSE);
66+
cleanup_kinesisvideoproducersink(pElement);
5467
}
5568
GST_END_TEST;
5669

@@ -60,7 +73,7 @@ GST_START_TEST(kvsproducersinktestplaytopausetoplay)
6073
setup_kinesisvideoproducersink();
6174
GstPad *srcpad;
6275

63-
srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, "sink");
76+
srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, "video_0");
6477

6578
gst_pad_set_active (srcpad, TRUE);
6679

@@ -206,7 +219,7 @@ GST_START_TEST(check_playing_to_paused_and_back_to_playing)
206219
setup_kinesisvideoproducersink();
207220
GstPad *srcpad;
208221

209-
srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, "sink");
222+
srcpad = gst_check_setup_src_pad_by_name (pElement, &srctemplate, "video_0");
210223

211224
gst_pad_set_active (srcpad, TRUE);
212225

@@ -221,16 +234,37 @@ GST_START_TEST(check_playing_to_paused_and_back_to_playing)
221234
}
222235
GST_END_TEST;
223236

237+
GST_START_TEST(test_check_credentials)
238+
{
239+
ck_abort_msg("Required environment variables (ACCESS_KEY and/or SECRET_KEY) are not set");
240+
}
241+
GST_END_TEST;
242+
224243
//Verify all State change events and direct state set events.
225244

226245
Suite *gst_kinesisvideoproducer_suite(void) {
227246
Suite *s = suite_create("GstKinesisVideoSinkPlugin");
228247
TCase *tc = tcase_create("AllStateChangeTests");
229-
accessKey = getenv(ACCESS_KEY_ENV_VAR);
230-
secretKey = getenv(SECRET_KEY_ENV_VAR);
231248

232-
tcase_add_test(tc, kvsproducersinktestplay);
233-
tcase_add_test(tc, kvsproducersinktestpause);
249+
accessKey = GETENV(ACCESS_KEY_ENV_VAR);
250+
secretKey = GETENV(SECRET_KEY_ENV_VAR);
251+
sessionToken = GETENV(SESSION_TOKEN_ENV_VAR);
252+
253+
accessKey = accessKey ? accessKey : "";
254+
secretKey = secretKey ? secretKey : "";
255+
sessionToken = sessionToken ? sessionToken : "";
256+
257+
// Check if required environment variables are set
258+
if (accessKey[0] == '\0' || secretKey[0] == '\0') {
259+
TCase *tc_env = tcase_create("Credentials check");
260+
tcase_add_test_raise_signal(tc_env, test_check_credentials, SIGABRT);
261+
suite_add_tcase(s, tc_env);
262+
263+
// Return the suite with only this failing test
264+
return s;
265+
}
266+
267+
tcase_add_test(tc, kvsproducersinktestplayandstop);
234268
tcase_add_test(tc, kvsproducersinktestplaytopausetoplay);
235269
tcase_add_test(tc, kvsproducersinkteststop);
236270
tcase_add_test(tc, check_properties_are_passed_correctly);

0 commit comments

Comments
 (0)