tests: add ogg test file and some proper unit tests for discoverer
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 7 Jan 2012 16:43:26 +0000 (16:43 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 7 Jan 2012 16:45:53 +0000 (16:45 +0000)
Leaks when re-used, so blacklisted for valgrind for now.

tests/check/Makefile.am
tests/check/libs/discoverer.c
tests/files/Makefile.am
tests/files/theora-vorbis.ogg [new file with mode: 0644]

index 3280ba3..ad9cafa 100644 (file)
@@ -167,6 +167,7 @@ check_PROGRAMS = \
 # ffmpegcolorspace takes too long, so disabled for now
 VALGRIND_TO_FIX = \
        elements/ffmpegcolorspace \
+       libs/discoverer \
        libs/video
 
 # these tests don't even pass
index 2d20576..a8de512 100644 (file)
@@ -52,7 +52,8 @@ GST_START_TEST (test_disco_sync)
   GstDiscovererResult result;
   gchar *uri;
 
-  dc = gst_discoverer_new (GST_SECOND, &err);
+  /* high timeout, in case we're running under valgrind */
+  dc = gst_discoverer_new (5 * GST_SECOND, &err);
   fail_unless (dc != NULL);
   fail_unless (err == NULL);
 
@@ -78,6 +79,68 @@ GST_START_TEST (test_disco_sync)
 
 GST_END_TEST;
 
+static void
+test_disco_sync_reuse (const gchar * test_fn, guint num, GstClockTime timeout)
+{
+  GError *err = NULL;
+  GstDiscoverer *dc;
+  GstDiscovererInfo *info;
+  GstDiscovererResult result;
+  gchar *uri, *path;
+  int i;
+
+  dc = gst_discoverer_new (timeout, &err);
+  fail_unless (dc != NULL);
+  fail_unless (err == NULL);
+
+  /* GST_TEST_FILE comes from makefile CFLAGS */
+  path = g_build_filename (GST_TEST_FILES_PATH, test_fn, NULL);
+  uri = gst_filename_to_uri (path, &err);
+  g_free (path);
+  fail_unless (err == NULL);
+
+  for (i = 0; i < num; ++i) {
+    GST_INFO ("[%02d] discovering uri '%s'", i, uri);
+    info = gst_discoverer_discover_uri (dc, uri, &err);
+    if (info) {
+      result = gst_discoverer_info_get_result (info);
+      GST_INFO ("result: %d", result);
+      gst_discoverer_info_unref (info);
+    }
+    /* in case we don't have some of the elements needed */
+    if (err) {
+      g_error_free (err);
+      err = NULL;
+    }
+  }
+  g_free (uri);
+
+  g_object_unref (dc);
+}
+
+GST_START_TEST (test_disco_sync_reuse_ogg)
+{
+  test_disco_sync_reuse ("theora-vorbis.ogg", 2, 10 * GST_SECOND);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_disco_sync_reuse_mp3)
+{
+  /* this will cause errors because -base doesn't do mp3 parsing or decoding */
+  test_disco_sync_reuse ("test.mp3", 3, 10 * GST_SECOND);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_disco_sync_reuse_timeout)
+{
+  /* set minimum timeout to test that, esp. leakage under valgrind */
+  /* FIXME: should really be even shorter */
+  test_disco_sync_reuse ("theora-vorbis.ogg", 2, GST_SECOND);
+}
+
+GST_END_TEST;
 
 static Suite *
 discoverer_suite (void)
@@ -88,6 +151,9 @@ discoverer_suite (void)
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_disco_init);
   tcase_add_test (tc_chain, test_disco_sync);
+  tcase_add_test (tc_chain, test_disco_sync_reuse_ogg);
+  tcase_add_test (tc_chain, test_disco_sync_reuse_mp3);
+  tcase_add_test (tc_chain, test_disco_sync_reuse_timeout);
   return s;
 }
 
index 9556f5e..99b043f 100644 (file)
@@ -3,4 +3,5 @@ EXTRA_DIST = \
        hls.m3u8 \
        license-uris \
        partialframe.mjpeg \
-       test.mp3
+       test.mp3 \
+       theora-vorbis.ogg
diff --git a/tests/files/theora-vorbis.ogg b/tests/files/theora-vorbis.ogg
new file mode 100644 (file)
index 0000000..ab635cc
Binary files /dev/null and b/tests/files/theora-vorbis.ogg differ