test-utils.c revision 7caf646fdf595946eb28202e2df3f847d28c7151
11617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington#include "test-utils.h"
21617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
31617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtontypedef struct
41617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
51617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  DBusLoop *loop;
61617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  DBusConnection *connection;
71617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
81617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington} CData;
91617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
101617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic dbus_bool_t
111617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonconnection_watch_callback (DBusWatch     *watch,
121617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                           unsigned int   condition,
131617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                           void          *data)
141617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
151617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
161617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_bool_t retval;
171617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
181617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  retval = dbus_connection_handle_watch (cd->connection, watch, condition);
191617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
201617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return retval;
211617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
221617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
231617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic dbus_bool_t
241617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonadd_watch (DBusWatch *watch,
251617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	   void      *data)
261617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
271617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
281617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
291617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return _dbus_loop_add_watch (cd->loop,
301617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                               watch,
311617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                               connection_watch_callback,
321617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                               cd, NULL);
331617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
341617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
351617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
361617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonremove_watch (DBusWatch *watch,
371617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	      void      *data)
381617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
391617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
401617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
411617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_remove_watch (cd->loop,
421617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                           watch, connection_watch_callback, cd);
431617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
441617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
451617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
461617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonconnection_timeout_callback (DBusTimeout   *timeout,
471617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                             void          *data)
481617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
491617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
501617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
511617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  /* Can return FALSE on OOM but we just let it fire again later */
521617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_timeout_handle (timeout);
531617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
541617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
551617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic dbus_bool_t
561617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonadd_timeout (DBusTimeout *timeout,
571617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington	     void        *data)
581617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
591617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
601617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
611617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return _dbus_loop_add_timeout (cd->loop,
621617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                 timeout, connection_timeout_callback, cd, NULL);
631617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
641617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
651617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
661617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonremove_timeout (DBusTimeout *timeout,
671617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington		void        *data)
681617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
691617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
701617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
711617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_remove_timeout (cd->loop,
721617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                             timeout, connection_timeout_callback, cd);
731617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
741617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
751617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic void
767caf646fdf595946eb28202e2df3f847d28c7151Havoc Penningtondispatch_status_function (DBusConnection    *connection,
777caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                          DBusDispatchStatus new_status,
787caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                          void              *data)
797caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington{
807caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  DBusLoop *loop = data;
817caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
827caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  if (new_status != DBUS_DISPATCH_COMPLETE)
837caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    {
847caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington      while (!_dbus_loop_queue_dispatch (loop, connection))
857caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington        _dbus_wait_for_memory ();
867caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    }
877caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington}
887caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
897caf646fdf595946eb28202e2df3f847d28c7151Havoc Penningtonstatic void
901617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtoncdata_free (void *data)
911617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
921617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd = data;
931617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
941617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_connection_unref (cd->connection);
951617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_unref (cd->loop);
961617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
971617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_free (cd);
981617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
991617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1001617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtonstatic CData*
1011617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtoncdata_new (DBusLoop       *loop,
1021617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington           DBusConnection *connection)
1031617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
1041617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd;
1051617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1061617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = dbus_new0 (CData, 1);
1071617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
1081617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    return NULL;
1091617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1101617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd->loop = loop;
1111617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd->connection = connection;
1121617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1131617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  dbus_connection_ref (cd->connection);
1141617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  _dbus_loop_ref (cd->loop);
1151617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1161617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return cd;
1171617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
1181617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1191617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtondbus_bool_t
1201617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Penningtontest_connection_setup (DBusLoop       *loop,
1211617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                       DBusConnection *connection)
1221617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington{
1231617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  CData *cd;
1241617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1257caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  cd = NULL;
1267caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1277caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, dispatch_status_function,
1287caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington                                                loop, NULL);
1297caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1301617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = cdata_new (loop, connection);
1311617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
1321617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1331617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1341617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  /* Because dbus-mainloop.c checks dbus_timeout_get_enabled(),
1351617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington   * dbus_watch_get_enabled() directly, we don't have to provide
1361617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington   * "toggled" callbacks.
1371617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington   */
1381617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1391617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (!dbus_connection_set_watch_functions (connection,
1401617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            add_watch,
1411617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            remove_watch,
1421617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            NULL,
1431617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                            cd, cdata_free))
1441617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1451617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1461617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1471617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  cd = cdata_new (loop, connection);
1481617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd == NULL)
1491617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    goto nomem;
1501617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1511617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (!dbus_connection_set_timeout_functions (connection,
1521617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              add_timeout,
1531617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              remove_timeout,
1541617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              NULL,
1551617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington                                              cd, cdata_free))
1567caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington    goto nomem;
1577caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1587caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  if (dbus_connection_get_dispatch_status (connection) != DBUS_DISPATCH_COMPLETE)
1591617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    {
1607caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington      if (!_dbus_loop_queue_dispatch (loop, connection))
1617caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington        goto nomem;
1621617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    }
1637caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1641617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return TRUE;
1651617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington
1661617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington nomem:
1671617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  if (cd)
1681617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington    cdata_free (cd);
1697caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1707caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
1717caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_watch_functions (connection, NULL, NULL, NULL, NULL, NULL);
1727caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_timeout_functions (connection, NULL, NULL, NULL, NULL, NULL);
1737caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington
1741617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington  return FALSE;
1751617fbe36c0bc2952093fc167b6edffdf32c445eHavoc Pennington}
176fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
177fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtonvoid
178fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Penningtontest_connection_shutdown (DBusLoop       *loop,
179fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                          DBusConnection *connection)
180fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington{
181fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  if (!dbus_connection_set_watch_functions (connection,
182fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
183fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
184fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL,
185fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                            NULL, NULL))
186fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    _dbus_assert_not_reached ("setting watch functions to NULL failed");
187fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
188fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington  if (!dbus_connection_set_timeout_functions (connection,
189fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
190fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
191fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL,
192fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington                                              NULL, NULL))
193fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington    _dbus_assert_not_reached ("setting timeout functions to NULL failed");
194fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington
1957caf646fdf595946eb28202e2df3f847d28c7151Havoc Pennington  dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
196fe22b2194d53061fefe64d48ff6a53e6a762279dHavoc Pennington}
197