bufferpool: add a new testsuite or the pool
authorStefan Sauer <ensonic@users.sf.net>
Thu, 30 Jan 2014 07:11:12 +0000 (08:11 +0100)
committerStefan Sauer <ensonic@users.sf.net>
Thu, 30 Jan 2014 11:43:45 +0000 (12:43 +0100)
Start with some basic tests.

tests/check/Makefile.am
tests/check/gst/.gitignore
tests/check/gst/gstbufferpool.c [new file with mode: 0644]

index 92426d8..6dde80d 100644 (file)
@@ -104,6 +104,7 @@ check_PROGRAMS =                            \
        gst/gstatomicqueue                      \
        gst/gstbuffer                           \
        gst/gstbufferlist                       \
+       gst/gstbufferpool                               \
        gst/gstmeta                             \
        gst/gstmemory                           \
        gst/gstbus                              \
index 45fefbd..cecb170 100644 (file)
@@ -5,6 +5,7 @@ gstatomicqueue
 gstbin
 gstbuffer
 gstbufferlist
+gstbufferpool
 gstbus
 gstcaps
 gstcapsfeatures
diff --git a/tests/check/gst/gstbufferpool.c b/tests/check/gst/gstbufferpool.c
new file mode 100644 (file)
index 0000000..a237212
--- /dev/null
@@ -0,0 +1,86 @@
+/* GStreamer
+ * Copyright (C) 2014 Stefan Sauer <ensonic@users.sf.net>
+ *
+ * gstbufferpool.c: Unit test for GstBufferPool
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+
+static GstBufferPool *
+create_pool (guint size, guint min_buf, guint max_buf)
+{
+  GstBufferPool *pool = gst_buffer_pool_new ();
+  GstStructure *conf = gst_buffer_pool_get_config (pool);
+
+  gst_buffer_pool_config_set_params (conf, NULL, size, min_buf, max_buf);
+  gst_buffer_pool_set_config (pool, conf);
+
+  return pool;
+}
+
+GST_START_TEST (test_new_buffer_from_empty_pool)
+{
+  GstBufferPool *pool = create_pool (10, 0, 0);
+  GstBuffer *buf = NULL;
+
+  gst_buffer_pool_set_active (pool, TRUE);
+  gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
+  fail_if (buf == NULL, "acquiring buffer returned NULL");
+
+  gst_buffer_unref (buf);
+  gst_buffer_pool_set_active (pool, FALSE);
+  gst_object_unref (pool);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_buffer_is_recycled)
+{
+  GstBufferPool *pool = create_pool (10, 0, 0);
+  GstBuffer *buf = NULL, *prev;
+
+  gst_buffer_pool_set_active (pool, TRUE);
+  gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
+  prev = buf;
+  gst_buffer_unref (buf);
+  gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
+  fail_unless (buf == prev, "got a fresh buffer instead of previous");
+
+  gst_buffer_unref (buf);
+  gst_buffer_pool_set_active (pool, FALSE);
+  gst_object_unref (pool);
+}
+
+GST_END_TEST;
+
+static Suite *
+gst_buffer_pool_suite (void)
+{
+  Suite *s = suite_create ("GstBufferPool");
+  TCase *tc_chain = tcase_create ("buffer_pool tests");
+
+  tcase_set_timeout (tc_chain, 0);
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_new_buffer_from_empty_pool);
+  tcase_add_test (tc_chain, test_buffer_is_recycled);
+
+  return s;
+}
+
+GST_CHECK_MAIN (gst_buffer_pool);