summaryrefslogtreecommitdiff
path: root/gio/tests/gdbus-peer.c
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2011-04-13 18:21:16 -0400
committerDavid Zeuthen <davidz@redhat.com>2011-04-13 18:21:16 -0400
commit3b997d92c13217db78fcc774bff6d6c0fcd919e6 (patch)
tree87029e87fa0d8d572da01adb6602d2507682e3ba /gio/tests/gdbus-peer.c
parentbefb60d8268ad2296fe94cebbeadf749314c7a70 (diff)
downloadglib-3b997d92c13217db78fcc774bff6d6c0fcd919e6.tar.gz
glib-3b997d92c13217db78fcc774bff6d6c0fcd919e6.tar.bz2
glib-3b997d92c13217db78fcc774bff6d6c0fcd919e6.zip
GDBus: Add test case for the ANONYMOUS authentication method
Signed-off-by: David Zeuthen <davidz@redhat.com>
Diffstat (limited to 'gio/tests/gdbus-peer.c')
-rw-r--r--gio/tests/gdbus-peer.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/gio/tests/gdbus-peer.c b/gio/tests/gdbus-peer.c
index e3046181e..b6a9b67a1 100644
--- a/gio/tests/gdbus-peer.c
+++ b/gio/tests/gdbus-peer.c
@@ -1438,6 +1438,97 @@ test_overflow (void)
/* ---------------------------------------------------------------------------------------------------- */
+#ifdef BUG_631379_FIXED
+static gboolean
+tcp_anonymous_on_new_connection (GDBusServer *server,
+ GDBusConnection *connection,
+ gpointer user_data)
+{
+ gboolean *seen_connection = user_data;
+ *seen_connection = TRUE;
+ return TRUE;
+}
+
+static gpointer
+tcp_anonymous_service_thread_func (gpointer user_data)
+{
+ gboolean *seen_connection = user_data;
+ GMainContext *service_context;
+ GError *error;
+
+ service_context = g_main_context_new ();
+ g_main_context_push_thread_default (service_context);
+
+ error = NULL;
+ server = g_dbus_server_new_sync ("tcp:",
+ G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS,
+ test_guid,
+ NULL, /* GDBusObserver* */
+ NULL, /* GCancellable* */
+ &error);
+ g_assert_no_error (error);
+
+ g_signal_connect (server,
+ "new-connection",
+ G_CALLBACK (tcp_anonymous_on_new_connection),
+ seen_connection);
+
+ g_dbus_server_start (server);
+
+ service_loop = g_main_loop_new (service_context, FALSE);
+ g_main_loop_run (service_loop);
+
+ g_main_context_pop_thread_default (service_context);
+
+ g_main_loop_unref (service_loop);
+ g_main_context_unref (service_context);
+
+ return NULL;
+}
+
+static void
+test_tcp_anonymous (void)
+{
+ gboolean seen_connection;
+ GThread *service_thread;
+ GDBusConnection *connection;
+ GError *error;
+
+ seen_connection = FALSE;
+ service_loop = NULL;
+ service_thread = g_thread_create (tcp_anonymous_service_thread_func,
+ &seen_connection, /* user_data */
+ TRUE, /* joinable */
+ &error);
+ while (service_loop == NULL)
+ g_thread_yield ();
+ g_assert (server != NULL);
+
+ error = NULL;
+ connection = g_dbus_connection_new_for_address_sync (g_dbus_server_get_client_address (server),
+ G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT,
+ NULL, /* GDBusAuthObserver* */
+ NULL, /* GCancellable */
+ &error);
+ g_assert_no_error (error);
+ g_assert (connection != NULL);
+
+ while (!seen_connection)
+ g_thread_yield ();
+
+ g_object_unref (connection);
+
+ g_main_loop_quit (service_loop);
+ g_dbus_server_stop (server);
+ g_object_unref (server);
+ server = NULL;
+
+ g_thread_join (service_thread);
+}
+#endif
+
+/* ---------------------------------------------------------------------------------------------------- */
+
int
main (int argc,
char *argv[])
@@ -1462,6 +1553,7 @@ main (int argc,
g_test_add_func ("/gdbus/delayed-message-processing", delayed_message_processing);
#ifdef BUG_631379_FIXED
g_test_add_func ("/gdbus/nonce-tcp", test_nonce_tcp);
+ g_test_add_func ("/gdbus/tcp-anonymous", test_tcp_anonymous);
#endif
g_test_add_func ("/gdbus/credentials", test_credentials);
g_test_add_func ("/gdbus/overflow", test_overflow);