xref: /onnv-gate/usr/src/lib/libshell/common/tests/shtests (revision 12068:08a39a083754)
14887Schin# This program runs ksh regression tests
28462SApril.Chin@Sun.COM# shtests [ name=value ... ] [ --all | --compile ] [ --time ] [ a.sh b.sh ... ]
34887Schin
410898Sroland.mainz@nrubsig.orgtimesensitive='*@(options|sigchld|subshell).sh'
510898Sroland.mainz@nrubsig.org
610898Sroland.mainz@nrubsig.orgunset DISPLAY ENV FIGNORE HISTFILE
74887SchinLANG=C
84887SchinLC_ALL=C
98462SApril.Chin@Sun.COMcompile=1
108462SApril.Chin@Sun.COMscript=1
114887Schintime=1
12*12068SRoger.Faulkner@Oracle.COMvmalloc_options=abort
134887Schinwhile	:
144887Schindo	case $1 in
158462SApril.Chin@Sun.COM	-a|--a*)compile=2
168462SApril.Chin@Sun.COM		script=2
178462SApril.Chin@Sun.COM		;;
188462SApril.Chin@Sun.COM	-c|--c*)compile=2
198462SApril.Chin@Sun.COM		script=
208462SApril.Chin@Sun.COM		;;
218462SApril.Chin@Sun.COM	-s|--s*)compile=
228462SApril.Chin@Sun.COM		script=2
238462SApril.Chin@Sun.COM		;;
248462SApril.Chin@Sun.COM	-t|--not*)time=
258462SApril.Chin@Sun.COM		;;
26*12068SRoger.Faulkner@Oracle.COM	-v|--nov*)vmalloc_options=
278462SApril.Chin@Sun.COM		;;
288462SApril.Chin@Sun.COM	-*)	echo $0: $1: invalid option >&2
298462SApril.Chin@Sun.COM		exit 2
308462SApril.Chin@Sun.COM		;;
314887Schin	*=*)	n=${1%%=*}
324887Schin		v=${1#*=}
334887Schin		eval $n=\'$v\'
344887Schin		export $n
354887Schin		;;
364887Schin	*)	break
374887Schin		;;
384887Schin	esac
394887Schin	shift
404887Schindone
41*12068SRoger.Faulkner@Oracle.COMif	[[ $VMALLOC_OPTIONS ]]
42*12068SRoger.Faulkner@Oracle.COMthen	vmalloc_options=$VMALLOC_OPTIONS
43*12068SRoger.Faulkner@Oracle.COMelse	VMALLOC_OPTIONS=$vmalloc_options
448462SApril.Chin@Sun.COMfi
45*12068SRoger.Faulkner@Oracle.COM[[ $VMALLOC_OPTIONS ]] || timesensitive=.
46*12068SRoger.Faulkner@Oracle.COMexport LANG LC_ALL PATH PWD SHELL VMALLOC_OPTIONS
474887SchinPWD=`pwd`
484887SchinSHELL=${SHELL-ksh}
494887Schincase $0 in
504887Schin/*)	d=`dirname $0`;;
514887Schin*/*)	d=$PWD/`dirname $0`;;
524887Schin*)	d=$PWD;;
534887Schinesac
544887Schincase $SHELL in
554887Schin/*)	;;
564887Schin*/*)	SHELL=$d/$SHELL;;
574887Schin*)	SHELL=$(whence $SHELL);;
584887Schinesac
594887SchinPATH=/bin:/usr/bin
604887Schinif	[[ -d /usr/ucb ]]
614887Schinthen	PATH=$PATH:/usr/ucb
624887Schinfi
634887SchinPATH=$PATH:$d
648462SApril.Chin@Sun.COMif	[[ $INSTALLROOT && -r $INSTALLROOT/bin/.paths ]]
654887Schinthen	PATH=$INSTALLROOT/bin:$PATH
664887Schinfi
678462SApril.Chin@Sun.COMif	[[ $compile ]]
688462SApril.Chin@Sun.COMthen	SHCOMP=${SHCOMP:-shcomp}
698462SApril.Chin@Sun.COM	if	whence $SHCOMP > /dev/null
7010898Sroland.mainz@nrubsig.org	then	tmp=$(mktemp -dt) || { echo mktemp -dt failed >&2; exit 1; }
7110898Sroland.mainz@nrubsig.org		trap "cd /; rm -rf $tmp" EXIT
728462SApril.Chin@Sun.COM	elif	[[ $compile != 1 ]]
738462SApril.Chin@Sun.COM	then	echo $0: --compile: $SHCOMP not found >&2
748462SApril.Chin@Sun.COM		exit 1
758462SApril.Chin@Sun.COM	else	compile=
768462SApril.Chin@Sun.COM	fi
778462SApril.Chin@Sun.COMfi
788462SApril.Chin@Sun.COMtypeset -A tests
794887Schinfor i in ${*-*.sh}
80*12068SRoger.Faulkner@Oracle.COMdo	if	[[ ! -r $i ]]
81*12068SRoger.Faulkner@Oracle.COM	then	echo $0: $i: not found >&2
82*12068SRoger.Faulkner@Oracle.COM		continue
83*12068SRoger.Faulkner@Oracle.COM	fi
84*12068SRoger.Faulkner@Oracle.COM	t=$(grep -c err_exit $i)
858462SApril.Chin@Sun.COM	if	(( $t > 2 ))
868462SApril.Chin@Sun.COM	then	(( t = $t - 2 ))
874887Schin	fi
888462SApril.Chin@Sun.COM	tests[$i]=$t
894887Schin	T=test
904887Schin	if	(( $t != 1 ))
914887Schin	then	T=${T}s
924887Schin	fi
934887Schin	E=error
948462SApril.Chin@Sun.COM	if	[[ $script ]]
958462SApril.Chin@Sun.COM	then	echo test $i begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
9610898Sroland.mainz@nrubsig.org		if	[[ $i == $timesensitive ]]
97*12068SRoger.Faulkner@Oracle.COM		then	VMALLOC_OPTIONS=
9810898Sroland.mainz@nrubsig.org		fi
998462SApril.Chin@Sun.COM		if	$SHELL $i
1008462SApril.Chin@Sun.COM		then	echo test $i passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
1018462SApril.Chin@Sun.COM		else	e=$?
1028462SApril.Chin@Sun.COM			if	(( e > 256 ))
1038462SApril.Chin@Sun.COM			then	e=1
1048462SApril.Chin@Sun.COM				E=signal
1058462SApril.Chin@Sun.COM			fi
1068462SApril.Chin@Sun.COM			if	(( $e != 1 ))
1078462SApril.Chin@Sun.COM			then	E=${E}s
1088462SApril.Chin@Sun.COM			fi
1098462SApril.Chin@Sun.COM			echo test $i failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
1104887Schin		fi
11110898Sroland.mainz@nrubsig.org		if	[[ $i == $timesensitive ]]
112*12068SRoger.Faulkner@Oracle.COM		then	VMALLOC_OPTIONS=$vmalloc_options
11310898Sroland.mainz@nrubsig.org		fi
1144887Schin	fi
1154887Schindone
1168462SApril.Chin@Sun.COMif	[[ $compile ]]
1178462SApril.Chin@Sun.COMthen	for i in ${*-*.sh}
118*12068SRoger.Faulkner@Oracle.COM	do	if	[[ ! -r $i ]]
119*12068SRoger.Faulkner@Oracle.COM		then	continue
120*12068SRoger.Faulkner@Oracle.COM		fi
121*12068SRoger.Faulkner@Oracle.COM		t=${tests[$i]}
1228462SApril.Chin@Sun.COM		T=test
1238462SApril.Chin@Sun.COM		if	(( $t != 1 ))
1248462SApril.Chin@Sun.COM		then	T=${T}s
1258462SApril.Chin@Sun.COM		fi
1268462SApril.Chin@Sun.COM		o=${i##*/}
1278462SApril.Chin@Sun.COM		o=shcomp-${o%.sh}.ksh
1288462SApril.Chin@Sun.COM		echo test $o begins ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"}
1298462SApril.Chin@Sun.COM		E=error
1308462SApril.Chin@Sun.COM		if	$SHCOMP $i > $tmp/$o
13110898Sroland.mainz@nrubsig.org		then	if	[[ $i == $timesensitive ]]
132*12068SRoger.Faulkner@Oracle.COM			then	VMALLOC_OPTIONS=
13310898Sroland.mainz@nrubsig.org			fi
13410898Sroland.mainz@nrubsig.org			if	$SHELL $tmp/$o
1358462SApril.Chin@Sun.COM			then	echo test $o passed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} "[ $t $T 0 ${E}s ]"
1368462SApril.Chin@Sun.COM			else	e=$?
1378462SApril.Chin@Sun.COM				if	(( e > 256 ))
1388462SApril.Chin@Sun.COM				then	e=1
1398462SApril.Chin@Sun.COM					E=signal
1408462SApril.Chin@Sun.COM				fi
1418462SApril.Chin@Sun.COM				if	(( $e != 1 ))
1428462SApril.Chin@Sun.COM				then	E=${E}s
1438462SApril.Chin@Sun.COM				fi
1448462SApril.Chin@Sun.COM				echo test $o failed ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T $e $E ]"
1458462SApril.Chin@Sun.COM			fi
14610898Sroland.mainz@nrubsig.org			if	[[ $i == $timesensitive ]]
147*12068SRoger.Faulkner@Oracle.COM			then	VMALLOC_OPTIONS=$vmalloc_options
14810898Sroland.mainz@nrubsig.org			fi
1498462SApril.Chin@Sun.COM		else	e=$?
1508462SApril.Chin@Sun.COM			t=1
1518462SApril.Chin@Sun.COM			T=test
1528462SApril.Chin@Sun.COM			echo test $o failed to compile ${time:+"at $(date +%Y-%m-%d+%H:%M:%S)"} with exit code $e "[ $t $T 1 $E ]"
1538462SApril.Chin@Sun.COM		fi
1548462SApril.Chin@Sun.COM	done
1558462SApril.Chin@Sun.COMfi
156