xfstests: rework CLI individual test specification

Now that tests are in separate subdirectories, they cannot be selected purely by
test number on the command line. We need to specify the test by subdir and test
name, so effectively we move to specifying them by regexes on the command line
rather than by expanding a range internally. This is needed to support
non-numeric test names as well, so the change may as well be made here.

This means the command line parsing needs to change from trying to detect tests
by a regex match to a processing loop that simply parses the tests and checks
for there existence. Hence the moment we find an argument that is not a switch
(i.e no preceeding "-"), we move from the arg processing loop to the test name
processing loop. IOWs, tests must be specified last on the command line.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Phil White <pwhite@sgi.com>
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
This commit is contained in:
Dave Chinner
2013-03-15 12:27:59 +00:00
committed by Rich Johnston
parent 8ff10d6d1c
commit cbcc88fbd0
+36 -48
View File
@@ -71,8 +71,7 @@ check options
testlist options
-g group[,group...] include tests from these groups
-x group[,group...] exclude tests from these groups
NNN include test NNN
NNN-NNN include test range (eg. 012-021)
[testlist] include tests matching names in testlist
'
exit 0
}
@@ -97,26 +96,6 @@ get_group_list()
echo $grpl
}
expand_test_numbers()
{
# strip leading zeros, could be considered octal.
start=`echo $1 | sed 's/^0*//'`
end=`echo $2 | sed 's/^0*//'`
$AWK_PROG </dev/null '
BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
| while read id
do
if grep -s "^$id " group >/dev/null ; then
# in group file ... OK
echo $id >>$tmp.list
else
# oops
echo "$id - unknown test, ignored"
fi
done
}
_wallclock()
{
date "+%H %M %S" | $AWK_PROG '{ print $1*3600 + $2*60 + $3 }'
@@ -146,6 +125,7 @@ then
exit 1
fi
# Process command arguments first.
while [ $# -gt 0 ]; do
case "$1" in
-\? | -h | --help) usage ;;
@@ -202,41 +182,49 @@ while [ $# -gt 0 ]; do
-T) timestamp=true ;;
"$SUPPORTED_TESTS")
echo "No tests?"
status=1
exit $status
;;
[0-9]*-[0-9]*)
eval `echo $1 | sed -e 's/^/start=/' -e 's/-/ end=/'`
expand_test_numbers $start $end
have_test_arg=true
;;
[0-9]*-)
eval `echo $1 | sed -e 's/^/start=/' -e 's/-//'`
end=`echo $SUPPORTED_TESTS | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'`
if [ -z "$end" ]; then
echo "No tests in range \"$1\"?"
status=1
exit $status
fi
expand_test_numbers $start $end
have_test_arg=true
;;
--large-fs) export LARGE_SCRATCH_DEV=yes ;;
--extra-space=*) export SCRATCH_DEV_EMPTY_SPACE=${r#*=} ;;
-*) usage ;;
*) expand_test_numbers $1 $1 ;
have_test_arg=true
*) # not an argument, we've got tests now.
have_test_arg=true ;;
esac
# if we've found a test specification, the break out of the processing
# loop before we shift the arguments so that this is the first argument
# that we process in the test arg loop below.
if $have_test_arg; then
break;
fi
shift
done
# Process tests from command line now.
if $have_test_arg; then
while [ $# -gt 0 ]; do
case "$1" in
-*) echo "Argments before tests, please!"
status=1
exit $status
;;
*) test_dir=`dirname $1`
test_name=`basename $1`
group_file=$SRC_DIR/$test_dir/group
if grep "^$testname" $group_file >/dev/null ; then
# in group file ... OK
echo $SRC_DIR/$1 >>$tmp.list
else
# oops
echo "$1 - unknown test, ignored"
fi
;;
esac
shift
done
fi
if [ -s $tmp.list ]; then
# found some valid test numbers ... this is good