summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2017-11-21 12:15:04 +0000
committerSimon McVittie <smcv@collabora.com>2017-11-24 12:19:15 +0000
commit05c04704f9801b732d7372e5ef14e181019257bc (patch)
tree2fbdfed82216c5b8b7a5f187a2fc5b1528bc0041
parentd96da8149a105b2bd037c11991138a677035859a (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.c4
-rw-r--r--test/test-utils-glib.c36
-rw-r--r--test/test-utils-glib.h7
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. */