Commit d51f1f14 authored by Alexandre Belloni's avatar Alexandre Belloni Committed by Shuah Khan

selftests/harness: Allow test to configure timeout

Commit a745f7af ("selftests/harness: Add 30 second timeout per test")
adds an hardcoded 30s timeout to all tests. Unfortunately, rtctest has two
tests taking up to 60s. Allow for individual tests to define their own
timeout.
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent 4a075bd4
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#define TEST_TIMEOUT_DEFAULT 30
/* Utilities exposed to the test definitions */ /* Utilities exposed to the test definitions */
#ifndef TH_LOG_STREAM #ifndef TH_LOG_STREAM
...@@ -169,7 +170,8 @@ ...@@ -169,7 +170,8 @@
static void test_name(struct __test_metadata *_metadata); \ static void test_name(struct __test_metadata *_metadata); \
static struct __test_metadata _##test_name##_object = \ static struct __test_metadata _##test_name##_object = \
{ .name = "global." #test_name, \ { .name = "global." #test_name, \
.fn = &test_name, .termsig = _signal }; \ .fn = &test_name, .termsig = _signal, \
.timeout = TEST_TIMEOUT_DEFAULT, }; \
static void __attribute__((constructor)) _register_##test_name(void) \ static void __attribute__((constructor)) _register_##test_name(void) \
{ \ { \
__register_test(&_##test_name##_object); \ __register_test(&_##test_name##_object); \
...@@ -280,12 +282,15 @@ ...@@ -280,12 +282,15 @@
*/ */
/* TODO(wad) register fixtures on dedicated test lists. */ /* TODO(wad) register fixtures on dedicated test lists. */
#define TEST_F(fixture_name, test_name) \ #define TEST_F(fixture_name, test_name) \
__TEST_F_IMPL(fixture_name, test_name, -1) __TEST_F_IMPL(fixture_name, test_name, -1, TEST_TIMEOUT_DEFAULT)
#define TEST_F_SIGNAL(fixture_name, test_name, signal) \ #define TEST_F_SIGNAL(fixture_name, test_name, signal) \
__TEST_F_IMPL(fixture_name, test_name, signal) __TEST_F_IMPL(fixture_name, test_name, signal, TEST_TIMEOUT_DEFAULT)
#define __TEST_F_IMPL(fixture_name, test_name, signal) \ #define TEST_F_TIMEOUT(fixture_name, test_name, timeout) \
__TEST_F_IMPL(fixture_name, test_name, -1, timeout)
#define __TEST_F_IMPL(fixture_name, test_name, signal, tmout) \
static void fixture_name##_##test_name( \ static void fixture_name##_##test_name( \
struct __test_metadata *_metadata, \ struct __test_metadata *_metadata, \
FIXTURE_DATA(fixture_name) *self); \ FIXTURE_DATA(fixture_name) *self); \
...@@ -307,6 +312,7 @@ ...@@ -307,6 +312,7 @@
.name = #fixture_name "." #test_name, \ .name = #fixture_name "." #test_name, \
.fn = &wrapper_##fixture_name##_##test_name, \ .fn = &wrapper_##fixture_name##_##test_name, \
.termsig = signal, \ .termsig = signal, \
.timeout = tmout, \
}; \ }; \
static void __attribute__((constructor)) \ static void __attribute__((constructor)) \
_register_##fixture_name##_##test_name(void) \ _register_##fixture_name##_##test_name(void) \
...@@ -632,6 +638,7 @@ struct __test_metadata { ...@@ -632,6 +638,7 @@ struct __test_metadata {
int termsig; int termsig;
int passed; int passed;
int trigger; /* extra handler after the evaluation */ int trigger; /* extra handler after the evaluation */
int timeout;
__u8 step; __u8 step;
bool no_print; /* manual trigger when TH_LOG_STREAM is not available */ bool no_print; /* manual trigger when TH_LOG_STREAM is not available */
struct __test_metadata *prev, *next; struct __test_metadata *prev, *next;
...@@ -696,7 +703,7 @@ void __run_test(struct __test_metadata *t) ...@@ -696,7 +703,7 @@ void __run_test(struct __test_metadata *t)
t->passed = 1; t->passed = 1;
t->trigger = 0; t->trigger = 0;
printf("[ RUN ] %s\n", t->name); printf("[ RUN ] %s\n", t->name);
alarm(30); alarm(t->timeout);
child_pid = fork(); child_pid = fork();
if (child_pid < 0) { if (child_pid < 0) {
printf("ERROR SPAWNING TEST CHILD\n"); printf("ERROR SPAWNING TEST CHILD\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment