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>
This commit is contained in:
parent
3a1d07d5e7
commit
585c27c717
|
@ -28,6 +28,7 @@
|
|||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#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
|
||||
|
|
Loading…
Reference in New Issue