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 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   */
48921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
57921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
68921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
92921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
101921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
114921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
115ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington  _dbus_verbose ("Removing client %p in disconnect handler\n",
116ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington                 connection);
117921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
118ce173b29fc1e9432cb5956952afdbe775da12415Havoc Pennington  _dbus_list_remove (&clients, connection);
1191b08036103a70159e7a67b2349306710edcd6654Havoc Pennington
120f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington  dbus_connection_unref (connection);
121921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
1221b08036103a70159e7a67b2349306710edcd6654Havoc Pennington  if (clients == NULL)
1231b08036103a70159e7a67b2349306710edcd6654Havoc Pennington    {
124df008ef97deacd5bb00ac335e5d8671798fa09ddHavoc Pennington      _dbus_loop_unref (client_loop);
1251b08036103a70159e7a67b2349306710edcd6654Havoc Pennington      client_loop = NULL;
1261b08036103a70159e7a67b2349306710edcd6654Havoc Pennington    }
127921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
1285c1a8e44903bd1dedc8cbefad78b0c8b61daada5Havoc Pennington  return DBUS_HANDLER_RESULT_HANDLED;
129f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington}
130169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington
131169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtondbus_bool_t
132169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Penningtonbus_setup_debug_client (DBusConnection *connection)
133169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington{
134921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering  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    }
149921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
157921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
167921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
168f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington  retval = TRUE;
169921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
170f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington out:
171f05f87a825ab8ed5273674a7f65521ffc526f0d2Havoc Pennington  if (!retval)
172169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington    {
1731dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington      dbus_connection_remove_filter (connection,
1741dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington                                     client_disconnect_filter,
1751dd3f1788f1b4c9af2f4fa744abdb7892d0a14b9Havoc Pennington                                     NULL);
176921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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    }
190921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
199921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
208921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
217921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
226921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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)
235921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering{
2361b08036103a70159e7a67b2349306710edcd6654Havoc Pennington  if (client_loop == NULL)
2371b08036103a70159e7a67b2349306710edcd6654Havoc Pennington    return;
23851781f541094a4936d47119cd62682e0431c41e9Havoc Pennington
239dbdea921b5967ed25b24a9e5af5d6a3db54c5ec7Havoc Pennington  _dbus_verbose ("---> Dispatching on \"client side\"\n");
240921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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);
245921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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");
265921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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));
270921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
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;
301921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
302fa05de9230d62e7c427b5313796fc6ccd4d0ff60Havoc Pennington  if (!_dbus_string_init (&config_file))
30329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    {
30429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_warn ("No memory\n");
30529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      return NULL;
30629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    }
30729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
30829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  if (!_dbus_string_copy (test_data_dir, 0,
30929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington                          &config_file, 0))
31029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    {
31129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_warn ("No memory\n");
31229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_string_free (&config_file);
31329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      return NULL;
31429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    }
31529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
31629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  _dbus_string_init_const (&relative, filename);
31729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
31829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  if (!_dbus_concat_dir_and_file (&config_file, &relative))
31929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    {
32029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_warn ("No memory\n");
32129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_string_free (&config_file);
32229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      return NULL;
32329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    }
324921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
32529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  dbus_error_init (&error);
326b3ed8675a4eba35c6a7f43a86a89f706ffe07f84Lennart Poettering  context = bus_context_new (&config_file, FALSE, NULL, NULL, NULL, FALSE, &error);
32729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  if (context == NULL)
32829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    {
32929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _DBUS_ASSERT_ERROR_IS_SET (&error);
330921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
33129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_warn ("Failed to create debug bus context from configuration file %s: %s\n",
33229c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington                  filename, error.message);
33329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
33429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      dbus_error_free (&error);
335921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
33629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      _dbus_string_free (&config_file);
337921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
33829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington      return NULL;
33929c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington    }
34029c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
34129c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  _dbus_string_free (&config_file);
342921bc585ca44b02684d368058a8df8300342dcd0Lennart Poettering
34329c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington  return context;
34429c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington}
34529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington
346169238e99a4a163c89eb053250daeedf5f73e5cdHavoc Pennington#endif
347