[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
execute tests: Avoid test failure on Android
From: |
Bruno Haible |
Subject: |
execute tests: Avoid test failure on Android |
Date: |
Tue, 17 Jan 2023 15:21:52 +0100 |
On Android 11, I'm seeing a test failure:
FAIL: test-execute.sh
=====================
test-execute-main: test-execute-child subprocess failed
../../gltests/test-execute-main.c:138: assertion 'ret == 127' failed
Aborted
test-execute.sh: test case 3 failed
../../gltests/test-execute-main.c:151: assertion 'ret == 0' failed
Aborted
test-execute.sh: test case 4 failed
FAIL test-execute.sh (exit status: 1)
When I run
make check TESTS=test-execute.sh
or
rm -f test-execute.sh.log; make test-execute.sh.log
I see the test cases 3 and 4 fail, because the child program has
exited with exit code 71.
Whereas when I run
../../gltests/test-execute.sh
directly, all the tests pass.
Apparently the SIGPIPE handler gets set to SIG_IGN, either by 'make' or
by the test-driver.
This patch implements a workaround.
2023-01-17 Bruno Haible <bruno@clisp.org>
execute tests: Avoid test failure on Android.
* tests/test-execute-main.c (main): Reset the SIGPIPE handler to
default.
diff --git a/tests/test-execute-main.c b/tests/test-execute-main.c
index d89b34465b..fbaa9c9d2e 100644
--- a/tests/test-execute-main.c
+++ b/tests/test-execute-main.c
@@ -58,6 +58,18 @@ main (int argc, char *argv[])
const char *progname = "test-execute-child";
int test = atoi (argv[2]);
+#if defined __ANDROID__
+ /* On Android 11, when this test is executed through 'make' (GNU make 4.4)
and
+ build-aux/test-driver, i.e. through
+ make check TESTS=test-execute.sh
+ or
+ rm -f test-execute.sh.log; make test-execute.sh.log
+ the signal handler for SIGPIPE is set to SIG_IGN. This causes the tests
+ 3 and 4 to fail. Work around it by resetting the signal handler for
+ SIGPIPE to the default. */
+ signal (SIGPIPE, SIG_DFL);
+#endif
+
switch (test)
{
case 14:
- execute tests: Avoid test failure on Android,
Bruno Haible <=