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