8f2a4eafea
Change-Id: I717ce3cd7c867c155de149ec56623269d26d0ff7 Signed-off-by: Klement Sekera <ksekera@cisco.com>
124 lines
2.8 KiB
Bash
Executable File
124 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function usage() {
|
|
echo "$0" 1>&2
|
|
echo "" 1>&2
|
|
echo "Usage: $0 [-p <pre-exec-cmd>] [-m <email>] -- <make test options|verify>" 1>&2
|
|
echo "" 1>&2
|
|
echo "Parameters:" 1>&2
|
|
echo " -p <pre-exec-cmd> - run a command before each test loop (e.g. 'git pull')" 1>&2
|
|
echo " -m <email> - if set, email is sent to this address on failure" 1>&2
|
|
echo "" 1>&2
|
|
echo "Examples:" 1>&2
|
|
echo " $0 -m <somebody@cisco.com> -- test-debug TEST=l2bd" 1>&2
|
|
echo " $0 -m <somebody@cisco.com> -- verify" 1>&2
|
|
exit 1;
|
|
}
|
|
|
|
PRE_EXEC_CMD=""
|
|
EMAIL=""
|
|
|
|
while getopts "p:m:h" o; do
|
|
case "${o}" in
|
|
p)
|
|
PRE_EXEC_CMD=${OPTARG}
|
|
;;
|
|
m)
|
|
regex="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"
|
|
m=${OPTARG}
|
|
if [[ ! $m =~ $regex ]]
|
|
then
|
|
echo "Invalid -m parameter value: \`$m'" >&2
|
|
usage
|
|
fi
|
|
EMAIL="$m"
|
|
;;
|
|
h)
|
|
usage
|
|
;;
|
|
?)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
if ! echo $* | grep test >/dev/null
|
|
then
|
|
if ! echo $* | grep verify >/dev/null
|
|
then
|
|
echo "Error: command line doesn't look right - should contain \`test' or \`verify' token..." >&2
|
|
usage
|
|
fi
|
|
fi
|
|
|
|
function finish {
|
|
NOW=`date +%s`
|
|
RUNTIME=$((NOW - START))
|
|
AVG=$(echo "scale=2; $RUNTIME/$COUNT" | bc)
|
|
OUT="*********************************************************************"
|
|
OUT="$OUT\n* tail -n 30 $TMP:"
|
|
OUT="$OUT\n*********************************************************************"
|
|
OUT="$OUT\n`tail -n 30 $TMP`"
|
|
OUT="$OUT\n*********************************************************************"
|
|
OUT="$OUT\n* Total runtime: ${RUNTIME}s"
|
|
OUT="$OUT\n* Iterations: ${COUNT}"
|
|
OUT="$OUT\n* Average time: ${AVG}s"
|
|
OUT="$OUT\n* Log file: ${TMP}"
|
|
OUT="$OUT\n*********************************************************************"
|
|
echo -e "$OUT"
|
|
if [[ "$EMAIL" != "" && "$REASON" != "" ]]
|
|
then
|
|
SUBJECT="test loop finished ($REASON)"
|
|
echo -e "$OUT" | mail -s "$SUBJECT" $EMAIL
|
|
fi
|
|
}
|
|
|
|
trap "echo Caught signal, exiting...; REASON=\"received signal\"; finish; exit -1" SIGINT SIGTERM
|
|
|
|
TMP=`mktemp`
|
|
START=`date +%s`
|
|
COUNT=0
|
|
|
|
if ! test -f "$TMP"
|
|
then
|
|
echo "Couldn't create temporary file!"
|
|
exit -1
|
|
fi
|
|
|
|
echo "Temporary file is $TMP"
|
|
CMD="make $*"
|
|
echo "Command line is \`$CMD'"
|
|
|
|
REASON=""
|
|
while true
|
|
do
|
|
COUNT=$((COUNT+1))
|
|
BEFORE=`date +%s`
|
|
if [[ "$PRE_EXEC_CMD" != "" ]]
|
|
then
|
|
echo "Executing \`$PRE_EXEC_CMD' before test.."
|
|
if ! ($PRE_EXEC_CMD 2>&1 | tee $TMP)
|
|
then
|
|
echo "\`$PRE_EXEC_CMD' failed!" >&2
|
|
REASON="$PRE_EXEC_CMD failed"
|
|
break
|
|
fi
|
|
fi
|
|
echo -n "Running test iteration #$COUNT..."
|
|
if ! ($CMD >$TMP 2>&1)
|
|
then
|
|
AFTER=`date +%s`
|
|
RUNTIME=$((AFTER-BEFORE))
|
|
echo "FAILED! (after ${RUNTIME}s)"
|
|
REASON="test failed"
|
|
break
|
|
fi
|
|
AFTER=`date +%s`
|
|
RUNTIME=$((AFTER-BEFORE))
|
|
echo "PASSED (after ${RUNTIME}s)"
|
|
done
|
|
|
|
finish
|
|
exit 1
|