fstests: adapt the new test script to our new group tagging scheme

Now that we autogenerate group files, adapt the new test creation script
to use autogenerated group files and to set the group data in the new
test.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Darrick J. Wong
2021-06-21 08:56:00 -07:00
committed by Eryu Guan
parent 5a5f95007a
commit 810df5225b
+54 -125
View File
@@ -9,7 +9,8 @@
iam=new
. ./common/test_names
trap "rm -f /tmp/$$.; exit" 0 1 2 3 15
tmpfile="/tmp/$$."
trap "rm -f $tmpfile; exit" 0 1 2 3 15
_cleanup()
{
@@ -26,71 +27,18 @@ usage()
[ $# -eq 0 ] && usage
tdir=tests/$1
shift
if [ ! -f $tdir/group ]
then
echo "Creating the $tdir/group index ..."
cat <<'End-of-File' >$tdir/group
# QA groups control
#
# define groups and default group owners
# do not start group name with a digit
#
# catch-all
#
other some-user-login
# test-group association ... one line per test
#
End-of-File
fi
if [ ! -w $tdir/group ]
then
chmod u+w $tdir/group
echo "Warning: making the index file \"$tdir/group\" writeable"
fi
if make
then
:
else
echo "Warning: make failed -- some tests may be missing"
fi
i=0
line=0
eof=1
[ -f "$tdir/group" ] || usage
[ -d "$tdir/" ] || usage
export AWK_PROG="$(type -P awk)"
[ "$AWK_PROG" = "" ] && { echo "awk not found"; exit; }
for found in `cat $tdir/group | tr - ' ' | $AWK_PROG '{ print $1 }'`
do
line=$((line+1))
if [ -z "$found" ] || [ "$found" == "#" ]; then
continue
elif ! echo "$found" | grep -q "^$VALID_TEST_NAME$"; then
# this one is for tests not named by a number
continue
fi
i=$((i+1))
id=`printf "%03d" $i`
if [ "$id" != "$found" ];then
eof=0
break
fi
done
if [ $eof -eq 1 ]; then
line=$((line+1))
i=$((i+1))
id=`printf "%03d" $i`
fi
id="$(basename "$(./tools/nextid "$1")")"
echo "Next test id is $id"
shift
read -p "Append a name to the ID? Test name will be $id-\$name. y,[n]: " -r
if [[ $REPLY = [Yy] ]]; then
@@ -113,24 +61,9 @@ if [[ $REPLY = [Yy] ]]; then
fi
done
# now find where to insert this name
eof=1
for found in `tail -n +$line $tdir/group | $AWK_PROG '{ print $1 }'`; do
found_id=$(echo "$found" | cut -d "-" -f 1 - )
line=$((line+1))
if [ -z "$found" ] || [ "$found" == "#" ]; then
continue
elif [ $found_id -gt $id ]; then
eof=0
break
fi
done
if [ $eof -eq 0 ]; then
# If place wasn't found, let $line be the end of the file
line=$((line-1))
fi
id="$id-$name"
fi
echo "Creating test file '$id'"
if [ -f $tdir/$id ]
@@ -140,6 +73,53 @@ then
exit 1
fi
if [ $# -eq 0 ]
then
while true
do
echo -n "Add to group(s) [other] (separate by space, ? for list): "
read ans
[ -z "$ans" ] && ans=other
if [ "X$ans" = "X?" ]
then
for d in $SRC_GROUPS; do
(cd "tests/$d/" ; ../../tools/mkgroupfile "$tmpfile")
l=$(sed -n < "$tmpfile" \
-e 's/#.*//' \
-e 's/$/ /' \
-e 's;\(^[0-9][0-9][0-9]\)\(.*$\);\2;p')
grpl="$grpl $l"
done
lst=`for word in $grpl; do echo $word; done | sort| uniq `
echo $lst
else
# only allow lower cases, spaces, digits and underscore in group
inval=`echo $ans | tr -d '[:lower:][:space:][:digit:]_'`
if [ "$inval" != "" ]; then
echo "Invalid characters in group(s): $inval"
echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
continue
else
# remove redundant spaces/tabs
ans=`echo "$ans" | sed 's/\s\+/ /g'`
break
fi
fi
done
else
# expert mode, groups are on the command line
#
(cd "$tdir" ; ../../tools/mkgroupfile "$tmpfile")
for g in $*
do
if ! grep -q "[[:space:]]$g" "$tmpfile"; then
echo "Warning: group \"$g\" not defined in $tdir tests"
fi
done
ans="$*"
fi
echo -n "Creating skeletal script for you to edit ..."
year=`date +%Y`
@@ -154,7 +134,7 @@ cat <<End-of-File >$tdir/$id
# what am I here for?
#
. ./common/preamble
_begin_fstest group list here
_begin_fstest $ans
# Override the default cleanup function.
# _cleanup()
@@ -196,56 +176,5 @@ QA output created by $id
Silence is golden
End-of-File
if [ $# -eq 0 ]
then
while true
do
echo -n "Add to group(s) [other] (separate by space, ? for list): "
read ans
[ -z "$ans" ] && ans=other
if [ "X$ans" = "X?" ]
then
for d in $SRC_GROUPS; do
l=$(sed -n < tests/$d/group \
-e 's/#.*//' \
-e 's/$/ /' \
-e 's;\(^[0-9][0-9][0-9]\)\(.*$\);\2;p')
grpl="$grpl $l"
done
lst=`for word in $grpl; do echo $word; done | sort| uniq `
echo $lst
else
# only allow lower cases, spaces, digits and underscore in group
inval=`echo $ans | tr -d '[:lower:][:space:][:digit:]_'`
if [ "$inval" != "" ]; then
echo "Invalid characters in group(s): $inval"
echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
continue
else
# remove redundant spaces/tabs
ans=`echo "$ans" | sed 's/\s\+/ /g'`
break
fi
fi
done
else
# expert mode, groups are on the command line
#
for g in $*
do
if ! grep -q "[[:space:]]$g" "$tdir/group"; then
echo "Warning: group \"$g\" not defined in $tdir/group"
fi
done
ans="$*"
fi
echo -n "Adding $id to group index ..."
head -n $(($line-1)) $tdir/group > /tmp/$$.group
echo "$id $ans" >> /tmp/$$.group
tail -n +$((line)) $tdir/group >> /tmp/$$.group
mv /tmp/$$.group $tdir/group
echo " done."
exit 0