diff options
-rwxr-xr-x | bin/dtf-gen | 6 | ||||
-rw-r--r-- | share/dtf/lib/default | 39 | ||||
-rw-r--r-- | share/dtf/tpl/run.tpl | 8 |
3 files changed, 41 insertions, 12 deletions
diff --git a/bin/dtf-gen b/bin/dtf-gen index 19393fe..67247a2 100755 --- a/bin/dtf-gen +++ b/bin/dtf-gen @@ -1,4 +1,4 @@ -#! /bin/bash +#! /bin/sh ## Some important facts about this code. ## @@ -37,12 +37,10 @@ generate_wrapper () test "$fix_testname" = '.' && fix_testname=ROOT fix_testname=${fix_testname##./} - echo '#! /bin/bash + echo '#! /bin/sh : ${__DTF_TOP_TEST=:} -$__DTF_TOP_TEST && exec 3>&1 4>&2 - abs_dirname () { abs_dirname_result=`cd "$1" && pwd` diff --git a/share/dtf/lib/default b/share/dtf/lib/default index 6c53c40..3d9bb9e 100644 --- a/share/dtf/lib/default +++ b/share/dtf/lib/default @@ -1,9 +1,9 @@ -#! /bin/bash +#! /bin/sh # Global library file. Methods prefixed by '__dtf_' are internal, for example # __dtf_is_testdir. Other methods prefixed by 'dtf_' are API. -: ${SHELL=/bin/bash} +: ${SHELL=/bin/sh} __dtf_is_testdir () @@ -18,6 +18,13 @@ __dtf_is_testdir () } +__dtf_internal_fail () +{ + __dtf_control_msg "internal fail: $*" + __dtf_rc=1 +} + + __dtf_run_testcase () { resultdir="$outputdir/$testname" @@ -34,18 +41,36 @@ __dtf_run_testcase () "$@" shift + __save_rc=1 if $__DTF_TOP_TEST; then eval "$@" 4>&2 3>&1 \ 2>> "$stderr" \ 1>> "$stdout" + __save_rc=$? else - # TODO: avoid bashishm - eval "$@" \ - 2> >(tee -a "$stderr" >&2) \ - 1> >(tee -a "$stdout") + for _d_i in stdout stderr + do + _d_fifo=$resultdir/fifo-$_d_i + eval "_d_fifo_$_d_i=\$_d_fifo" + test -e "$_d_fifo" && continue + mkfifo "$_d_fifo" && continue + __dtf_internal_fail "can't create $_d_fifo fifo" + return 1 + done + + tee -a "$stdout" < "$_d_fifo_stdout" >&1 & + tee -a "$stderr" < "$_d_fifo_stderr" >&2 & + + eval "$@" 2> $_d_fifo_stderr >$_d_fifo_stdout + __save_rc=$? + + rm "$_d_fifo_stdout" "$_d_fifo_stderr" || { + __dtf_internal_fail "can't remove fifos" + return 1 + } fi - case $? in + case $__save_rc in 0|77) return 0 ;; diff --git a/share/dtf/tpl/run.tpl b/share/dtf/tpl/run.tpl index 663e302..0495675 100644 --- a/share/dtf/tpl/run.tpl +++ b/share/dtf/tpl/run.tpl @@ -1,8 +1,14 @@ -#! /bin/bash -x +#! /bin/sh # vi: ft=sh test -z "$outputdir" && outputdir="$PWD/DTF_RESULT" +$__DTF_TOP_TEST && { + exec 3>&1 4>&2 + rm -rf "$outputdir" +} + + . "$top_srcdir/library" __dtf_rc=0 |