From fe1a2dc1965b564727480c8a99740252ea81274b Mon Sep 17 00:00:00 2001 From: Iain Lane Date: Mon, 31 Mar 2014 11:06:05 +0100 Subject: [PATCH] gdbus tests: wait up to 60s for gdbus-testserver to take its bus name Previously, we waited up to 0.5s, but that can fail on slow architectures like ARM; now we wait up to 60s in 0.1s increments. Patch originally by Simon McVittie , modified by Iain Lane to be called earlier, to catch all testcases in a particular test. Bug: https://bugzilla.gnome.org/show_bug.cgi?id=724113 Reviewed-by: Simon McVittie Acked-by: Matthias Clasen --- gio/tests/gdbus-connection-loss.c | 3 +- gio/tests/gdbus-tests.c | 52 +++++++++++++++++++++++++++++++ gio/tests/gdbus-tests.h | 2 ++ gio/tests/gdbus-threading.c | 8 +---- 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/gio/tests/gdbus-connection-loss.c b/gio/tests/gdbus-connection-loss.c index d80719336..8ebb87059 100644 --- a/gio/tests/gdbus-connection-loss.c +++ b/gio/tests/gdbus-connection-loss.c @@ -124,8 +124,7 @@ main (int argc, g_assert (g_spawn_command_line_async (path, NULL)); g_free (path); - /* wait for the service to come up */ - usleep (500 * 1000); + ensure_gdbus_testserver_up (); /* Create the connection in the main thread */ error = NULL; diff --git a/gio/tests/gdbus-tests.c b/gio/tests/gdbus-tests.c index 8b64e8513..8237dd0f6 100644 --- a/gio/tests/gdbus-tests.c +++ b/gio/tests/gdbus-tests.c @@ -77,6 +77,58 @@ _g_assert_property_notify_run (gpointer object, return data.timed_out; } +static gboolean +_give_up (gpointer data) +{ + g_error ("%s", (const gchar *) data); + g_return_val_if_reached (TRUE); +} + +void +ensure_gdbus_testserver_up (void) +{ + guint id; + gchar *name_owner; + GDBusConnection *connection; + GDBusProxy *proxy; + GError *error = NULL; + + connection = g_bus_get_sync (G_BUS_TYPE_SESSION, + NULL, + &error); + + g_assert_no_error (error); + error = NULL; + + proxy = g_dbus_proxy_new_sync (connection, + G_DBUS_PROXY_FLAGS_NONE, + NULL, /* GDBusInterfaceInfo */ + "com.example.TestService", /* name */ + "/com/example/TestObject", /* object path */ + "com.example.Frob", /* interface */ + NULL, /* GCancellable */ + &error); + g_assert_no_error (error); + + id = g_timeout_add_seconds (60, _give_up, + "waited more than ~ 60s for gdbus-testserver to take its bus name"); + + while (TRUE) + { + name_owner = g_dbus_proxy_get_name_owner (proxy); + + if (name_owner != NULL) + break; + + g_main_context_iteration (NULL, TRUE); + } + + g_source_remove (id); + g_free (name_owner); + g_object_unref (proxy); + g_object_unref (connection); +} + /* ---------------------------------------------------------------------------------------------------- */ typedef struct diff --git a/gio/tests/gdbus-tests.h b/gio/tests/gdbus-tests.h index 538b2657e..6e31d7b43 100644 --- a/gio/tests/gdbus-tests.h +++ b/gio/tests/gdbus-tests.h @@ -114,6 +114,8 @@ GDBusConnection *_g_bus_get_priv (GBusType bus_type, GCancellable *cancellable, GError **error); +void ensure_gdbus_testserver_up (void); + G_END_DECLS #endif /* __TESTS_H__ */ diff --git a/gio/tests/gdbus-threading.c b/gio/tests/gdbus-threading.c index 8d656c62d..0e9b8b449 100644 --- a/gio/tests/gdbus-threading.c +++ b/gio/tests/gdbus-threading.c @@ -419,7 +419,6 @@ test_method_calls_in_thread (void) GDBusProxy *proxy; GDBusConnection *connection; GError *error; - gchar *name_owner; error = NULL; connection = g_bus_get_sync (G_BUS_TYPE_SESSION, @@ -437,10 +436,6 @@ test_method_calls_in_thread (void) &error); g_assert_no_error (error); - name_owner = g_dbus_proxy_get_name_owner (proxy); - g_assert_cmpstr (name_owner, !=, NULL); - g_free (name_owner); - test_method_calls_on_proxy (proxy); g_object_unref (proxy); @@ -596,8 +591,7 @@ main (int argc, g_assert (g_spawn_command_line_async (path, NULL)); g_free (path); - /* wait for the service to come up */ - usleep (500 * 1000); + ensure_gdbus_testserver_up (); /* Create the connection in the main thread */ error = NULL;