mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
selftests: ublk: add group-based test targets
Add convenient Makefile targets for running specific test groups: - run_generic, run_batch, run_null, run_loop, run_stripe, run_stress, etc. - run_all for running all tests Test groups are auto-detected from TEST_PROGS using pattern matching (test_<group>_<num>.sh -> group), and targets are generated dynamically using define/eval templates. Supports parallel execution via JOBS variable: - JOBS=1 (default): sequential with kselftest TAP output - JOBS>1: parallel execution with xargs -P Usage examples: make run_null # Sequential execution make run_stress JOBS=4 # Parallel with 4 jobs make run_all JOBS=8 # Run all tests with 8 parallel jobs With JOBS=8, running time of `make run_all` is reduced to 2m2s from 6m5s in my test VM. Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
2021e6109d
commit
b6bbc3bec1
|
|
@ -72,3 +72,39 @@ $(OUTPUT)/kublk: $(filter-out $(STANDALONE_UTILS),$(wildcard *.c))
|
|||
|
||||
check:
|
||||
shellcheck -x -f gcc *.sh
|
||||
|
||||
# Test groups for running subsets of tests
|
||||
# JOBS=1 (default): sequential with kselftest TAP output
|
||||
# JOBS>1: parallel execution with xargs -P
|
||||
# Usage: make run_null JOBS=4
|
||||
JOBS ?= 1
|
||||
|
||||
# Auto-detect test groups from TEST_PROGS (test_<group>_<num>.sh -> group)
|
||||
TEST_GROUPS := $(shell echo "$(TEST_PROGS)" | tr ' ' '\n' | \
|
||||
sed 's/test_\([^_]*\)_.*/\1/' | sort -u)
|
||||
|
||||
# Template for group test targets
|
||||
# $(1) = group name (e.g., null, generic, stress)
|
||||
define RUN_GROUP
|
||||
run_$(1): all
|
||||
@if [ $$(JOBS) -gt 1 ]; then \
|
||||
echo $$(filter test_$(1)_%.sh,$$(TEST_PROGS)) | tr ' ' '\n' | \
|
||||
xargs -P $$(JOBS) -n1 sh -c './"$$$$0"' || true; \
|
||||
else \
|
||||
$$(call RUN_TESTS, $$(filter test_$(1)_%.sh,$$(TEST_PROGS))); \
|
||||
fi
|
||||
.PHONY: run_$(1)
|
||||
endef
|
||||
|
||||
# Generate targets for each discovered test group
|
||||
$(foreach group,$(TEST_GROUPS),$(eval $(call RUN_GROUP,$(group))))
|
||||
|
||||
# Run all tests (parallel when JOBS>1)
|
||||
run_all: all
|
||||
@if [ $(JOBS) -gt 1 ]; then \
|
||||
echo $(TEST_PROGS) | tr ' ' '\n' | \
|
||||
xargs -P $(JOBS) -n1 sh -c './"$$0"' || true; \
|
||||
else \
|
||||
$(call RUN_TESTS, $(TEST_PROGS)); \
|
||||
fi
|
||||
.PHONY: run_all
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user