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:
committed by
Kristian Høgsberg
parent
3a1d07d5e7
commit
585c27c717
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user