Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/cddl/usr.sbin/dtrace/tests/tools/dtest.sh
105171 views
1
#!/bin/sh
2
3
usage()
4
{
5
cat >&2 <<__EOF__
6
A harness for test cases in the DTrace test suite.
7
8
usage: $(basename $0) <testfile>
9
__EOF__
10
exit 1
11
}
12
13
gettag()
14
{
15
local tag
16
17
tag=$(basename $1)
18
tag=${tag#*.}
19
tag=${tag%%[a-z.]*}
20
echo $tag
21
}
22
23
runtest()
24
{
25
local dflags exe exstatus pid retval status
26
27
exstatus=0
28
retval=0
29
30
case $TFILE in
31
drp.DTRACEDROP_*.d|err.*.d|tst.*.d)
32
case $TFILE in
33
drp.DTRACEDROP_*.d)
34
dflags="-x droptags"
35
tag=$(gettag "$TFILE")
36
;;
37
err.D_*.d)
38
exstatus=1
39
dflags="-x errtags"
40
tag=$(gettag "$TFILE")
41
;;
42
err.*.d)
43
exstatus=1
44
;;
45
esac
46
47
exe=${TFILE%.*}.exe
48
if [ -f "$exe" -a -x "$exe" ]; then
49
./$exe &
50
pid=$!
51
dflags="$dflags ${pid}"
52
fi
53
54
dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR
55
status=$?
56
57
if [ $status -ne $exstatus ]; then
58
ERRMSG="dtrace exited with status ${status}, expected ${exstatus}"
59
retval=1
60
elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then
61
ERRMSG="dtrace's error output did not contain expected tag ${tag}"
62
retval=1
63
fi
64
65
if [ -n "$pid" ]; then
66
kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1
67
wait
68
fi
69
;;
70
err.*.ksh|tst.*.ksh)
71
expr "$TFILE" : 'err.*' >/dev/null && exstatus=1
72
73
tst=$TFILE ksh -p "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR
74
status=$?
75
76
if [ $status -ne $exstatus ]; then
77
ERRMSG="script exited with status ${status}, expected ${exstatus}"
78
retval=1
79
fi
80
;;
81
*)
82
ERRMSG="unexpected test file name $TFILE"
83
retval=1
84
;;
85
esac
86
87
if [ $retval -eq 0 ] && \
88
head -n 1 $STDOUT | grep -q -E '^#!/.*ksh$'; then
89
ksh -p $STDOUT
90
retval=$?
91
fi
92
93
return $retval
94
}
95
96
[ $# -eq 1 ] || usage
97
98
readonly STDERR=$(mktemp)
99
readonly STDOUT=$(mktemp)
100
readonly TFILE=$(basename $1)
101
readonly EXOUT=${TFILE}.out
102
103
kldload -n dtrace_test
104
cd $(dirname $1)
105
runtest
106
RESULT=$?
107
108
if [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \
109
! cmp $STDOUT $EXOUT >/dev/null 2>&1; then
110
ERRMSG="test output mismatch"
111
RESULT=1
112
fi
113
114
if [ $RESULT -ne 0 ]; then
115
echo "test $TFILE failed: $ERRMSG" >&2
116
if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then
117
cat >&2 <<__EOF__
118
test stdout:
119
--
120
$(cat $STDOUT)
121
--
122
test stdout diff:
123
--
124
$(diff -u $EXOUT $STDOUT)
125
--
126
__EOF__
127
fi
128
if [ $(stat -f '%z' $STDERR) -gt 0 ]; then
129
cat >&2 <<__EOF__
130
test stderr:
131
--
132
$(cat $STDERR)
133
--
134
__EOF__
135
fi
136
fi
137
138
rm -f $STDERR $STDOUT
139
exit $RESULT
140
141