From d6154a4d4bd90bd6128536a775a3cd59094c7255 Mon Sep 17 00:00:00 2001 From: Paul Meyer Date: Fri, 14 Aug 2026 11:46:51 +0200 Subject: [PATCH] test: run_subtests_and_exit helper Replace the "run_subtests; touch /testok" tail with a single wrapper invocation. Report the test itself as skipped if every subtest is skipped. Signed-off-by: Paul Meyer --- test/units/TEST-04-JOURNAL.sh | 4 +--- test/units/TEST-05-RLIMITS.sh | 4 +--- test/units/TEST-13-NSPAWN.sh | 4 +--- test/units/TEST-17-UDEV.sh | 4 +--- test/units/TEST-19-CGROUP.sh | 4 +--- test/units/TEST-22-TMPFILES.sh | 4 +--- test/units/TEST-23-UNIT-FILE.sh | 4 +--- test/units/TEST-53-TIMER.sh | 4 +--- test/units/TEST-70-TPM2.sh | 4 +--- test/units/TEST-74-AUX-UTILS.sh | 4 +--- test/units/TEST-81-GENERATORS.sh | 4 +--- test/units/TEST-90-RESTRICT-FSACCESS.sh | 4 +--- test/units/test-control.sh | 25 +++++++++++++++++++++++++ 13 files changed, 37 insertions(+), 36 deletions(-) diff --git a/test/units/TEST-04-JOURNAL.sh b/test/units/TEST-04-JOURNAL.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-04-JOURNAL.sh +++ b/test/units/TEST-04-JOURNAL.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-05-RLIMITS.sh b/test/units/TEST-05-RLIMITS.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-05-RLIMITS.sh +++ b/test/units/TEST-05-RLIMITS.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-13-NSPAWN.sh b/test/units/TEST-13-NSPAWN.sh index 311b64a6a0..45b105f316 100755 --- a/test/units/TEST-13-NSPAWN.sh +++ b/test/units/TEST-13-NSPAWN.sh @@ -18,6 +18,4 @@ fi # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-17-UDEV.sh b/test/units/TEST-17-UDEV.sh index 14ceebac95..36b7ae3be6 100755 --- a/test/units/TEST-17-UDEV.sh +++ b/test/units/TEST-17-UDEV.sh @@ -8,6 +8,4 @@ set -o pipefail udevadm settle -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-19-CGROUP.sh b/test/units/TEST-19-CGROUP.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-19-CGROUP.sh +++ b/test/units/TEST-19-CGROUP.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-22-TMPFILES.sh b/test/units/TEST-22-TMPFILES.sh index 85109a1ad5..0b00511baa 100755 --- a/test/units/TEST-22-TMPFILES.sh +++ b/test/units/TEST-22-TMPFILES.sh @@ -14,6 +14,4 @@ if systemd-detect-virt --quiet --container; then ln -s /dev/null /run/tmpfiles.d/selinux-policy.conf fi -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-23-UNIT-FILE.sh b/test/units/TEST-23-UNIT-FILE.sh index a929c8bdaa..1a503d2bab 100755 --- a/test/units/TEST-23-UNIT-FILE.sh +++ b/test/units/TEST-23-UNIT-FILE.sh @@ -7,6 +7,4 @@ set -o pipefail . "$(dirname "$0")"/test-control.sh # Note: the signal shenanigans are necessary for the Upholds= tests -run_subtests_with_signals SIGUSR1 SIGUSR2 SIGRTMIN+1 - -touch /testok +run_subtests_with_signals_and_exit SIGUSR1 SIGUSR2 SIGRTMIN+1 diff --git a/test/units/TEST-53-TIMER.sh b/test/units/TEST-53-TIMER.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-53-TIMER.sh +++ b/test/units/TEST-53-TIMER.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-70-TPM2.sh b/test/units/TEST-70-TPM2.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-70-TPM2.sh +++ b/test/units/TEST-70-TPM2.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-74-AUX-UTILS.sh b/test/units/TEST-74-AUX-UTILS.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-74-AUX-UTILS.sh +++ b/test/units/TEST-74-AUX-UTILS.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-81-GENERATORS.sh b/test/units/TEST-81-GENERATORS.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-81-GENERATORS.sh +++ b/test/units/TEST-81-GENERATORS.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/TEST-90-RESTRICT-FSACCESS.sh b/test/units/TEST-90-RESTRICT-FSACCESS.sh index 9c2a033aa9..a61a765589 100755 --- a/test/units/TEST-90-RESTRICT-FSACCESS.sh +++ b/test/units/TEST-90-RESTRICT-FSACCESS.sh @@ -6,6 +6,4 @@ set -o pipefail # shellcheck source=test/units/test-control.sh . "$(dirname "$0")"/test-control.sh -run_subtests - -touch /testok +run_subtests_and_exit diff --git a/test/units/test-control.sh b/test/units/test-control.sh index 2c93382caf..1e352c44b3 100644 --- a/test/units/test-control.sh +++ b/test/units/test-control.sh @@ -172,6 +172,31 @@ run_subtests() { _show_summary } +_finalize_subtests() { + if [[ ${#_PASSED_TESTS[@]} -eq 0 && ${#_SKIPPED_TESTS[@]} -gt 0 ]]; then + echo "All subtests skipped" | tee --append /skipped + exit "$_SUBTEST_SKIP_RC" + fi + + touch /testok + exit 0 +} + +# Run all subtests and finalize the test in one shot: exit 77 (skipped) if every subtest skipped, +# otherwise mark success (/testok) and exit. Use this ONLY for tests whose body is just subtests. +# Do NOT use it if the parent script has meaningful test content of its own. +run_subtests_and_exit() { + run_subtests + _finalize_subtests +} + +# Like run_subtests_and_exit, but propagates the given signals to the subtests (see +# run_subtests_with_signals). +run_subtests_with_signals_and_exit() { + run_subtests_with_signals "$@" + _finalize_subtests +} + # Run all test cases (i.e. functions prefixed with testcase_ in the current namespace) run_testcases() { local testcase testcases