640235e2c2
- Some of the lib/libc and lib/thr tests fail - lib/msun/exp_test:exp2_values now passes with clang 3.8.0 The Makefiles in contrib/netbsd-tests were pruned as they have no value Sponsored by: EMC / Isilon Storage Division
158 lines
5.2 KiB
Bash
Executable File
158 lines
5.2 KiB
Bash
Executable File
# $NetBSD: t_exit.sh,v 1.6 2016/05/07 23:51:30 kre Exp $
|
|
#
|
|
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
|
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# 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 background
|
|
background_head() {
|
|
atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \
|
|
"a command in the background (PR bin/46327)"
|
|
}
|
|
background_body() {
|
|
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"
|
|
}
|
|
function_body() {
|
|
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"
|
|
}
|
|
readout_body() {
|
|
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"
|
|
}
|
|
trap_subshell_body() {
|
|
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
|
|
echo '( trap "echo exiting" 0 )' >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; 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
|
|
}
|
|
|
|
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() {
|
|
atf_add_test_case background
|
|
atf_add_test_case function
|
|
atf_add_test_case readout
|
|
atf_add_test_case trap_subshell
|
|
atf_add_test_case trap_zero__implicit_exit
|
|
atf_add_test_case trap_zero__explicit_exit
|
|
atf_add_test_case simple_exit
|
|
atf_add_test_case subshell_exit
|
|
atf_add_test_case subshell_background
|
|
}
|