| |
@@ -93,15 +93,28 @@
|
| |
# Starting from this point and bellow any fail is considered as a test fail. Exit code == 0.
|
| |
|
| |
clean_exit() {
|
| |
- rc=$?;
|
| |
+ rc=$?
|
| |
+ # WARNING! At this place ansible closes all FD for STDIN STDERR.
|
| |
+ # echo "something" > ANY will not work, and will fail
|
| |
+ # With the above, relax:
|
| |
+ set +efu
|
| |
+ # Also any output to old tee-STDERR/STDOUT will terminate clean_exit()
|
| |
trap - SIGINT SIGTERM SIGABRT EXIT # clear the trap
|
| |
- echo "Run test $STR_BKR_TEST: done."
|
| |
+ echo "Run test '$STR_BKR_NAME': done. Test's exit code: $rc" >&4
|
| |
+ if [[ $terminated_outside -eq 1 ]]; then
|
| |
+ echo "The test was terminated outside." >&4
|
| |
+ echo "Mark current test as ERROR." >&4
|
| |
+ rc=77
|
| |
+ fi
|
| |
# Close tee pipes
|
| |
- for pid in $(ps -o pid --no-headers --ppid $$); do
|
| |
- if [ -n "$(ps -p $pid -o pid=)" ]; then
|
| |
- kill -s HUP $pid
|
| |
+ for pid in $(ps -o pid --no-headers --ppid $$ 2>/dev/null); do
|
| |
+ if [ -n "$(ps -p $pid -o pid= 2>/dev/null)" ]; then
|
| |
+ kill -s HUP $pid > /dev/null 2>&1
|
| |
fi
|
| |
done
|
| |
+ # At this place STDIN/STDOUT(tee) are closed.
|
| |
+ # Can work original STDOUT/STDERR &3 and &4.
|
| |
+ # Depends how this command was invoked.
|
| |
# Check test result status
|
| |
local log_file_name="$STR_BKR_TEST_DASHED.log"
|
| |
local log_file_path="$STR_ARTIFACTS_DIR/$log_file_name"
|
| |
@@ -110,7 +123,12 @@
|
| |
status="ERROR"
|
| |
elif [[ $rc -eq 124 ]]; then
|
| |
# test case timed out
|
| |
- echo "$STR_BKR_TEST (test aborted due to timeout)" >&2
|
| |
+ echo "$STR_BKR_TEST (test aborted due to timeout)" >&4
|
| |
+ status="ERROR"
|
| |
+ elif [[ $rc -eq 77 ]]; then
|
| |
+ # Test was terminated outside.
|
| |
+ # For example: ansible-playbook was terminated
|
| |
+ echo "$STR_TEST_NAME (test was terminated outside)" >&4
|
| |
status="ERROR"
|
| |
elif grep -q "RESULT: WARN" "$log_file_path"; then
|
| |
status="ERROR"
|
| |
@@ -143,9 +161,12 @@
|
| |
fi
|
| |
done
|
| |
# Exit code == 0, no matter of the test result.
|
| |
+ # If killed outside, return code will not be 0, no matter what.
|
| |
exit 0
|
| |
}
|
| |
trap clean_exit SIGINT SIGTERM SIGABRT EXIT
|
| |
+ terminated_outside=1
|
| |
+ rc=0
|
| |
|
| |
# For beakerlib-libraries
|
| |
export PATH="$PATH:$STR_WORKDIR"
|
| |
@@ -154,6 +175,7 @@
|
| |
logfile_stderr="$STR_ARTIFACTS_DIR/$STR_BKR_TEST_DASHED-err.log"
|
| |
# OUTPUTFILE has influence on beakerlib-libraries output
|
| |
export OUTPUTFILE="$(realpath "$logfile_stdout")"
|
| |
+ # Save real STDIN/STDERR to 3 and 4
|
| |
exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)
|
| |
mkdir -p "$STR_WORKDIR"
|
| |
cd "$STR_WORKDIR"
|
| |
@@ -161,14 +183,16 @@
|
| |
if ! [ -d "$STR_BKR_TEST" ] && ! [ -f "$STR_BKR_TEST" ]; then
|
| |
# Next string goes to .log file
|
| |
echo "FAIL test $STR_BKR_TEST does not appear to be a file or directory"
|
| |
+ terminated_outside=0
|
| |
exit 127
|
| |
fi
|
| |
|
| |
if [ -f "$STR_BKR_TEST" ]; then
|
| |
debug "Running test from file: $STR_BKR_TEST"
|
| |
cd $(dirname "$STR_BKR_TEST")
|
| |
- timeout --foreground "$STR_TIMEOUT" /bin/sh -e ./$(basename "$STR_BKR_TEST")
|
| |
- exit
|
| |
+ timeout --foreground "$STR_TIMEOUT" /bin/sh -e ./$(basename "$STR_BKR_TEST") || rc=$?
|
| |
+ terminated_outside=0
|
| |
+ exit $rc
|
| |
fi
|
| |
|
| |
if [ -d "$STR_BKR_TEST" ]; then
|
| |
@@ -178,12 +202,13 @@
|
| |
get-test-deps -i .
|
| |
if [ -f "Makefile" ] && command -p -v "make" >"/dev/null" 2>&1; then
|
| |
debug "Running test from Makefile"
|
| |
- timeout --foreground "$STR_TIMEOUT" make run
|
| |
+ timeout --foreground "$STR_TIMEOUT" make run || rc=$?
|
| |
elif [ -f "runtest.sh" ]; then
|
| |
debug "Running test from runtest.sh"
|
| |
- timeout --foreground "$STR_TIMEOUT" /bin/sh -e ./runtest.sh
|
| |
+ timeout --foreground "$STR_TIMEOUT" /bin/sh -e ./runtest.sh || rc=$?
|
| |
else
|
| |
echo "FAIL test $STR_BKR_TEST do not know how to run test"
|
| |
fi
|
| |
- exit
|
| |
+ terminated_outside=0
|
| |
+ exit $rc
|
| |
fi
|
| |
Why this line needs to be removed?