dtest.sh revision 313126
150461Swpaul# $FreeBSD: stable/11/cddl/usr.sbin/dtrace/tests/tools/dtest.sh 313126 2017-02-03 01:18:47Z markj $ 250461Swpaul 350461Swpaulusage() 450461Swpaul{ 550461Swpaul cat >&2 <<__EOF__ 650461SwpaulA harness for test cases in the DTrace test suite. 750461Swpaul 850461Swpaulusage: $(basename $0) <testfile> 950461Swpaul__EOF__ 1050461Swpaul exit 1 1150461Swpaul} 1250461Swpaul 1350461Swpaulgettag() 1450461Swpaul{ 1550461Swpaul local tag 1650461Swpaul 1750461Swpaul tag=$(basename $1) 1850461Swpaul tag=${tag#*.} 1950461Swpaul tag=${tag%%[a-z.]*} 2050461Swpaul echo $tag 2150461Swpaul} 2250461Swpaul 2350461Swpaulruntest() 2450461Swpaul{ 2550461Swpaul local dflags exe exstatus pid retval status 2650461Swpaul 2750461Swpaul exstatus=0 2850461Swpaul retval=0 2950461Swpaul 3050461Swpaul case $TFILE in 3150461Swpaul drp.DTRACEDROP_*.d|err.*.d|tst.*.d) 3250461Swpaul case $TFILE in 33139749Simp drp.DTRACEDROP_*.d) 3450461Swpaul dflags="-x droptags" 3550461Swpaul tag=$(gettag "$TFILE") 3650461Swpaul ;; 3750461Swpaul err.D_*.d) 3850461Swpaul exstatus=1 3950461Swpaul dflags="-x errtags" 4050461Swpaul tag=$(gettag "$TFILE") 4150461Swpaul ;; 4250461Swpaul err.*.d) 4350461Swpaul exstatus=1 4450461Swpaul ;; 4550461Swpaul esac 4650461Swpaul 4750461Swpaul exe=${TFILE%.*}.exe 4850461Swpaul if [ -f "$exe" -a -x "$exe" ]; then 4950461Swpaul ./$exe & 5050461Swpaul pid=$! 5150461Swpaul dflags="$dflags ${pid}" 5250461Swpaul fi 5350461Swpaul 5450461Swpaul dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR 5550461Swpaul status=$? 5650461Swpaul 57129844Smarius if [ $status -ne $exstatus ]; then 58129844Smarius ERRMSG="dtrace exited with status ${status}, expected ${exstatus}" 59129844Smarius retval=1 6050461Swpaul elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then 6150461Swpaul ERRMSG="dtrace's error output did not contain expected tag ${tag}" 6250461Swpaul retval=1 6350461Swpaul fi 6450461Swpaul 6550461Swpaul if [ -n "$pid" ]; then 6650461Swpaul kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1 6750461Swpaul wait 6850461Swpaul fi 6950461Swpaul ;; 7050461Swpaul err.*.ksh|tst.*.ksh) 7172196Sjhb expr "$TFILE" : 'err.*' >/dev/null && exstatus=1 7250461Swpaul 7350461Swpaul tst=$TFILE ksh "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR 7450461Swpaul status=$? 7550461Swpaul 7650461Swpaul if [ $status -ne $exstatus ]; then 7750461Swpaul ERRMSG="script exited with status ${status}, expected ${exstatus}" 7850461Swpaul retval=1 7950461Swpaul fi 80109514Sobrien ;; 8150461Swpaul *) 8250461Swpaul ERRMSG="unexpected test file name $TFILE" 8350461Swpaul retval=1 8450461Swpaul ;; 8550461Swpaul esac 8650461Swpaul 8750461Swpaul return $retval 8850461Swpaul} 8950461Swpaul 9050461Swpaul[ $# -eq 1 ] || usage 91105135Salfred 92105135Salfredreadonly STDERR=$(mktemp) 9350461Swpaulreadonly STDOUT=$(mktemp) 9450461Swpaulreadonly TFILE=$(basename $1) 9550461Swpaulreadonly EXOUT=${TFILE}.out 9650461Swpaul 9750461Swpaulkldstat -q -m dtrace_test || kldload dtrace_test 9895722Sphkcd $(dirname $1) 9950461Swpaulruntest 10050461SwpaulRESULT=$? 10150461Swpaul 10250461Swpaulif [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \ 10350461Swpaul ! cmp $STDOUT $EXOUT >/dev/null 2>&1; then 10450461Swpaul ERRMSG="test output mismatch" 10550461Swpaul RESULT=1 10650461Swpaulfi 10750461Swpaul 10850461Swpaulif [ $RESULT -ne 0 ]; then 10950461Swpaul echo "test $TFILE failed: $ERRMSG" >&2 11050461Swpaul if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then 11150461Swpaul cat >&2 <<__EOF__ 11250461Swpaultest stdout: 11392739Salfred-- 11496026Sphk$(cat $STDOUT) 11592739Salfred-- 116221407Smarius__EOF__ 11750461Swpaul fi 118164827Smarius if [ $(stat -f '%z' $STDERR) -gt 0 ]; then 119221407Smarius cat >&2 <<__EOF__ 120164827Smariustest stderr: 121164827Smarius-- 122164827Smarius$(cat $STDERR) 123221407Smarius-- 124221407Smarius__EOF__ 125221407Smarius fi 126221407Smariusfi 127221407Smarius 128221407Smariusrm -f $STDERR $STDOUT 129105135Salfredexit $RESULT 130150763Simp