diff options
author | Pádraig Brady <P@draigBrady.com> | 2015-01-13 03:30:33 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2015-01-14 12:20:32 +0000 |
commit | 58cff8a009ed9b8280c5f35074cef97231286023 (patch) | |
tree | 771e8b3fa70fab99b548790931803b75dd272603 /tests/id | |
parent | 924b1cadff3f2782475516d7eca9aabe856dbf0f (diff) | |
download | coreutils-58cff8a009ed9b8280c5f35074cef97231286023.tar.xz |
tests: add extra protection against unexpected exits
Many tests use `program ... && fail=1` to ensure expected
error situations are indicated. However that would mask
an unexpected exit (like a crash). Therefore explicitly
check the expected exit code.
Note where error messages are also verified, the extra
protection is not added.
* tests/init.sh (returns_): A new helper function to
check the return code of a command, and used
throughout the tests.
* cfg.mk (sc_prohibit_and_fail_1): Add a syntax check
to avoid new instances of this issue.
Diffstat (limited to 'tests/id')
-rwxr-xr-x | tests/id/context.sh | 7 | ||||
-rwxr-xr-x | tests/id/gnu-zero-uids.sh | 2 | ||||
-rwxr-xr-x | tests/id/uid.sh | 2 | ||||
-rwxr-xr-x | tests/id/zero.sh | 6 |
4 files changed, 11 insertions, 6 deletions
diff --git a/tests/id/context.sh b/tests/id/context.sh index 754d0c3ba..b1aefe73f 100755 --- a/tests/id/context.sh +++ b/tests/id/context.sh @@ -26,7 +26,10 @@ id | grep context= >/dev/null || fail=1 # Check with specified user, no context string should be present. # But if the current user is nameless, skip this part. -id -nu > /dev/null \ - && id $(id -nu) | grep context= >/dev/null && fail=1 +name=$(id -nu) || { test $? -ne 1 && fail=1; } +if test "$name"; then + id "$name" > id_name || fail=1 + grep context= id_name >/dev/null && fail=1 +fi Exit $fail diff --git a/tests/id/gnu-zero-uids.sh b/tests/id/gnu-zero-uids.sh index edd74f7dd..c2ee6cfb3 100755 --- a/tests/id/gnu-zero-uids.sh +++ b/tests/id/gnu-zero-uids.sh @@ -24,6 +24,6 @@ require_gnu_ sush - true || skip_ "the 'sush' command does not work" # Run 'id' with zero UIDs. It should exit with a non-zero status. -sush - id > out && fail=1 +returns_ 1 sush - id > out || fail=1 Exit $fail diff --git a/tests/id/uid.sh b/tests/id/uid.sh index c0766b321..e7a838586 100755 --- a/tests/id/uid.sh +++ b/tests/id/uid.sh @@ -22,7 +22,7 @@ uid=$(id -u) || fail=1 user=$(id -nu) || fail=1 # Ensure the empty user spec is discarded -id '' && fail=1 +returns_ 1 id '' || fail=1 for mode in '' '-G' '-g'; do id $mode $user > user_out || fail=1 # lookup name for comparison diff --git a/tests/id/zero.sh b/tests/id/zero.sh index a67a789e2..7bee3a644 100755 --- a/tests/id/zero.sh +++ b/tests/id/zero.sh @@ -51,8 +51,10 @@ while read u ; do printf '\n%s: ' "id -${o}${n}[z] $u" >> out || framework_failure_ # There may be no name corresponding to an id, so don't check # exit status when in name lookup mode - id -${o}${n} $u >> exp || { test -z "$n" && fail=1; } - id -${o}${n}z $u > tmp || { test -z "$n" && fail=1; } + id -${o}${n} $u >> exp || + { test $? -ne 1 || test -z "$n" && fail=1; } + id -${o}${n}z $u > tmp || + { test $? -ne 1 || test -z "$n" && fail=1; } head -c-1 < tmp >> out || framework_failure_ done done |