From 0efa27bd4bcda98cab0b4c2602d7cdd90296af20 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Mon, 5 Jun 2023 10:47:21 +0200 Subject: [PATCH] test: allow running only specified subtests/testcases Useful when debugging, e.g.: make -C test/TEST-74-AUX-UTILS clean setup run TEST_MATCH_SUBTEST=run Resolves: #27914 --- test/README.testsuite | 7 +++++++ test/test-functions | 4 ++++ test/units/test-control.sh | 10 ++++++++++ 3 files changed, 21 insertions(+) diff --git a/test/README.testsuite b/test/README.testsuite index 695cce15aab..c0f1a2b102f 100644 --- a/test/README.testsuite +++ b/test/README.testsuite @@ -98,6 +98,13 @@ INTERACTIVE_DEBUG=1 (e.g. by setting a usable default terminal, suppressing the shutdown after the test, etc.) +TEST_MATCH_SUBTEST=subtest + If the test makes use of `run_subtests` use this variable to provide + a POSIX extended regex to run only subtests matching the expression + +TEST_MATCH_TESTCASE=testcase + Same as $TEST_MATCH_SUBTEST but for subtests that make use of `run_testcases` + The kernel and initrd can be specified with $KERNEL_BIN and $INITRD. (Fedora's or Debian's default kernel path and initrd are used by default.) diff --git a/test/test-functions b/test/test-functions index 25021779083..4df6184d009 100644 --- a/test/test-functions +++ b/test/test-functions @@ -490,6 +490,8 @@ run_qemu() { "systemd.unit=testsuite.target" "systemd.wants=testsuite-$1.service" "noresume" + ${TEST_MATCH_SUBTEST:+"systemd.setenv=TEST_MATCH_SUBTEST=$TEST_MATCH_SUBTEST"} + ${TEST_MATCH_TESTCASE:+"systemd.setenv=TEST_MATCH_TESTCASE=$TEST_MATCH_TESTCASE"} ) if ! get_bool "$INTERACTIVE_DEBUG"; then @@ -567,6 +569,8 @@ run_nspawn() { "$PATH_TO_INIT" "systemd.unit=testsuite.target" "systemd.wants=testsuite-$2.service" + ${TEST_MATCH_SUBTEST:+"systemd.setenv=TEST_MATCH_SUBTEST=$TEST_MATCH_SUBTEST"} + ${TEST_MATCH_TESTCASE:+"systemd.setenv=TEST_MATCH_TESTCASE=$TEST_MATCH_TESTCASE"} ) if ! get_bool "$INTERACTIVE_DEBUG"; then diff --git a/test/units/test-control.sh b/test/units/test-control.sh index cd7048ae97c..2760acd34fb 100644 --- a/test/units/test-control.sh +++ b/test/units/test-control.sh @@ -118,6 +118,11 @@ run_subtests() { fi for subtest in "${subtests[@]}"; do + if [[ -n "${TEST_MATCH_SUBTEST:-}" ]] && ! [[ "$subtest" =~ $TEST_MATCH_SUBTEST ]]; then + echo "Skipping $subtest (not matching '$TEST_MATCH_SUBTEST')" + continue + fi + : "--- $subtest BEGIN ---" "./$subtest" && _PASSED_TESTS+=("$subtest") || _FAILED_TESTS+=("$subtest") : "--- $subtest END ---" @@ -139,6 +144,11 @@ run_testcases() { fi for testcase in "${testcases[@]}"; do + if [[ -n "${TEST_MATCH_TESTCASE:-}" ]] && ! [[ "$testcase" =~ $TEST_MATCH_TESTCASE ]]; then + echo "Skipping $testcase (not matching '$TEST_MATCH_TESTCASE')" + continue + fi + : "+++ $testcase BEGIN +++" # Note: the subshell here is used purposefully, otherwise we might # unexpectedly inherit a RETURN trap handler from the called -- 2.47.3