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