xref: /freebsd/cddl/usr.sbin/dtrace/tests/tools/gentest.sh (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
14ddbe5acSMark Johnston
24ddbe5acSMark Johnstonusage()
34ddbe5acSMark Johnston{
44ddbe5acSMark Johnston    cat <<__EOF__ >&2
54ddbe5acSMark JohnstonGenerate ATF test cases from a set of DTrace tests.
64ddbe5acSMark Johnston
74ddbe5acSMark Johnstonusage: sh $(basename $0) [-e <excludes>] <category> [<testfiles>]
84ddbe5acSMark Johnston
94ddbe5acSMark Johnston  excludes:     A shell script which defines test cases that are to be skipped,
104ddbe5acSMark Johnston                or aren't expected to pass.
114ddbe5acSMark Johnston  category:     The test category, in the form of <arch>/<feature>. For example,
124ddbe5acSMark Johnston                "common/aggs" is the test category for D aggregations.
134ddbe5acSMark Johnston  testfiles:    The test files for the tests in the specified category.
144ddbe5acSMark Johnston__EOF__
154ddbe5acSMark Johnston    exit 1
164ddbe5acSMark Johnston}
174ddbe5acSMark Johnston
184ddbe5acSMark Johnstongentestcase()
194ddbe5acSMark Johnston{
204ddbe5acSMark Johnston    local mod tcase tfile
214ddbe5acSMark Johnston
224ddbe5acSMark Johnston    tfile=$1
234ddbe5acSMark Johnston    tcase=$2
244ddbe5acSMark Johnston    mod=$3
254ddbe5acSMark Johnston
264ddbe5acSMark Johnston    cat <<__EOF__
274ddbe5acSMark Johnstonatf_test_case $tcase
284ddbe5acSMark Johnston${tcase}_head()
294ddbe5acSMark Johnston{
304ddbe5acSMark Johnston    atf_set 'descr' 'DTrace test ${CATEGORY}/${tfile}'
314ddbe5acSMark Johnston}
324ddbe5acSMark Johnston${tcase}_body()
334ddbe5acSMark Johnston{
344ddbe5acSMark Johnston    $mod
3541aeaf2aSMark Johnston    atf_check -s exit:0 -o empty -e empty \\
3641aeaf2aSMark Johnston        "\$(atf_get_srcdir)/../../dtest" "\$(atf_get_srcdir)/${tfile}"
374ddbe5acSMark Johnston}
384ddbe5acSMark Johnston__EOF__
394ddbe5acSMark Johnston}
404ddbe5acSMark Johnston
414ddbe5acSMark Johnstongentestcases()
424ddbe5acSMark Johnston{
434ddbe5acSMark Johnston    local mod tcase tfile tfiles
444ddbe5acSMark Johnston
454ddbe5acSMark Johnston    eval tfiles=\$$1
464ddbe5acSMark Johnston    mod=$2
474ddbe5acSMark Johnston
484ddbe5acSMark Johnston    for tfile in ${tfiles}; do
494ddbe5acSMark Johnston        case $tfile in
504ddbe5acSMark Johnston        drp.*.d|err.*.d|tst.*.d|*.ksh)
514ddbe5acSMark Johnston            # Test names need to be mangled for ATF.
524ddbe5acSMark Johnston            tcase=$(echo "$tfile" | tr '.-' '_')
534ddbe5acSMark Johnston            gentestcase "$tfile" "$tcase" "$mod"
544ddbe5acSMark Johnston            TCASES="$TCASES $tcase"
554ddbe5acSMark Johnston            ;;
564ddbe5acSMark Johnston        esac
574ddbe5acSMark Johnston    done
584ddbe5acSMark Johnston}
594ddbe5acSMark Johnston
604ddbe5acSMark Johnstonset -e
614ddbe5acSMark Johnston
624ddbe5acSMark Johnston#
634ddbe5acSMark Johnston# Parse arguments.
644ddbe5acSMark Johnston#
654ddbe5acSMark Johnstoncase $1 in
664ddbe5acSMark Johnston-e)
674ddbe5acSMark Johnston    shift; EXCLUDES=$1; shift
684ddbe5acSMark Johnston    ;;
694ddbe5acSMark Johnstonesac
704ddbe5acSMark Johnston
714ddbe5acSMark JohnstonCATEGORY=$1
724ddbe5acSMark Johnstonshift
734ddbe5acSMark Johnstonif ! expr "$CATEGORY" : '[^/]*/[^/]*' >/dev/null 2>&1; then
744ddbe5acSMark Johnston    usage
754ddbe5acSMark Johnstonfi
764ddbe5acSMark JohnstonFEATURE=$(basename ${CATEGORY})
774ddbe5acSMark JohnstonARCH=$(dirname ${CATEGORY})
784ddbe5acSMark Johnston
794ddbe5acSMark Johnston#
804ddbe5acSMark Johnston# Remove skipped tests and expected failures from the main test list.
814ddbe5acSMark Johnston#
824ddbe5acSMark Johnston. $EXCLUDES
834ddbe5acSMark JohnstonEXFAILS=$(echo -e "$EXFAIL" | grep "^${CATEGORY}/" | xargs basename -a)
844ddbe5acSMark JohnstonSKIPS=$(echo -e "$SKIP" | grep "^${CATEGORY}/" | xargs basename -a)
85*e62aee66SLi-Wen HsuSKIPCIS=$(echo -e "$SKIPCI" | grep "^${CATEGORY}/" | xargs basename -a)
864ddbe5acSMark Johnston
874ddbe5acSMark JohnstonFILELIST=$(mktemp)
884ddbe5acSMark Johnstontrap 'rm -f $FILELIST' EXIT
894ddbe5acSMark Johnston
904ddbe5acSMark Johnstonecho "$@" | tr ' ' '\n' | xargs basename -a | sort > ${FILELIST}
91*e62aee66SLi-Wen HsuTFILES=$(printf '%s\n%s' "$EXFAILS" "$SKIPS" "$SKIPCIS" | sort | comm -13 /dev/stdin $FILELIST)
924ddbe5acSMark Johnston
934ddbe5acSMark Johnston#
944ddbe5acSMark Johnston# Generate test cases.
954ddbe5acSMark Johnston#
964ddbe5acSMark Johnstongentestcases SKIPS "atf_skip \"test may hang or cause system instability\""
974ddbe5acSMark Johnstongentestcases EXFAILS "atf_expect_fail \"test is known to fail\""
98*e62aee66SLi-Wen Hsugentestcases SKIPCIS "if [ \"\$(atf_config_get ci false)\" = \"true\" ]; then atf_skip \"see cddl/usr.sbin/dtrace/tests/tools/exclude.sh\"; fi"
994ddbe5acSMark Johnstongentestcases TFILES
1004ddbe5acSMark Johnston
1014ddbe5acSMark Johnston#
1024ddbe5acSMark Johnston# Generate the test init function.
1034ddbe5acSMark Johnston#
1044ddbe5acSMark Johnstoncat <<__EOF__
1054ddbe5acSMark Johnstonatf_init_test_cases()
1064ddbe5acSMark Johnston{
1074ddbe5acSMark Johnston$(for tcase in ${TCASES}; do echo "    atf_add_test_case $tcase"; done)
1084ddbe5acSMark Johnston}
1094ddbe5acSMark Johnston__EOF__
1104ddbe5acSMark Johnston
1114ddbe5acSMark Johnstonrm -f $FILELIST
112