tests many complex system/process memory interaction cases. has to run as root so it can flush the FS cache; needed to force FS cache misses for unmapped pages. See the comment in test74.c for a full description of what the tested cases are. also re-enable filemap on arm
		
			
				
	
	
		
			182 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.2 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
 | 
						|
 | 
						|
# 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	chown bin .
 | 
						|
	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 "cd `pwd`; $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 " "
 |