#!/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" { echo "---" echo "exit_status: $rv" echo "finished: \"$(date)\"" } >> "$dtf_resultdir/$dtf_test_id.result" 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 while read i; do testdir=$(dirname "$i") run "$testdir" || result=1 if test $result -eq 0; then dtf_resultxml_cache "Success" else dtf_resultxml_cache "Fail" fi done <<<"$(find "$dtf_testdir" -name runtest.sh)" dtf_resultxml_finish exit $result