summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--tests/check/Makefile.am5
-rw-r--r--tests/check/msn/conference.c200
3 files changed, 206 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index ad63eb96..d0211f5b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -78,6 +78,7 @@ tests/check/transmitter/nice
tests/check/rtp/conference
tests/check/rtp/codecs
tests/check/rtp/sendcodecs
+tests/check/msn/conference
tests/check/utils/binadded
tests/check/elements/rtcpfilter
tests/rtp/codec-discovery
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e1b193b2..05d10947 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -48,6 +48,7 @@ check_PROGRAMS = \
rtp/codecs \
rtp/sendcodecs \
rtp/conference \
+ msn/conference \
utils/binadded \
elements/rtcpfilter
@@ -120,6 +121,10 @@ rtp_sendcodecs_SOURCES = \
rtp/generic.h \
rtp/sendcodecs.c
+msn_conference_CFLAGS = $(AM_CFLAGS)
+msn_conference_SOURCES = \
+ msn/conference.c
+
utils_binadded_CFLAGS = $(AM_CFLAGS)
utils_binadded_SOURCES = \
utils/binadded.c
diff --git a/tests/check/msn/conference.c b/tests/check/msn/conference.c
new file mode 100644
index 00000000..dd934e89
--- /dev/null
+++ b/tests/check/msn/conference.c
@@ -0,0 +1,200 @@
+/* Farsight 2 unit tests for FsMsnConference
+ *
+ * Copyright (C) 2009 Collabora
+ * @author: Olivier Crete <olivier.crete@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/check/gstcheck.h>
+#include <gst/farsight/fs-conference-iface.h>
+
+#include "check-threadsafe.h"
+
+GMainLoop *loop;
+int count = 0;
+
+// Options
+gboolean select_last_codec = FALSE;
+gboolean reset_to_last_codec = FALSE;
+gboolean no_rtcp = FALSE;
+
+#define WAITING_ON_LAST_CODEC (1<<0)
+#define SHOULD_BE_LAST_CODEC (1<<1)
+#define HAS_BEEN_RESET (1<<2)
+
+gint max_buffer_count = 20;
+
+
+struct SimpleMsnConference {
+ GstElement *pipeline;
+ FsConference *conf;
+ FsSession *session;
+ FsParticipant *part;
+ FsStream *stream;
+
+ struct SimpleMsnConference *target;
+ FsStreamDirection direction;
+};
+
+static gboolean
+bus_watch (GstBus *bus, GstMessage *message, gpointer user_data)
+{
+ //struct SimpleMsnConference *dat = user_data;
+
+ return TRUE;
+}
+
+struct SimpleMsnConference *
+setup_conference (FsStreamDirection dir, struct SimpleMsnConference *target)
+{
+ struct SimpleMsnConference *dat = g_new0 (struct SimpleMsnConference, 1);
+ GError *error = NULL;
+ GstBus *bus;
+
+ dat->target = target;
+ dat->direction = dir;
+
+ dat->pipeline = gst_pipeline_new (NULL);
+ dat->conf = FS_CONFERENCE (
+ gst_element_factory_make ("fsmsnconference", NULL));
+ ts_fail_unless (dat->conf != NULL);
+
+ bus = gst_element_get_bus (dat->pipeline);
+ gst_bus_add_watch (bus, bus_watch, dat);
+ gst_object_unref (bus);
+
+ ts_fail_unless (gst_bin_add (GST_BIN (dat->pipeline),
+ GST_ELEMENT (dat->conf)));
+
+ dat->part = fs_conference_new_participant (dat->conf, "", &error);
+ ts_fail_unless (dat->part != NULL);
+ ts_fail_unless (error == NULL);
+
+ dat->session = fs_conference_new_session (dat->conf, dir, &error);
+ ts_fail_unless (dat->session != NULL);
+ ts_fail_unless (error == NULL);
+
+ if (dir == FS_DIRECTION_SEND)
+ {
+ GstPad *sinkpad, *srcpad;
+ GstElement *src;
+ src = gst_element_factory_make ("videotestsrc", NULL);
+ ts_fail_unless (src != NULL);
+ g_object_set (src, "is-live", TRUE, NULL);
+ ts_fail_unless (gst_bin_add (GST_BIN (dat->pipeline),
+ GST_ELEMENT (src)));
+
+ g_object_get (dat->session, "sink-pad", &sinkpad, NULL);
+ ts_fail_if (sinkpad == NULL);
+ srcpad = gst_element_get_static_pad (src, "src");
+ ts_fail_if (srcpad == NULL);
+
+ ts_fail_if (GST_PAD_LINK_FAILED (gst_pad_link ( srcpad, sinkpad)));
+ gst_object_unref (srcpad);
+ gst_object_unref (sinkpad);
+ }
+
+ if (target)
+ {
+ guint session_id = 0;
+
+ g_object_get (target->session, "session-id", &session_id, NULL);
+ ts_fail_unless (session_id >= 9000 && session_id < 10000);
+ g_object_get (dat->session, "session-id", session_id, NULL);
+ }
+
+ dat->stream = fs_session_new_stream (dat->session, dat->part, dir, NULL, 0,
+ NULL, &error);
+ ts_fail_unless (dat->stream != NULL);
+ ts_fail_unless (error == NULL);
+
+ return dat;
+}
+
+static void
+free_conference (struct SimpleMsnConference *dat)
+{
+ ts_fail_if (gst_element_set_state (dat->pipeline, GST_STATE_NULL) ==
+ GST_STATE_CHANGE_FAILURE);
+
+ gst_object_unref (dat->stream);
+ gst_object_unref (dat->session);
+ gst_object_unref (dat->part);
+ gst_object_unref (dat->pipeline);
+
+ free (dat);
+}
+
+
+GST_START_TEST (test_msnconference_new)
+{
+ struct SimpleMsnConference *senddat = setup_conference (FS_DIRECTION_SEND,
+ NULL);
+ struct SimpleMsnConference *recvdat = setup_conference (FS_DIRECTION_SEND,
+ NULL);
+
+ ts_fail_if (gst_element_set_state (senddat->pipeline, GST_STATE_PLAYING) ==
+ GST_STATE_CHANGE_FAILURE);
+ ts_fail_if (gst_element_set_state (recvdat->pipeline, GST_STATE_PLAYING) ==
+ GST_STATE_CHANGE_FAILURE);
+
+ free_conference (senddat);
+ free_conference (recvdat);
+}
+GST_END_TEST;
+
+
+ /*
+
+GST_START_TEST (test_msnconference_error)
+{
+
+ ts_fail_unless (
+ fs_conference_new_participant (dat->conf, "", &error) == NULL);
+ ts_fail_unless (error->domain == FS_ERROR &&
+ error->code == FS_ERROR_ALREADY_EXISTS);
+ g_clear_error (&error);
+
+
+}
+GST_END_TEST;
+
+ */
+
+static Suite *
+fsmsnconference_suite (void)
+{
+ Suite *s = suite_create ("fsmsnconference");
+ TCase *tc_chain;
+ GLogLevelFlags fatal_mask;
+
+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+ g_log_set_always_fatal (fatal_mask);
+
+ tc_chain = tcase_create ("fsmsnconference_new");
+ tcase_add_test (tc_chain, test_msnconference_new);
+ suite_add_tcase (s, tc_chain);
+
+ return s;
+}
+
+
+GST_CHECK_MAIN (fsmsnconference);