From bb6a24ae1c9cf07ab733849c12752748638c02a3 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 2 Feb 2003 15:24:48 +0000 Subject: 2003-02-02 Anders Carlsson * test/Makefile.am: * test/bus-test.c: (get_time), (add_timeout), (remove_timeout), (message_handler), (new_connection_callback), (loop_quit), (loop_run), (main): Add bus test. --- test/Makefile.am | 6 +- test/bus-test.c | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 test/bus-test.c (limited to 'test') diff --git a/test/Makefile.am b/test/Makefile.am index f5933b77..fc218b7c 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -2,7 +2,7 @@ INCLUDES=-I$(top_srcdir) $(DBUS_TEST_CFLAGS) if DBUS_BUILD_TESTS -TEST_BINARIES=echo-client echo-server unbase64 +TEST_BINARIES=echo-client echo-server unbase64 bus-test else TEST_BINARIES= endif @@ -23,11 +23,15 @@ unbase64_SOURCES= \ unbase64.c +bus_test_SOURCES = \ + bus-test.c + TEST_LIBS=$(DBUS_TEST_LIBS) $(top_builddir)/dbus/libdbus-convenience.la $(top_builddir)/dbus/libdbus-1.la echo_client_LDADD=$(TEST_LIBS) echo_server_LDADD=$(TEST_LIBS) unbase64_LDADD=$(TEST_LIBS) +bus_test_LDADD=$(TEST_LIBS) $(top_builddir)/bus/libdbus-daemon.la dist-hook: DIRS="data data/valid-messages data/invalid-messages data/incomplete-messages" ; \ diff --git a/test/bus-test.c b/test/bus-test.c new file mode 100644 index 00000000..9946d97a --- /dev/null +++ b/test/bus-test.c @@ -0,0 +1,187 @@ +#include +#include +#include + +#define DBUS_COMPILATION /* cheat and use DBusList */ +#include +#include + +#undef DBUS_COMPILATION + +typedef struct +{ + long time; + DBusTimeout *timeout; + +} LoopTimeout; + +static DBusList *timeouts; + +static long +get_time (void) +{ + struct timeval r; + long time; + + /* Can't use dbus-sysdeps here since that isn't + * available outside of libdbus. + */ + gettimeofday (&r, NULL); + + time = r.tv_sec * 1000; + time += r.tv_usec / 1000; + + return time; +} + +static void +add_timeout (DBusTimeout *timeout, + void *data) +{ + LoopTimeout *lt; + + lt = dbus_new (LoopTimeout, 1); + lt->time = get_time () + dbus_timeout_get_interval (timeout); + lt->timeout = timeout; + + _dbus_list_append (&timeouts, lt); + printf ("add timeout!\n"); +} + +static void +remove_timeout (DBusTimeout *timeout, + void *data) +{ + printf ("remove timeout!\n"); + +} + +static DBusHandlerResult +message_handler (DBusMessageHandler *handler, + DBusConnection *connection, + DBusMessage *message, + void *user_data) +{ + printf ("server got a message!: %s\n", + dbus_message_get_name (message)); + return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS; +} + +static void +new_connection_callback (DBusServer *server, + DBusConnection *new_connection, + void *data) +{ + if (!bus_connection_setup (new_connection)) + return; + + dbus_connection_set_timeout_functions (new_connection, + add_timeout, remove_timeout, + NULL, NULL); + + dbus_connection_ref (new_connection); +} + + + +static dbus_bool_t running_loop; + + +static void +loop_quit (void) +{ + running_loop = FALSE; +} + +static void +loop_run (void) +{ + running_loop = TRUE; + long start_time = get_time (); + + /* Horribly inefficient main loop */ + while (running_loop) + { + DBusList *link, *list_copy; + long time; + + time = get_time (); + + _dbus_list_copy (&timeouts, &list_copy); + + link = _dbus_list_get_first_link (&list_copy); + while (link != NULL) + { + LoopTimeout *lt = link->data; + if (lt->time <= time) + { + dbus_timeout_handle (lt->timeout); + _dbus_list_remove (&timeouts, lt); + } + link = _dbus_list_get_next_link (&list_copy, link); + } + + if (get_time () - start_time > 1000) + loop_quit (); + } +} + + + + + +int +main (int argc, + char **argv) +{ + DBusServer *server; + DBusConnection *connection; + DBusResultCode result; + DBusMessage *message; + DBusMessageHandler *handler; + + server = dbus_server_listen ("debug:name=test-server", &result); + dbus_server_set_new_connection_function (server, + new_connection_callback, + NULL, NULL); + dbus_server_set_timeout_functions (server, + add_timeout, remove_timeout, + NULL, NULL); + if (server == NULL) + { + fprintf (stderr, "Failed to start server: %s\n", + dbus_result_to_string (result)); + return 1; + } + + connection = dbus_connection_open ("debug:name=test-server", &result); + dbus_connection_set_timeout_functions (connection, + add_timeout, remove_timeout, + NULL, NULL); + if (connection == NULL) + { + fprintf (stderr, "Failed to connect to server: %s\n", + dbus_result_to_string (result)); + return 1; + } + + message = dbus_message_new (DBUS_SERVICE_DBUS, + DBUS_MESSAGE_HELLO); + dbus_message_append_fields (message, + DBUS_TYPE_STRING, "test", + 0); + + handler = dbus_message_handler_new (message_handler, NULL, NULL); + dbus_connection_add_filter (connection, handler); + + dbus_connection_send_message (connection, message, NULL, NULL); + dbus_message_unref (message); + + bus_connection_init (); + + loop_run (); + + dbus_connection_disconnect (connection); + + return 0; +} -- cgit