summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2018-09-28 13:23:38 +0200
committerJosep Torra <n770galaxy@gmail.com>2018-10-09 15:17:32 +0200
commitd62d3760fb8d0f7bd37c467c0b66b16561375115 (patch)
tree34732739da7662802bb91b7947f0c41f8a6fcdbf
parent84bcd148488fd19dc1c3e0f777c10b497722b8b6 (diff)
tests: shm: add an end to end test for live reception
Add a unit test to exchange data between two pipelines with shmsrc acting as a live source. https://bugzilla.gnome.org/show_bug.cgi?id=797203
-rw-r--r--tests/check/elements/shm.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/check/elements/shm.c b/tests/check/elements/shm.c
index f67e9ee02..31169ddfb 100644
--- a/tests/check/elements/shm.c
+++ b/tests/check/elements/shm.c
@@ -169,6 +169,64 @@ GST_START_TEST (test_shm_alloc)
GST_END_TEST;
+GST_START_TEST (test_shm_live)
+{
+ GstElement *producer, *consumer;
+ GstElement *src, *sink;
+ gchar *socket_path = NULL;
+ GstStateChangeReturn state_res;
+
+ src = gst_element_factory_make ("fakesrc", NULL);
+ g_object_set (src, "sizetype", 2, NULL);
+
+ sink = gst_element_factory_make ("shmsink", NULL);
+ g_object_set (sink, "socket-path", "shm-unit-test", "wait-for-connection",
+ FALSE, NULL);
+
+ producer = gst_pipeline_new ("producer-pipeline");
+ gst_bin_add_many (GST_BIN (producer), src, sink, NULL);
+ fail_unless (gst_element_link (src, sink));
+
+ state_res = gst_element_set_state (producer, GST_STATE_PLAYING);
+ fail_unless (state_res != GST_STATE_CHANGE_FAILURE);
+
+ g_object_get (sink, "socket-path", &socket_path, NULL);
+ fail_unless (socket_path != NULL);
+
+ src = gst_element_factory_make ("shmsrc", NULL);
+ sink = gst_element_factory_make ("fakesink", NULL);
+ g_object_set (src, "is-live", TRUE, NULL);
+ g_object_set (sink, "async", FALSE, "enable-last-sample", FALSE, NULL);
+
+ consumer = gst_pipeline_new ("consumer-pipeline");
+ gst_bin_add_many (GST_BIN (consumer), src, sink, NULL);
+ fail_unless (gst_element_link (src, sink));
+
+ g_object_set (src, "socket-path", socket_path, NULL);
+
+ state_res = gst_element_set_state (consumer, GST_STATE_PLAYING);
+ fail_unless (state_res != GST_STATE_CHANGE_FAILURE);
+
+ /* wait for preroll */
+ state_res = gst_element_get_state (consumer, NULL, NULL, GST_CLOCK_TIME_NONE);
+ fail_unless (state_res == GST_STATE_CHANGE_SUCCESS);
+
+ g_usleep (10000);
+
+ state_res = gst_element_set_state (consumer, GST_STATE_NULL);
+ fail_unless (state_res != GST_STATE_CHANGE_FAILURE);
+
+ state_res = gst_element_set_state (producer, GST_STATE_NULL);
+ fail_unless (state_res != GST_STATE_CHANGE_FAILURE);
+
+ gst_object_unref (consumer);
+ gst_object_unref (producer);
+
+ g_free (socket_path);
+}
+
+GST_END_TEST;
+
static Suite *
shm_suite (void)
{
@@ -181,6 +239,10 @@ shm_suite (void)
tcase_add_test (tc, test_shm_alloc);
suite_add_tcase (s, tc);
+ tc = tcase_create ("shm2");
+ tcase_add_test (tc, test_shm_live);
+ suite_add_tcase (s, tc);
+
return s;
}