1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 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 7921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering * 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. 17921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering * 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 205baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Penningtonadd_client_watch (DBusWatch *watch, 411b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 42169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 434299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat return _dbus_loop_add_watch (client_loop, watch); 44169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 45169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 46169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 47f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_watch (DBusWatch *watch, 481b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 49169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 504299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat _dbus_loop_remove_watch (client_loop, watch); 51169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 52169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 53169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 544299eb3c0907100fe95d2986984b48d40cc52841Daniel Erattoggle_client_watch (DBusWatch *watch, 554299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat void *data) 56169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 574299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat _dbus_loop_toggle_watch (client_loop, watch); 58169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 59169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 60169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic dbus_bool_t 61f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonadd_client_timeout (DBusTimeout *timeout, 621b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 63169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 644299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat return _dbus_loop_add_timeout (client_loop, timeout); 65169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 66169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 67169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonstatic void 68f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonremove_client_timeout (DBusTimeout *timeout, 691b08036103a70159e7a67b2349306710edcd6654Havoc Pennington void *data) 70169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 714299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat _dbus_loop_remove_timeout (client_loop, timeout); 72169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 73169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 74f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Penningtonstatic DBusHandlerResult 751dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Penningtonclient_disconnect_filter (DBusConnection *connection, 761dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington DBusMessage *message, 771dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington void *user_data) 78f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington{ 7968a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington if (!dbus_message_is_signal (message, 80248895207dc15914ac7970a6d1431308075dca1dColin Walters DBUS_INTERFACE_LOCAL, 8168a3c593b9e77b33614726363c7b6fd85d113021Havoc Pennington "Disconnected")) 825c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; 83921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 84ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_verbose ("Removing client %p in disconnect handler\n", 85ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington connection); 86921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 87ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_list_remove (&clients, connection); 881b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 89f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_unref (connection); 90921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 911b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (clients == NULL) 921b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 93df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_unref (client_loop); 941b08036103a70159e7a67b2349306710edcd6654Havoc Pennington client_loop = NULL; 951b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 96921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 975c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington return DBUS_HANDLER_RESULT_HANDLED; 98f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington} 99169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington 100169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtondbus_bool_t 101169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonbus_setup_debug_client (DBusConnection *connection) 102169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{ 103921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering dbus_bool_t retval; 104f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 105b29ea9115ea3277354b7ccbe442026279220f4acHavoc Pennington if (!dbus_connection_add_filter (connection, 1061dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington client_disconnect_filter, 1071dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington NULL, NULL)) 1081dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington return FALSE; 109f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 110f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = FALSE; 1111b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 1121b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 1131b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 114df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington client_loop = _dbus_loop_new (); 1151b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 1161b08036103a70159e7a67b2349306710edcd6654Havoc Pennington goto out; 1171b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 118921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 119f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!dbus_connection_set_watch_functions (connection, 1201b08036103a70159e7a67b2349306710edcd6654Havoc Pennington add_client_watch, 1211b08036103a70159e7a67b2349306710edcd6654Havoc Pennington remove_client_watch, 1224299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat toggle_client_watch, 123f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington connection, 124f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington NULL)) 125f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 126921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 127169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington if (!dbus_connection_set_timeout_functions (connection, 1281b08036103a70159e7a67b2349306710edcd6654Havoc Pennington add_client_timeout, 1291b08036103a70159e7a67b2349306710edcd6654Havoc Pennington remove_client_timeout, 130f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, 131169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington connection, NULL)) 132f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington goto out; 133f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington 134ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (!_dbus_list_append (&clients, connection)) 135ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington goto out; 136921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 137f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington retval = TRUE; 138921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 139f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington out: 140f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington if (!retval) 141169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington { 1421dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington dbus_connection_remove_filter (connection, 1431dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington client_disconnect_filter, 1441dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington NULL); 145921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 146f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_watch_functions (connection, 147f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 148f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington dbus_connection_set_timeout_functions (connection, 149f587ce7845edb0eb01451368d01b5bc86b5904cdHavoc Pennington NULL, NULL, NULL, NULL, NULL); 150ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 151ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington _dbus_list_remove_last (&clients, connection); 1521b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 1531b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (clients == NULL) 1541b08036103a70159e7a67b2349306710edcd6654Havoc Pennington { 155df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington _dbus_loop_unref (client_loop); 1561b08036103a70159e7a67b2349306710edcd6654Havoc Pennington client_loop = NULL; 1571b08036103a70159e7a67b2349306710edcd6654Havoc Pennington } 158169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington } 159921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 160ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return retval; 161ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington} 162ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 163ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonvoid 164ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonbus_test_clients_foreach (BusConnectionForeachFunction function, 165ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington void *data) 166ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington{ 167ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *link; 168921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 169ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = _dbus_list_get_first_link (&clients); 170ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington while (link != NULL) 171ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington { 172ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusConnection *connection = link->data; 173ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *next = _dbus_list_get_next_link (&clients, link); 174ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 175ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (!(* function) (connection, data)) 176ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington break; 177921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 178ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = next; 179ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington } 180ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington} 181ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 182ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtondbus_bool_t 183ce173b29fc1e9432cb5956952afdbe775da12415Havoc Penningtonbus_test_client_listed (DBusConnection *connection) 184ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington{ 185ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *link; 186921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 187ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = _dbus_list_get_first_link (&clients); 188ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington while (link != NULL) 189ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington { 190ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusConnection *c = link->data; 191ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington DBusList *next = _dbus_list_get_next_link (&clients, link); 192ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 193ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington if (c == connection) 194ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return TRUE; 195921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 196ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington link = next; 197ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington } 198ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 199ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington return FALSE; 200169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington} 201ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington 202ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Penningtonvoid 203fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonbus_test_run_clients_loop (dbus_bool_t block_once) 204921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering{ 2051b08036103a70159e7a67b2349306710edcd6654Havoc Pennington if (client_loop == NULL) 2061b08036103a70159e7a67b2349306710edcd6654Havoc Pennington return; 20751781f541094a4936d47119cd62682e0431c41e9Havoc Pennington 208dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Dispatching on \"client side\"\n"); 209921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 21051781f541094a4936d47119cd62682e0431c41e9Havoc Pennington /* dispatch before we block so pending dispatches 21151781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * won't make our block return early 21251781f541094a4936d47119cd62682e0431c41e9Havoc Pennington */ 21351781f541094a4936d47119cd62682e0431c41e9Havoc Pennington _dbus_loop_dispatch (client_loop); 214921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 2151b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Do one blocking wait, since we're expecting data */ 216e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (block_once) 217e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington { 218e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_verbose ("---> blocking on \"client side\"\n"); 219e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_loop_iterate (client_loop, TRUE); 220e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington } 2211b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2221b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Then mop everything up */ 223df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington while (_dbus_loop_iterate (client_loop, FALSE)) 224ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington ; 225dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 226dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Done dispatching on \"client side\"\n"); 2271b08036103a70159e7a67b2349306710edcd6654Havoc Pennington} 2281b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2291b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonvoid 230fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonbus_test_run_bus_loop (BusContext *context, 231fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington dbus_bool_t block_once) 2321b08036103a70159e7a67b2349306710edcd6654Havoc Pennington{ 233dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Dispatching on \"server side\"\n"); 234921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 23551781f541094a4936d47119cd62682e0431c41e9Havoc Pennington /* dispatch before we block so pending dispatches 23651781f541094a4936d47119cd62682e0431c41e9Havoc Pennington * won't make our block return early 23751781f541094a4936d47119cd62682e0431c41e9Havoc Pennington */ 23851781f541094a4936d47119cd62682e0431c41e9Havoc Pennington _dbus_loop_dispatch (bus_context_get_loop (context)); 239921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 2401b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Do one blocking wait, since we're expecting data */ 241e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington if (block_once) 242e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington { 243e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_verbose ("---> blocking on \"server side\"\n"); 244e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington _dbus_loop_iterate (bus_context_get_loop (context), TRUE); 245e8d396efef695b9868b0112c4a6266c97678fa8aHavoc Pennington } 2461b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 2471b08036103a70159e7a67b2349306710edcd6654Havoc Pennington /* Then mop everything up */ 248df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE)) 249ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington ; 250dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington 251dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington _dbus_verbose ("---> Done dispatching on \"server side\"\n"); 252ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington} 253ce4fd314c6be9bfee16a172d5ca34e5097d309fcHavoc Pennington 2541b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonvoid 2551b08036103a70159e7a67b2349306710edcd6654Havoc Penningtonbus_test_run_everything (BusContext *context) 2561b08036103a70159e7a67b2349306710edcd6654Havoc Pennington{ 257a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE) || 258a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington (client_loop == NULL || _dbus_loop_iterate (client_loop, FALSE))) 259a03e626728db8a9cbe1dbbfab6f22f5870cb40aeHavoc Pennington ; 2601b08036103a70159e7a67b2349306710edcd6654Havoc Pennington} 2611b08036103a70159e7a67b2349306710edcd6654Havoc Pennington 26229c71168cd17b11eed65023c97aff401d5305b01Havoc PenningtonBusContext* 26329c71168cd17b11eed65023c97aff401d5305b01Havoc Penningtonbus_context_new_test (const DBusString *test_data_dir, 26429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington const char *filename) 26529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington{ 26629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusError error; 26729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusString config_file; 26829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington DBusString relative; 26929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington BusContext *context; 270921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 271fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington if (!_dbus_string_init (&config_file)) 27229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 27329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 27429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 27529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 27629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 27729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (!_dbus_string_copy (test_data_dir, 0, 27829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington &config_file, 0)) 27929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 28029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 28129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 28229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 28329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 28429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 28529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_init_const (&relative, filename); 28629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 28729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (!_dbus_concat_dir_and_file (&config_file, &relative)) 28829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 28929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("No memory\n"); 29029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 29129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 29229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 293921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 29429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington dbus_error_init (&error); 2954299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat context = bus_context_new (&config_file, BUS_CONTEXT_FLAG_NONE, NULL, NULL, NULL, &error); 29629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington if (context == NULL) 29729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 29829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _DBUS_ASSERT_ERROR_IS_SET (&error); 299921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 30029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_warn ("Failed to create debug bus context from configuration file %s: %s\n", 30129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington filename, error.message); 30229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 30329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington dbus_error_free (&error); 304921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 30529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 306921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 30729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return NULL; 30829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 30929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 31029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington _dbus_string_free (&config_file); 311921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering 31229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return context; 31329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington} 31429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington 315169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#endif 316