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