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