From 5e359834f28b0580e7b79a057614d4e3592709ac Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 30 May 2008 17:11:15 -0400 Subject: Add "PrivServer" test which exercises DBusServer and dbus_shutdown * test/data/valid-service-files/org.freedesktop.DBus.TestSuite.PrivServer.service.in: New service file for PrivServer. * configure.in: Generate it. * test/name-test/Makefile.am: Build test-privserver and test-privserver-client. * test/name-test/test-privserver.c: Use DBusServer to serve a private connection. * test/name-test/test-privserver-client.c: Connect via session bus and get address of private server, exercise dbus_shutdown(). * test/name-test/run-test.sh: Run it. --- test/name-test/test-privserver-client.c | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 test/name-test/test-privserver-client.c (limited to 'test/name-test/test-privserver-client.c') diff --git a/test/name-test/test-privserver-client.c b/test/name-test/test-privserver-client.c new file mode 100644 index 00000000..9a1eae87 --- /dev/null +++ b/test/name-test/test-privserver-client.c @@ -0,0 +1,102 @@ +#include "../test-utils.h" + +static void +die (const char *message, ...) +{ + va_list args; + va_start (args, message); + vfprintf (stderr, message, args); + va_end (args); + exit (1); +} + +static DBusHandlerResult +filter_private_message (DBusConnection *connection, + DBusMessage *message, + void *user_data) +{ + if (dbus_message_is_signal (message, + DBUS_INTERFACE_LOCAL, + "Disconnected")) + { + DBusLoop *loop = user_data; + _dbus_loop_quit (loop); + return DBUS_HANDLER_RESULT_HANDLED; + } + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static void +open_shutdown_private_connection () +{ + DBusError error; + DBusLoop *loop; + DBusConnection *session; + DBusMessage *msg; + DBusMessage *reply; + DBusConnection *privconn; + const char *addr; + + dbus_error_init (&error); + + loop = _dbus_loop_new (); + + session = dbus_bus_get (DBUS_BUS_SESSION, &error); + if (!session) + die ("couldn't access session bus\n"); + dbus_connection_set_exit_on_disconnect (session, FALSE); + msg = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuite.TestServer", + "/", + "org.freedesktop.DBus.TestSuite.TestServer", + "GetPrivateAddress"); + if (!(reply = dbus_connection_send_with_reply_and_block (session, msg, -1, &error))) + die ("couldn't send message: %s\n", error.message); + dbus_message_unref (msg); + if (!dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &addr, DBUS_TYPE_INVALID)) + die ("couldn't parse message replym\n"); + printf ("got private temp address %s\n", addr); + + privconn = dbus_connection_open (addr, &error); + if (!privconn) + die ("couldn't connect to server direct connection: %s\n", error.message); + dbus_message_unref (reply); + + dbus_connection_set_exit_on_disconnect (privconn, FALSE); + dbus_connection_add_filter (privconn, filter_private_message, loop, NULL); + test_connection_setup (loop, privconn); + + msg = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuite.TestServer", + "/", + "org.freedesktop.DBus.TestSuite.TestServer", + "Quit"); + if (!dbus_connection_send (session, msg, NULL)) + die ("couldn't send Quit message\n"); + dbus_message_unref (msg); + + _dbus_loop_run (loop); + + test_connection_shutdown (loop, session); + dbus_connection_unref (session); + + test_connection_shutdown (loop, privconn); + dbus_connection_remove_filter (privconn, filter_private_message, loop); + dbus_connection_unref (privconn); + + _dbus_loop_unref (loop); +} + +int +main (int argc, char *argv[]) +{ + open_shutdown_private_connection (); + + dbus_shutdown (); + + /* + open_shutdown_private_connection (); + + dbus_shutdown (); + */ + + return 0; +} -- cgit