Merge tag 'Smack-for-5.11-io_uring-fix' of git://github.com/cschaufler/smack-next
[linux-2.6-microblaze.git] / Documentation / dev-tools / kunit / style.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ===========================
4 Test Style and Nomenclature
5 ===========================
6
7 To make finding, writing, and using KUnit tests as simple as possible, it's
8 strongly encouraged that they are named and written according to the guidelines
9 below. While it's 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.
12
13 It's recommended that you only deviate from these guidelines when:
14
15 1. Porting tests to KUnit which are already known with an existing name, or
16 2. Writing tests which would cause serious problems if automatically run (e.g.,
17    non-deterministically producing false positives or negatives, or taking an
18    extremely long time to run).
19
20 Subsystems, Suites, and Tests
21 =============================
22
23 In order to make tests as easy to find as possible, they're grouped into suites
24 and subsystems. A test suite is a group of tests which test a related area of
25 the kernel, and a subsystem is a set of test suites which test different parts
26 of the same kernel subsystem or driver.
27
28 Subsystems
29 ----------
30
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 rule of thumb is that a test subsystem should match a single kernel module. If
34 the code being tested can't be compiled as a module, in many cases the subsystem
35 should correspond to a directory in the source tree or an entry in the
36 MAINTAINERS file. If unsure, follow the conventions set by tests in similar
37 areas.
38
39 Test subsystems should be named after the code being tested, either after the
40 module (wherever possible), or after the directory or files being tested. Test
41 subsystems should be named to avoid ambiguity where necessary.
42
43 If a test subsystem name has multiple components, they should be separated by
44 underscores. *Do not* include "test" or "kunit" directly in the subsystem name
45 unless you are actually testing other tests or the kunit framework itself.
46
47 Example subsystems could be:
48
49 ``ext4``
50   Matches the module and filesystem name.
51 ``apparmor``
52   Matches the module name and LSM name.
53 ``kasan``
54   Common name for the tool, prominent part of the path ``mm/kasan``
55 ``snd_hda_codec_hdmi``
56   Has several components (``snd``, ``hda``, ``codec``, ``hdmi``) separated by
57   underscores. Matches the module name.
58
59 Avoid names like these:
60
61 ``linear-ranges``
62   Names should use underscores, not dashes, to separate words. Prefer
63   ``linear_ranges``.
64 ``qos-kunit-test``
65   As well as using underscores, this name should not have "kunit-test" as a
66   suffix, and ``qos`` is ambiguous as a subsystem name. ``power_qos`` would be a
67   better name.
68 ``pc_parallel_port``
69   The corresponding module name is ``parport_pc``, so this subsystem should also
70   be named ``parport_pc``.
71
72 .. note::
73         The KUnit API and tools do not explicitly know about subsystems. They're
74         simply a way of categorising test suites and naming modules which
75         provides a simple, consistent way for humans to find and run tests. This
76         may change in the future, though.
77
78 Suites
79 ------
80
81 KUnit tests are grouped into test suites, which cover a specific area of
82 functionality being tested. Test suites can have shared initialisation and
83 shutdown code which is run for all tests in the suite.
84 Not all subsystems will need to be split into multiple test suites (e.g. simple drivers).
85
86 Test suites are named after the subsystem they are part of. If a subsystem
87 contains several suites, the specific area under test should be appended to the
88 subsystem name, separated by an underscore.
89
90 In the event that there are multiple types of test using KUnit within a
91 subsystem (e.g., both unit tests and integration tests), they should be put into
92 separate suites, with the type of test as the last element in the suite name.
93 Unless these tests are actually present, avoid using ``_test``, ``_unittest`` or
94 similar in the suite name.
95
96 The full test suite name (including the subsystem name) should be specified as
97 the ``.name`` member of the ``kunit_suite`` struct, and forms the base for the
98 module name (see below).
99
100 Example test suites could include:
101
102 ``ext4_inode``
103   Part of the ``ext4`` subsystem, testing the ``inode`` area.
104 ``kunit_try_catch``
105   Part of the ``kunit`` implementation itself, testing the ``try_catch`` area.
106 ``apparmor_property_entry``
107   Part of the ``apparmor`` subsystem, testing the ``property_entry`` area.
108 ``kasan``
109   The ``kasan`` subsystem has only one suite, so the suite name is the same as
110   the subsystem name.
111
112 Avoid names like:
113
114 ``ext4_ext4_inode``
115   There's no reason to state the subsystem twice.
116 ``property_entry``
117   The suite name is ambiguous without the subsystem name.
118 ``kasan_integration_test``
119   Because there is only one suite in the ``kasan`` subsystem, the suite should
120   just be called ``kasan``. There's no need to redundantly add
121   ``integration_test``. Should a separate test suite with, for example, unit
122   tests be added, then that suite could be named ``kasan_unittest`` or similar.
123
124 Test Cases
125 ----------
126
127 Individual tests consist of a single function which tests a constrained
128 codepath, property, or function. In the test output, individual tests' results
129 will show up as subtests of the suite's results.
130
131 Tests should be named after what they're testing. This is often the name of the
132 function being tested, with a description of the input or codepath being tested.
133 As tests are C functions, they should be named and written in accordance with
134 the kernel coding style.
135
136 .. note::
137         As tests are themselves functions, their names cannot conflict with
138         other C identifiers in the kernel. This may require some creative
139         naming. It's a good idea to make your test functions `static` to avoid
140         polluting the global namespace.
141
142 Example test names include:
143
144 ``unpack_u32_with_null_name``
145   Tests the ``unpack_u32`` function when a NULL name is passed in.
146 ``test_list_splice``
147   Tests the ``list_splice`` macro. It has the prefix ``test_`` to avoid a
148   name conflict with the macro itself.
149
150
151 Should it be necessary to refer to a test outside the context of its test suite,
152 the *fully-qualified* name of a test should be the suite name followed by the
153 test name, separated by a colon (i.e. ``suite:test``).
154
155 Test Kconfig Entries
156 ====================
157
158 Every test suite should be tied to a Kconfig entry.
159
160 This Kconfig entry must:
161
162 * be named ``CONFIG_<name>_KUNIT_TEST``: where <name> is the name of the test
163   suite.
164 * be listed either alongside the config entries for the driver/subsystem being
165   tested, or be under [Kernel Hacking]→[Kernel Testing and Coverage]
166 * depend on ``CONFIG_KUNIT``
167 * be visible only if ``CONFIG_KUNIT_ALL_TESTS`` is not enabled.
168 * have a default value of ``CONFIG_KUNIT_ALL_TESTS``.
169 * have a brief description of KUnit in the help text
170
171 Unless there's a specific reason not to (e.g. the test is unable to be built as
172 a module), Kconfig entries for tests should be tristate.
173
174 An example Kconfig entry:
175
176 .. code-block:: none
177
178         config FOO_KUNIT_TEST
179                 tristate "KUnit test for foo" if !KUNIT_ALL_TESTS
180                 depends on KUNIT
181                 default KUNIT_ALL_TESTS
182                 help
183                   This builds unit tests for foo.
184
185                   For more information on KUnit and unit tests in general, please refer
186                   to the KUnit documentation in Documentation/dev-tools/kunit/.
187
188                   If unsure, say N.
189
190
191 Test File and Module Names
192 ==========================
193
194 KUnit tests can often be compiled as a module. These modules should be named
195 after the test suite, followed by ``_test``. If this is likely to conflict with
196 non-KUnit tests, the suffix ``_kunit`` can also be used.
197
198 The easiest way of achieving this is to name the file containing the test suite
199 ``<suite>_test.c`` (or, as above, ``<suite>_kunit.c``). This file should be
200 placed next to the code under test.
201
202 If the suite name contains some or all of the name of the test's parent
203 directory, it may make sense to modify the source filename to reduce redundancy.
204 For example, a ``foo_firmware`` suite could be in the ``foo/firmware_test.c``
205 file.