1 .. SPDX-License-Identifier: GPL-2.0
3 ===========================
4 Test Style and Nomenclature
5 ===========================
7 To make finding, writing, and using KUnit tests as simple as possible, it is
8 strongly encouraged that they are named and written according to the guidelines
9 below. While it is possible to write KUnit tests which do not follow these rules,
10 they may break some tooling, may conflict with other tests, and may not be run
11 automatically by testing systems.
13 It is recommended that you only deviate from these guidelines when:
15 1. Porting tests to KUnit which are already known with an existing name.
16 2. Writing tests which would cause serious problems if automatically run. For
17 example, non-deterministically producing false positives or negatives, or
18 taking a long time to run.
20 Subsystems, Suites, and Tests
21 =============================
23 To make tests easy to find, they are grouped into suites and subsystems. A test
24 suite is a group of tests which test a related area of the kernel. A subsystem
25 is a set of test suites which test different parts of a kernel subsystem
31 Every test suite must belong to a subsystem. A subsystem is a collection of one
32 or more KUnit test suites which test the same driver or part of the kernel. A
33 test subsystem should match a single kernel module. If the code being tested
34 cannot be compiled as a module, in many cases the subsystem should correspond to
35 a directory in the source tree or an entry in the ``MAINTAINERS`` file. If
36 unsure, follow the conventions set by tests in similar areas.
38 Test subsystems should be named after the code being tested, either after the
39 module (wherever possible), or after the directory or files being tested. Test
40 subsystems should be named to avoid ambiguity where necessary.
42 If a test subsystem name has multiple components, they should be separated by
43 underscores. *Do not* include "test" or "kunit" directly in the subsystem name
44 unless we are actually testing other tests or the kunit framework itself. For
45 example, subsystems could be called:
48 Matches the module and filesystem name.
50 Matches the module name and LSM name.
52 Common name for the tool, prominent part of the path ``mm/kasan``
53 ``snd_hda_codec_hdmi``
54 Has several components (``snd``, ``hda``, ``codec``, ``hdmi``) separated by
55 underscores. Matches the module name.
57 Avoid names as shown in examples below:
60 Names should use underscores, not dashes, to separate words. Prefer
63 This name should use underscores, and not have "kunit-test" as a
64 suffix. ``qos`` is also ambiguous as a subsystem name, because several parts
65 of the kernel have a ``qos`` subsystem. ``power_qos`` would be a better name.
67 The corresponding module name is ``parport_pc``, so this subsystem should also
68 be named ``parport_pc``.
71 The KUnit API and tools do not explicitly know about subsystems. They are
72 a way of categorizing test suites and naming modules which provides a
73 simple, consistent way for humans to find and run tests. This may change
79 KUnit tests are grouped into test suites, which cover a specific area of
80 functionality being tested. Test suites can have shared initialization and
81 shutdown code which is run for all tests in the suite. Not all subsystems need
82 to be split into multiple test suites (for example, simple drivers).
84 Test suites are named after the subsystem they are part of. If a subsystem
85 contains several suites, the specific area under test should be appended to the
86 subsystem name, separated by an underscore.
88 In the event that there are multiple types of test using KUnit within a
89 subsystem (for example, both unit tests and integration tests), they should be
90 put into separate suites, with the type of test as the last element in the suite
91 name. Unless these tests are actually present, avoid using ``_test``, ``_unittest``
92 or similar in the suite name.
94 The full test suite name (including the subsystem name) should be specified as
95 the ``.name`` member of the ``kunit_suite`` struct, and forms the base for the
96 module name. For example, test suites could include:
99 Part of the ``ext4`` subsystem, testing the ``inode`` area.
101 Part of the ``kunit`` implementation itself, testing the ``try_catch`` area.
102 ``apparmor_property_entry``
103 Part of the ``apparmor`` subsystem, testing the ``property_entry`` area.
105 The ``kasan`` subsystem has only one suite, so the suite name is the same as
108 Avoid names, for example:
111 There is no reason to state the subsystem twice.
113 The suite name is ambiguous without the subsystem name.
114 ``kasan_integration_test``
115 Because there is only one suite in the ``kasan`` subsystem, the suite should
116 just be called as ``kasan``. Do not redundantly add
117 ``integration_test``. It should be a separate test suite. For example, if the
118 unit tests are added, then that suite could be named as ``kasan_unittest`` or
124 Individual tests consist of a single function which tests a constrained
125 codepath, property, or function. In the test output, an individual test's
126 results will show up as subtests of the suite's results.
128 Tests should be named after what they are testing. This is often the name of the
129 function being tested, with a description of the input or codepath being tested.
130 As tests are C functions, they should be named and written in accordance with
131 the kernel coding style.
134 As tests are themselves functions, their names cannot conflict with
135 other C identifiers in the kernel. This may require some creative
136 naming. It is a good idea to make your test functions `static` to avoid
137 polluting the global namespace.
139 Example test names include:
141 ``unpack_u32_with_null_name``
142 Tests the ``unpack_u32`` function when a NULL name is passed in.
144 Tests the ``list_splice`` macro. It has the prefix ``test_`` to avoid a
145 name conflict with the macro itself.
148 Should it be necessary to refer to a test outside the context of its test suite,
149 the *fully-qualified* name of a test should be the suite name followed by the
150 test name, separated by a colon (i.e. ``suite:test``).
155 Every test suite should be tied to a Kconfig entry.
157 This Kconfig entry must:
159 * be named ``CONFIG_<name>_KUNIT_TEST``: where <name> is the name of the test
161 * be listed either alongside the config entries for the driver/subsystem being
162 tested, or be under [Kernel Hacking]->[Kernel Testing and Coverage]
163 * depend on ``CONFIG_KUNIT``.
164 * be visible only if ``CONFIG_KUNIT_ALL_TESTS`` is not enabled.
165 * have a default value of ``CONFIG_KUNIT_ALL_TESTS``.
166 * have a brief description of KUnit in the help text.
168 If we are not able to meet above conditions (for example, the test is unable to
169 be built as a module), Kconfig entries for tests should be tristate.
171 For example, a Kconfig entry might look like:
175 config FOO_KUNIT_TEST
176 tristate "KUnit test for foo" if !KUNIT_ALL_TESTS
178 default KUNIT_ALL_TESTS
180 This builds unit tests for foo.
182 For more information on KUnit and unit tests in general,
183 please refer to the KUnit documentation in Documentation/dev-tools/kunit/.
188 Test File and Module Names
189 ==========================
191 KUnit tests are often compiled as a separate module. To avoid conflicting
192 with regular modules, KUnit modules should be named after the test suite,
193 followed by ``_kunit`` (e.g. if "foobar" is the core module, then
194 "foobar_kunit" is the KUnit test module).
196 Test source files, whether compiled as a separate module or an
197 ``#include`` in another source file, are best kept in a ``tests/``
198 subdirectory to not conflict with other source files (e.g. for
201 Note that the ``_test`` suffix has also been used in some existing
202 tests. The ``_kunit`` suffix is preferred, as it makes the distinction
203 between KUnit and non-KUnit tests clearer.
205 So for the common case, name the file containing the test suite
206 ``tests/<suite>_kunit.c``. The ``tests`` directory should be placed at
207 the same level as the code under test. For example, tests for
208 ``lib/string.c`` live in ``lib/tests/string_kunit.c``.
210 If the suite name contains some or all of the name of the test's parent
211 directory, it may make sense to modify the source filename to reduce
212 redundancy. For example, a ``foo_firmware`` suite could be in the
213 ``foo/tests/firmware_kunit.c`` file.