#!/bin/bash
## CONFIG ##
export dtf_resultdir=${dtf_resultdir_override-/var/tmp/dtf}
export dtf_srcdir=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
export dtf_testdir=${dtf_testdir-$dtf_srcdir}
export dtf_resultxml_file=/var/tmp/dtf.xml
export dtf_option_verbose=0
export dtf_option_force=0
export dtf_option_testids=""
export dtf_option_listonly=0
. $dtf_srcdir/lib.sh
## F.DEFS ##
info()
{
echo " * $@"
}
die()
{
echo "$@" >&2
exit 1
}
# run TESTDIR
# -----------
# source the $TESTDIR/runtest.sh
run()
{
export dtf_workdir=$1
export dtf_test_id=`basename $dtf_workdir`
dtf_resultxml_cache "$( cd $dtf_workdir
. ./config.sh
echo ""
echo "$DTF_TEST_ID"
echo ""
echo "$DTF_TEST_DESCRIPTION"
echo ""
)"
( cd $dtf_workdir
outlog="$dtf_resultdir/$dtf_test_id.log"
output_wrapper="cat > $outlog"
test $dtf_option_verbose = 1 \
&& output_wrapper="tee $outlog"
test ! -e ./config.sh -o ! -e ./config.sh \
&& echo "can not find one of {config,runtest}.sh" \
&& exit 1
. ./config.sh
if test "$dtf_option_listonly" -eq 1; then
echo $DTF_TEST_ID
exit 0
fi
if test -n "$dtf_option_testids"; then
[[ "$dtf_option_testids" = *\ $DTF_TEST_ID\ * ]] || exit 0
fi
printf "%-40s" "RUN $DTF_TEST_ID ..."
set -o pipefail
( . $dtf_srcdir/lib.sh || exit 1
. ./config.sh
. ./runtest.sh
rv=$?
test -n "$DTF_RESULT_TARBALL" \
&& cp "$DTF_RESULT_TARBALL" $dtf_resultdir/$dtf_test_id.tar.gz
exit $rv
) 2>&1 | eval $output_wrapper
rv=$?
test $rv -eq 0 && echo "[ OK ]" || echo "[ FAIL ]"
exit $rv
)
}
prepare_resultdir()
{
if test -e "$dtf_resultdir"; then
test $dtf_option_force -eq 0 && die "result dir $dtf_resultdir exits"
rm -rf $dtf_resultdir || die "can not remove $dtf_resultdir"
fi
mkdir -p "$dtf_resultdir" || die "can not create $dtf_resultdir"
}
show_help()
{
cat <&2
Usage: $0 [OPTIONS]
Script is aimed to perform set of tests in subdirectories.
Options:
--force Overwrite result dir if exists
--listonly List the available test ids
--testid=TESTID Perform this test only
--verbose Show complete output from each test
--help Show this help
EOHELP
test -n "$1" && exit $1
}
longopts="verbose,help,force,testid:,listonly"
ARGS=`getopt -o "v" -l "$longopts" -n "getopt" -- "$@"`
if [ $? -ne 0 ]; then
echo "getopt error"
exit 1
fi
eval set -- "$ARGS"
while true; do
case "$1" in
--verbose)
dtf_option_verbose=1
shift
;;
--force)
dtf_option_force=1
shift
;;
--listonly)
dtf_option_listonly=1
shift
;;
--testid)
dtf_option_testids="$dtf_option_testids $2 "
shift 2
;;
--help)
show_help 0
;;
--)
shift
break
;;
esac
done
test $dtf_option_listonly -ne 1 && prepare_resultdir
dtf_resultxml_init "$dtf_resultxml_file"
result=0
for i in `find $dtf_testdir -name runtest.sh`; do
testdir=`dirname $i`
run $testdir || result=1
test $result -eq 0 \
&& dtf_resultxml_cache "Success" \
|| dtf_resultxml_cache "Fail"
done
dtf_resultxml_finish
exit $result