182 lines
4.2 KiB
Plaintext
182 lines
4.2 KiB
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
# Are we running as root?
|
||
|
unset ROOT
|
||
|
if [ "`id -u`" = 0 ]
|
||
|
then ROOT=yes
|
||
|
fi
|
||
|
|
||
|
# Initialization
|
||
|
PATH=:/bin:/usr/bin:/sbin
|
||
|
export PATH
|
||
|
|
||
|
rm -rf DIR* # remove any old junk lying around
|
||
|
passed=`expr 0` # count number of tests run correctly
|
||
|
failed=`expr 0` # count number of tests that failed
|
||
|
skipped=`expr 0` # count number of tests that were skipped
|
||
|
total=`expr 0` # total number of tests tried
|
||
|
badones= # list of tests that failed
|
||
|
|
||
|
# In the lists below, shell scripts should be listed without ".sh" suffix
|
||
|
|
||
|
# Programs that require setuid
|
||
|
setuids="test11 test33 test43 test44 test46 test56 test60 test61 test65 \
|
||
|
test69 test76 test73 test74 test77 test78"
|
||
|
# Scripts that require to be run as root
|
||
|
rootscripts="testisofs testvnd"
|
||
|
|
||
|
alltests="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
|
||
|
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 \
|
||
|
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 \
|
||
|
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 \
|
||
|
sh1 sh2 interp mfs isofs vnd"
|
||
|
tests_no=`expr 0`
|
||
|
|
||
|
# If root, make sure the setuid tests have the correct permissions
|
||
|
# and make the dir bin-owned.
|
||
|
if [ "$ROOT" ]
|
||
|
then /usr/sbin/chown bin .
|
||
|
/usr/sbin/chown root ${setuids}
|
||
|
chmod 4755 ${setuids}
|
||
|
fi
|
||
|
|
||
|
tests=$alltests
|
||
|
|
||
|
# Are we given any args? If so, we might have to give
|
||
|
# or change our testlist
|
||
|
while getopts 'lt:T' opt
|
||
|
do
|
||
|
case $opt in
|
||
|
l) echo "$alltests"
|
||
|
exit 0
|
||
|
;;
|
||
|
t) tests="$OPTARG"
|
||
|
;;
|
||
|
T) tapmode=yes
|
||
|
diagprefix="# "
|
||
|
;;
|
||
|
?) echo "Usage: run [-l] [-t testlist] [-T]" >&2
|
||
|
echo " -l: list tests, exit" >&2
|
||
|
echo " -t: execute given set of tests, default: all" >&2
|
||
|
echo " -T: produce TAP-format output" >&2
|
||
|
exit 1
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# Count tests
|
||
|
for i in `echo $tests`; do
|
||
|
if [ -x ./test$i -o -x ./test${i}.sh ]; then
|
||
|
tests_no=`expr $tests_no + 1`
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $tests_no -eq 0 ]
|
||
|
then
|
||
|
echo "No test binaries found. did you compile?"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Print tests list whenever user asks for TAP mode. It is up
|
||
|
# to the caller to make sure it makes sense, i.e. he knows what it
|
||
|
# represents.
|
||
|
if [ "$tapmode" ]
|
||
|
then echo "1..$tests_no"
|
||
|
fi
|
||
|
|
||
|
if [ "$tests" = "$alltests" ]
|
||
|
then # Print test welcome message
|
||
|
if [ ! "$tapmode" ]; then clear; fi
|
||
|
echo -n "${diagprefix}Running POSIX compliance test suite. "
|
||
|
echo "There are $tests_no tests in total."
|
||
|
echo "${diagprefix}"
|
||
|
fi
|
||
|
|
||
|
# Provide an argument for test63
|
||
|
ARGS_63=`pwd`/mod
|
||
|
|
||
|
runtest() {
|
||
|
i=$1
|
||
|
ARG=$2
|
||
|
# setuid doesn't work with scripts, so we can only run those as root
|
||
|
if echo "$rootscripts" | tr ' ' '\n' | grep "^test${i}\$" >/dev/null
|
||
|
then needroot=1
|
||
|
else needroot=0
|
||
|
fi
|
||
|
# depending on where we are, scripts might have a .sh suffix or not
|
||
|
if [ -x test${i}.sh ]
|
||
|
then NAME=./test${i}.sh
|
||
|
else NAME=./test$i
|
||
|
fi
|
||
|
if [ "$ROOT" ]
|
||
|
then
|
||
|
if [ $needroot -eq 1 ]
|
||
|
then $NAME $ARG || return 1
|
||
|
else su bin -c "$NAME $ARG" || return 1
|
||
|
fi
|
||
|
else
|
||
|
if [ $needroot -eq 1 ]
|
||
|
then echo "skipping test$i, not root." >&2 && return 0
|
||
|
else $NAME $ARG || return 1
|
||
|
fi
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
# Run all the tests, keeping track of who failed.
|
||
|
for i in `echo $tests`
|
||
|
do
|
||
|
if [ -x ./test$i -o -x ./test${i}.sh ]
|
||
|
then
|
||
|
total=`expr $total + 1`
|
||
|
FAIL=0
|
||
|
ARG=`eval echo "\\${ARGS_$i}"`
|
||
|
|
||
|
if [ "$tapmode" ]
|
||
|
then out=out.$$
|
||
|
rm -f $out
|
||
|
runtest $i $ARG >$out 2>&1
|
||
|
else runtest $i $ARG
|
||
|
fi
|
||
|
|
||
|
FAIL=$?
|
||
|
|
||
|
if [ $FAIL -eq 0 ]
|
||
|
then if [ "$tapmode" ]
|
||
|
then echo "ok test $i"
|
||
|
fi
|
||
|
passed=`expr $passed + 1`
|
||
|
else if [ "$tapmode" ]
|
||
|
then echo "not ok test $i"
|
||
|
fi
|
||
|
failed=`expr $failed + 1`
|
||
|
badones=`echo $badones " " $i`
|
||
|
fi
|
||
|
|
||
|
if [ "$tapmode" ]
|
||
|
then cat $out | sed "s/^/$diagprefix/"
|
||
|
rm -f $out
|
||
|
fi
|
||
|
else
|
||
|
echo "${diagprefix}warning: skipping test$i"
|
||
|
skipped=`expr $skipped + 1`
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Print results of the tests.
|
||
|
if [ "$tests" = "$alltests" ]
|
||
|
then echo "${diagprefix}"
|
||
|
if test $total = $passed
|
||
|
then echo "${diagprefix}All $passed tests completed without error ($skipped skipped)."
|
||
|
else echo "${diagprefix}Testing completed. Score: $passed passed, $failed failed, skipped $skipped"
|
||
|
echo "${diagprefix}The following tests failed: $badones"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# if any test failed return an error
|
||
|
if [ $failed -gt 0 ]
|
||
|
then
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# echo " "
|