srtsrc: Add test of port allocation

This commit is contained in:
Jonas K Danielsson 2024-02-03 18:28:20 +01:00
parent b5f70619ec
commit 8c1725c961

View file

@ -24,26 +24,16 @@
static const gchar elements[][8] = { "srtsrc", "srtsink" }; static const gchar elements[][8] = { "srtsrc", "srtsink" };
static void static void
check_play (const gchar * src_uri, check_play (GstHarness * h_src,
GstSRTConnectionMode src_mode, GstSRTConnectionMode src_mode,
const gchar * sink_uri, GstSRTConnectionMode sink_mode) GstHarness * h_sink, GstSRTConnectionMode sink_mode)
{ {
GstHarness *h_src, *h_sink;
GstStructure *stats; GstStructure *stats;
gint64 packets_received; gint64 packets_received;
GstBuffer *in_buf, *out_buf; GstBuffer *in_buf, *out_buf;
gchar *src_launchline, *sink_launchline;
GstElement *src_element; GstElement *src_element;
guint8 data[1316] = { 0 }; guint8 data[1316] = { 0 };
sink_launchline = g_strdup_printf ("srtsink uri=%s", sink_uri);
h_sink = gst_harness_new_parse (sink_launchline);
g_free (sink_launchline);
src_launchline = g_strdup_printf ("srtsrc name=src uri=%s", src_uri);
h_src = gst_harness_new_parse (src_launchline);
g_free (src_launchline);
gst_harness_set_src_caps_str (h_sink, "video/mpegts"); gst_harness_set_src_caps_str (h_sink, "video/mpegts");
if (src_mode == GST_SRT_CONNECTION_MODE_LISTENER) { if (src_mode == GST_SRT_CONNECTION_MODE_LISTENER) {
@ -99,6 +89,25 @@ check_play (const gchar * src_uri,
gst_harness_teardown (h_sink); gst_harness_teardown (h_sink);
} }
static void
check_play_uri (const gchar * src_uri,
GstSRTConnectionMode src_mode,
const gchar * sink_uri, GstSRTConnectionMode sink_mode)
{
gchar *src_launchline, *sink_launchline;
GstHarness *h_src, *h_sink;
sink_launchline = g_strdup_printf ("srtsink uri=%s", sink_uri);
h_sink = gst_harness_new_parse (sink_launchline);
g_free (sink_launchline);
src_launchline = g_strdup_printf ("srtsrc name=src uri=%s", src_uri);
h_src = gst_harness_new_parse (src_launchline);
g_free (src_launchline);
check_play (h_src, src_mode, h_sink, sink_mode);
}
GST_START_TEST (test_create_and_unref) GST_START_TEST (test_create_and_unref)
{ {
GstElement *e; GstElement *e;
@ -156,7 +165,7 @@ GST_END_TEST;
GST_START_TEST (test_src_caller_sink_listener) GST_START_TEST (test_src_caller_sink_listener)
{ {
check_play ("srt://127.0.0.1:3434?mode=caller", check_play_uri ("srt://127.0.0.1:3434?mode=caller",
GST_SRT_CONNECTION_MODE_CALLER, GST_SRT_CONNECTION_MODE_CALLER,
"srt://:3434?mode=listener", GST_SRT_CONNECTION_MODE_LISTENER); "srt://:3434?mode=listener", GST_SRT_CONNECTION_MODE_LISTENER);
} }
@ -165,13 +174,43 @@ GST_END_TEST;
GST_START_TEST (test_src_listener_sink_caller) GST_START_TEST (test_src_listener_sink_caller)
{ {
check_play ("srt://:4242?mode=listener", check_play_uri ("srt://:4242?mode=listener",
GST_SRT_CONNECTION_MODE_LISTENER, GST_SRT_CONNECTION_MODE_LISTENER,
"srt://127.0.0.1:4242?mode=caller", GST_SRT_CONNECTION_MODE_CALLER); "srt://127.0.0.1:4242?mode=caller", GST_SRT_CONNECTION_MODE_CALLER);
} }
GST_END_TEST; GST_END_TEST;
GST_START_TEST (test_src_allocate_port)
{
GstHarness *h_src, *h_sink;
GstElement *src;
gchar *sink_launchline;
gint local_port = 0;
h_src = gst_harness_new_parse ("srtsrc name=src localport=0 mode=listener");
g_assert_nonnull (h_src);
src = gst_bin_get_by_name (GST_BIN (h_src->element), "src");
gst_element_set_state (src, GST_STATE_PAUSED);
g_object_get (src, "localport", &local_port, NULL);
g_object_unref (src);
GST_INFO ("srtsrc localport = %d", local_port);
g_assert_cmpint (local_port, !=, 0);
sink_launchline =
g_strdup_printf ("srtsink uri=srt://127.0.0.1:%u?mode=caller",
local_port);
h_sink = gst_harness_new_parse (sink_launchline);
g_free (sink_launchline);
check_play (h_src, GST_SRT_CONNECTION_MODE_LISTENER, h_sink,
GST_SRT_CONNECTION_MODE_CALLER);
}
GST_END_TEST;
static Suite * static Suite *
srt_suite (void) srt_suite (void)
{ {
@ -185,6 +224,7 @@ srt_suite (void)
G_N_ELEMENTS (elements)); G_N_ELEMENTS (elements));
tcase_add_test (tc_chain, test_src_caller_sink_listener); tcase_add_test (tc_chain, test_src_caller_sink_listener);
tcase_add_test (tc_chain, test_src_listener_sink_caller); tcase_add_test (tc_chain, test_src_listener_sink_caller);
tcase_add_test (tc_chain, test_src_allocate_port);
return s; return s;
} }