Timeout the test if dbus sevice has not appeared in due time.

The test /gdbus/connection/large_message waits for a dbus name to appear.
The dbus name is created by a another process executed in the background.
If for some reason this fails, the test will likely wait forever.
This will avoid this situation by making the test fail if the dbus service
has not appeared after 10 seconds.

https://bugzilla.gnome.org/show_bug.cgi?id=698981
This commit is contained in:
Josep Puigdemont 2013-05-21 16:46:25 +02:00 committed by Colin Walters
parent 4edc2f1a93
commit c9cc0beb3a

View File

@ -120,6 +120,18 @@ test_connection_flush (void)
* is fragmented when shoved across any transport
*/
#define LARGE_MESSAGE_STRING_LENGTH (20*1024*1024)
/* the test will fail if the service name has not appeared after this amount of seconds */
#define LARGE_MESSAGE_TIMEOUT_SECONDS 10
static gboolean
large_message_timeout_cb (gpointer data)
{
(void)data;
g_error ("Error: timeout waiting for dbus name to appear\n");
return FALSE;
}
static void
large_message_on_name_appeared (GDBusConnection *connection,
@ -133,6 +145,8 @@ large_message_on_name_appeared (GDBusConnection *connection,
GVariant *result;
guint n;
g_assert (g_source_remove (GPOINTER_TO_UINT (user_data)));
request = g_new (gchar, LARGE_MESSAGE_STRING_LENGTH + 1);
for (n = 0; n < LARGE_MESSAGE_STRING_LENGTH; n++)
request[n] = '0' + (n%10);
@ -175,6 +189,7 @@ test_connection_large_message (void)
{
guint watcher_id;
gchar *path;
guint timeout_id;
session_bus_up ();
@ -183,12 +198,16 @@ test_connection_large_message (void)
g_assert (g_spawn_command_line_async (path, NULL));
g_free (path);
timeout_id = g_timeout_add_seconds (LARGE_MESSAGE_TIMEOUT_SECONDS,
large_message_timeout_cb,
NULL);
watcher_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"com.example.TestService",
G_BUS_NAME_WATCHER_FLAGS_NONE,
large_message_on_name_appeared,
large_message_on_name_vanished,
NULL, /* user_data */
GUINT_TO_POINTER (timeout_id), /* user_data */
NULL); /* GDestroyNotify */
g_main_loop_run (loop);
g_bus_unwatch_name (watcher_id);