-#! /bin/sh
+#! /bin/bash
#
-# Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of version 2 of the GNU General Public License as
+#-----------------------------------------------------------------------
+# Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like. Any license provided herein, whether implied or
-# otherwise, applies only to this software file. Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
-# Mountain View, CA 94043, or:
-#
-# http://www.sgi.com
-#
-# For further information regarding this notice, see:
-#
-# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
#
-# Make a new test
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+#-----------------------------------------------------------------------
#
-# $Header: /build2/depot/linux/pcp/dev/qa/RCS/new,v 2.22 1999/10/06 19:16:53 kenmcd Exp $
+# Make a new test
#
# generic initialization
iam=new
-. ./common.rc
+. ./common/rc
trap "rm -f /tmp/$$.; exit" 0 1 2 3 15
:
}
-if [ ! -f group ]
+SRC_GROUPS=`find tests -not -path tests -type d -printf "%f "`
+usage()
+{
+ echo "Usage $0 test_dir"
+ echo "Available dirs are: $SRC_GROUPS"
+ exit
+}
+
+[ $# -eq 0 ] && usage
+tdir=tests/$1
+shift
+
+if [ ! -f $tdir/group ]
then
- echo "Creating the group index ..."
- cat <<'End-of-File' >group
+ echo "Creating the $tdir/group index ..."
+ cat <<'End-of-File' >$tdir/group
# QA groups control
#
-# $Id: new,v 2.22 1999/10/06 19:16:53 kenmcd Exp $
-#
# define groups and default group owners
# do not start group name with a digit
#
End-of-File
fi
-if [ ! -w group ]
+if [ ! -w $tdir/group ]
then
- chmod u+w group
- echo "Warning: making the index file \"group\" writeable"
+ chmod u+w $tdir/group
+ echo "Warning: making the index file \"$tdir/group\" writeable"
fi
if make
echo "Warning: make failed -- some tests may be missing"
fi
-last=`grep '^[0-9][0-9]* ' group | sort | tail -1 | sed -e 's/[ ].*//'`
-# get rid of leading 0s as can be interpreted as octal
-last=`echo $last | sed 's/^0*//'`
-id=`$AWK_PROG </dev/null 'BEGIN{printf "%03d\n",'$last'+1}'`
-echo "Next test is $id"
+i=0
+line=0
+eof=1
+[ -f "$tdir/group" ] || usage
+
+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
+
+echo "Next test id is $id"
-if [ -f $id ]
+read -p "Append a name to the ID? Test name will be $id-\$name. y,[n]: " -r
+if [[ $REPLY = [Yy] ]]; then
+ # get the new name from user
+ name=""
+ while [ "$name" = "" ]; do
+ read -p "Enter the name: "
+ if [ "$REPLY" = "" ]; then
+ echo "For canceling, use ctrl+c."
+ elif echo "$id-$REPLY" | grep -q "^$VALID_TEST_NAME$"; then
+ if [ -e "$tdir/$id-$REPLY" ]; then
+ echo "File '$id-$REPLY' already exists, use another one."
+ echo
+ else
+ name="$REPLY"
+ fi
+ else
+ echo "A name can contain only alphanumeric symbols and dash!"
+ echo
+ 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 ]
then
echo "Error: test $id already exists!"
_cleanup
echo -n "Creating skeletal script for you to edit ..."
-cat <<End-of-File | sed -e '/rcsId/s//Id: 1.1 /' >$id
-#! /bin/sh
-# XFS QA Test No. $id
-# \$rcsId\$
+year=`date +%Y`
+
+cat <<End-of-File >$tdir/$id
+#! /bin/bash
+# FS QA Test $id
#
# what am I here for?
#
#-----------------------------------------------------------------------
-# Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of version 2 of the GNU General Public License as
+# Copyright (c) $year YOUR NAME HERE. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Further, this software is distributed without any warranty that it is
-# free of the rightful claim of any third person regarding infringement
-# or the like. Any license provided herein, whether implied or
-# otherwise, applies only to this software file. Patent licenses, if
-# any, provided herein do not apply to combinations of this program with
-# other software, or any other product whatsoever.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston MA 02111-1307, USA.
-#
-# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
-# Mountain View, CA 94043, or:
-#
-# http://www.sgi.com
-#
-# For further information regarding this notice, see:
-#
-# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
-# creator
-owner=$USER@`_get_fqdn`
seq=\`basename \$0\`
+seqres=\$RESULT_DIR/\$seq
echo "QA output created by \$seq"
here=\`pwd\`
tmp=/tmp/\$\$
status=1 # failure is the default!
-trap "rm -f \$tmp.*; exit \\\$status" 0 1 2 3 15
+trap "_cleanup; exit \\\$status" 0 1 2 3 15
+
+_cleanup()
+{
+ cd /
+ rm -f \$tmp.*
+}
# get standard environment, filters and checks
-. ./common.rc
-. ./common.filter
+. ./common/rc
+. ./common/filter
+
+# remove previous \$seqres.full before test
+rm -f \$seqres.full
# real QA test starts here
+# Modify as appropriate.
+_supported_fs generic
+_supported_os Linux
+_require_test
+
# if error
exit
# optional stuff if your test has verbose output to help resolve problems
#echo
-#echo "If failure, check \$seq.full (this) and \$seq.full.ok (reference)"
+#echo "If failure, check \$seqres.full (this) and \$seqres.full.ok (reference)"
# success, all done
status=0
sleep 2 # latency to read messages to this point
echo ""
-chmod 755 $id
-${EDITOR-vi} $id
+chmod 755 $tdir/$id
+${EDITOR-vi} $tdir/$id
+
+# Create default .out file
+cat <<End-of-File >$tdir/$id.out
+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] (? for list): "
+ echo -n "Add to group(s) [other] (separate by space, ? for list): "
read ans
[ -z "$ans" ] && ans=other
if [ "X$ans" = "X?" ]
then
- $AWK_PROG <group '
-BEGIN { text = "# ???" }
-/^[a-zA-z]/ { printf "%-16.16s %s\n",$1,text; text = "# ???"; next }
-NF < 2 { next }
- { text = $0 }' \
- | sort
+ 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
- break
+ # 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
#
for g in $*
do
- if grep "^$g[ ]" group >/dev/null
+ if grep "^$g[ ]" $tdir/group >/dev/null
then
:
else
- echo "Warning: group \"$g\" not defined in ./group"
+ echo "Warning: group \"$g\" not defined in $tdir/group"
fi
done
ans="$*"
fi
echo -n "Adding $id to group index ..."
-echo "$id $ans" >>group
+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