[telepathy-salut/master] test gibber_unix_transport_wait_credentials

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Mon May 11 09:58:19 PDT 2009


---
 lib/gibber/tests/check-gibber-unix-transport.c |   72 ++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/lib/gibber/tests/check-gibber-unix-transport.c b/lib/gibber/tests/check-gibber-unix-transport.c
index bc0ad36..f3ba4ff 100644
--- a/lib/gibber/tests/check-gibber-unix-transport.c
+++ b/lib/gibber/tests/check-gibber-unix-transport.c
@@ -38,6 +38,7 @@
 #include "check-gibber.h"
 
 gboolean got_connection;
+gboolean received_credentials;
 GibberUnixTransport *unix_transport;
 
 #define DATA "What a nice data"
@@ -136,10 +137,81 @@ START_TEST (test_send_credentials)
   g_main_loop_unref (mainloop);
 } END_TEST
 
+
+static void
+get_credentials_cb (GibberUnixTransport *transport,
+                    GibberBuffer *buffer,
+                    GibberCredentials *credentials,
+                    gpointer user_data)
+{
+  GMainLoop *loop = (GMainLoop *) user_data;
+
+  received_credentials = TRUE;
+
+  g_assert (strcmp ((gchar *) buffer->data, DATA) == 0);
+  g_assert (credentials->pid == getpid ());
+  g_assert (credentials->uid == getuid ());
+  g_assert (credentials->gid == getgid ());
+
+  g_main_loop_quit (loop);
+}
+
+static void
+receive_new_connection_cb (GibberListener *listener,
+                           GibberTransport *connection,
+                           struct sockaddr *addr,
+                           guint size,
+                           GMainLoop *loop)
+{
+  gibber_unix_transport_wait_credentials (unix_transport,
+      get_credentials_cb, loop);
+
+  gibber_unix_transport_send_credentials (GIBBER_UNIX_TRANSPORT (connection),
+      (guint8 *) DATA, strlen (DATA));
+}
+
+START_TEST (test_receive_credentials)
+{
+  GibberListener *listener_unix;
+  int ret;
+  GMainLoop *mainloop;
+  GError *error = NULL;
+  gchar *path = "/tmp/check-gibber-unix-transport-socket";
+
+  ret = unlink (path);
+  fail_if (ret == -1 && errno != ENOENT);
+
+  received_credentials = FALSE;
+  mainloop = g_main_loop_new (NULL, FALSE);
+
+  listener_unix = gibber_listener_new ();
+  fail_if (listener_unix == NULL);
+
+  g_signal_connect (listener_unix, "new-connection",
+      G_CALLBACK (receive_new_connection_cb), mainloop);
+
+  ret = gibber_listener_listen_socket (listener_unix, path, FALSE, &error);
+  fail_if (ret != TRUE);
+
+  unix_transport = gibber_unix_transport_new ();
+  ret = gibber_unix_transport_connect (unix_transport, path, &error);
+  fail_if (ret != TRUE);
+
+  if (!received_credentials)
+    g_main_loop_run (mainloop);
+
+  fail_if (!received_credentials, "Failed to receive credentials");
+
+  g_object_unref (listener_unix);
+  g_object_unref (unix_transport);
+  g_main_loop_unref (mainloop);
+} END_TEST
+
 TCase *
 make_gibber_unix_transport_tcase (void)
 {
   TCase *tc = tcase_create ("GibberUnixTransport");
   tcase_add_test (tc, test_send_credentials);
+  tcase_add_test (tc, test_receive_credentials);
   return tc;
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list