]> granicus.if.org Git - zfs/commitdiff
Allow zfs-tests to run a single test
authorGiuseppe Di Natale <dinatale2@users.noreply.github.com>
Fri, 24 Feb 2017 18:59:24 +0000 (10:59 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 24 Feb 2017 18:59:24 +0000 (10:59 -0800)
Add a -t flag to zfs-tests to allow a user
to run a single test by providing the path
to the test relative to STF_SUITE.

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Closes #5775

scripts/zfs-tests.sh

index 00a7ceabcca9558d4bf0e105d4fb1c0a14e1c422..b1be68bd15698d3e79271a3740d0f80cd91dc6c6 100755 (executable)
@@ -43,6 +43,8 @@ FILESIZE="4G"
 RUNFILE=${RUNFILE:-"linux.run"}
 FILEDIR=${FILEDIR:-/var/tmp}
 DISKS=${DISKS:-""}
+SINGLETEST=()
+SINGLETESTUSER="root"
 
 #
 # Attempt to remove loopback devices and files which where created earlier
@@ -167,6 +169,8 @@ OPTIONS:
        -d DIR      Use DIR for files and loopback devices
        -s SIZE     Use vdevs of SIZE (default: 4G)
        -r RUNFILE  Run tests in RUNFILE (default: linux.run)
+       -t PATH     Run single test at PATH
+       -u USER     Run single test as USER (default: root)
 
 EXAMPLES:
 # Run the default (linux) suite of tests and output the configuration used.
@@ -182,7 +186,7 @@ $0 -x
 EOF
 }
 
-while getopts 'hvqxkfd:s:r:?' OPTION; do
+while getopts 'hvqxkfd:s:r:?t:u:' OPTION; do
        case $OPTION in
        h)
                usage
@@ -212,6 +216,15 @@ while getopts 'hvqxkfd:s:r:?' OPTION; do
        r)
                RUNFILE="$OPTARG"
                ;;
+       t)
+               if [ ${#SINGLETEST[@]} -ne 0 ]; then
+                       fail "-t can only be provided once."
+               fi
+               SINGLETEST+=("$OPTARG")
+               ;;
+       u)
+               SINGLETESTUSER="$OPTARG"
+               ;;
        ?)
                usage
                exit
@@ -224,6 +237,51 @@ shift $((OPTIND-1))
 FILES=${FILES:-"$FILEDIR/file-vdev0 $FILEDIR/file-vdev1 $FILEDIR/file-vdev2"}
 LOOPBACKS=${LOOPBACKS:-""}
 
+if [ ${#SINGLETEST[@]} -ne 0 ]; then
+       RUNFILEDIR="/var/tmp"
+       RUNFILE="zfs-tests.$$.run"
+       SINGLEQUIET="False"
+
+       if [ -n "$QUIET" ]; then
+               SINGLEQUIET="True"
+       fi
+
+       cat >$RUNFILEDIR/$RUNFILE << EOF
+[DEFAULT]
+pre =
+quiet = $SINGLEQUIET
+pre_user = root
+user = $SINGLETESTUSER
+timeout = 600
+post_user = root
+post =
+outputdir = /var/tmp/test_results
+EOF
+       for t in "${SINGLETEST[@]}"
+       do
+               SINGLETESTDIR=$(dirname "$t")
+               SINGLETESTFILE=$(basename "$t")
+               SETUPSCRIPT=
+               CLEANUPSCRIPT=
+
+               if [ -f "$SINGLETESTDIR/setup.ksh" ]; then
+                       SETUPSCRIPT="setup"
+               fi
+
+               if [ -f "$SINGLETESTDIR/cleanup.ksh" ]; then
+                       CLEANUPSCRIPT="cleanup"
+               fi
+
+               cat >>$RUNFILEDIR/$RUNFILE << EOF
+
+[$SINGLETESTDIR]
+tests = ['$SINGLETESTFILE']
+pre = $SETUPSCRIPT
+post = $CLEANUPSCRIPT
+EOF
+       done
+fi
+
 #
 # Attempt to locate the runfile describing the test workload.
 #
@@ -350,4 +408,8 @@ ${TEST_RUNNER} ${QUIET} -c ${RUNFILE} -i ${STF_SUITE}
 RESULT=$?
 echo
 
+if [ ${#SINGLETEST[@]} -ne 0 ]; then
+       rm -f "$RUNFILEDIR/$RUNFILE" &>/dev/null
+fi
+
 exit ${RESULT}