[cogl/wip/smcv/test-timeout] Terminate tests with SIGALRM if they take more than 120 seconds



commit 4cf888195915879ad8a7f840615784b26d384fb9
Author: Simon McVittie <smcv debian org>
Date:   Sat Aug 24 15:48:46 2019 +0100

    Terminate tests with SIGALRM if they take more than 120 seconds
    
    The Debian autobuilders run cogl's build-time tests to get an idea of
    how much can be expected to work on each supported architecture.
    We're currently ignoring test failures and running the tests for
    information only, but if a test hangs, that will still cause the build
    to fail (and tie up an autobuilder until a rather long timeout is
    reached).
    
    The fork of cogl in Mutter uses a 120 second timeout for tests in its
    Meson build system, but other than that it's purely an arbitrary number.
    dbus uses a similar alarm()-based watchdog, as do a couple of tests
    in GLib.
    
    Bug-Debian: https://bugs.debian.org/935592
    Signed-off-by: Simon McVittie <smcv debian org>

 configure.ac               | 2 ++
 test-fixtures/test-utils.c | 9 +++++++++
 2 files changed, 11 insertions(+)
---
diff --git a/configure.ac b/configure.ac
index da188edd..7d634682 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1320,6 +1320,8 @@ dnl ================================================================
 dnl Checks for library functions.
 dnl ================================================================
 
+AC_CHECK_FUNCS_ONCE([alarm])
+
 dnl The 'ffs' function is part of C99 so it isn't always
 dnl available. Cogl has a fallback if needed.
 dnl
diff --git a/test-fixtures/test-utils.c b/test-fixtures/test-utils.c
index 8a0a3884..a8265a46 100644
--- a/test-fixtures/test-utils.c
+++ b/test-fixtures/test-utils.c
@@ -2,6 +2,10 @@
 
 #include <stdlib.h>
 
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "test-unit.h"
 #include "test-utils.h"
 
@@ -146,6 +150,11 @@ test_utils_init (TestFlags requirement_flags,
                 "$ make test-report");
   counter++;
 
+#ifdef HAVE_ALARM
+  /* Kill the test with SIGALRM if it takes more than this many seconds */
+  alarm (120);
+#endif
+
   if (is_boolean_env_set ("COGL_TEST_VERBOSE") ||
       is_boolean_env_set ("V"))
     cogl_test_is_verbose = TRUE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]