diff options
Diffstat (limited to 'cddl/usr.sbin/dtrace/tests/tools/gentest.sh')
-rwxr-xr-x | cddl/usr.sbin/dtrace/tests/tools/gentest.sh | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/cddl/usr.sbin/dtrace/tests/tools/gentest.sh b/cddl/usr.sbin/dtrace/tests/tools/gentest.sh new file mode 100755 index 0000000..9c34b79 --- /dev/null +++ b/cddl/usr.sbin/dtrace/tests/tools/gentest.sh @@ -0,0 +1,110 @@ +# $FreeBSD$ + +usage() +{ + cat <<__EOF__ >&2 +Generate ATF test cases from a set of DTrace tests. + +usage: sh $(basename $0) [-e <excludes>] <category> [<testfiles>] + + excludes: A shell script which defines test cases that are to be skipped, + or aren't expected to pass. + category: The test category, in the form of <arch>/<feature>. For example, + "common/aggs" is the test category for D aggregations. + testfiles: The test files for the tests in the specified category. +__EOF__ + exit 1 +} + +gentestcase() +{ + local mod tcase tfile + + tfile=$1 + tcase=$2 + mod=$3 + + cat <<__EOF__ +atf_test_case $tcase +${tcase}_head() +{ + atf_set 'descr' 'DTrace test ${CATEGORY}/${tfile}' +} +${tcase}_body() +{ + $mod + atf_check -s exit:0 -o empty -e empty \\ + "\$(atf_get_srcdir)/../../dtest" "\$(atf_get_srcdir)/${tfile}" +} +__EOF__ +} + +gentestcases() +{ + local mod tcase tfile tfiles + + eval tfiles=\$$1 + mod=$2 + + for tfile in ${tfiles}; do + case $tfile in + drp.*.d|err.*.d|tst.*.d|*.ksh) + # Test names need to be mangled for ATF. + tcase=$(echo "$tfile" | tr '.-' '_') + gentestcase "$tfile" "$tcase" "$mod" + TCASES="$TCASES $tcase" + ;; + esac + done +} + +set -e + +# +# Parse arguments. +# +case $1 in +-e) + shift; EXCLUDES=$1; shift + ;; +esac + +CATEGORY=$1 +shift +if ! expr "$CATEGORY" : '[^/]*/[^/]*' >/dev/null 2>&1; then + usage +fi +FEATURE=$(basename ${CATEGORY}) +ARCH=$(dirname ${CATEGORY}) + +# +# Remove skipped tests and expected failures from the main test list. +# +. $EXCLUDES +EXFAILS=$(echo -e "$EXFAIL" | grep "^${CATEGORY}/" | xargs basename -a) +SKIPS=$(echo -e "$SKIP" | grep "^${CATEGORY}/" | xargs basename -a) + +FILELIST=$(mktemp) +trap 'rm -f $FILELIST' EXIT + +echo "$@" | tr ' ' '\n' | xargs basename -a | sort > ${FILELIST} +TFILES=$(printf '%s\n%s' "$EXFAILS" "$SKIPS" | sort | comm -13 /dev/stdin $FILELIST) + +# +# Generate test cases. +# +gentestcases SKIPS "atf_skip \"test may hang or cause system instability\"" +gentestcases EXFAILS "atf_expect_fail \"test is known to fail\"" +gentestcases TFILES + +# +# Generate the test init function. +# +cat <<__EOF__ +atf_init_test_cases() +{ +$(for tcase in ${TCASES}; do echo " atf_add_test_case $tcase"; done) +} +__EOF__ + +rm -f $FILELIST |