summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/dtf-gen6
-rw-r--r--share/dtf/lib/default39
-rw-r--r--share/dtf/tpl/run.tpl8
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