test.c revision 47e318a6e1893069e1326945ce1af25ddf8201d1
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 * 643605a6f4e78a8c28afb4b1e924dff0301e0e95cHavoc Pennington * Licensed under the Academic Free License version 2.1 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" 28f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington#include <dbus/dbus-internals.h> 29ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington#include <dbus/dbus-list.h> 3047e318a6e1893069e1326945ce1af25ddf8201d1Ralf Habacker#include <dbus/dbus-sysdeps.h> 31169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 32169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington/* The "debug client" watch/timeout handlers don't dispatch messages, 33169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington * as we manually pull them in order to verify them. This is why they 34169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington * are different from the real handlers in connection.c 35169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington */ 36ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonstatic DBusList *clients = NULL; 37df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Penningtonstatic DBusLoop *client_loop = NULL; 38169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 39b4a1100f4f81534e2aac0141afda750f318223d4Havoc Penningtonstatic dbus_bool_t 40f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonclient_watch_callback (DBusWatch *watch, 411b08036103a70159e7a67b2349306710edcd6654Havoc Pennington unsigned int condition, 421b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 43169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 443df260c07102745c5606c313af862558f105f83eHavoc Pennington /* FIXME this can be done in dbus-mainloop.c 453df260c07102745c5606c313af862558f105f83eHavoc Pennington * if the code in activation.c for the babysitter 463df260c07102745c5606c313af862558f105f83eHavoc Pennington * watch handler is fixed. 473df260c07102745c5606c313af862558f105f83eHavoc Pennington */ 483df260c07102745c5606c313af862558f105f83eHavoc Pennington 493df260c07102745c5606c313af862558f105f83eHavoc Pennington return dbus_watch_handle (watch, condition); 50169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 51169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 52169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic dbus_bool_t 53f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonadd_client_watch (DBusWatch *watch, 541b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 55169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 561b08036103a70159e7a67b2349306710edcd6654Havoc Pennington DBusConnection *connection = data; 571b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 58df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington return _dbus_loop_add_watch (client_loop, 59df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington watch, client_watch_callback, connection, 60df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington NULL); 61169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 62169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 63169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 64f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_watch (DBusWatch *watch, 651b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 66169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 671b08036103a70159e7a67b2349306710edcd6654Havoc Pennington DBusConnection *connection = data; 681b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 69df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_remove_watch (client_loop, 70df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington watch, client_watch_callback, connection); 71169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 72169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 73169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 74f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonclient_timeout_callback (DBusTimeout *timeout, 751b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 76169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 77169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington DBusConnection *connection = data; 78169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 79169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_ref (connection); 80b4a1100f4f81534e2aac0141afda750f318223d4Havoc Pennington 81b4a1100f4f81534e2aac0141afda750f318223d4Havoc Pennington /* can return FALSE on OOM but we just let it fire again later */ 82169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_timeout_handle (timeout); 83169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 84169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington dbus_connection_unref (connection); 85169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 86169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 87169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic dbus_bool_t 88f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonadd_client_timeout (DBusTimeout *timeout, 891b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 90169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 911b08036103a70159e7a67b2349306710edcd6654Havoc Pennington DBusConnection *connection = data; 921b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 93df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington return _dbus_loop_add_timeout (client_loop, timeout, client_timeout_callback, connection, NULL); 94169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 95169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 96169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 97f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_timeout (DBusTimeout *timeout, 981b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 99169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 1001b08036103a70159e7a67b2349306710edcd6654Havoc Pennington DBusConnection *connection = data; 1011b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 102df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_remove_timeout (client_loop, timeout, client_timeout_callback, connection); 103169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 104169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 105f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonstatic DBusHandlerResult 1061dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Penningtonclient_disconnect_filter (DBusConnection *connection, 1071dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington DBusMessage *message, 1081dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington void *user_data) 109f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington{ 11068a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (!dbus_message_is_signal (message, 111248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_LOCAL, 11268a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "Disconnected")) 1135c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; 114b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington 115ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_verbose ("Removing client %p in disconnect handler\n", 116ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington connection); 117ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 118ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_list_remove (&clients, connection); 1191b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 120f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_unref (connection); 121f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 1221b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (clients == NULL) 1231b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 124df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_unref (client_loop); 1251b08036103a70159e7a67b2349306710edcd6654Havoc Pennington client_loop = NULL; 1261b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 1271b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 1285c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington return DBUS_HANDLER_RESULT_HANDLED; 129f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington} 130169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 131169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtondbus_bool_t 132169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonbus_setup_debug_client (DBusConnection *connection) 133169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 1341dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington dbus_bool_t retval; 135f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 136b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_connection_add_filter (connection, 1371dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington client_disconnect_filter, 1381dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington NULL, NULL)) 1391dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington return FALSE; 140f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 141f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = FALSE; 1421b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 1431b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 1441b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 145df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington client_loop = _dbus_loop_new (); 1461b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 1471b08036103a70159e7a67b2349306710edcd6654Havoc Pennington goto out; 1481b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 149169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 150f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!dbus_connection_set_watch_functions (connection, 1511b08036103a70159e7a67b2349306710edcd6654Havoc Pennington add_client_watch, 1521b08036103a70159e7a67b2349306710edcd6654Havoc Pennington remove_client_watch, 153f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, 154f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington connection, 155f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington NULL)) 156f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 157f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 158169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington if (!dbus_connection_set_timeout_functions (connection, 1591b08036103a70159e7a67b2349306710edcd6654Havoc Pennington add_client_timeout, 1601b08036103a70159e7a67b2349306710edcd6654Havoc Pennington remove_client_timeout, 161f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, 162169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington connection, NULL)) 163f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 164f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 165ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (!_dbus_list_append (&clients, connection)) 166ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington goto out; 167ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 168f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = TRUE; 169f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 170f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington out: 171f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!retval) 172169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington { 1731dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington dbus_connection_remove_filter (connection, 1741dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington client_disconnect_filter, 1751dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington NULL); 176f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 177f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_watch_functions (connection, 178f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 179f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_timeout_functions (connection, 180f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 181ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 182ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_list_remove_last (&clients, connection); 1831b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 1841b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (clients == NULL) 1851b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 186df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_unref (client_loop); 1871b08036103a70159e7a67b2349306710edcd6654Havoc Pennington client_loop = NULL; 1881b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 189169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington } 190ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 191ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return retval; 192ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington} 193ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 194ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonvoid 195ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonbus_test_clients_foreach (BusConnectionForeachFunction function, 196ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington void *data) 197ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington{ 198ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *link; 199f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 200ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = _dbus_list_get_first_link (&clients); 201ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington while (link != NULL) 202ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington { 203ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusConnection *connection = link->data; 204ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *next = _dbus_list_get_next_link (&clients, link); 205ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 206ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (!(* function) (connection, data)) 207ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington break; 208ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 209ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = next; 210ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington } 211ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington} 212ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 213ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtondbus_bool_t 214ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonbus_test_client_listed (DBusConnection *connection) 215ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington{ 216ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *link; 217f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 218ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = _dbus_list_get_first_link (&clients); 219ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington while (link != NULL) 220ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington { 221ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusConnection *c = link->data; 222ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *next = _dbus_list_get_next_link (&clients, link); 223ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 224ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (c == connection) 225ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return TRUE; 226ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 227ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = next; 228ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington } 229ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 230ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return FALSE; 231169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 232ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 233ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Penningtonvoid 234fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonbus_test_run_clients_loop (dbus_bool_t block_once) 235dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington{ 2361b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 2371b08036103a70159e7a67b2349306710edcd6654Havoc Pennington return; 23851781f541094a4936d47119cd62682e0431c41e9Havoc Pennington 239dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Dispatching on \"client side\"\n"); 240dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 24151781f541094a4936d47119cd62682e0431c41e9Havoc Pennington /* dispatch before we block so pending dispatches 24251781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * won't make our block return early 24351781f541094a4936d47119cd62682e0431c41e9Havoc Pennington */ 24451781f541094a4936d47119cd62682e0431c41e9Havoc Pennington _dbus_loop_dispatch (client_loop); 2451b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2461b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Do one blocking wait, since we're expecting data */ 247e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (block_once) 248e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington { 249e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_verbose ("---> blocking on \"client side\"\n"); 250e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_loop_iterate (client_loop, TRUE); 251e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington } 2521b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2531b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Then mop everything up */ 254df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington while (_dbus_loop_iterate (client_loop, FALSE)) 255ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington ; 256dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 257dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Done dispatching on \"client side\"\n"); 2581b08036103a70159e7a67b2349306710edcd6654Havoc Pennington} 2591b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2601b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonvoid 261fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonbus_test_run_bus_loop (BusContext *context, 262fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington dbus_bool_t block_once) 2631b08036103a70159e7a67b2349306710edcd6654Havoc Pennington{ 264dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Dispatching on \"server side\"\n"); 265dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 26651781f541094a4936d47119cd62682e0431c41e9Havoc Pennington /* dispatch before we block so pending dispatches 26751781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * won't make our block return early 26851781f541094a4936d47119cd62682e0431c41e9Havoc Pennington */ 26951781f541094a4936d47119cd62682e0431c41e9Havoc Pennington _dbus_loop_dispatch (bus_context_get_loop (context)); 27051781f541094a4936d47119cd62682e0431c41e9Havoc Pennington 2711b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Do one blocking wait, since we're expecting data */ 272e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (block_once) 273e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington { 274e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_verbose ("---> blocking on \"server side\"\n"); 275e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_loop_iterate (bus_context_get_loop (context), TRUE); 276e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington } 2771b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2781b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Then mop everything up */ 279df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE)) 280ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington ; 281dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 282dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Done dispatching on \"server side\"\n"); 283ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington} 284ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington 2851b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonvoid 2861b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonbus_test_run_everything (BusContext *context) 2871b08036103a70159e7a67b2349306710edcd6654Havoc Pennington{ 288a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE) || 289a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington (client_loop == NULL || _dbus_loop_iterate (client_loop, FALSE))) 290a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington ; 2911b08036103a70159e7a67b2349306710edcd6654Havoc Pennington} 2921b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 29329c71168cd17b11eed65023c97aff401d5305b01Havoc PenningtonBusContext* 29429c71168cd17b11eed65023c97aff401d5305b01Havoc Penningtonbus_context_new_test (const DBusString *test_data_dir, 29529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington const char *filename) 29629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington{ 29729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusError error; 29829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusString config_file; 29929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusString relative; 30029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington BusContext *context; 30147e318a6e1893069e1326945ce1af25ddf8201d1Ralf Habacker DBusPipe pipe; 30229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 303fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington if (!_dbus_string_init (&config_file)) 30429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 30529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 30629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 30729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 30829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 30929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (!_dbus_string_copy (test_data_dir, 0, 31029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington &config_file, 0)) 31129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 31229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 31329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 31429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 31529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 31629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 31729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_init_const (&relative, filename); 31829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 31929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (!_dbus_concat_dir_and_file (&config_file, &relative)) 32029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 32129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 32229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 32329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 32429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 32529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 32629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington dbus_error_init (&error); 32747e318a6e1893069e1326945ce1af25ddf8201d1Ralf Habacker pipe = _dbus_pipe_init(-1); 32847e318a6e1893069e1326945ce1af25ddf8201d1Ralf Habacker context = bus_context_new (&config_file, FALSE, pipe, pipe, &error); 32929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (context == NULL) 33029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 33129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (&error); 33229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 33329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("Failed to create debug bus context from configuration file %s: %s\n", 33429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington filename, error.message); 33529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 33629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington dbus_error_free (&error); 33729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 33829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 33929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 34029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 34129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 34229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 34329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 34429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 34529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return context; 34629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington} 34729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 348169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#endif 349