Release Notes¶
This page briefly summarizes the KUnit changes in each Linux release.
For more specific documentation on KUnit features, see the in-kernel documentation: https://kernel.org/doc/html/latest/dev-tools/kunit.
5.5¶
KUnit introduced, including all the basic functionality.
kunitconfig
was renamed to.kunitconfig
later in in 5.5 (commit)
5.7¶
kunit.py switched to using
.kunit/
as the default build dir (and.kunitconfig
=>.kunit/.kunitconfig
).CONFIG_KUNIT_DEBUGFS
to expose per-suite test results in/sys/kernel/debug/kunit/<suite>/results
, docs
5.8¶
kunit.py
now supports separateconfig/build/exec/parse
commands in addition torun
.You can use these if you don’t want to let
kunit.py run
do everything for you, e.g. if you want to run manually but parse the results usingkunit.py
.
CONFIG_KUNIT_ALL_TESTS
introducedThis is just a convention. New tests should use it like so:
config FOO_KUNIT_TEST
tristate "KUnit test for foo" if !KUNIT_ALL_TESTS
depends on KUNIT
default KUNIT_ALL_TESTS
help
This builds unit tests for foo.
See the upstream documentation for the authoritative source on how to write Kconfig entries.
5.9¶
Named resources: tests can store and retrieve data via string keys.
This is a power feature intended to be a cleaner alternative to using global variables in tests.
See test_kasan.c for an example that uses
"kasan_data"
.
5.10¶
KASAN violations cause the current KUnit test case to be marked FAILED.
Note: KASAN doesn’t currently work on UML.
5.12¶
You can pass in a path to a kunitconfig file instead of using
.kunit/.kunitconfig
, e.g.
$ ./tools/testing/kunit/kunit.py run --kunitconfig=fs/ext4/.kunitconfig
You can tell
kunit.py
to run a subset of built suites by passing in a glob argument, e.g.
# Only run "list" suites
$ ./tools/testing/kunit/kunit.py run '*list*'
5.13¶
Can call
kunit_fail_current_test()
from anywhere to fail the current KUnit test (e.g. if an invariant is broken, a UBSAN violation is detected, etc.)You can pass a directory
--kunitconfig
and it’ll implicitly append.kunitconfig
, e.g.kunit.py run --kunitconfig=lib/kunit
.
5.14¶
5.15¶
UBSAN violations cause the current KUnit test case to be marked FAILED.
Can pass kernel commandline parameters from
kunit.py
via--kernel_args
KUnit prints a summary per suite of how many test cases passed/failed to dmesg, e.g.
# property-entry: pass:7 fail:0 skip:0 total:7
5.16¶
You can filter on test names now in addition to suite names, e.g.
# Only run tests that contain "foo"
$ ./tools/testing/kunit/kunit.py run '*.*foo*'
# Only run tests in "mysuite" that contain "foo"
$ ./tools/testing/kunit/kunit.py run 'mysuite.*foo*'
You can ask
kunit.py
to run each suite/test by itself. This can be useful to track down issues due to non-hermetic tests
$ ./tools/testing/kunit/kunit.py run --run_isolated=suite
$ ./tools/testing/kunit/kunit.py run --run_isolated=test
kunit.py
’s parsing logic was largely rewritten, so the output looks slightly differentParsed output is also now mostly printed out in real time.
kunit.py
with--raw_output
will print output in real time.In-kernel documentation has been significantly revamped.
5.17¶
Print out parsed test results in real time.
Allow tweaking Kconfig options from command-line, e.g.
$ ./tools/testing/kunit/kunit.py run --kconfig_add=MY_CONFIG=y
Reconfigure kunit kernel when the used
kunitconfig
has changedBefore, if you removed an entry from
.kunitconfig
,kunit.py
would not reconfigure, so your edit would have no effect.This now also works if you remove a
--kconfig_add
flag.
Print out parameters as sub-test cases (both in raw and parsed output), e.g.:
[12:37:14] =============== ext4_inode_test (1 subtest) ================
[12:37:14] ======= inode_test_xtimestamp_decoding (16 subtests) =======
[12:37:14] [PASSED] 1901-12-13 Lower bound of 32bit < 0 timestamp, no extra bits
...
[12:37:14] [PASSED] 2446-05-10 Upper bound of 32bit >=0 timestamp. All extra sec bits on
[12:37:14] ========= [PASSED] inode_test_xtimestamp_decoding ==========
[12:37:14] ================= [PASSED] ext4_inode_test =================
[12:37:14] ============================================================
5.18 (tentative)¶
Drastically decrease stack usage of
KUNIT_EXPECT_
macros.Before, we largely relied on the compiler to optimize away some internal structs, but that didn’t always work.
Now on UML (x86_64),
KUNIT_EXPECT_EQ()
uses 32 bytes instead of 88.