dtest.sh revision 280835
1280835Smarkj# $FreeBSD: head/cddl/usr.sbin/dtrace/tests/tools/dtest.sh 280835 2015-03-30 04:01:49Z markj $ 2280835Smarkj 3280835Smarkjusage() 4280835Smarkj{ 5280835Smarkj cat >&2 <<__EOF__ 6280835SmarkjA harness for test cases in the DTrace test suite. 7280835Smarkj 8280835Smarkjusage: $(basename $0) <testfile> 9280835Smarkj__EOF__ 10280835Smarkj exit 1 11280835Smarkj} 12280835Smarkj 13280835Smarkjgettag() 14280835Smarkj{ 15280835Smarkj local tag 16280835Smarkj 17280835Smarkj tag=$(basename $1) 18280835Smarkj tag=${tag#*.} 19280835Smarkj tag=${tag%%[a-z.]*} 20280835Smarkj echo $tag 21280835Smarkj} 22280835Smarkj 23280835Smarkjruntest() 24280835Smarkj{ 25280835Smarkj local dflags exe exstatus pid retval status 26280835Smarkj 27280835Smarkj exstatus=0 28280835Smarkj retval=0 29280835Smarkj 30280835Smarkj case $TFILE in 31280835Smarkj drp.DTRACEDROP_*.d|err.*.d|tst.*.d) 32280835Smarkj case $TFILE in 33280835Smarkj drp.DTRACEDROP_*.d) 34280835Smarkj dflags="-x droptags" 35280835Smarkj tag=$(gettag "$TFILE") 36280835Smarkj ;; 37280835Smarkj err.D_*.d) 38280835Smarkj exstatus=1 39280835Smarkj dflags="-x errtags" 40280835Smarkj tag=$(gettag "$TFILE") 41280835Smarkj ;; 42280835Smarkj err.*.d) 43280835Smarkj exstatus=1 44280835Smarkj ;; 45280835Smarkj esac 46280835Smarkj 47280835Smarkj exe=${TFILE%.*}.exe 48280835Smarkj if [ -f "$exe" -a -x "$exe" ]; then 49280835Smarkj ./$exe & 50280835Smarkj pid=$! 51280835Smarkj dflags="$dflags ${pid}" 52280835Smarkj fi 53280835Smarkj 54280835Smarkj dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR 55280835Smarkj status=$? 56280835Smarkj 57280835Smarkj if [ $status -ne $exstatus ]; then 58280835Smarkj ERRMSG="dtrace exited with status ${status}, expected ${exstatus}" 59280835Smarkj retval=1 60280835Smarkj elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then 61280835Smarkj ERRMSG="dtrace's error output did not contain expected tag ${tag}" 62280835Smarkj retval=1 63280835Smarkj fi 64280835Smarkj 65280835Smarkj if [ -n "$pid" ]; then 66280835Smarkj kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1 67280835Smarkj wait 68280835Smarkj fi 69280835Smarkj ;; 70280835Smarkj err.*.ksh|tst.*.ksh) 71280835Smarkj expr "$TFILE" : 'err.*' >/dev/null && exstatus=1 72280835Smarkj 73280835Smarkj ksh "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR 74280835Smarkj status=$? 75280835Smarkj 76280835Smarkj if [ $status -ne $exstatus ]; then 77280835Smarkj ERRMSG="script exited with status ${status}, expected ${exstatus}" 78280835Smarkj retval=1 79280835Smarkj fi 80280835Smarkj ;; 81280835Smarkj *) 82280835Smarkj ERRMSG="unexpected test file name $TFILE" 83280835Smarkj retval=1 84280835Smarkj ;; 85280835Smarkj esac 86280835Smarkj 87280835Smarkj return $retval 88280835Smarkj} 89280835Smarkj 90280835Smarkj[ $# -eq 1 ] || usage 91280835Smarkj 92280835Smarkjreadonly STDERR=$(mktemp) 93280835Smarkjreadonly STDOUT=$(mktemp) 94280835Smarkjreadonly TFILE=$(basename $1) 95280835Smarkjreadonly EXOUT=${TFILE}.out 96280835Smarkj 97280835Smarkjkldstat -q -m dtrace_test || kldload dtrace_test 98280835Smarkjcd $(dirname $1) 99280835Smarkjruntest 100280835SmarkjRESULT=$? 101280835Smarkj 102280835Smarkjif [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \ 103280835Smarkj ! cmp $STDOUT $EXOUT >/dev/null 2>&1; then 104280835Smarkj ERRMSG="test output mismatch" 105280835Smarkj RESULT=1 106280835Smarkjfi 107280835Smarkj 108280835Smarkjif [ $RESULT -ne 0 ]; then 109280835Smarkj echo "test $TFILE failed: $ERRMSG" >&2 110280835Smarkj if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then 111280835Smarkj cat >&2 <<__EOF__ 112280835Smarkjtest stdout: 113280835Smarkj-- 114280835Smarkj$(cat $STDOUT) 115280835Smarkj-- 116280835Smarkj__EOF__ 117280835Smarkj fi 118280835Smarkj if [ $(stat -f '%z' $STDERR) -gt 0 ]; then 119280835Smarkj cat >&2 <<__EOF__ 120280835Smarkjtest stderr: 121280835Smarkj-- 122280835Smarkj$(cat $STDERR) 123280835Smarkj-- 124280835Smarkj__EOF__ 125280835Smarkj fi 126280835Smarkjfi 127280835Smarkj 128280835Smarkjrm -f $STDERR $STDOUT 129280835Smarkjexit $RESULT 130