## - OUTPUT : Summary of test results to stdout. Exit code of 0 if success, non-zero if not success.
## @section CREATEINFO Code information
## - Initial date : 2018/06/22
-## - Version : 1.0.0
+## - Version : 1.4.0
TARGET=$(pwd)
+TARGET_ASSIGNED=0
BASEPATH=`dirname "$0"`
BASENAME=`basename "$0"`
TESTCASE="runTest.sh"
+SUMMARYFILENAME=""
+VERSION="1.4.0"
#
SILENT=1
-PROGRESS=0
+PROGRESSLOGLEVEL=0
+COUNTNEGATIVE=0
+COUNTNEGATIVEPOSTFIX=""
+VALGRIND=0
+VALGRIND_SUPPRESSION=""
date=`date +"%b %d %Y"`
## @fn createTemplate()
key="$1"
case $key in
-h|--help)
- printf "usage: ${BASENAME} [--help] [<path>] [--testcase <filename>] [--nocolor] [--showstdout] [--createtemplate]\n\n"
+ printf "usage: ${BASENAME} [--help] [<path>] [--testcase <filename>] [--nocolor] [--showstdout] [--createtemplate] [--countnegative <postfix>] [--enable-valgrind] [--valgrind-suppression <filepath>] [--version]\n\n"
printf "These are common ${Red}ssat${NC} commands used:\n\n"
printf "Test all test-groups in the current ($(pwd)) directory, recursively\n"
printf " (no options specified)\n"
printf " --createtemplate or -c\n"
printf "\n"
printf "Show progress during execution\n"
- printf " --progress or -p\n"
+ printf " --progress or -p or -p=(0,1,9)\n"
+ printf " '0' : Do not print logs in progress. If -p is not given, -p=0 is assumed.\n"
+ printf " '1' : Print test group names only in progress.\n"
+ printf " '2-9' : Print all logs in progress. If -p is given without numbers, -p=9 is used.\n"
+ printf " $ ${BASENAME} -p=1\n"
+ printf " $ ${BASENAME} --progress=9 (equal to --progress) \n"
+ printf "\n"
+ printf "Enable valgrind to perform memcheck\n"
+ printf " --enable-valgrind or -vg\n"
+ printf "\n"
+ printf "Suppress valgrind errors with the given suppression file\n"
+ printf " --valgrind-suppression <path to the suppression file>\n"
+ printf " or \n"
+ printf " -vs <path to the suppression file>\n"
printf "\n"
printf "Shows this message\n"
printf " --help or -h\n"
printf " $ ${BASENAME} --help \n"
+ printf "\n"
+ printf "Count negative test cases with the given postfix\n"
+ printf " --countnegative or -cn\n"
+ printf " $ ${BASENAME} --countnegative _n\n"
+ printf " $ ${BASENAME} -cn _n\n"
+ printf "\n"
+ printf "Write result summary as a file\n"
+ printf " --summary <filename>\n"
+ printf "\n"
+ printf "Show the version\n"
+ printf " --version or -v\n"
printf "\n\n"
exit 0
;;
shift
shift
;;
+ -cn|--countnegative)
+ COUNTNEGATIVE=1
+ COUNTNEGATIVEPOSTFIX="$2"
+ if [[ "${COUNTNEGATIVEPOSTFIX}" == "" ]]
+ then
+ printf "${BASENAME} -cn or --countnegative requires postfix.\n\n"
+ exit -2
+ fi
+ shift
+ shift
+ ;;
-s|--showstdout)
SILENT=0
shift
createTemplate
shift
;;
- -p|--progress)
- PROGRESS=1
+ -p|-p=*|--progress|--progress=*)
+ if [[ $key == "-p" || $key == "--progress" ]]
+ then
+ PROGRESSLOGLEVEL=9
+ printf "Progress Log level is not given. Print all logs in progress.\n"
+ else
+ PROGRESSLOGLEVEL=${key#*=}
+ printf "Given progress log level is ${PROGRESSLOGLEVEL}.\n"
+ fi
+ shift
+ ;;
+ -vg|--enable-valgrind)
+ VALGRIND=1
+ shift
+ ;;
+ -vs|--valgrind-suppression)
+ VALGRIND_SUPPRESSION=" --suppressions=$2 "
+ shift
+ shift
+ ;;
+ --summary)
+ SUMMARYFILENAME="$2"
+ shift
+ shift
+ ;;
+ --version|-v)
+ printf "${VERSION}\n"
+ exit 0
shift
;;
*) # Unknown, which is probably target (the path to root-dir of test groups).
- TARGET="$1"
+ # If this is the second occurrence, ignore it.
+ # Assume that the previous string is path and the later string is an invalid argument.
+ if [ $TARGET_ASSIGNED -eq 0 ]
+ then
+ TARGET="$1"
+ TARGET_ASSIGNED=1
+ fi
shift
esac
done
TNtc=0
TNtcpass=0
TNtcfail=0
+TNtcignore=0
+TNtcneg=0
TNgroup=0
TNgrouppass=0
TNgroupfail=0
Ntc=0
Npass=0
Nfail=0
+ Nneg=0
tmpfile=$(mktemp)
- if [[ "$PROGRESS" -eq "1" ]]; then
+ if [[ ${PROGRESSLOGLEVEL} -ge 1 ]]; then
printf "[Starting] $CASENAME\n"
fi
pushd $CASEBASEPATH > /dev/null
Ntc=$1
Npass=$2
Nfail=$3
+ Nignore=$4
+ Nneg=$5
unset IFS
TNtc=$((TNtc+Ntc))
TNtcpass=$((TNtcpass+Npass))
TNtcfail=$((TNtcfail+Nfail))
+ TNtcignore=$((TNtcignore+Nignore))
+ TNtcneg=$((TNtcneg+Nneg))
TNgroup=$((TNgroup+1))
if [[ "$retcode" -eq "0" ]]
groupLog="${groupLog}${Red}[FAILED]${NC} ${Blue}${CASENAME}${NC} ($Npass passed among $Ntc cases)\n"
fi
+ printf "$log\n"
+ log=""
done < <(find $TARGET -name $TESTCASE -print0)
printf "\n\n==================================================\n\n"
-printf "$log\n"
printf "==================================================\n\n"
printf "$groupLog"
printf "==================================================\n"
+ADDITIONALSTRING=""
+ADDITIONALSUMMARY=""
+if (( ${COUNTNEGATIVE} == 1 ))
+then
+ total=$((TNtcpass+TNtcfail+TNtcignore))
+ pos=$((total-TNtcneg))
+ ADDITIONALSTRING="${ADDITIONALSTRING} | Positive: ${pos} / Negative: ${TNtcneg}"
+ ADDITIONALSUMMARY="${ADDITIONALSUMMARY}, negative=${TNtcneg}"
+fi
+
+if [ "${SUMMARYFILENAME}" != "" ]
+then
+ echo "passed=${TNtcpass}, failed=${TNtcfail}, ignored=${TNtcignore}${ADDITIONALSUMMARY}" > "${SUMMARYFILENAME}"
+fi
if (( ${TNgroupfail} == 0 ))
then
printf "${LightGreen}[PASSED] ${Blue}All Test Groups (${TNgroup}) Passed!${NC}\n"
- printf " TC Passed: ${TNtcpass} / Failed: ${TNtcfail}\n\n";
+ printf " TC Passed: ${TNtcpass} / Failed: ${TNtcfail} / Ignored: ${TNtcignore} ${ADDITIONALSTRING}\n\n";
exit 0
else
printf "${Red}[FAILED] ${Purple}There are failed test groups! (${TNgroupfail})${NC}\n"
- printf " TC Passed: ${TNtcpass} / Failed: ${TNtcfail}\n\n";
+ printf " TC Passed: ${TNtcpass} / Failed: ${TNtcfail} / Ignored: ${TNtcignore} ${ADDITIONALSTRING}\n\n";
exit 1
fi
# gather reports & publish them.