diff options
Diffstat (limited to 'tests/check/elements/gnomevfssink.c')
-rw-r--r-- | tests/check/elements/gnomevfssink.c | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/tests/check/elements/gnomevfssink.c b/tests/check/elements/gnomevfssink.c deleted file mode 100644 index f0cf64d4..00000000 --- a/tests/check/elements/gnomevfssink.c +++ /dev/null @@ -1,319 +0,0 @@ -/* GStreamer unit test for the gnomevfssink element - * - * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org> - * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net> - * - * 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., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> - -#include <glib.h> -#include <glib/gstdio.h> - -#ifdef HAVE_UNISTD_H -#include <unistd.h> /* for close() */ -#endif - -#include <gst/check/gstcheck.h> - -static GstPad *mysrcpad; - -static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); - -static GstElement * -setup_gnomevfssink (void) -{ - GstElement *gnomevfssink; - - GST_DEBUG ("setup_gnomevfssink"); - gnomevfssink = gst_check_setup_element ("gnomevfssink"); - mysrcpad = gst_check_setup_src_pad (gnomevfssink, &srctemplate, NULL); - gst_pad_set_active (mysrcpad, TRUE); - return gnomevfssink; -} - -static void -cleanup_gnomevfssink (GstElement * gnomevfssink) -{ - gst_pad_set_active (mysrcpad, FALSE); - gst_check_teardown_src_pad (gnomevfssink); - gst_check_teardown_element (gnomevfssink); -} - -#if 0 -/* this queries via the element vfunc, which is currently not implemented */ -#define CHECK_QUERY_POSITION(gnomevfssink,format,position) \ - G_STMT_START { \ - GstFormat fmt = format; \ - gint64 pos; \ - fail_unless (gst_element_query_position (gnomevfssink, &fmt, &pos)); \ - fail_unless_equals_int (pos, position); \ - } G_STMT_END -#else -#define CHECK_QUERY_POSITION(gnomevfssink,format,position) \ - G_STMT_START { \ - GstFormat fmt = format; \ - GstPad *pad; \ - gint64 pos; \ - pad = gst_element_get_static_pad (gnomevfssink, "sink"); \ - fail_unless (gst_pad_query_position (pad, &fmt, &pos)); \ - fail_unless_equals_int (pos, position); \ - gst_object_unref (pad); \ - } G_STMT_END -#endif - -#define PUSH_BYTES(num_bytes) \ - G_STMT_START { \ - GstBuffer *buf = gst_buffer_new_and_alloc(num_bytes); \ - GRand *rand = g_rand_new_with_seed (num_bytes); \ - guint i; \ - for (i = 0; i < num_bytes; ++i) \ - GST_BUFFER_DATA(buf)[i] = (g_rand_int (rand) >> 24) & 0xff; \ - fail_unless_equals_int (gst_pad_push (mysrcpad, buf), GST_FLOW_OK); \ - g_rand_free (rand); \ - } G_STMT_END - -/* TODO: we don't check that the data is actually written to the right - * position after a seek */ -GST_START_TEST (test_seeking) -{ - const gchar *tmpdir; - GstElement *gnomevfssink; - gchar *tmp_fn; - gint fd; - - tmpdir = g_get_tmp_dir (); - if (tmpdir == NULL) - return; - - /* this is just silly, but gcc warns if we try to use tpmnam() */ - tmp_fn = - g_build_filename (tmpdir, "gstreamer-gnomevfssink-test-XXXXXX", NULL); - fd = g_mkstemp (tmp_fn); - if (fd < 0) { - GST_ERROR ("can't create temp file %s: %s", tmp_fn, g_strerror (errno)); - g_free (tmp_fn); - return; - } - /* don't want the file, just a filename (hence silly, see above) */ - close (fd); - g_remove (tmp_fn); - - gnomevfssink = setup_gnomevfssink (); - - GST_LOG ("using temp file '%s'", tmp_fn); - g_object_set (gnomevfssink, "location", tmp_fn, NULL); - - fail_unless_equals_int (gst_element_set_state (gnomevfssink, - GST_STATE_PLAYING), GST_STATE_CHANGE_ASYNC); - -#if 0 - /* Test that gnomevfssink is seekable with a file fd */ - /* gnomevfssink doesn't implement seekable query at the moment */ - GstQuery *seeking_query; - gboolean seekable; - - fail_unless ((seeking_query = gst_query_new_seeking (GST_FORMAT_BYTES)) - != NULL); - fail_unless (gst_element_query (gnomevfssink, seeking_query) == TRUE); - gst_query_parse_seeking (seeking_query, NULL, &seekable, NULL, NULL); - fail_unless (seekable == TRUE); - gst_query_unref (seeking_query); -#endif - - fail_unless (gst_pad_push_event (mysrcpad, - gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_BYTES, 0, -1, 0))); - - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 0); - - /* push buffer with size 0 and NULL data */ - PUSH_BYTES (0); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 0); - - PUSH_BYTES (1); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 1); - - PUSH_BYTES (99); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 100); - - PUSH_BYTES (8800); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 8900); - - if (gst_pad_push_event (mysrcpad, - gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_BYTES, 8800, -1, - 0))) { - GST_LOG ("seek ok"); - /* make sure that that new position is reported immediately */ - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 8800); - PUSH_BYTES (1); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 8801); - PUSH_BYTES (9256); - CHECK_QUERY_POSITION (gnomevfssink, GST_FORMAT_BYTES, 18057); - } else { - GST_INFO ("seeking not supported for tempfile?!"); - } - - fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ())); - - fail_unless_equals_int (gst_element_set_state (gnomevfssink, GST_STATE_NULL), - GST_STATE_CHANGE_SUCCESS); - - /* cleanup */ - cleanup_gnomevfssink (gnomevfssink); - - /* check that we wrote data to the right position after the seek */ - { - gchar *data = NULL; - gsize len; - - fail_unless (g_file_get_contents (tmp_fn, &data, &len, NULL), - "Failed to read in newly-created file '%s'", tmp_fn); - fail_unless_equals_int (len, 18057); - { - /* we wrote 9256 bytes at position 8801 */ - GRand *rand = g_rand_new_with_seed (9256); - guint i; - - for (i = 0; i < 9256; ++i) { - guint8 byte_written = *(((guint8 *) data) + 8801 + i); - - fail_unless_equals_int (byte_written, g_rand_int (rand) >> 24); - } - g_rand_free (rand); - } - g_free (data); - } - - /* remove file */ - g_remove (tmp_fn); - g_free (tmp_fn); -} - -GST_END_TEST; - -GST_START_TEST (test_coverage) -{ - GstElement *gnomevfssink; - gchar *location; - GstBus *bus; - GstMessage *message; - - gnomevfssink = setup_gnomevfssink (); - bus = gst_bus_new (); - - gst_element_set_bus (gnomevfssink, bus); - - g_object_set (gnomevfssink, "location", "/i/do/not/exist", NULL); - g_object_get (gnomevfssink, "location", &location, NULL); - fail_unless_equals_string (location, "/i/do/not/exist"); - g_free (location); - - fail_unless_equals_int (gst_element_set_state (gnomevfssink, - GST_STATE_PLAYING), GST_STATE_CHANGE_FAILURE); - - /* a state change and an error */ - fail_if ((message = gst_bus_pop (bus)) == NULL); - fail_unless_message_error (message, RESOURCE, OPEN_WRITE); - gst_message_unref (message); - - g_object_set (gnomevfssink, "location", NULL, NULL); - g_object_get (gnomevfssink, "location", &location, NULL); - fail_if (location); - - /* cleanup */ - gst_element_set_bus (gnomevfssink, NULL); - gst_object_unref (GST_OBJECT (bus)); - cleanup_gnomevfssink (gnomevfssink); -} - -GST_END_TEST; - -GST_START_TEST (test_uri_interface) -{ - GstElement *gnomevfssink; - gchar *location; - GstBus *bus; - - gnomevfssink = setup_gnomevfssink (); - bus = gst_bus_new (); - - gst_element_set_bus (gnomevfssink, bus); - - g_object_set (G_OBJECT (gnomevfssink), "location", "/i/do/not/exist", NULL); - g_object_get (G_OBJECT (gnomevfssink), "location", &location, NULL); - fail_unless_equals_string (location, "/i/do/not/exist"); - g_free (location); - - location = (gchar *) gst_uri_handler_get_uri (GST_URI_HANDLER (gnomevfssink)); - fail_unless_equals_string (location, "file://%2Fi%2Fdo%2Fnot%2Fexist"); - - /* should accept file:///foo/bar URIs */ - fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (gnomevfssink), - "file:///foo/bar")); - location = (gchar *) gst_uri_handler_get_uri (GST_URI_HANDLER (gnomevfssink)); - fail_unless_equals_string (location, "file://%2Ffoo%2Fbar"); - g_object_get (G_OBJECT (gnomevfssink), "location", &location, NULL); - fail_unless_equals_string (location, "/foo/bar"); - g_free (location); - - /* should accept file://localhost/foo/bar URIs */ - fail_unless (gst_uri_handler_set_uri (GST_URI_HANDLER (gnomevfssink), - "file://localhost/foo/baz")); - location = (gchar *) gst_uri_handler_get_uri (GST_URI_HANDLER (gnomevfssink)); - fail_unless_equals_string (location, "file://%2Ffoo%2Fbaz"); - g_object_get (G_OBJECT (gnomevfssink), "location", &location, NULL); - fail_unless_equals_string (location, "/foo/baz"); - g_free (location); - - /* should fail with other hostnames */ - fail_if (gst_uri_handler_set_uri (GST_URI_HANDLER (gnomevfssink), - "file://hostname/foo/foo")); - - /* cleanup */ - gst_element_set_bus (gnomevfssink, NULL); - gst_object_unref (GST_OBJECT (bus)); - cleanup_gnomevfssink (gnomevfssink); -} - -GST_END_TEST; - -static Suite * -gnomevfssink_suite (void) -{ - Suite *s = suite_create ("gnomevfssink"); - TCase *tc_chain = tcase_create ("general"); - - suite_add_tcase (s, tc_chain); - - /* FIXME: these two tests fail right now because of uri/location stuff */ - if (0) { - tcase_add_test (tc_chain, test_coverage); - tcase_add_test (tc_chain, test_uri_interface); - } - tcase_add_test (tc_chain, test_seeking); - - return s; -} - -GST_CHECK_MAIN (gnomevfssink); |