summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-10-12 05:59:39 +0000
committerHavoc Pennington <hp@redhat.com>2003-10-12 05:59:39 +0000
commit4097e94af3d2fb1eb865343e3f76ca3949e7c69b (patch)
treec495c423b72fdb8421ec4266396efa97761fa590 /test
parent56cc4ae1a241d36b64dbe26de89714f7771f6e78 (diff)
2003-10-12 Havoc Pennington <hp@pobox.com>
Added test code that 1) starts an actual bus daemon and 2) uses DBusGProxy; fixed bugs that were revealed by the test. Lots more testing possible, but this is the basic framework. * glib/dbus-gproxy.c (dbus_gproxy_manager_unregister): remove empty proxy lists from the proxy list hash * dbus/dbus-message.c (dbus_message_iter_get_args_valist): add a couple of return_if_fail checks * dbus/dbus-pending-call.c (_dbus_pending_call_new): use dbus_new0 to allocate, so everything is cleared to NULL as it should be. * glib/dbus-gmain.c (dbus_connection_setup_with_g_main): pass source as data to dbus_connection_set_timeout_functions() as the timeout functions expected * test/glib/run-test.sh: add a little script to start up a message bus and run tests using it * tools/dbus-launch.1: updates * tools/dbus-launch.c (main): add --config-file option * tools/dbus-launch.c (main): remove confusing else if (runprog) that could never be reached. * dbus/dbus-message.c (dbus_message_new_method_return) (dbus_message_new_error, dbus_message_new_signal): set the no-reply-expected flag on all these. Redundant, but may as well be consistent.
Diffstat (limited to 'test')
-rw-r--r--test/glib/Makefile.am12
-rw-r--r--test/glib/test-dbus-glib.c76
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;
}