1288ebd81SLi-Wen Hsu#!/bin/sh 2288ebd81SLi-Wen Hsu 341aeaf2aSMark Johnstonusage() 441aeaf2aSMark Johnston{ 541aeaf2aSMark Johnston cat >&2 <<__EOF__ 641aeaf2aSMark JohnstonA harness for test cases in the DTrace test suite. 741aeaf2aSMark Johnston 841aeaf2aSMark Johnstonusage: $(basename $0) <testfile> 941aeaf2aSMark Johnston__EOF__ 1041aeaf2aSMark Johnston exit 1 1141aeaf2aSMark Johnston} 1241aeaf2aSMark Johnston 1341aeaf2aSMark Johnstongettag() 1441aeaf2aSMark Johnston{ 1541aeaf2aSMark Johnston local tag 1641aeaf2aSMark Johnston 1741aeaf2aSMark Johnston tag=$(basename $1) 1841aeaf2aSMark Johnston tag=${tag#*.} 1941aeaf2aSMark Johnston tag=${tag%%[a-z.]*} 2041aeaf2aSMark Johnston echo $tag 2141aeaf2aSMark Johnston} 2241aeaf2aSMark Johnston 2341aeaf2aSMark Johnstonruntest() 2441aeaf2aSMark Johnston{ 2541aeaf2aSMark Johnston local dflags exe exstatus pid retval status 2641aeaf2aSMark Johnston 2741aeaf2aSMark Johnston exstatus=0 2841aeaf2aSMark Johnston retval=0 2941aeaf2aSMark Johnston 3041aeaf2aSMark Johnston case $TFILE in 3141aeaf2aSMark Johnston drp.DTRACEDROP_*.d|err.*.d|tst.*.d) 3241aeaf2aSMark Johnston case $TFILE in 3341aeaf2aSMark Johnston drp.DTRACEDROP_*.d) 3441aeaf2aSMark Johnston dflags="-x droptags" 3541aeaf2aSMark Johnston tag=$(gettag "$TFILE") 3641aeaf2aSMark Johnston ;; 3741aeaf2aSMark Johnston err.D_*.d) 3841aeaf2aSMark Johnston exstatus=1 3941aeaf2aSMark Johnston dflags="-x errtags" 4041aeaf2aSMark Johnston tag=$(gettag "$TFILE") 4141aeaf2aSMark Johnston ;; 4241aeaf2aSMark Johnston err.*.d) 4341aeaf2aSMark Johnston exstatus=1 4441aeaf2aSMark Johnston ;; 4541aeaf2aSMark Johnston esac 4641aeaf2aSMark Johnston 4741aeaf2aSMark Johnston exe=${TFILE%.*}.exe 4841aeaf2aSMark Johnston if [ -f "$exe" -a -x "$exe" ]; then 4941aeaf2aSMark Johnston ./$exe & 5041aeaf2aSMark Johnston pid=$! 5141aeaf2aSMark Johnston dflags="$dflags ${pid}" 5241aeaf2aSMark Johnston fi 5341aeaf2aSMark Johnston 5441aeaf2aSMark Johnston dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR 5541aeaf2aSMark Johnston status=$? 5641aeaf2aSMark Johnston 5741aeaf2aSMark Johnston if [ $status -ne $exstatus ]; then 5841aeaf2aSMark Johnston ERRMSG="dtrace exited with status ${status}, expected ${exstatus}" 5941aeaf2aSMark Johnston retval=1 6041aeaf2aSMark Johnston elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then 6141aeaf2aSMark Johnston ERRMSG="dtrace's error output did not contain expected tag ${tag}" 6241aeaf2aSMark Johnston retval=1 6341aeaf2aSMark Johnston fi 6441aeaf2aSMark Johnston 6541aeaf2aSMark Johnston if [ -n "$pid" ]; then 6641aeaf2aSMark Johnston kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1 6741aeaf2aSMark Johnston wait 6841aeaf2aSMark Johnston fi 6941aeaf2aSMark Johnston ;; 7041aeaf2aSMark Johnston err.*.ksh|tst.*.ksh) 7141aeaf2aSMark Johnston expr "$TFILE" : 'err.*' >/dev/null && exstatus=1 7241aeaf2aSMark Johnston 73e25922b3SMark Johnston tst=$TFILE ksh -p "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR 7441aeaf2aSMark Johnston status=$? 7541aeaf2aSMark Johnston 7641aeaf2aSMark Johnston if [ $status -ne $exstatus ]; then 7741aeaf2aSMark Johnston ERRMSG="script exited with status ${status}, expected ${exstatus}" 7841aeaf2aSMark Johnston retval=1 7941aeaf2aSMark Johnston fi 8041aeaf2aSMark Johnston ;; 8141aeaf2aSMark Johnston *) 8241aeaf2aSMark Johnston ERRMSG="unexpected test file name $TFILE" 8341aeaf2aSMark Johnston retval=1 8441aeaf2aSMark Johnston ;; 8541aeaf2aSMark Johnston esac 8641aeaf2aSMark Johnston 87288ebd81SLi-Wen Hsu if [ $retval -eq 0 ] && \ 88288ebd81SLi-Wen Hsu head -n 1 $STDOUT | grep -q -E '^#!/.*ksh$'; then 89e25922b3SMark Johnston ksh -p $STDOUT 90288ebd81SLi-Wen Hsu retval=$? 91288ebd81SLi-Wen Hsu fi 92288ebd81SLi-Wen Hsu 9341aeaf2aSMark Johnston return $retval 9441aeaf2aSMark Johnston} 9541aeaf2aSMark Johnston 9641aeaf2aSMark Johnston[ $# -eq 1 ] || usage 9741aeaf2aSMark Johnston 9841aeaf2aSMark Johnstonreadonly STDERR=$(mktemp) 9941aeaf2aSMark Johnstonreadonly STDOUT=$(mktemp) 10041aeaf2aSMark Johnstonreadonly TFILE=$(basename $1) 10141aeaf2aSMark Johnstonreadonly EXOUT=${TFILE}.out 10241aeaf2aSMark Johnston 103*cb6b5e8aSMark Johnstonkldload -n dtrace_test 10441aeaf2aSMark Johnstoncd $(dirname $1) 10541aeaf2aSMark Johnstonruntest 10641aeaf2aSMark JohnstonRESULT=$? 10741aeaf2aSMark Johnston 10841aeaf2aSMark Johnstonif [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \ 10941aeaf2aSMark Johnston ! cmp $STDOUT $EXOUT >/dev/null 2>&1; then 11041aeaf2aSMark Johnston ERRMSG="test output mismatch" 11141aeaf2aSMark Johnston RESULT=1 11241aeaf2aSMark Johnstonfi 11341aeaf2aSMark Johnston 11441aeaf2aSMark Johnstonif [ $RESULT -ne 0 ]; then 11541aeaf2aSMark Johnston echo "test $TFILE failed: $ERRMSG" >&2 11641aeaf2aSMark Johnston if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then 11741aeaf2aSMark Johnston cat >&2 <<__EOF__ 11841aeaf2aSMark Johnstontest stdout: 11941aeaf2aSMark Johnston-- 12041aeaf2aSMark Johnston$(cat $STDOUT) 12141aeaf2aSMark Johnston-- 122a61d2c7fSMark Johnstontest stdout diff: 123a61d2c7fSMark Johnston-- 124a61d2c7fSMark Johnston$(diff -u $EXOUT $STDOUT) 125a61d2c7fSMark Johnston-- 12641aeaf2aSMark Johnston__EOF__ 12741aeaf2aSMark Johnston fi 12841aeaf2aSMark Johnston if [ $(stat -f '%z' $STDERR) -gt 0 ]; then 12941aeaf2aSMark Johnston cat >&2 <<__EOF__ 13041aeaf2aSMark Johnstontest stderr: 13141aeaf2aSMark Johnston-- 13241aeaf2aSMark Johnston$(cat $STDERR) 13341aeaf2aSMark Johnston-- 13441aeaf2aSMark Johnston__EOF__ 13541aeaf2aSMark Johnston fi 13641aeaf2aSMark Johnstonfi 13741aeaf2aSMark Johnston 13841aeaf2aSMark Johnstonrm -f $STDERR $STDOUT 13941aeaf2aSMark Johnstonexit $RESULT 140