Re: [PATCH 09/13] fstests: adapt the new test script to our new group tagging scheme

Allison Henderson
2021-06-14T05:39:00Z

On 6/8/21 10:20 AM, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> 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>
Other than the sed nit, looks ok to me
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>

> ---
> new | 179 ++++++++++++++++++++-----------------------------------------------
> 1 file changed, 54 insertions(+), 125 deletions(-)
>
>
> diff --git a/new b/new
> index 16e7c782..cdd909ad 100755
> --- a/new
> +++ b/new
> @@ -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=$(set -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
>