From de359f8b2aa1be9127b6d27a6283c202d089cd81 Mon Sep 17 00:00:00 2001 From: Anders Blomdell Date: Thu, 10 Jul 2014 20:17:25 +0200 Subject: Add possibility to run single tests Change-Id: I9282b711c09611bd0fd4cc814f3ec34aa67d10c0 BUG: 1118453 Signed-off-by: Anders Blomdell Reviewed-on: http://review.gluster.org/8291 Tested-by: Gluster Build System Reviewed-by: Harshavardhana Reviewed-by: Humble Devassy Chirammal Reviewed-by: Vijay Bellur --- run-tests.sh | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 6 deletions(-) (limited to 'run-tests.sh') diff --git a/run-tests.sh b/run-tests.sh index 39aeab3b624..14512648c03 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -99,18 +99,85 @@ function check_user() fi } +function run_tests() +{ + declare -A DONE + match() + { + # Patterns considered valid: + # 1. full or partial file/directory names + # basic matches tests/basic + # basic/afr matches tests/basic/afr + # 2. globs + # basic/* matches all files and directories in basic + # basic/*/ matches subdirectories in basic (afr|ec) + # 3. numbered bug matching + # 884455 matches bugs/bug-884455.t + # 859927 matches bugs/859927, bugs/bug-859927.t + # 1015990 matches /bugs/bug-1015990-rep.t, bug-1015990.t + # ...lots of other cases accepted as well, since globbing is tricky. + local t=$1 + local mt=$1 + shift + local a + local match=1 + if [ -d $t ] ; then + # Allow matching on globs like 'basic/*/' + mt=$t/ + fi + for a in "$@" ; do + case "$mt" in + *$a|*/bugs/$a/|*/bugs/$a.t|*/bugs/bug-$a.t|*/bugs/bug-$a-*.t) + match=0 + ;; + esac + done + if [ "${DONE[$(dirname $t)]}" != "" ] ; then + # Parentdir is already matched + match=1 + if [ -d $t ] ; then + # Ignore subdirectory as well + DONE[$t]=$t + fi + elif [ $match -eq 0 -a -d $t ] ; then + # Make sure children of this matched directory will be ignored + DONE[$t]=$t + elif [[ -f $t && ! $t =~ .*\.t ]] ; then + # Ignore files not ending in .t + match=1 + fi + return $match + } + RES=0 + for t in $(find ${regression_testsdir}/tests | LC_COLLATE=C sort) ; do + if match $t "$@" ; then + if [ -d $t ] ; then + echo "Running tests in directory $t" + prove -rf --timer $t + elif [ -f $t ] ; then + echo "Running tests in file $t" + prove -f --timer $t + fi + TMP_RES=$? + if [ ${TMP_RES} -ne 0 ] ; then + RES=${TMP_RES} + FAILED="$FAILED $t" + fi + fi + done + if [ ${RES} -ne 0 ] ; then + echo "Failed tests ${FAILED}" + fi + return ${RES} +} + function main() { if [ $# -lt 1 ]; then echo "Running all the regression test cases" prove -rf --timer ${regression_testsdir}/tests; else - ## TODO - echo "Running single regression test.." - echo "WARNING: yet to be implemented.. exiting safely" - exit 0 - #export DEBUG=1; - #echo "Automatically setting up DEBUG=1 for this test $1"; + run_tests "$@" fi } -- cgit