#!/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