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 <ppaalanen@gmail.com>
dev
Pekka Paalanen 13 years ago committed by Kristian Høgsberg
parent 3a1d07d5e7
commit 585c27c717
  1. 6
      tests/weston-test-runner.c

@ -28,6 +28,7 @@
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <signal.h>
#include "weston-test-runner.h" #include "weston-test-runner.h"
extern const struct weston_test __start_test_section, __stop_test_section; extern const struct weston_test __start_test_section, __stop_test_section;
@ -71,6 +72,7 @@ int main(int argc, char *argv[])
pass = 0; pass = 0;
for (t = &__start_test_section; t < &__stop_test_section; t++) { for (t = &__start_test_section; t < &__stop_test_section; t++) {
int success = 0; int success = 0;
int hardfail = 0;
pid = fork(); pid = fork();
assert(pid >= 0); assert(pid >= 0);
@ -93,13 +95,15 @@ int main(int argc, char *argv[])
case CLD_KILLED: case CLD_KILLED:
case CLD_DUMPED: case CLD_DUMPED:
fprintf(stderr, "signal %d", info.si_status); fprintf(stderr, "signal %d", info.si_status);
if (info.si_status != SIGABRT)
hardfail = 1;
break; break;
} }
if (t->must_fail) if (t->must_fail)
success = !success; success = !success;
if (success) { if (success && !hardfail) {
pass++; pass++;
fprintf(stderr, ", pass.\n"); fprintf(stderr, ", pass.\n");
} else } else

Loading…
Cancel
Save