diff options
author | Simon McVittie <smcv@collabora.com> | 2017-09-27 13:14:36 +0100 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2017-09-27 14:45:34 +0100 |
commit | 5aca0fc1a5bc0b7918839bc692747b1f57c3285c (patch) | |
tree | cfd6face9823231e7ddcefb02caf556119a798bc /test | |
parent | 1330bd2cd3307615320c66f55a42c84242d54d46 (diff) | |
download | dbus-5aca0fc1a5bc0b7918839bc692747b1f57c3285c.tar.gz |
test-utils-glib: Try to emit TAP diagnostics before aborting
We can't use normal I/O in a signal handler, so resort to write().
"Bail out!" is a special syntactic token in TAP. If I artifically force
the tests to time out by reducing timeouts and increasing the number of
operations, I get results like this:
ERROR: test-sd-activation - Bail out! Test timed out (GLib main loop timeout callback reached)
ERROR: test-refs - Bail out! Test timed out (SIGALRM received)
which is a lot easier to understand than "Not enough tests run" or
"nonzero exit status". The differing output is because test-sd-activation
iterates the main loop, whereas test-refs just blocks (it is joining a
series of worker threads, each of which is spamming refcount operations).
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103009
Reviewed-by: Philip Withnall <withnall@endlessm.com>
[smcv: Use STDOUT_FILENO as per Philip's review]
Signed-off-by: Simon McVittie <smcv@collabora.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/test-utils-glib.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/test/test-utils-glib.c b/test/test-utils-glib.c index bb481952..73416bb6 100644 --- a/test/test-utils-glib.c +++ b/test/test-utils-glib.c @@ -459,7 +459,9 @@ test_kill_pid (GPid pid) static gboolean time_out (gpointer data) { - g_error ("timed out"); + puts ("Bail out! Test timed out (GLib main loop timeout callback reached)"); + fflush (stdout); + abort (); return FALSE; } @@ -469,6 +471,16 @@ static void wrap_abort (int signal) _DBUS_GNUC_NORETURN; static void wrap_abort (int signal) { + /* We might be halfway through writing out something else, so force this + * onto its own line */ + const char message [] = "\nBail out! Test timed out (SIGALRM received)\n"; + + if (write (STDOUT_FILENO, message, sizeof (message) - 1) < + (ssize_t) sizeof (message) - 1) + { + /* ignore short write - what would we do about it? */ + } + abort (); } #endif @@ -490,7 +502,7 @@ test_init (int *argcp, char ***argvp) * test). Die with SIGALRM shortly after if necessary. */ alarm (TIMEOUT + 10); - /* Get a core dump from the SIGALRM. */ + /* Get a log message and a core dump from the SIGALRM. */ { struct sigaction act = { }; |