test.c revision f587ce7845edb0eb01451368d01b5bc86b5904cd
1d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington/* -*- mode: C; c-file-style: "gnu" -*- */ 2d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington/* test.c unit test routines 3d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 4d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * Copyright (C) 2003 Red Hat, Inc. 5d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 6d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * Licensed under the Academic Free License version 1.2 7d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 8d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * This program is free software; you can redistribute it and/or modify 9d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * it under the terms of the GNU General Public License as published by 10d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * the Free Software Foundation; either version 2 of the License, or 11d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * (at your option) any later version. 12d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 13d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * This program is distributed in the hope that it will be useful, 14d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 15d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * GNU General Public License for more details. 17d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 18d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * You should have received a copy of the GNU General Public License 19d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * along with this program; if not, write to the Free Software 20d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 22d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington */ 23d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington 24169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#include <config.h> 25169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 26169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#ifdef DBUS_BUILD_TESTS 27169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#include "test.h" 28169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#include "loop.h" 29f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington#include <dbus/dbus-internals.h> 30169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 31169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington/* The "debug client" watch/timeout handlers don't dispatch messages, 32169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington * as we manually pull them in order to verify them. This is why they 33169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington * are different from the real handlers in connection.c 34169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington */ 35169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 36169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 37f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonclient_watch_callback (DBusWatch *watch, 38169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington unsigned int condition, 39169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington void *data) 40169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 41169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection = data; 42169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 43169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_ref (connection); 44169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 45169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_handle_watch (connection, watch, condition); 46169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 47169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_unref (connection); 48169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 49169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 50169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic dbus_bool_t 51f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonadd_client_watch (DBusWatch *watch, 52169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection) 53169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 54f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington return bus_loop_add_watch (watch, client_watch_callback, connection, 55169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington NULL); 56169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 57169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 58169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 59f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_watch (DBusWatch *watch, 60169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection) 61169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 62f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington bus_loop_remove_watch (watch, client_watch_callback, connection); 63169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 64169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 65169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 66f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonclient_timeout_callback (DBusTimeout *timeout, 67169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington void *data) 68169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 69169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection = data; 70169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 71169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_ref (connection); 72169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 73169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_timeout_handle (timeout); 74169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 75169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_unref (connection); 76169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 77169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 78169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic dbus_bool_t 79f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonadd_client_timeout (DBusTimeout *timeout, 80169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection) 81169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 82f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington return bus_loop_add_timeout (timeout, client_timeout_callback, connection, NULL); 83169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 84169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 85169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 86f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_timeout (DBusTimeout *timeout, 87169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection) 88169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 89f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington bus_loop_remove_timeout (timeout, client_timeout_callback, connection); 90169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 91169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 92f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonstatic DBusHandlerResult 93f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonclient_disconnect_handler (DBusMessageHandler *handler, 94f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington DBusConnection *connection, 95f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington DBusMessage *message, 96f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington void *user_data) 97f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington{ 98f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_unref (connection); 99f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 100f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington return DBUS_HANDLER_RESULT_ALLOW_MORE_HANDLERS; 101f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington} 102169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 103169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtondbus_bool_t 104169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonbus_setup_debug_client (DBusConnection *connection) 105169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 106f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington DBusMessageHandler *disconnect_handler; 107f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington const char *to_handle[] = { DBUS_MESSAGE_LOCAL_DISCONNECT }; 108f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_bool_t retval; 109169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 110f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington disconnect_handler = dbus_message_handler_new (client_disconnect_handler, 111f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington NULL, NULL); 112f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 113f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (disconnect_handler == NULL) 114f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington return FALSE; 115f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 116f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!dbus_connection_register_handler (connection, 117f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington disconnect_handler, 118f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington to_handle, 119f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington _DBUS_N_ELEMENTS (to_handle))) 120169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington { 121f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_message_handler_unref (disconnect_handler); 122169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington return FALSE; 123169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington } 124f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 125f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = FALSE; 126169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 127f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!dbus_connection_set_watch_functions (connection, 128f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington (DBusAddWatchFunction) add_client_watch, 129f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington (DBusRemoveWatchFunction) remove_client_watch, 130f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, 131f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington connection, 132f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington NULL)) 133f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 134f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 135169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington if (!dbus_connection_set_timeout_functions (connection, 136f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington (DBusAddTimeoutFunction) add_client_timeout, 137f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington (DBusRemoveTimeoutFunction) remove_client_timeout, 138f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, 139169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington connection, NULL)) 140f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 141f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 142f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = TRUE; 143f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 144f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington out: 145f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!retval) 146169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington { 147f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_unregister_handler (connection, 148f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington disconnect_handler, 149f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington to_handle, 150f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington _DBUS_N_ELEMENTS (to_handle)); 151f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 152f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_watch_functions (connection, 153f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 154f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_timeout_functions (connection, 155f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 156169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington } 157f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 158f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_message_handler_unref (disconnect_handler); 159f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 160f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington return retval; 161169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 162169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#endif 163