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