[Telepathy-commits] [telepathy-salut/master] Add test for gibber listener base on the xmpp-connection-listener one

Sjoerd Simons sjoerd.simons at collabora.co.uk
Sat Nov 1 08:17:38 PDT 2008


---
 tests/Makefile.am             |    3 +-
 tests/check-gibber-listener.c |  133 +++++++++++++++++++++++++++++++++++++++++
 tests/check-gibber.h          |    1 +
 tests/check-main.c            |    1 +
 4 files changed, 137 insertions(+), 1 deletions(-)
 create mode 100644 tests/check-gibber-listener.c

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 8f6b619..93cda48 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -82,7 +82,8 @@ check_main_SOURCES =                             \
     check-gibber-r-multicast-sender.c            \
     check-gibber-xmpp-stanza.c                   \
     check-gibber-iq-helper.c                     \
-    check-gibber-xmpp-connection-listener.c \
+    check-gibber-listener.c                      \
+    check-gibber-xmpp-connection-listener.c      \
     check-gibber-xmpp-error.c
 
 check_main_LDADD = \
diff --git a/tests/check-gibber-listener.c b/tests/check-gibber-listener.c
new file mode 100644
index 0000000..0a031ea
--- /dev/null
+++ b/tests/check-gibber-listener.c
@@ -0,0 +1,133 @@
+/*
+ * check-gibber-listener.c - Test for GibberListener
+ * Copyright (C) 2007, 2008 Collabora Ltd.
+ * @author Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
+ * @author Sjoerd Simons <sjoerd.simons at 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 St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <gibber/gibber-tcp-transport.h>
+#include <gibber/gibber-listener.h>
+
+#include <check.h>
+
+gboolean got_connection;
+gboolean signalled;
+
+static void
+new_connection_cb (GibberListener *listener,
+                   GibberTransport *connection,
+                   struct sockaddr_storage *addr,
+                   guint size,
+                   GMainLoop *loop)
+{
+  signalled = TRUE;
+  got_connection = TRUE;
+  g_main_loop_quit (loop);
+}
+
+static void
+disconnected_cb (GibberTransport *transport, GMainLoop *loop)
+{
+  signalled = TRUE;
+  got_connection = FALSE;
+  g_main_loop_quit (loop);
+}
+
+static GibberTransport *
+connect_to_port (int port, GMainLoop *loop)
+{
+  GibberTCPTransport *transport;
+  gchar sport[16];
+
+  g_snprintf (sport, 16, "%d", port);
+
+  transport = gibber_tcp_transport_new ();
+  gibber_tcp_transport_connect (transport, "127.0.0.1", sport);
+
+  g_signal_connect (transport, "disconnected",
+    G_CALLBACK (disconnected_cb), loop);
+
+  return GIBBER_TRANSPORT (transport);
+}
+
+START_TEST (test_tcp_listen)
+{
+  GibberListener *listener;
+  int port;
+  GMainLoop *mainloop;
+  GibberTransport *transport;
+
+  mainloop = g_main_loop_new (NULL, FALSE);
+
+  listener = gibber_listener_new ();
+  fail_if (listener == NULL);
+
+  g_signal_connect (listener, "new-connection", G_CALLBACK (new_connection_cb),
+      mainloop);
+
+  for (port = 5298; port < 5400; port++)
+    {
+      GError *error = NULL;
+      if (gibber_listener_listen_tcp (listener, port, &error))
+        break;
+
+      fail_if (error->code != GIBBER_LISTENER_ERROR_ADDRESS_IN_USE);
+      g_error_free (error);
+      error = NULL;
+    }
+  fail_if (port >= 5400);
+
+  signalled = FALSE;
+  transport = connect_to_port (port, mainloop);
+  if (!signalled)
+    g_main_loop_run (mainloop);
+
+  fail_if (!got_connection, "Failed to connect");
+
+  g_object_unref (listener);
+  g_object_unref (transport);
+
+  /* listener is destroyed, connection should be refused now */
+  signalled = FALSE;
+  transport = connect_to_port (port, mainloop);
+
+  if (!signalled);
+    g_main_loop_run (mainloop);
+
+  fail_if (got_connection, "Connected while listening should have stopped");
+
+  g_object_unref (transport);
+  g_main_loop_unref (mainloop);
+
+} END_TEST
+
+TCase *
+make_gibber_listener_tcase (void)
+{
+  TCase *tc = tcase_create ("GibberListener");
+  tcase_add_test (tc, test_tcp_listen);
+  return tc;
+}
diff --git a/tests/check-gibber.h b/tests/check-gibber.h
index b76485e..d33774d 100644
--- a/tests/check-gibber.h
+++ b/tests/check-gibber.h
@@ -11,6 +11,7 @@ TCase *make_gibber_r_multicast_causal_transport_tcase (void);
 TCase *make_gibber_r_multicast_sender_tcase (void);
 TCase *make_gibber_xmpp_stanza_tcase (void);
 TCase *make_gibber_iq_helper_tcase (void);
+TCase *make_gibber_listener_tcase (void);
 TCase *make_gibber_xmpp_connection_listener_tcase (void);
 TCase *make_gibber_xmpp_error_tcase (void);
 
diff --git a/tests/check-main.c b/tests/check-main.c
index b863ac9..2b3c302 100644
--- a/tests/check-main.c
+++ b/tests/check-main.c
@@ -28,6 +28,7 @@ make_gibber_suite (void)
     suite_add_tcase (s, make_gibber_r_multicast_causal_transport_tcase ());
     suite_add_tcase (s, make_gibber_xmpp_stanza_tcase ());
     suite_add_tcase (s, make_gibber_iq_helper_tcase ());
+    suite_add_tcase (s, make_gibber_listener_tcase ());
     suite_add_tcase (s, make_gibber_xmpp_connection_listener_tcase ());
     suite_add_tcase (s, make_gibber_xmpp_error_tcase ());
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list