]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zts: allow running a single test by name only
authorRob N <rob.norris@klarasystems.com>
Mon, 15 Apr 2024 20:44:12 +0000 (06:44 +1000)
committerGitHub <noreply@github.com>
Mon, 15 Apr 2024 20:44:12 +0000 (13:44 -0700)
Specifying a single test is kind of a hassle, because the full relative
path under the test suite dir has to be included, but it's not always
clear what that path even is.

This change allows `-t` to take the name of a single test instead of a
full path. If the value has no `/` characters, we search for a file of
that name under the test root, and if found, use that as the full test
path instead.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Akash B <akash-b@hpe.com>
Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #16088

scripts/zfs-tests.sh

index 179e24d7a0ef1fa5519629002d216dd09adc8fa2..b5b3e4ab351fb610a4360cff868a5b560a6f336e 100755 (executable)
@@ -326,7 +326,8 @@ OPTIONS:
        -d DIR      Use world-writable DIR for files and loopback devices
        -s SIZE     Use vdevs of SIZE (default: 4G)
        -r RUNFILES Run tests in RUNFILES (default: ${DEFAULT_RUNFILES})
-       -t PATH     Run single test at PATH relative to test suite
+       -t PATH|NAME  Run single test at PATH relative to test suite,
+                       or search for test by NAME
        -T TAGS     Comma separated list of tags (default: 'functional')
        -u USER     Run single test as USER (default: root)
 
@@ -340,6 +341,9 @@ $0 -r linux-fast
 # Run a single test
 $0 -t tests/functional/cli_root/zfs_bookmark/zfs_bookmark_cliargs.ksh
 
+# Run a single test by name
+$0 -t zfs_bookmark_cliargs
+
 # Cleanup a previous run of the test suite prior to testing, run the
 # default ($(echo "${DEFAULT_RUNFILES}" | sed 's/\.run//')) suite of tests and perform no cleanup on exit.
 $0 -x
@@ -450,8 +454,15 @@ post_user = root
 post =
 outputdir = /var/tmp/test_results
 EOF
-       SINGLETESTDIR="${SINGLETEST%/*}"
+       if [ "$SINGLETEST" = "${SINGLETEST%/*}" ] ; then
+               NEWSINGLETEST=$(find "$STF_SUITE" -name "$SINGLETEST*" -print -quit)
+               if [ -z "$NEWSINGLETEST" ] ; then
+                       fail "couldn't find test matching '$SINGLETEST'"
+               fi
+               SINGLETEST=$NEWSINGLETEST
+       fi
 
+       SINGLETESTDIR="${SINGLETEST%/*}"
        SETUPDIR="$SINGLETESTDIR"
        [ "${SETUPDIR#/}" = "$SETUPDIR" ] && SETUPDIR="$STF_SUITE/$SINGLETESTDIR"
        [ -x "$SETUPDIR/setup.ksh"   ] && SETUPSCRIPT="setup"     || SETUPSCRIPT=