summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2018-09-28 13:23:38 +0200
committerOlivier CrĂȘte <olivier.crete@collabora.com>2018-10-10 13:42:05 -0400
commit3f832053998d28912c0458f4314f7f9a70d22908 (patch)
tree2ddbb3558a2d6e79296aeb5498b0c7a28e39f7df /tests
parenta3f395d9219ee21e71e13460a61daa93e2e28958 (diff)
downloadgstreamer-plugins-bad-3f832053998d28912c0458f4314f7f9a70d22908.tar.gz
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
Diffstat (limited to 'tests')
-rw-r--r--tests/check/elements/shm.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/check/elements/shm.c b/tests/check/elements/shm.c
index f67e9ee02..69413cf0b 100644
--- a/tests/check/elements/shm.c
+++ b/tests/check/elements/shm.c
@@ -169,6 +169,66 @@ 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;
+ GstSample *sample = NULL;
+
+ 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 ("appsink", 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_signal_emit_by_name (sink, "pull-sample", &sample);
+ gst_sample_unref (sample);
+
+ 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 +241,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;
}