diff options
author | Simon McVittie <smcv@collabora.com> | 2017-11-21 12:15:04 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2017-11-24 12:19:15 +0000 |
commit | 05c04704f9801b732d7372e5ef14e181019257bc (patch) | |
tree | 2fbdfed82216c5b8b7a5f187a2fc5b1528bc0041 | |
parent | d96da8149a105b2bd037c11991138a677035859a (diff) |
test_main_context_call_and_wait: Add
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103600
-rw-r--r-- | test/internals/variant.c | 4 | ||||
-rw-r--r-- | test/test-utils-glib.c | 36 | ||||
-rw-r--r-- | test/test-utils-glib.h | 7 |
3 files changed, 45 insertions, 2 deletions
diff --git a/test/internals/variant.c b/test/internals/variant.c index b8249fd19..69954e7ab 100644 --- a/test/internals/variant.c +++ b/test/internals/variant.c @@ -554,7 +554,7 @@ test_simple (void) } static void -test_oom (void) +test_oom_handling (void) { if (!_dbus_test_oom_handling ("DBusVariant", test_once, NULL)) g_error ("Test failed"); @@ -567,7 +567,7 @@ main (int argc, test_init (&argc, &argv); g_test_add_func ("/variant/simple", test_simple); - g_test_add_func ("/variant/oom", test_oom); + g_test_add_func ("/variant/oom", test_oom_handling); return g_test_run (); } diff --git a/test/test-utils-glib.c b/test/test-utils-glib.c index ccf876996..a539c5c84 100644 --- a/test/test-utils-glib.c +++ b/test/test-utils-glib.c @@ -714,3 +714,39 @@ test_mkdir (const gchar *path, g_strerror (saved_errno)); } } + +void +test_oom (void) +{ + g_error ("Out of memory"); +} + +/* + * Send the given method call and wait for a reply, spinning the main + * context as necessary. + */ +DBusMessage * +test_main_context_call_and_wait (TestMainContext *ctx, + DBusConnection *connection, + DBusMessage *call, + int timeout) +{ + DBusPendingCall *pc = NULL; + DBusMessage *reply = NULL; + + if (!dbus_connection_send_with_reply (connection, call, &pc, timeout) || + pc == NULL) + test_oom (); + + if (dbus_pending_call_get_completed (pc)) + test_pending_call_store_reply (pc, &reply); + else if (!dbus_pending_call_set_notify (pc, test_pending_call_store_reply, + &reply, NULL)) + test_oom (); + + while (reply == NULL) + test_main_context_iterate (ctx, TRUE); + + dbus_clear_pending_call (&pc); + return g_steal_pointer (&reply); +} diff --git a/test/test-utils-glib.h b/test/test-utils-glib.h index 9822a36d8..2c0f9d699 100644 --- a/test/test-utils-glib.h +++ b/test/test-utils-glib.h @@ -99,6 +99,13 @@ void test_mkdir (const gchar *path, gint mode); void test_timeout_reset (void); +void test_oom (void) _DBUS_GNUC_NORETURN; + +DBusMessage *test_main_context_call_and_wait (TestMainContext *ctx, + DBusConnection *connection, + DBusMessage *call, + int timeout); + #if !GLIB_CHECK_VERSION(2, 44, 0) #define g_steal_pointer(x) backported_g_steal_pointer (x) /* A simplified version of g_steal_pointer without type-safety. */ |