From 585c27c71799d4b98bd1488c0056c050cb5dddab Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Tue, 18 Dec 2012 17:30:16 +0200 Subject: [PATCH] tests: make signal other than ABRT a hard failure We handle FAIL_TEST tests by simply inverting the success flag. The problem with this is, that if a FAIL_TEST fails by a SIGSEGV, it will be interpreted as passed. However, no code should ever cause a SEGV, or any other signal than ABRT. And even ABRT only in the case of an assert() that is meant to fail. We would probably need more sophistication for the FAIL_TEST cases. For now, just interpret any other signal than ABRT as a hard failure, regardless whether it is a TEST or FAIL_TEST. At least segfaults do not cause false passes anymore. Signed-off-by: Pekka Paalanen --- tests/weston-test-runner.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/weston-test-runner.c b/tests/weston-test-runner.c index e60d4d2..27ea9e4 100644 --- a/tests/weston-test-runner.c +++ b/tests/weston-test-runner.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "weston-test-runner.h" extern const struct weston_test __start_test_section, __stop_test_section; @@ -71,6 +72,7 @@ int main(int argc, char *argv[]) pass = 0; for (t = &__start_test_section; t < &__stop_test_section; t++) { int success = 0; + int hardfail = 0; pid = fork(); assert(pid >= 0); @@ -93,13 +95,15 @@ int main(int argc, char *argv[]) case CLD_KILLED: case CLD_DUMPED: fprintf(stderr, "signal %d", info.si_status); + if (info.si_status != SIGABRT) + hardfail = 1; break; } if (t->must_fail) success = !success; - if (success) { + if (success && !hardfail) { pass++; fprintf(stderr, ", pass.\n"); } else -- 2.7.4