svn commit: r280835 - in head/cddl/usr.sbin/dtrace/tests: . tools
Mark Johnston
markj at FreeBSD.org
Mon Mar 30 04:01:51 UTC 2015
Author: markj
Date: Mon Mar 30 04:01:49 2015
New Revision: 280835
URL: https://svnweb.freebsd.org/changeset/base/280835
Log:
Replace dtest.pl, the upstream DTrace test suite harness, with a shell
script. This reimplementation is much simpler than dtest.pl and is more
amenable to being run under Kyua - dtest.pl writes error output to a
temporary directory that is deleted when the run finishes, making it hard
to debug test failures. This change also removes the test suite's dependency
on perl.
Added:
head/cddl/usr.sbin/dtrace/tests/tools/dtest.sh (contents, props changed)
Modified:
head/cddl/usr.sbin/dtrace/tests/Makefile
head/cddl/usr.sbin/dtrace/tests/Makefile.inc1
head/cddl/usr.sbin/dtrace/tests/tools/gentest.sh
Modified: head/cddl/usr.sbin/dtrace/tests/Makefile
==============================================================================
--- head/cddl/usr.sbin/dtrace/tests/Makefile Mon Mar 30 03:55:51 2015 (r280834)
+++ head/cddl/usr.sbin/dtrace/tests/Makefile Mon Mar 30 04:01:49 2015 (r280835)
@@ -8,10 +8,8 @@ TESTS_SUBDIRS+= common
.PATH: ${.CURDIR:H:H:H:H}/tests
KYUAFILE= YES
-.PATH: ${.CURDIR:H:H:H}/contrib/opensolaris/cmd/dtrace/test/cmd/scripts
+.PATH: ${.CURDIR}/tools
SCRIPTSDIR= ${TESTSDIR}
-SCRIPTS= dtest.pl
-
-SUBDIR_PARALLEL=
+SCRIPTS= dtest.sh
.include <bsd.test.mk>
Modified: head/cddl/usr.sbin/dtrace/tests/Makefile.inc1
==============================================================================
--- head/cddl/usr.sbin/dtrace/tests/Makefile.inc1 Mon Mar 30 03:55:51 2015 (r280834)
+++ head/cddl/usr.sbin/dtrace/tests/Makefile.inc1 Mon Mar 30 04:01:49 2015 (r280835)
@@ -16,7 +16,6 @@ ${TESTGROUP}EXEDIR= ${TESTSDIR}
TESTWRAPPER= t_dtrace_contrib
ATF_TESTS_SH+= ${TESTWRAPPER}
-TEST_METADATA.t_dtrace_contrib+= required_files="/usr/local/bin/perl"
TEST_METADATA.t_dtrace_contrib+= required_files="/usr/local/bin/ksh"
TEST_METADATA.t_dtrace_contrib+= required_user="root"
Added: head/cddl/usr.sbin/dtrace/tests/tools/dtest.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/cddl/usr.sbin/dtrace/tests/tools/dtest.sh Mon Mar 30 04:01:49 2015 (r280835)
@@ -0,0 +1,129 @@
+# $FreeBSD$
+
+usage()
+{
+ cat >&2 <<__EOF__
+A harness for test cases in the DTrace test suite.
+
+usage: $(basename $0) <testfile>
+__EOF__
+ exit 1
+}
+
+gettag()
+{
+ local tag
+
+ tag=$(basename $1)
+ tag=${tag#*.}
+ tag=${tag%%[a-z.]*}
+ echo $tag
+}
+
+runtest()
+{
+ local dflags exe exstatus pid retval status
+
+ exstatus=0
+ retval=0
+
+ case $TFILE in
+ drp.DTRACEDROP_*.d|err.*.d|tst.*.d)
+ case $TFILE in
+ drp.DTRACEDROP_*.d)
+ dflags="-x droptags"
+ tag=$(gettag "$TFILE")
+ ;;
+ err.D_*.d)
+ exstatus=1
+ dflags="-x errtags"
+ tag=$(gettag "$TFILE")
+ ;;
+ err.*.d)
+ exstatus=1
+ ;;
+ esac
+
+ exe=${TFILE%.*}.exe
+ if [ -f "$exe" -a -x "$exe" ]; then
+ ./$exe &
+ pid=$!
+ dflags="$dflags ${pid}"
+ fi
+
+ dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR
+ status=$?
+
+ if [ $status -ne $exstatus ]; then
+ ERRMSG="dtrace exited with status ${status}, expected ${exstatus}"
+ retval=1
+ elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then
+ ERRMSG="dtrace's error output did not contain expected tag ${tag}"
+ retval=1
+ fi
+
+ if [ -n "$pid" ]; then
+ kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1
+ wait
+ fi
+ ;;
+ err.*.ksh|tst.*.ksh)
+ expr "$TFILE" : 'err.*' >/dev/null && exstatus=1
+
+ ksh "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR
+ status=$?
+
+ if [ $status -ne $exstatus ]; then
+ ERRMSG="script exited with status ${status}, expected ${exstatus}"
+ retval=1
+ fi
+ ;;
+ *)
+ ERRMSG="unexpected test file name $TFILE"
+ retval=1
+ ;;
+ esac
+
+ return $retval
+}
+
+[ $# -eq 1 ] || usage
+
+readonly STDERR=$(mktemp)
+readonly STDOUT=$(mktemp)
+readonly TFILE=$(basename $1)
+readonly EXOUT=${TFILE}.out
+
+kldstat -q -m dtrace_test || kldload dtrace_test
+cd $(dirname $1)
+runtest
+RESULT=$?
+
+if [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \
+ ! cmp $STDOUT $EXOUT >/dev/null 2>&1; then
+ ERRMSG="test output mismatch"
+ RESULT=1
+fi
+
+if [ $RESULT -ne 0 ]; then
+ echo "test $TFILE failed: $ERRMSG" >&2
+ if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then
+ cat >&2 <<__EOF__
+test stdout:
+--
+$(cat $STDOUT)
+--
+__EOF__
+ fi
+ if [ $(stat -f '%z' $STDERR) -gt 0 ]; then
+ cat >&2 <<__EOF__
+test stderr:
+--
+$(cat $STDERR)
+--
+__EOF__
+ fi
+fi
+
+rm -f $STDERR $STDOUT
+exit $RESULT
Modified: head/cddl/usr.sbin/dtrace/tests/tools/gentest.sh
==============================================================================
--- head/cddl/usr.sbin/dtrace/tests/tools/gentest.sh Mon Mar 30 03:55:51 2015 (r280834)
+++ head/cddl/usr.sbin/dtrace/tests/tools/gentest.sh Mon Mar 30 04:01:49 2015 (r280835)
@@ -33,8 +33,8 @@ ${tcase}_head()
${tcase}_body()
{
$mod
- atf_check -s exit:0 -o ignore -e ignore \\
- "\$(atf_get_srcdir)/../../dtest" -n "\$(atf_get_srcdir)/${tfile}"
+ atf_check -s exit:0 -o empty -e empty \\
+ "\$(atf_get_srcdir)/../../dtest" "\$(atf_get_srcdir)/${tfile}"
}
__EOF__
}
More information about the svn-src-all
mailing list