← Commit list

48c6157eb

Rob Landley
Rob Landley
2005-11-07
SOURCE BUG Duration: 11s

Subject

Fix the test suite so that individual *.tests files can be run ala 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.

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

testsuite/busybox.tests+4 -9
@@ -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" "" ""
testsuite/egrep.tests+1 -2
@@ -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" \
testsuite/grep.tests+1 -5
@@ -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
testsuite/pidof.tests+2 -4
@@ -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 $?)" "" ""
testsuite/runtest+14 -0
@@ -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
testsuite/sort.tests+2 -4
@@ -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" \
testsuite/testing.sh+42 -44
@@ -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)"
@@ -17,39 +25,31 @@
# 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
testsuite/uniq.tests+0 -3
@@ -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