On Sat, 17 May 2025 at 03:06, Rae Moar <rm...@google.com> wrote:
>
> The documentation on testing static functions using the KUnit macros
> VISIBLE_IF_KUNIT and EXPORT_SYMBOL_IF_KUNIT is lacking clarity and
> missing key steps in the example. This has caused bugs and confusion
> among developers.
>
> Improve wording of description and add missing steps to the example.
> This entails adding the "#include <kunit/visibility.h>" line and the
> "MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);" line. Both of which were
> missing from the original example and key to exposing static functions.
>
> Signed-off-by: Rae Moar <rm...@google.com>
> ---

It's always great to have better documentation!

Reviewed-by: David Gow <david...@google.com>

Thanks,
-- David

>  Documentation/dev-tools/kunit/usage.rst | 38 +++++++++++++++++++------
>  1 file changed, 30 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/dev-tools/kunit/usage.rst 
> b/Documentation/dev-tools/kunit/usage.rst
> index 22955d56b379..038f480074fd 100644
> --- a/Documentation/dev-tools/kunit/usage.rst
> +++ b/Documentation/dev-tools/kunit/usage.rst
> @@ -670,28 +670,50 @@ with ``kunit_remove_action``.
>  Testing Static Functions
>  ------------------------
>
> -If we do not want to expose functions or variables for testing, one option 
> is to
> -conditionally export the used symbol. For example:
> +If you want to test static functions without exposing those functions 
> outside of
> +testing, one option is conditionally export the symbol. When KUnit is 
> enabled,
> +the symbol is exposed but remains static otherwise. To use this method, 
> follow
> +the template below.
>
>  .. code-block:: c
>
> -       /* In my_file.c */
> +       /* In the file containing functions to test "my_file.c" */
>
> -       VISIBLE_IF_KUNIT int do_interesting_thing();
> +       #include <kunit/visibility.h>
> +       #include <my_file.h>
> +       ...
> +       VISIBLE_IF_KUNIT int do_interesting_thing()
> +       {
> +       ...
> +       }
>         EXPORT_SYMBOL_IF_KUNIT(do_interesting_thing);
>
> -       /* In my_file.h */
> +       /* In the header file "my_file.h" */
>
>         #if IS_ENABLED(CONFIG_KUNIT)
>                 int do_interesting_thing(void);
>         #endif
>
> -Alternatively, you could conditionally ``#include`` the test file at the end 
> of
> -your .c file. For example:
> +       /* In the KUnit test file "my_file_test.c" */
> +
> +       #include <kunit/visibility.h>
> +       #include <my_file.h>
> +       ...
> +       MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
> +       ...
> +       // Use do_interesting_thing() in tests
> +
> +For a full example, see this `patch 
> <https://lore.kernel.org/all/20221207014024.340230-3-rm...@google.com/>`_
> +where a test is modified to conditionally expose static functions for testing
> +using the macros above.
> +
> +As an **alternative** to the method above, you could conditionally 
> ``#include``
> +the test file at the end of your .c file. This is not recommended but works
> +if needed. For example:
>
>  .. code-block:: c
>
> -       /* In my_file.c */
> +       /* In "my_file.c" */
>
>         static int do_interesting_thing();
>
>
> base-commit: c2493384e8110d5a4792fff4b9d46e47b78ea10a
> --
> 2.49.0.1101.gccaa498523-goog
>

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to