Module Name: src Committed By: kre Date: Sun May 14 17:28:46 UTC 2017
Modified Files: src/tests/bin/sh: t_redircloexec.sh Log Message: Add a test for opening files with exec "when" in posix mode (close-on-exec should not get set.) While here, remove the (unused) runhelper() function. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/tests/bin/sh/t_redircloexec.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_redircloexec.sh diff -u src/tests/bin/sh/t_redircloexec.sh:1.3 src/tests/bin/sh/t_redircloexec.sh:1.4 --- src/tests/bin/sh/t_redircloexec.sh:1.3 Sun May 15 15:44:43 2016 +++ src/tests/bin/sh/t_redircloexec.sh Sun May 14 17:28:46 2017 @@ -1,4 +1,4 @@ -# $NetBSD: t_redircloexec.sh,v 1.3 2016/05/15 15:44:43 kre Exp $ +# $NetBSD: t_redircloexec.sh,v 1.4 2017/05/14 17:28:46 kre Exp $ # # Copyright (c) 2016 The NetBSD Foundation, Inc. # All rights reserved. @@ -39,10 +39,6 @@ mkhelper() { echo "echo ${name}2" ">&${fd}" > ./"${name}2" } -runhelper() { - ${TEST_SH} "./${1}1" -} - cleanhelper() { # not really needed, atf cleans up... rm -f ./"${1}1" ./"${1}2" out @@ -168,6 +164,77 @@ subshell_redir_open_body() { cleanhelper comp } +atf_test_case posix_exec_redir +posix_exec_redir_head() { + atf_set "descr" "Tests that redirections created by exec" \ + " in posix mode are not closed on exec" +} +posix_exec_redir_body() { + + # This test mostly just expects the opposite results than + # exec_redir_closed ... + + # First work out how to get shell into posix mode + POSIX= + + # This should succeed only if "set -o posix" succeeds. + # If it fails, whether it fails and exits the shell, or + # just returns a "false" from set (exit != 0), with or + # without errs on stderr, should not matter + + if ${TEST_SH} -c "set -o posix && exit 0 || exit 1" 2>/dev/null + then + # If we have this method, use it, as we can expect + # this really should mean the shell is in posix mode. + + POSIX='set -o posix;' + + else + # This one is just a guess, and there is no assurance + # that it will do anything at all. What's more, since + # we do not know what the shell being tested does + # differently in posix and non-posix modes, if it + # even has that concept, there's nothing we can test + # to find out. + + # A shell that always operates in posix mode (at least + # with regard to redirects on exec and close-on-exec + # should pass this test, in any case. + + POSIXLY_CORRECT=true ; export POSIXLY_CORRECT + + fi + + mkhelper exec 6 \ + "${POSIX} exec 6> out; echo exec1 >&6; ${TEST_SH} exec2; exec 6>&-" + + atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1 + atf_check -s exit:0 -o empty -e empty ${TEST_SH} -e ./exec1 + + mkhelper exec 9 \ + "${POSIX} exec 9> out; echo exec1 >&9; ${TEST_SH} exec2" + + atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1 + + mkhelper exec 8 \ + "${POSIX}" \ + "exec 8> out; printf OK; echo exec1 >&8;" \ + "printf OK; ${TEST_SH} exec2; printf GOOD" + + atf_check -s exit:0 -o match:OKOKGOOD -e empty \ + ${TEST_SH} -e ./exec1 + + mkhelper exec 7 \ + "${POSIX}" \ + "exec 7> out; printf OK; echo exec1 >&7;" \ + "printf OK; ${TEST_SH} exec2 || printf ERR" + + atf_check -s exit:0 -o match:OKOK -o not-match:ERR -e empty \ + ${TEST_SH} ./exec1 + + cleanhelper exec +} + atf_init_test_cases() { atf_add_test_case exec_redir_closed atf_add_test_case exec_redir_open @@ -175,4 +242,5 @@ atf_init_test_cases() { atf_add_test_case compound_redir_open atf_add_test_case simple_redir_open atf_add_test_case subshell_redir_open + atf_add_test_case posix_exec_redir }