gio/tests: Factor out connection_wait_for_bus() from gdbus-subscribe

Signed-off-by: Simon McVittie <smcv@debian.org>
This commit is contained in:
Simon McVittie
2025-09-19 12:54:09 +01:00
committed by Philip Withnall
parent 043d14fdd3
commit 5059294535
3 changed files with 38 additions and 29 deletions

View File

@@ -620,35 +620,6 @@ typedef struct
guint finished_subscription; guint finished_subscription;
} Fixture; } Fixture;
/* Wait for asynchronous messages from @conn to have been processed
* by the message bus, as a sequence point so that we can make
* "happens before" and "happens after" assertions relative to this.
* The easiest way to achieve this is to call a message bus method that has
* no arguments and wait for it to return: because the message bus processes
* messages in-order, anything we sent before this must have been processed
* by the time this call arrives. */
static void
connection_wait_for_bus (GDBusConnection *conn)
{
GError *error = NULL;
GVariant *call_result;
call_result = g_dbus_connection_call_sync (conn,
DBUS_SERVICE_DBUS,
DBUS_PATH_DBUS,
DBUS_INTERFACE_DBUS,
"GetId",
NULL, /* arguments */
NULL, /* result type */
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
g_assert_no_error (error);
g_assert_nonnull (call_result);
g_variant_unref (call_result);
}
/* /*
* Called when the subscriber receives a message from any connection * Called when the subscriber receives a message from any connection
* announcing that it has emitted all the signals that it plans to emit. * announcing that it has emitted all the signals that it plans to emit.

View File

@@ -27,6 +27,8 @@
#include "gdbus-tests.h" #include "gdbus-tests.h"
#include "gdbusprivate.h"
/* ---------------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------------- */
typedef struct typedef struct
@@ -155,6 +157,40 @@ ensure_gdbus_testserver_up (GDBusConnection *connection,
g_main_context_pop_thread_default (context); g_main_context_pop_thread_default (context);
} }
/*
* connection_wait_for_bus:
* @conn: A connection
*
* Wait for asynchronous messages from @conn to have been processed
* by the message bus, as a sequence point so that we can make
* "happens before" and "happens after" assertions relative to this.
* The easiest way to achieve this is to call a message bus method that has
* no arguments and wait for it to return: because the message bus processes
* messages in-order, anything we sent before this must have been processed
* by the time this call arrives.
*/
void
connection_wait_for_bus (GDBusConnection *conn)
{
GError *error = NULL;
GVariant *call_result;
call_result = g_dbus_connection_call_sync (conn,
DBUS_SERVICE_DBUS,
DBUS_PATH_DBUS,
DBUS_INTERFACE_DBUS,
"GetId",
NULL, /* arguments */
NULL, /* result type */
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error);
g_assert_no_error (error);
g_assert_nonnull (call_result);
g_variant_unref (call_result);
}
/* ---------------------------------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------------------------------- */
typedef struct typedef struct

View File

@@ -119,6 +119,8 @@ GDBusConnection *_g_bus_get_priv (GBusType bus_type,
void ensure_gdbus_testserver_up (GDBusConnection *connection, void ensure_gdbus_testserver_up (GDBusConnection *connection,
GMainContext *context); GMainContext *context);
void connection_wait_for_bus (GDBusConnection *conn);
G_END_DECLS G_END_DECLS
#endif /* __TESTS_H__ */ #endif /* __TESTS_H__ */