aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test-runner/include/logapi.shlib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-runner/include/logapi.shlib')
-rw-r--r--tests/test-runner/include/logapi.shlib35
1 files changed, 29 insertions, 6 deletions
diff --git a/tests/test-runner/include/logapi.shlib b/tests/test-runner/include/logapi.shlib
index 3c8324d57..86a345b7a 100644
--- a/tests/test-runner/include/logapi.shlib
+++ b/tests/test-runner/include/logapi.shlib
@@ -165,6 +165,29 @@ function log_mustnot_expect
(( $? != 0 )) && log_fail
}
+# Exit status encoding is platform-dependent
+case $(uname) in
+Darwin|FreeBSD)
+ EXIT_SIGNAL=128
+ SIGBUS=10
+ SIGSEGV=11
+ ;;
+illumos)
+ EXIT_SIGNAL=256
+ SIGBUS=7
+ SIGSEGV=11
+ ;;
+Linux|*)
+ EXIT_SIGNAL=128
+ SIGBUS=7
+ SIGSEGV=11
+ ;;
+esac
+EXIT_SUCCESS=0
+EXIT_NOTFOUND=127
+EXIT_SIGBUS=$((EXIT_SIGNAL + SIGBUS))
+EXIT_SIGSEGV=$((EXIT_SIGNAL + SIGSEGV))
+
# Execute and print command with status where success equals non-zero result
# or output includes expected keyword
#
@@ -191,19 +214,19 @@ function log_neg_expect
out="cat $logfile"
# unexpected status
- if (( $status == 0 )); then
+ if (( $status == EXIT_SUCCESS )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status"
# missing binary
- elif (( $status == 127 )); then
+ elif (( $status == EXIT_NOTFOUND )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (File not found)"
- # bus error - core dump (256+signal, SIGBUS=7)
- elif (( $status == 263 )); then
+ # bus error - core dump
+ elif (( $status == EXIT_SIGBUS )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (Bus Error)"
- # segmentation violation - core dump (256+signal, SIGSEGV=11)
- elif (( $status == 267 )); then
+ # segmentation violation - core dump
+ elif (( $status == EXIT_SIGSEGV )); then
print -u2 $($out)
_printerror "$@" "unexpectedly exited $status (SEGV)"
else