minix/test/run
Ben Gras 2a44efb1c0 test run: feature for nicer jenkins interaction
. add -l option to list available tests
	. add -t option to specify tests to run
	. also improve the root check a bit by
	  not relying on an environment var
	. do not print the human-friendly banner & summary
	  if a test list is given to make the test
	  results easy to parse

Change-Id: Id0f87d485240b1924d667af788338ae31c3dc94c
2013-04-18 14:28:03 +00:00

107 lines
2.6 KiB
Bash
Executable file

#!/bin/sh
# Are we running as root?
unset ROOT
if [ "`id -u`" = 0 ]
then ROOT=yes
fi
# Initialization
PATH=:/bin:/usr/bin
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
# Tests which require setuid
setuids="test11 test33 test43 test44 test46 test56 test60 test61 test65 \
test69"
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\
sh1.sh sh2.sh interp.sh"
tests_no=`expr 0`
# Directory must be owned by bin
[ "$ROOT" ] || chown bin .
# If root, make sure the setuid tests have the correct permissions
[ "$ROOT" ] && chown root ${setuids}
[ "$ROOT" ] && chmod 4755 ${setuids}
tests=$alltests
# Are we given any args? If so, we might have to give
# or change our testlist
while getopts 'lt:' opt
do
case $opt in
l) echo "$alltests"
exit 0
;;
t) tests="$OPTARG"
;;
?) echo "Usage: run [-l] [-t testlist]" >&2; exit 1
esac
done
# Count tests
for i in `echo $tests`; do
if [ -x ./test$i ]; then
tests_no=`expr $tests_no + 1`
fi
done
if [ "$tests" = "$alltests" ]
then # Print test welcome message
clear
echo -n "Running POSIX compliance test suite. "
echo "There are $tests_no tests in total."
echo " "
fi
# Provide an argument for test63
ARGS_63=`pwd`/mod
# Run all the tests, keeping track of who failed.
for i in `echo $tests`
do
if [ -x ./test$i ]
then
total=`expr $total + 1`
FAIL=0
unset ARG
testid="`echo $i | sed 's/\..*//'`"
ARG=`eval echo "\\${ARGS_$testid}"`
if [ "$ROOT" ]
then su - bin -c "cd `pwd`; ./test$i $ARG" || FAIL=1
else ./test$i $ARG || FAIL=1
fi
if [ $FAIL -eq 0 ]
then passed=`expr $passed + 1`
else failed=`expr $failed + 1`
badones=`echo $badones " " $i`
fi
else
skipped=`expr $skipped + 1`
fi
done
# Print results of the tests.
if [ "$tests" = "$alltests" ]
then echo " "
if test $total = $passed
then echo All $passed tests completed without error \($skipped skipped\).
else echo Testing completed. Score: $passed passed, $failed failed, \
skipped $skipped
echo The following tests failed: $badones
fi
fi
# echo " "