diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/glib/Makefile.am | 12 | ||||
-rw-r--r-- | test/glib/test-dbus-glib.c | 76 |
2 files changed, 61 insertions, 27 deletions
diff --git a/test/glib/Makefile.am b/test/glib/Makefile.am index 9f900b13..608e7d01 100644 --- a/test/glib/Makefile.am +++ b/test/glib/Makefile.am @@ -1,5 +1,17 @@ INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -I$(top_srcdir)/glib +## note that TESTS has special meaning (stuff to use in make check) +## so if adding tests not to be run in make check, don't add them to +## TESTS +if DBUS_BUILD_TESTS +TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=$(top_builddir) DBUS_TEST_HOMEDIR=$(top_builddir)/dbus +TESTS=run-test.sh +else +TESTS= +endif + +EXTRA_DIST=run-test.sh + if DBUS_BUILD_TESTS if HAVE_GLIB_THREADS diff --git a/test/glib/test-dbus-glib.c b/test/glib/test-dbus-glib.c index beda0a7a..c302b239 100644 --- a/test/glib/test-dbus-glib.c +++ b/test/glib/test-dbus-glib.c @@ -1,52 +1,74 @@ /* -*- mode: C; c-file-style: "gnu" -*- */ #include "dbus-glib.h" #include <stdio.h> +#include <stdlib.h> +#include <string.h> int main (int argc, char **argv) { DBusConnection *connection; - DBusMessage *message, *reply; GMainLoop *loop; - DBusError error; - - if (argc < 2) - { - g_printerr ("Give the server address as an argument\n"); - return 1; - } + GError *error; + DBusGProxy *driver; + DBusPendingCall *call; + char **service_list; + int service_list_len; + int i; + g_type_init (); + loop = g_main_loop_new (NULL, FALSE); - dbus_error_init (&error); - connection = dbus_connection_open (argv[1], &error); + error = NULL; + connection = dbus_bus_get_with_g_main (DBUS_BUS_SESSION, + &error); if (connection == NULL) { - g_printerr ("Failed to open connection to %s: %s\n", argv[1], - error.message); - dbus_error_free (&error); - return 1; + g_printerr ("Failed to open connection to bus: %s\n", + error->message); + g_error_free (error); + exit (1); } - dbus_connection_setup_with_g_main (connection, NULL); + /* Create a proxy object for the "bus driver" */ + + driver = dbus_gproxy_new_for_service (connection, + DBUS_SERVICE_ORG_FREEDESKTOP_DBUS, + DBUS_PATH_ORG_FREEDESKTOP_DBUS, + DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS); + + /* Call ListServices method */ + + call = dbus_gproxy_begin_call (driver, "ListServices", DBUS_TYPE_INVALID); - message = dbus_message_new_method_call (DBUS_SERVICE_ORG_FREEDESKTOP_DBUS, - DBUS_PATH_ORG_FREEDESKTOP_DBUS, - DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS, - "Hello"); + error = NULL; + if (!dbus_gproxy_end_call (driver, call, &error, + DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, + &service_list, &service_list_len, + DBUS_TYPE_INVALID)) + { + g_printerr ("Failed to complete ListServices call: %s\n", + error->message); + g_error_free (error); + exit (1); + } - dbus_error_init (&error); - reply = dbus_connection_send_with_reply_and_block (connection, message, -1, &error); - if (reply == NULL) + g_print ("Services on the message bus:\n"); + i = 0; + while (i < service_list_len) { - g_printerr ("Error on hello message: %s\n", error.message); - dbus_error_free (&error); - return 1; + g_assert (service_list[i] != NULL); + g_print (" %s\n", service_list[i]); + ++i; } + g_assert (service_list[i] == NULL); - g_print ("reply received\n"); + dbus_free_string_array (service_list); + + g_object_unref (G_OBJECT (driver)); - g_main_loop_run (loop); + g_print ("Successfully completed %s\n", argv[0]); return 0; } |