Fix the test suite so that individual *.tests files can be run ala
authorRob Landley <rob@landley.net>
Mon, 7 Nov 2005 08:50:53 +0000 (08:50 -0000)
committerRob Landley <rob@landley.net>
Mon, 7 Nov 2005 08:50:53 +0000 (08:50 -0000)
  COMMAND=sort ./sort.tests
So we can compare against non-busybox versions, and possibly our testsuite
will be useful to somebody like the Linux Test Project someday.

Redid testing.sh to add new command, "optional", to skip tests that require
certain features.  (use: `optional FEATURE_SORT_BIG`, or `optional ""` to
stop skipping.)  Note that optional is a NOP if the environment variable
"OPTIONFLAGS" is blank, so although we're marking up the tests with busybox
specific knowledge, it doesn't interfere with running the tests without
busybox.

Moved setting the "OPTIONFLAGS" environment variable to runtest.  Philosophy:
busybox-specific stuff belongs in runtest; both testing.sh and the tests
themselves should be as busybox-agnostic as possible.

Moved detecting that a command isn't in busybox at all (hence skipping the
entire command.tests file) to runtests.  Rationale: optional can't currently
test for more than one feature at a time, so if we clear anything with
optional "" we might perform tests we don't want to.

Marked up busybox.tests to know which tests need CAT enabled.  Fixed up other
tests to be happy with new notation.

I suspect egrep should be appended to grep.  It's a sub-feature, really...

testsuite/busybox.tests
testsuite/egrep.tests
testsuite/grep.tests
testsuite/pidof.tests
testsuite/runtest
testsuite/sort.tests
testsuite/testing.sh
testsuite/uniq.tests

index 7595d061fdeaea9414b8c18a1842db6027745a78..b69272593a66bc610ae5efaff3ec5f100420b524 100755 (executable)
@@ -7,15 +7,9 @@
 if [ ${#COMMAND} -eq 0 ]; then COMMAND=busybox; fi
 . testing.sh
 
-# Depends on nothing
-_BB_CONFIG_DEP=""
-
-# We'll assume "cat" is built in, because we need some other command to test.
-
 HELPDUMP=`$COMMAND`
 
-# The gratuitous "\n"s are due to a shell idiosyncrasy: environment variables
-# seem to strip trailing whitespace, which makes cmp and diff unhappy.
+# We need to test under calling the binary under other names.
 
 ln -s `which "$COMMAND"` busybox-suffix
 ln -s `which "$COMMAND"` unknown
@@ -29,15 +23,16 @@ do
 
        testing "$i" "" "$HELPDUMP\n\n" "" ""
 
-       testing "$i cat" "cat" "moo" "" "moo"
-
        testing "$i unknown" "unknown 2>&1" \
                "unknown: applet not found\n" "" ""
 
        testing "$i --help" "--help 2>&1" "$HELPDUMP\n\n" "" ""
 
+       optional CAT
+       testing "$i cat" "cat" "moo" "" "moo"
        testing "$i --help cat" "--help cat 2>&1 | grep prints" \
                "Concatenates FILE(s) and prints them to stdout.\n" "" ""
+       optional ""
 
        testing "$i --help unknown" "--help unknown 2>&1" \
                "unknown: applet not found\n" "" ""
index b634649bb8e9835d66511b202286bb34b210bc78..61ce009d7e8dac2d4745016026c64bde7d079e2e 100755 (executable)
@@ -9,8 +9,7 @@
 [ ${#COMMAND} -eq 0 ] && COMMAND=egrep
 . testing.sh
 
-# Depends on FEATURE_GREP_EGREP_ALIAS
-_BB_CONFIG_DEP=FEATURE_GREP_EGREP_ALIAS
+optional FEATURE_GREP_EGREP_ALIAS
 
 testing "grep is also egrep" "foo" "foo\n" "" "foo\nbar\n"
 testing "egrep is not case insensitive" "foo ; [ \$? -ne 0 ] && echo yes" \
index c4f534d1ac7966a91612b084e7466cef9a32dd89..2a7a7b9017a24a514a8334fbcb1221ed287ed124 100755 (executable)
@@ -9,9 +9,6 @@
 [ ${#COMMAND} -eq 0 ] && COMMAND=grep
 . testing.sh
 
-# Depends on grep
-_BB_CONFIG_DEP=grep
-
 # testing "test name" "options" "expected result" "file input" "stdin"
 #   file input will be file called "input"
 #   test can create a file "actual" instead of writing to stdout
@@ -75,8 +72,7 @@ testing "grep matches NUL" ". input > /dev/null 2>&1 ; echo \$?" "0\n" "\0\n" ""
 testing "grep handles multiple regexps" "-e one -e two input ; echo \$?" \
        "one\ntwo\n0\n" "one\ntwo\n" ""
 
-# Depends on FEATURE_GREP_EGREP_ALIAS
-_BB_CONFIG_DEP=FEATURE_GREP_EGREP_ALIAS
+optional FEATURE_GREP_EGREP_ALIAS
 testing "grep -E supports extended regexps" "-E fo+" "foo\n" "" "b\ar\nfoo\nbaz"
 
 exit $FAILCOUNT
index 0c303cf22f58fc7cdb8523957c32a110f93cef67..0515522f8fe90236ed791b44a5e1631813fee3bc 100755 (executable)
@@ -16,13 +16,11 @@ testing "pidof (exit with error)" "veryunlikelyoccuringbinaryname ; echo \$?" \
 testing "pidof (exit with success)" "pidof > /dev/null; echo \$?" "0\n" "" ""
 
 
-# Depends on FEATURE_PIDOF_SINGLE
-_BB_CONFIG_DEP=FEATURE_PIDOF_SINGLE
+optional FEATURE_PIDOF_SINGLE
 testing "pidof -s" "-s $(basename $0) ; echo -n \$?" \
        "$(pidof -s $(basename $0) ; echo -n $?)" "" ""
 
-# Depends on FEATURE_PIDOF_OMIT
-_BB_CONFIG_DEP=FEATURE_PIDOF_OMIT
+optional FEATURE_PIDOF_OMIT
 testing "pidof -o %PPID" "$(basename $0) -o %PPID ; echo -n \$?" \
        "$(pidof $(basename $0) -o %PPID ; echo -n $?)" "" ""
 
index 9fd2d0f13dabb5c1151d3bc03512461b93abd900..c1b1ec2f4ce5e59be5c66a21fde8ec923005264a 100755 (executable)
@@ -91,6 +91,11 @@ else
        applets=$(ls $srcdir)
 fi
 
+# Set up option flags so tests can be selective.
+
+configfile=${bindir:-../../}/.config
+export OPTIONFLAGS=:$(echo $(sed -nr 's/^CONFIG_(.*)=.*/\1/p' $configfile) | sed 's/ /:/')
+
 for applet in $applets; do
        if [ "$applet" = "links" ]; then continue; fi
        if [ "$applet" != "CVS" -a -d "$srcdir/$applet" ]; then
@@ -100,9 +105,18 @@ for applet in $applets; do
                        status=1
                fi
        fi
+
+       # Is this a new-style test?
        applet=$(echo "$applet" | sed -n 's/\.tests$//p')
        if [ ${#applet} -ne 0 ]
        then
+               appcfg=`grep -i "^# CONFIG_$applet" $configfile`
+               if [ -n "$appcfg" ]
+               then
+                       echo "SKIPPED: $applet (is configured out)"
+                       continue
+               fi
+               # Setup environment for test.
                if [ -d links ]; then
                        rm -f links/"$applet" 
                else
index 04d75cfe2e3d0126af9575b0c8ada5edba8f0791..294530988f7afcc364fb1343f98c9e7d7a84923d 100755 (executable)
@@ -7,9 +7,6 @@
 if [ ${#COMMAND} -eq 0 ]; then COMMAND=sort; fi
 . testing.sh
 
-# Depends on sort
-_BB_CONFIG_DEP=sort
-
 # The basic tests.  These should work even with the small busybox.
 
 testing "sort" "input" "a\nb\nc\n" "c\na\nb\n" ""
@@ -21,6 +18,7 @@ testing "sort reverse" "-r input" "wook\nwalrus\npoint\npabst\naargh\n" \
 
 # These tests require the full option set.
 
+optional FEATURE_SORT_BIG
 # Longish chunk of data re-used by the next few tests
 
 data="42       1       3       woot
@@ -48,7 +46,7 @@ egg   1       2       papyrus
 999    3       0       algebra
 " "$data" ""
 
-# Busybox is definitely doing this one wrong just now...
+# Busybox is definitely doing this one wrong just now.  FIXME
 
 testing "sort key range with numeric option and global reverse" \
 "-k2,3n -r input" \
index 83727f6d3259eec3d304846e731b2b0c8915d124..c1002a6aa8c6c1f0ea245171ca82c4ae88542570 100755 (executable)
@@ -4,10 +4,18 @@
 #
 # License is GPLv2, see LICENSE in the busybox tarball for full license text.
 
-# The "testing" function uses one environment variable:
-#      COMMAND = command to execute
+# This file defines two functions, "testing" and "optionflag"
+
+# The "testing" function must have the following environment variable set:
+#    COMMAND = command to execute
+#
+# The following environment variables may be set to enable optional behavior
+# in "testing":
+#    VERBOSE - Print the diff -u of each failed test case.
+#    DEBUG - Enable command tracing.
+#    SKIP - do not perform this test (this is set by "optionflag")
 #
-# The function takes five arguments:
+# The "testing" function takes five arguments:
 #      $1) Description to display when running command
 #      $2) Command line arguments to command"
 #      $3) Expected result (on stdout)"
 # The exit value of testing is the exit value of the command it ran.
 #
 # The environment variable "FAILCOUNT" contains a cumulative total of the
-# 
-
-verbose=0
-debug=0
-force=0
-for x in "$@" ; do
-       case "$x" in
-       -v|--verbose)  verbose=1; shift;;
-       -d|--debug)    debug=1; shift;;
-       -f|--force)    force=1; shift;;
-       --)            break;;
-       -*)            echo "Unknown option '$x'"; exit 1;;
-       *)             break;;
-       esac
-done
+# number of failed tests.
 
-if [ -n "$VERBOSE" ] ; then
-       verbose=1
-fi
-if [ -n "$DEBUG" ] ; then
-       debug=1
-fi
+# The "optional" function is used to skip certain tests, ala:
+#   optionflag CONFIG_FEATURE_THINGY
+#
+# The "optional" function checks the environment variable "OPTIONFLAGS",
+# which is either empty (in which case it always clears SKIP) or
+# else contains a colon-separated list of features (in which case the function
+# clears SKIP if the flag was found, or sets it to 1 if the flag was not found).
 
 export FAILCOUNT=0
+export SKIP=
 
 # Helper functions
 
-config_is_set ()
+optional()
 {
-  local uc_what=$(echo ${1?} | tr a-z A-Z)
-  grep -q "^[  ]*CONFIG_${uc_what}" ${bindir:-..}/.config || \
-    grep -q "^[        ]*BB_CONFIG_${uc_what}" ${bindir:-..}/.config
-  return $?
+  option="$OPTIONFLAGS" | egrep "(^|:)$1(:|\$)"
+  # Not set?
+  if [[ -z "$1" || -z "$OPTIONFLAGS" || ${#option} -ne 0 ]]
+  then
+    SKIP=""
+    return
+  fi
+  SKIP=1
 }
 
 # The testing function
@@ -62,17 +62,14 @@ testing ()
     exit
   fi
 
-  if [ $debug -eq 1 ] ; then
+  if [ -n "$DEBUG" ] ; then
     set -x
   fi
 
-  if [ -n "$_BB_CONFIG_DEP" ] && [ ${force} -eq 0 ]
+  if [ -n "$SKIP" ]
   then
-    if ! config_is_set "$_BB_CONFIG_DEP"
-    then
-      echo "SKIPPED: $1"
-      return 0
-    fi
+    echo "SKIPPED: $1"
+    return 0
   fi
 
   echo -ne "$3" > expected
@@ -83,18 +80,19 @@ testing ()
   cmp expected actual > /dev/null
   if [ $? -ne 0 ]
   then
-       ((FAILCOUNT++))
-       echo "FAIL: $1"
-       if [ $verbose -eq 1 ]
-       then
-               diff -u expected actual
-       fi
+    FAILCOUNT=$[$FAILCOUNT+1]
+    echo "FAIL: $1"
+    if [ -n "$VERBOSE" ]
+    then
+      diff -u expected actual
+    fi
   else
-       echo "PASS: $1"
+    echo "PASS: $1"
   fi
   rm -f input expected actual
 
-  if [ $debug -eq 1 ] ; then
+  if [ -n "$DEBUG" ]
+  then
     set +x
   fi
 
index 27d9561e1427be25616c9c15906462eaa7f777b6..95764740b745ba01cc15660be29c0aed36dc1b30 100755 (executable)
@@ -9,9 +9,6 @@
 if [ ${#COMMAND} -eq 0 ]; then COMMAND=uniq; fi
 . testing.sh
 
-# Depends on uniq
-_BB_CONFIG_DEP=uniq
-
 # testing "test name" "options" "expected result" "file input" "stdin"
 #   file input will be file called "input"
 #   test can create a file "actual" instead of writing to stdout