diff options
Diffstat (limited to 'tests/tester.sh')
-rwxr-xr-x | tests/tester.sh | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/tester.sh b/tests/tester.sh new file mode 100755 index 0000000..bb49609 --- /dev/null +++ b/tests/tester.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# +# tester.sh - reads testcases from file and tests busybox applets vs GNU +# counterparts +# + +# set up defaults (can be changed with cmd-line options) +BUSYBOX=../busybox +TESTCASES=testcases +LOGFILE=tester.log +BB_OUT=bb.out +GNU_OUT=gnu.out +SETUP="" +CLEANUP="" + +# internal-use vars +fail_only=0 + + +while getopts 'p:t:l:b:g:s:c:f' opt +do + case $opt in + p) BUSYBOX=$OPTARG; ;; + t) TESTCASES=$OPTARG; ;; + l) LOGFILE=$OPTARG; ;; + b) BB_OUT=$OPTARG; ;; + g) GNU_OUT=$OPTARG; ;; + s) SETUP=$OPTARG; ;; + c) CLEANUP=$OPTARG; ;; + f) fail_only=1; ;; + *) + echo "usage: $0 [-ptlbgsc]" + echo " -p PATH path to busybox executable" + echo " -t FILE run testcases in FILE" + echo " -l FILE log test results in FILE" + echo " -b FILE store temporary busybox output in FILE" + echo " -g FILE store temporary GNU output in FILE" + echo " -s FILE (setup) run commands in FILE before testcases" + echo " -c FILE (cleanup) run commands in FILE after testcases" + echo " -f display only testcases that fail" + exit 1 + ;; + esac +done +#shift `expr $OPTIND - 1` + + +# do normal setup +[ -e $LOGFILE ] && rm $LOGFILE +unalias -a # gets rid of aliases that might create different output + +# do extra setup (if any) +if [ ! -z $SETUP ] +then + echo "running setup commands in $SETUP" + sh $SETUP + # XXX: Would 'eval' or 'source' work better instead of 'sh'? +fi + + +# go through each line in the testcase file +cat $TESTCASES | while read line +do + #echo $line + # only process non-blank lines and non-comment lines + if [ "$line" ] + then + if [ `echo "$line" | cut -c1` != "#" ] + then + [ $fail_only -eq 0 ] && echo "testing: $line" | tee -a $LOGFILE + + # test if the applet was compiled into busybox + applet=`echo $line | cut -d' ' -f1` + $BUSYBOX 2>&1 | grep -qw $applet + if [ $? -eq 1 ] + then + echo "WHOOPS: $applet not compiled into busybox" | tee -a $LOGFILE + else + $BUSYBOX $line > $BB_OUT + $line > $GNU_OUT + diff -q $BB_OUT $GNU_OUT > /dev/null + if [ $? -eq 1 ] + then + echo "FAILED: $line" | tee -a $LOGFILE + diff -u $BB_OUT $GNU_OUT >> $LOGFILE + fi + fi + fi + fi +done + +echo "Finished. Results are in $LOGFILE" + + +# do normal cleanup +rm -f $BB_OUT $GNU_OUT + +# do extra cleanup (if any) +if [ ! -z $CLEANUP ] +then + echo "running cleanup commands in $CLEANUP" + sh $CLEANUP + # XXX: Would 'eval' or 'source' work better instead of 'sh'? +fi |