taskwarrior/test/run_all.in
2015-05-06 14:44:35 -04:00

149 lines
3.3 KiB
Bash
Executable file

#! /bin/sh
# Look for taskd in $PATH instead of task/src/
export TASKD_USE_PATH=1
rc=0
if [ x"$1" = x"--verbose" ];
then
for i in ${TESTBLOB}
do
if [ -x "$i" ]; then
echo '#' $i
$i > test.log 2>&1
while read LINE
do
echo "$LINE"
done < test.log
if [ $? -ne 0 ]; then
rc=1
fi
rm test.log
else
echo "# Skipping $(basename $i) execute bit not set"
fi
done
exit $rc
elif [ "$1" = "--fast" ]; then
# Useful for faster local testing, might not be portable. Use at own risk.
# Results in (almost) the exact same "all.log" as a normal run.
# Ordering is off, but could easily be adjusted to be the same.
date > all.log
# Perl is used here to get the time in seconds
# because 'date +%s' isn't supported on Solaris.
STARTEPOCH=`perl -e 'print time'`
if [ -f "_run_all_parallel.txt" ]; then
rm _run_all_parallel.txt
fi
if [ -f "_run_all_serial.txt" ]; then
rm _run_all_serial.txt
fi
for i in *.runlog; do
# Ugly hack. :)
if [ -f "$i" ]; then
rm *.runlog
fi
break
done
for i in ${TESTBLOB}; do
if [ -x "$i" ]; then
# Only Python tests are guaranteed to run isolated.
if head -c 21 "$i" | grep -q '#!/usr/bin/env python'; then
echo $i >> _run_all_parallel.txt
else
echo $i >> _run_all_serial.txt
fi
else
echo "# Skipping $(basename $i) execute bit not set" >> all.log 2>&1
fi
done
while read i; do
echo '#' $i >>all.log
$i >> all.log 2>&1
if [ $? -ne 0 ]; then
rc=1
fi
done < _run_all_serial.txt
if command -v getconf >/dev/null 2>&1; then
numprocs=$(getconf _NPROCESSORS_ONLN)
numprocs=$((numprocs+1))
else
numprocs=2
fi
cat _run_all_parallel.txt | xargs -n 1 -P $numprocs sh -c 'echo "#" $0 > $0.runlog; $0 >> $0.runlog 2>&1'
if [ $? -ne 0 ]; then
rc=1
fi
cat *.runlog >> all.log
date >> all.log
ENDEPOCH=`perl -e 'print time'`
RUNTIME=`expr $ENDEPOCH - $STARTEPOCH`
printf "Pass: %5d\n" `grep -c '^ok' all.log`
printf "Fail: %5d\n" `grep -c '^not' all.log`
printf "Skipped: %5d\n" `grep -c '^skip' all.log`
printf "Runtime: %5d seconds\n" $RUNTIME
exit $rc
else
date > all.log
# Perl is used here to get the time in seconds
# because 'date +%s' isn't supported on Solaris.
STARTEPOCH=`perl -e 'print time'`
VRAMSTEG=`which vramsteg 2>/dev/null`
BAR=0
if [ -x "$VRAMSTEG" ]; then
BAR=1
COUNT=0
TOTAL=`ls ${TESTBLOB} | wc -l`
START=`$VRAMSTEG --now`
fi
for i in ${TESTBLOB}
do
if [ -x "$i" ]; then
echo '#' $i >>all.log
$i >> all.log 2>&1
if [ $? -ne 0 ]; then
rc=1
fi
else
echo "# Skipping $(basename $i) execute bit not set" >> all.log 2>&1
fi
if [ $BAR -eq 1 ]; then
$VRAMSTEG --label 'All tests' --min 0 --max $TOTAL --current $COUNT --percentage --start $START --estimate
COUNT=`expr $COUNT + 1`
fi
done
if [ $BAR -eq 1 ]; then
$VRAMSTEG --remove
fi
date >> all.log
ENDEPOCH=`perl -e 'print time'`
RUNTIME=`expr $ENDEPOCH - $STARTEPOCH`
printf "Pass: %5d\n" `grep -c '^ok' all.log`
printf "Fail: %5d\n" `grep -c '^not' all.log`
printf "Skipped: %5d\n" `grep -c '^skip' all.log`
printf "Runtime: %5d seconds\n" $RUNTIME
exit $rc
fi