From c3653f7f61c9ced4f3e0243dc6f39f1efbe45c86 Mon Sep 17 00:00:00 2001 From: Marek Chalupa Date: Fri, 28 Nov 2014 15:36:52 +0100 Subject: [PATCH] tests: detect if debugger is attached Copy function from libinput/test/litest.c is_debugger_detached() and use it in our test-runner. If debugger is attached, turn off leak checks and timeouts automatically. Revision of libinput: 028513a0a723e97941c39c4aeb17433198723913 v2. rebased to master Signed-off-by: Marek Chalupa Acked-by: Pekka Paalanen --- tests/test-runner.c | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tests/test-runner.c b/tests/test-runner.c index 431511a..753617f 100644 --- a/tests/test-runner.c +++ b/tests/test-runner.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "test-runner.h" @@ -246,6 +247,38 @@ stderr_reset_color(void) fprintf(stderr, "\033[0m"); } +/* this function is taken from libinput/test/litest.c + * (rev 028513a0a723e97941c39) + */ +static int +is_debugger_attached(void) +{ + int status; + int rc; + int pid = fork(); + + if (pid == -1) + return 0; + + if (pid == 0) { + int ppid = getppid(); + if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) { + waitpid(ppid, NULL, 0); + ptrace(PTRACE_CONT, NULL, NULL); + ptrace(PTRACE_DETACH, ppid, NULL, NULL); + rc = 0; + } else { + rc = 1; + } + _exit(rc); + } else { + waitpid(pid, &status, 0); + rc = WEXITSTATUS(status); + } + + return rc; +} + int main(int argc, char *argv[]) { const struct test *t; @@ -259,12 +292,17 @@ int main(int argc, char *argv[]) sys_malloc = dlsym(RTLD_NEXT, "malloc"); sys_free = dlsym(RTLD_NEXT, "free"); - leak_check_enabled = !getenv("WAYLAND_TEST_NO_LEAK_CHECK"); - timeouts_enabled = !getenv("WAYLAND_TEST_NO_TIMEOUTS"); - if (isatty(fileno(stderr))) is_atty = 1; + if (is_debugger_attached()) { + leak_check_enabled = 0; + timeouts_enabled = 0; + } else { + leak_check_enabled = !getenv("WAYLAND_TEST_NO_LEAK_CHECK"); + timeouts_enabled = !getenv("WAYLAND_TEST_NO_TIMEOUTS"); + } + if (argc == 2 && strcmp(argv[1], "--help") == 0) usage(argv[0], EXIT_SUCCESS); -- 2.7.4