mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-31 22:25:25 -04:00
tests: add timeout
Add test_set_timeout() function that allows the test to set timeout for its completition. Any other call to the function re-sets the timeout to the new value. The timeouts can be turned off (usefull when debugging) by setting evironment variable WAYLAND_TESTS_NO_TIMEOUTS. v2: rename NO_TIMEOUTS to WAYLAND_TESTS_NO_TIMEOUTS use unsigned int as argument of test_set_timeout() improve printing of the message about timeout Signed-off-by: Marek Chalupa <mchqwerty@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
47c752ad82
commit
7bf8049c48
2 changed files with 54 additions and 0 deletions
|
|
@ -44,6 +44,11 @@ static void* (*sys_calloc)(size_t, size_t);
|
|||
|
||||
int leak_check_enabled;
|
||||
|
||||
/* when this var is set to 0, every call to test_set_timeout() is
|
||||
* suppressed - handy when debugging the test. Can be set by
|
||||
* WAYLAND_TESTS_NO_TIMEOUTS evnironment var */
|
||||
static int timeouts_enabled = 1;
|
||||
|
||||
extern const struct test __start_test_section, __stop_test_section;
|
||||
|
||||
__attribute__ ((visibility("default"))) void *
|
||||
|
|
@ -110,14 +115,55 @@ usage(const char *name, int status)
|
|||
exit(status);
|
||||
}
|
||||
|
||||
void
|
||||
test_set_timeout(unsigned int to)
|
||||
{
|
||||
int re;
|
||||
|
||||
if (!timeouts_enabled) {
|
||||
fprintf(stderr, "Timeouts suppressed.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
re = alarm(to);
|
||||
fprintf(stderr, "Timeout was %sset", re ? "re-" : "");
|
||||
|
||||
if (to != 0)
|
||||
fprintf(stderr, " to %d second%c from now.\n",
|
||||
to, to > 1 ? 's' : 0);
|
||||
else
|
||||
fprintf(stderr, " off.\n");
|
||||
}
|
||||
|
||||
static void
|
||||
sigalrm_handler(int signum)
|
||||
{
|
||||
fprintf(stderr, "Test timed out.\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
static void
|
||||
run_test(const struct test *t)
|
||||
{
|
||||
int cur_alloc = num_alloc;
|
||||
int cur_fds, num_fds;
|
||||
struct sigaction sa;
|
||||
|
||||
cur_fds = count_open_fds();
|
||||
|
||||
if (timeouts_enabled) {
|
||||
sa.sa_handler = sigalrm_handler;
|
||||
sa.sa_flags = 0;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
assert(sigaction(SIGALRM, &sa, NULL) == 0);
|
||||
}
|
||||
|
||||
t->run();
|
||||
|
||||
/* turn off timeout (if any) after test completition */
|
||||
if (timeouts_enabled)
|
||||
alarm(0);
|
||||
|
||||
if (leak_check_enabled) {
|
||||
if (cur_alloc != num_alloc) {
|
||||
fprintf(stderr, "Memory leak detected in test. "
|
||||
|
|
@ -189,6 +235,7 @@ int main(int argc, char *argv[])
|
|||
sys_free = dlsym(RTLD_NEXT, "free");
|
||||
|
||||
leak_check_enabled = !getenv("NO_ASSERT_LEAK_CHECK");
|
||||
timeouts_enabled = !getenv("WAYLAND_TESTS_NO_TIMEOUTS");
|
||||
|
||||
if (argc == 2 && strcmp(argv[1], "--help") == 0)
|
||||
usage(argv[0], EXIT_SUCCESS);
|
||||
|
|
|
|||
|
|
@ -37,4 +37,11 @@ count_open_fds(void);
|
|||
void
|
||||
exec_fd_leak_check(int nr_expected_fds); /* never returns */
|
||||
|
||||
/*
|
||||
* set/reset the timeout in seconds. The timeout starts
|
||||
* at the point of invoking this function
|
||||
*/
|
||||
void
|
||||
test_set_timeout(unsigned int);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue