linux/include/kunit
Vaibhav Jain 0efe609ef5 kunit,rust: Add ability to skip entire test suites
Currently, KUnit provides mechanisms to skip individual test cases, but
there is no way to skip an entire test suite based on runtime conditions
checked during suite initialization. This limitation forces test suites
to either fail or skip tests individually when certain prerequisites are
not available.

To address this limitation, the patch adds a 'status' field to struct
kunit_suite that allows suite_init callbacks to mark the entire suite as
KUNIT_SKIPPED. When a suite is marked as skipped, all test cases within
that suite are bypassed without execution.

The patch proposed changes to kunit_suite_has_succeeded() to Check suite
status before evaluating individual test case results. Also
kunit_run_tests() is updated to skip suite execution if kunit_suite's
'status' is KUNIT_SKIPPED, thats either set before suite_init or by the
suite_init callback itself. kunit_init_suite() is updated to initialize the
'status' of kunit_suite to KUNIT_SUCCESS so that any skipped suite's can be
restarted from debugfs.

This enables test suites to perform runtime capability checks in their
'suite_init' callback and gracefully skip all tests when prerequisites are
not met, rather than reporting failures or requiring each test case to
perform redundant checks. In case a kunit-suite is skipped it can be re-run
from the kunit's debugfs interface.

Also update debugfs_print_results() to clearly log the kunit-suite as
'SKIP'. kunit_suite_has_succeeded() is also updated on which
debugfs_print_results() depends to update 'kunit_suite.status' in case any
of the kunit_case has failed.

Finally, update KUnit Rust binding macro-rule 'kunit_unsafe_test_suite' to
add and initialize the newly introduced 'kunit_suite.status'. Without this
'kunit_suite.status' field is never initialized which is an error for the
Rust compiler.

Link: https://patchwork.kernel.org/project/linux-kselftest/patch/20260626085811.151133-2-vaibhav@linux.ibm.com/mbox/
Reviewed-by: David Gow <david@davidgow.net>
Signed-off-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
2026-06-29 15:48:26 -06:00
..
assert.h kunit: Rename KUNIT_ASSERT_FAILURE to KUNIT_FAIL_AND_ABORT for readability 2024-07-12 10:12:05 -06:00
attributes.h kunit: Add ability to filter attributes 2023-07-26 13:29:15 -06:00
clk.h clk: test: Forward-declare struct of_phandle_args in kunit/clk.h 2025-05-06 14:50:01 -07:00
device.h kunit: Add APIs for managing devices 2023-12-18 13:28:08 -07:00
of.h of: kunit: Extract some overlay boiler plate into macros 2024-10-09 16:25:32 -07:00
platform_device.h kunit: provide kunit_platform_device_unregister() 2026-05-26 11:19:54 +02:00
resource.h treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
run-in-irq-context.h kunit: irq: Ensure timer doesn't fire too frequently 2026-02-24 14:44:21 -08:00
skbuff.h kunit: skb: add gfp to kernel doc for kunit_zalloc_skb() 2024-11-19 14:52:17 -07:00
static_stub.h kunit: Allow passing function pointer to kunit_activate_static_stub() 2024-01-03 09:06:52 -07:00
test-bug.h bug/kunit: Core support for suppressing warning backtraces 2026-05-14 10:50:00 -06:00
test.h kunit,rust: Add ability to skip entire test suites 2026-06-29 15:48:26 -06:00
try-catch.h kunit: Adjust kunit_test timeout based on test_{suite,case} speed 2025-06-24 20:47:39 -06:00
visibility.h module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00