tests: Add the ability to multiply up test timeouts

Tests that brute-force OOM code paths can be rather slow.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=100317
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit 5c91d85f3e)
This commit is contained in:
Simon McVittie 2017-11-27 19:14:23 +00:00
parent bd31f268e2
commit d4d6cdab99
5 changed files with 12 additions and 11 deletions

View file

@ -159,7 +159,7 @@ setup (Fixture *f,
const Config *config = context;
/* Some tests are fairly slow, so make the test timeout per-test */
test_timeout_reset ();
test_timeout_reset (1);
f->ctx = test_main_context_get ();
f->ge = NULL;

View file

@ -202,7 +202,7 @@ setup (Fixture *f,
g_error ("OOM");
/* This can be fairly slow, so make the test timeout per-test */
test_timeout_reset ();
test_timeout_reset (1);
f->n_threads = N_THREADS;
f->n_refs = N_REFS;

View file

@ -122,7 +122,7 @@ static void
setup (Fixture *f,
gconstpointer data G_GNUC_UNUSED)
{
test_timeout_reset ();
test_timeout_reset (1);
f->ctx = test_main_context_get ();
dbus_error_init (&f->e);

View file

@ -488,7 +488,7 @@ wrap_abort (int signal)
#endif
static void
set_timeout (void)
set_timeout (guint factor)
{
static guint timeout = 0;
@ -500,11 +500,11 @@ set_timeout (void)
if (timeout != 0)
g_source_remove (timeout);
timeout = g_timeout_add_seconds (TIMEOUT, time_out, NULL);
timeout = g_timeout_add_seconds (TIMEOUT * factor, time_out, NULL);
#ifdef G_OS_UNIX
/* The GLib main loop might not be running (we don't use it in every
* test). Die with SIGALRM shortly after if necessary. */
alarm (TIMEOUT + 10);
alarm ((TIMEOUT * factor) + 10);
/* Get a log message and a core dump from the SIGALRM. */
{
@ -522,7 +522,7 @@ test_init (int *argcp, char ***argvp)
{
g_test_init (argcp, argvp, NULL);
g_test_bug_base ("https://bugs.freedesktop.org/show_bug.cgi?id=");
set_timeout ();
set_timeout (1);
}
static void
@ -536,12 +536,13 @@ report_and_destroy (gpointer p)
}
void
test_timeout_reset (void)
test_timeout_reset (guint factor)
{
GTimer *timer = g_timer_new ();
g_test_message ("Resetting test timeout (reference: %p)", timer);
set_timeout ();
g_test_message ("Resetting test timeout (reference: %p; factor: %u)",
timer, factor);
set_timeout (factor);
g_test_queue_destroy (report_and_destroy, timer);
}

View file

@ -89,6 +89,6 @@ void test_rmdir_must_exist (const gchar *path);
void test_rmdir_if_exists (const gchar *path);
void test_mkdir (const gchar *path, gint mode);
void test_timeout_reset (void);
void test_timeout_reset (guint factor);
#endif