From c75f83d8740c57cd498056d43170cbdca0729275 Mon Sep 17 00:00:00 2001 From: Mark Whitley Date: Tue, 13 Mar 2001 23:30:18 +0000 Subject: Some new testcases, some improvements to the tester.sh script. --- tests/testcases | 114 ++++++++++++++++++++++++++++++++++---------------------- tests/tester.sh | 102 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 146 insertions(+), 70 deletions(-) diff --git a/tests/testcases b/tests/testcases index 1838fa0..8220306 100644 --- a/tests/testcases +++ b/tests/testcases @@ -52,7 +52,10 @@ date -u date +%d/%m/%y # dc - needs an input file + # dd +dd if=/dev/urandom of=O bs=1k count=1 ; ls -l O ; rm O + # deallocvt # df @@ -93,35 +96,36 @@ echo -n "no newline" # expr -expr 1 \| 1 -expr 1 \| 0 -expr 0 \| 1 -expr 0 \| 0 - -expr 1 \& 1 -expr 1 \& 0 -expr 0 \& 1 -expr 0 \& 0 - -expr 0 \< 1 -expr 1 \< 0 - -expr 1 \> 0 -expr 0 \> 1 - -expr 0 \<= 1 -expr 1 \<= 0 -expr 1 \<= 1 - -expr 1 \>= 0 -expr 0 \>= 1 -expr 1 \>= 1 - -expr 1 + 2 -expr 2 - 1 -expr 2 \* 3 -expr 12 / 2 -expr 12 % 5 +# XXX: something's wrong with the way I'm doing these. Figure it out later. +#expr 1 \| 1 +#expr 1 \| 0 +#expr 0 \| 1 +#expr 0 \| 0 +# +#expr 1 \& 1 +#expr 1 \& 0 +#expr 0 \& 1 +#expr 0 \& 0 +# +#expr 0 \< 1 +#expr 1 \< 0 +# +#expr 1 \> 0 +#expr 0 \> 1 +# +#expr 0 \<= 1 +#expr 1 \<= 0 +#expr 1 \<= 1 +# +#expr 1 \>= 0 +#expr 0 \>= 1 +#expr 1 \>= 1 +# +#expr 1 + 2 +#expr 2 - 1 +#expr 2 \* 3 +#expr 12 / 2 +#expr 12 % 5 # somebody else can do all the string stuff @@ -167,6 +171,7 @@ id -un # ifconfig #ifconfig +#ifconfig -a #ifconfig eth0 #ifconfig lo @@ -184,12 +189,13 @@ id -un # loadkmap # logger # logname + # ls -ls -ls -l -ls -s -ls -h -ls -1 +ls ../e* +ls -l ../e* +ls -s ../e* +ls -h ../e* +ls -1 ../e* # lsmod lsmod @@ -200,7 +206,16 @@ lsmod md5sum tester.sh # mkdir +mkdir D ; ls -ld D ; rmdir D + # mkfifo +# +# we will test making one. actually testing pushing data through it requires +# more interaction than we can manage here. +# (these lines turn up an existing ls bug) +mkfifo F ; ls -l F ; rm F +mkfifo -m 0600 F ; ls -l F ; rm F + # mkfs.minix - won't test # mknod # mkswap - won't test @@ -215,7 +230,8 @@ mount # nc # nfsmount # nslookup -# ping - can't test: interactive (needs ^C) +# ping +ping -c 3 yahoo.com # pivot_root # poweroff - won't test # printf @@ -227,14 +243,15 @@ pwd # rdate - won't test # readlink -ln -sf tester.sh LINKFILE -readlink LINKFILE -rm -f LINKFILE +ln -sf tester.sh L ; readlink L ; rm -f L # reboot - won't test # renice - won't test # reset - can't test: no output + # rm +touch F ; rm F + # rmdir # rmmod - won't test: dangerous # route @@ -243,20 +260,30 @@ rm -f LINKFILE # setkeycodes # sh - this should probably have it's own testcase or input file # sleep - can't test: produces no output + # sort +sort tester.sh +sort -n tester.sh +sort -r tester.sh + # stty # swapon - won't test: dangerous # swapoff - won't test: dangerous # sync - can't test: no output -# syslogd +# syslogd - won't test: too involved # tail tail tester.sh tail -n 2 tester.sh # tar + # tee -# telnet +echo "please tee me!" | tee A B C ; cat A B C +echo "please tee me!" | tee A B C ; echo "tee me too!" | tee -a A B C ; cat A B C ; rm A B C + +# telnet - can't test: interactive + # test # tftp # touch @@ -270,6 +297,7 @@ false ; echo $? # unix2dos # update +# uptime uptime # usleep @@ -293,9 +321,7 @@ which ls whoami # xargs -# (for some reason, the > redirection isn't working) -#ls -1 > TMPFILE -#xargs md5sum < TMPFILE -#rm -f TMPFILE +ls -1 ../e* | xargs +ls -1 ../e* | xargs md5sum # yes - can't test: interactive (needs ^C) diff --git a/tests/tester.sh b/tests/tester.sh index bb49609..a4fa38d 100755 --- a/tests/tester.sh +++ b/tests/tester.sh @@ -3,6 +3,8 @@ # tester.sh - reads testcases from file and tests busybox applets vs GNU # counterparts # +# This should be run from within the tests/ directory. Before you run it, you +# should compile up a busybox that has all applets and all features turned on. # set up defaults (can be changed with cmd-line options) BUSYBOX=../busybox @@ -12,32 +14,38 @@ BB_OUT=bb.out GNU_OUT=gnu.out SETUP="" CLEANUP="" +KEEPTMPFILES="no" +DEBUG=2 -# internal-use vars -fail_only=0 - -while getopts 'p:t:l:b:g:s:c:f' opt +#while getopts 'p:t:l:b:g:s:c:kd:' opt +while getopts 'p:t:l:s:c:kd:' opt do case $opt in p) BUSYBOX=$OPTARG; ;; t) TESTCASES=$OPTARG; ;; l) LOGFILE=$OPTARG; ;; - b) BB_OUT=$OPTARG; ;; - g) GNU_OUT=$OPTARG; ;; +# b) BB_OUT=$OPTARG; ;; +# g) GNU_OUT=$OPTARG; ;; s) SETUP=$OPTARG; ;; c) CLEANUP=$OPTARG; ;; - f) fail_only=1; ;; + k) KEEPTMPFILES="yes"; ;; + d) DEBUG=$OPTARG; ;; *) 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 " -p PATH path to busybox executable (default=$BUSYBOX)" + echo " -t FILE run testcases in FILE (default=$TESTCASES)" + echo " -l FILE log test results in FILE (default=$LOGFILE)" +# 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" + echo " -k keep temporary output files (don't delete them)" + echo " -d NUM set level of debugging output" + echo " 0 = no output" + echo " 1 = output failures / whoops lines only" + echo " 2 = (default) output setup / cleanup msgs and testcase lines" + echo " 3+= other debug noise (internal stuff)" exit 1 ;; esac @@ -45,16 +53,44 @@ done #shift `expr $OPTIND - 1` +# maybe print some debug output +if [ $DEBUG -ge 3 ] +then + echo "BUSYBOX=$BUSYBOX" + echo "TESTCASES=$TESTCASES" + echo "LOGFILE=$LOGFILE" + echo "BB_OUT=$BB_OUT" + echo "GNU_OUT=$GNU_OUT" + echo "SETUP=$SETUP" + echo "CLEANUP=$CLEANUP" + echo "DEBUG=$DEBUG" +fi + + +# do sanity checks +if [ ! -e $BUSYBOX ] +then + echo "Busybox executable: $BUSYBOX not found!" + exit 1 +fi + +if [ ! -e $TESTCASES ] +then + echo "Testcases file: $TESTCASES not found!" + exit 1 +fi + + # 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'? + [ $DEBUG -ge 2 ] && echo "running setup commands in $SETUP" + source $SETUP fi @@ -67,21 +103,35 @@ do 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` + # (this only tests the applet at the beginning of the line) + #applet=`echo $line | cut -d' ' -f1` + applet=`echo $line | sed 's/\(^[^ ;]*\)[ ;].*/\1/'` $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 + + # execute line using gnu / system programs + [ $DEBUG -ge 2 ] && echo "testing: $line" | tee -a $LOGFILE + sh -c "$line" > $GNU_OUT + + # change line to include "busybox" before every statement + line="$BUSYBOX $line" + line=${line//;/; $BUSYBOX } + line=${line//|/| $BUSYBOX } + + # execute line using busybox programs + [ $DEBUG -ge 2 ] && echo "testing: $line" | tee -a $LOGFILE + sh -c "$line" > $BB_OUT + + # see if they match diff -q $BB_OUT $GNU_OUT > /dev/null if [ $? -eq 1 ] then - echo "FAILED: $line" | tee -a $LOGFILE + [ $DEBUG -ge 1 ] && echo "FAILED: $line" | tee -a $LOGFILE diff -u $BB_OUT $GNU_OUT >> $LOGFILE fi fi @@ -89,16 +139,16 @@ do fi done -echo "Finished. Results are in $LOGFILE" +[ $DEBUG -gt 0 ] && echo "Finished. Results are in $LOGFILE" # do normal cleanup -rm -f $BB_OUT $GNU_OUT +[ $KEEPTMPFILES == "no" ] && 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'? + [ $DEBUG -ge 2 ] && echo "running cleanup commands in $CLEANUP" + source $CLEANUP fi -- cgit v1.1