Module Name: src Committed By: christos Date: Wed Feb 24 14:42:06 UTC 2016
Modified Files: src/tests/bin/sh: t_exit.sh t_wait.sh Log Message: Test improvements from kre To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/bin/sh/t_exit.sh \ src/tests/bin/sh/t_wait.sh Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/bin/sh/t_exit.sh diff -u src/tests/bin/sh/t_exit.sh:1.3 src/tests/bin/sh/t_exit.sh:1.4 --- src/tests/bin/sh/t_exit.sh:1.3 Fri Apr 13 02:12:32 2012 +++ src/tests/bin/sh/t_exit.sh Wed Feb 24 09:42:06 2016 @@ -1,4 +1,4 @@ -# $NetBSD: t_exit.sh,v 1.3 2012/04/13 06:12:32 jruoho Exp $ +# $NetBSD: t_exit.sh,v 1.4 2016/02/24 14:42:06 christos Exp $ # # Copyright (c) 2007 The NetBSD Foundation, Inc. # All rights reserved. @@ -24,74 +24,139 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # +# the implementation of "sh" to test +: ${TEST_SH:="/bin/sh"} -crud() { - test yes = no - - cat <<EOF -$? -EOF -} atf_test_case background background_head() { atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \ - "a command in the background (PR bin/46327)" + "a command in the background (PR bin/46327)" } background_body() { - atf_check -s exit:0 -o ignore -e ignore -x "true; true & echo $?" - atf_check -s exit:0 -o ignore -e ignore -x "false; true & echo $?" + atf_check -o match:0 -e empty "${TEST_SH}" -c 'true; true & echo $?' + # atf_expect_fail "PR bin/46327" (now fixed?) + atf_check -o match:0 -e empty "${TEST_SH}" -c 'false; true & echo $?' } atf_test_case function function_head() { - atf_set "descr" "Tests that \$? is correctly updated inside" \ - "a function" + atf_set "descr" "Tests that \$? is correctly updated inside " \ + "a function" } function_body() { - foo=`crud` - atf_check_equal 'x$foo' 'x1' + atf_check -s exit:0 -o match:STATUS=1-0 -e empty \ + "${TEST_SH}" -c ' + crud() { + test yes = no + + cat <<-EOF + STATUS=$? + EOF + } + foo=$(crud) + echo "${foo}-$?" + ' } atf_test_case readout readout_head() { - atf_set "descr" "Tests that \$? is correctly updated in a" \ - "compound expression" + atf_set "descr" "Tests that \$? is correctly updated in a " \ + "compound expression" } readout_body() { - atf_check_equal '$( true && ! true | false; echo $? )' '0' + atf_check -s exit:0 -o match:0 -e empty \ + "${TEST_SH}" -c 'true && ! true | false; echo $?' } atf_test_case trap_subshell trap_subshell_head() { - atf_set "descr" "Tests that the trap statement in a subshell" \ - "works when the subshell exits" + atf_set "descr" "Tests that the trap statement in a subshell " \ + "works when the subshell exits" } trap_subshell_body() { - atf_check -s eq:0 -o inline:'exiting\n' -x \ - '( trap "echo exiting" EXIT; /usr/bin/true )' + atf_check -s exit:0 -o inline:'exiting\n' -e empty \ + ${TEST_SH} -c '( trap "echo exiting" EXIT; /usr/bin/true )' } atf_test_case trap_zero__implicit_exit +trap_zero__implicit_exit_head() { + atf_set "descr" "Tests that the trap statement in a subshell in a " \ + "script works when the subshell simply runs out of commands" +} trap_zero__implicit_exit_body() { - # PR bin/6764: sh works but ksh does not" + # PR bin/6764: sh works but ksh does not echo '( trap "echo exiting" 0 )' >helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh + atf_check -s exit:0 -o match:exiting -e empty "${TEST_SH}" helper.sh + # test ksh by setting TEST_SH to /bin/ksh and run the entire set... + # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh } atf_test_case trap_zero__explicit_exit +trap_zero__explicit_exit_head() { + atf_set "descr" "Tests that the trap statement in a subshell in a " \ + "script works when the subshell executes an explicit exit" +} trap_zero__explicit_exit_body() { - echo '( trap "echo exiting" 0; exit )' >helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh + echo '( trap "echo exiting" 0; exit; echo NO_NO_NO )' >helper.sh + atf_check -s exit:0 -o match:exiting -o not-match:NO_NO -e empty \ + "${TEST_SH}" helper.sh + # test ksh by setting TEST_SH to /bin/ksh and run the entire set... + # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh } +# Is return really defined to operate other than in functions (& '.') ?? atf_test_case trap_zero__explicit_return +trap_zero__explicit_return_head() { + atf_set "descr" "Tests that the trap statement in a subshell in a " \ + "script works when the subshell executes a return" +} trap_zero__explicit_return_body() { - echo '( trap "echo exiting" 0; return )' >helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh - atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh + echo '( trap "echo exiting" 0; return; echo NO_NO_NO )' >helper.sh + atf_expect_fail "return from a sub-shell not defined and does not work" + atf_check -s exit:0 -o match:exiting -o not-match:NO_NO -e empty \ + "${TEST_SH}" helper.sh + # test ksh by setting TEST_SH to /bin/ksh and run the entire set... + # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh +} + +atf_test_case simple_exit +simple_exit_head() { + atf_set "descr" "Tests that various values for exit status work" +} +# Note: ATF will not allow tests of exit values > 255, even if they would work +simple_exit_body() { + for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255 + do + atf_check -s exit:$N -o empty -e empty \ + "${TEST_SH}" -c "exit $N; echo FOO; echo BAR >&2" + done +} + +atf_test_case subshell_exit +subshell_exit_head() { + atf_set "descr" "Tests that subshell exit status works and \$? gets it" +} +# Note: ATF will not allow tests of exit values > 255, even if they would work +subshell_exit_body() { + for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255 + do + atf_check -s exit:0 -o empty -e empty \ + "${TEST_SH}" -c "(exit $N); test \$? -eq $N" + done +} + +atf_test_case subshell_background +subshell_background_head() { + atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \ + "a subshell in the background" +} +subshell_background_body() { + atf_check -o match:0 -e empty \ + "${TEST_SH}" -c 'true; (false || true) & echo $?' + # atf_expect_fail "PR bin/46327" (now fixed?) + atf_check -o match:0 -e empty \ + "${TEST_SH}" -c 'false; (false || true) & echo $?' } atf_init_test_cases() { @@ -102,4 +167,7 @@ atf_init_test_cases() { atf_add_test_case trap_zero__implicit_exit atf_add_test_case trap_zero__explicit_exit atf_add_test_case trap_zero__explicit_return + atf_add_test_case simple_exit + atf_add_test_case subshell_exit + atf_add_test_case subshell_background } Index: src/tests/bin/sh/t_wait.sh diff -u src/tests/bin/sh/t_wait.sh:1.3 src/tests/bin/sh/t_wait.sh:1.4 --- src/tests/bin/sh/t_wait.sh:1.3 Wed Sep 30 02:08:36 2015 +++ src/tests/bin/sh/t_wait.sh Wed Feb 24 09:42:06 2016 @@ -1,4 +1,4 @@ -# $NetBSD: t_wait.sh,v 1.3 2015/09/30 06:08:36 ozaki-r Exp $ +# $NetBSD: t_wait.sh,v 1.4 2016/02/24 14:42:06 christos Exp $ # # Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. # All rights reserved. @@ -24,6 +24,8 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # +# the implementation of "sh" to test +: ${TEST_SH:="/bin/sh"} atf_test_case individual individual_head() { @@ -50,7 +52,7 @@ fi exit 0 EOF - output=$(/bin/sh individualhelper.sh) + output=$("${TEST_SH}" individualhelper.sh) [ $? -eq 0 ] || atf_fail "${output}" rm -f individualhelper.sh } @@ -66,13 +68,15 @@ kill_body() { local z=/tmp/killhelper.$$ local pid= - cat >$s <<\EOF -#!/bin/sh + sed 's!${SH}!'"${TEST_SH}!" >$s <<\EOF +#! ${SH} trap "echo SIGHUP" 1 -sleep 10 & +(sleep 5; exit 3) & sl=$! wait -echo $? +S=$? +echo $S +while [ $S -ne 0 ] && [ $S != 127 ]; do wait $sl; S=$?; echo $S; done EOF chmod +x $s @@ -82,11 +86,11 @@ EOF # XXX: built-in kill does not work? /bin/kill -HUP $pid - sleep 1 + wait output="$(cat $z | tr '\n' ' ')" - rm -f $s $z - if [ "$output" != "SIGHUP 129 " ]; then + # rm -f $s $z + if [ "$output" != "SIGHUP 129 3 127 " ]; then atf_fail "${output} != 'SIGHUP 129 '" fi }