[PATCH 00/12] test: Add support for passing arguments to C unit tests

Simon Glass sjg at chromium.org
Sun Apr 12 13:20:54 CEST 2026


Hi,

On Sat, 11 Apr 2026 at 19:34, Simon Glass <sjg at chromium.org> wrote:
>
> Some tests have two parts: a Python test which handles setup, such as
> creating filesystem images or configuring the environment, and a C
> test which does the bulk of the work including assertions. At present
> there is no way to pass information between these two parts, so
> things like paths and device names must be hard-coded in the C test.
>
> This tends to make people write tests in Python, but this is not ideal
> for several reasons:
>
> - Python lacks access to things like return codes and has to scan the
>   console output to figure out what happened
> - Python lacks access to internal state, so it cannot directly check
>   the result of an operation
> - Python is ~100x slower due to console interaction, etc.
> - C tests can be stepped through in gdb, which is much harder with
>   Python driving the console
> - C tests can exercise internal APIs directly (e.g. fs_read(),
>   fs_size()) rather than going through the command layer, so they
>   test more precisely what they intend to
>
> This series adds infrastructure for passing typed, runtime arguments
> from Python to C unit tests, using a name=value format on the ut
> command line.
>
> The series includes:
>
> - Regex assertion helpers for matching variable output in tests
>
> - A private buffer in unit_test_state for test-local temporary data
>
> - Argument-type definitions (string, integer, boolean) with optional
>   flags and default values
>
> - A new UNIT_TEST_ARGS() macro for declaring tests with typed
>   arguments
>
> - Argument parsing in the test framework, accepting name=value format
>
> - Updates to the ut command to pass arguments through to tests
>
> - Type-checked accessor macros ut_str(), ut_int(), and ut_bool()
>   with bounds validation
>
> - Tests for the argument feature covering type checking, optional
>   arguments, and argument-parsing failures
>
> - Documentation for the test-parameter feature
>
> - C-based filesystem tests as an example of the hybrid approach,
>   with Python wrappers that pass filesystem type, image path, and
>   expected MD5 values to the C tests
>
>
> Simon Glass (12):
>   test: Add ut_asserteq_regex() for regex pattern matching
>   test: Add a helper to check the next line against a regex
>   test: Add a private buffer for tests
>   test: Add argument-type definitions
>   test: Add a macro to declare unit tests with arguments
>   test: Add support for passing arguments to C tests
>   test: Enhance the ut command to pass test arguments
>   test: Add type-checked argument accessor functions
>   test: Add tests for unit-test arguments
>   test: Add documentation for the test framework
>   test: fs: add C-based filesystem tests
>   test: fs: Update Python tests to call C implementations
>
>  arch/sandbox/cpu/spl.c              |   3 +-
>  doc/develop/tests_writing.rst       | 169 ++++++++++++
>  doc/usage/cmd/ut.rst                |  18 +-
>  include/test/fs.h                   |  39 +++
>  include/test/test.h                 | 107 ++++++++
>  include/test/ut.h                   | 123 ++++++++-
>  test/Makefile                       |   1 +
>  test/cmd_ut.c                       |  32 ++-
>  test/common/Makefile                |   1 +
>  test/common/test_args.c             | 176 ++++++++++++
>  test/fs/Makefile                    |   3 +
>  test/fs/fs_basic.c                  | 407 ++++++++++++++++++++++++++++
>  test/py/tests/test_fs/conftest.py   |   4 +-
>  test/py/tests/test_fs/test_basic.py | 346 +++++++----------------
>  test/test-main.c                    | 170 +++++++++++-
>  test/ut.c                           | 117 ++++++++
>  16 files changed, 1437 insertions(+), 279 deletions(-)
>  create mode 100644 include/test/fs.h
>  create mode 100644 test/common/test_args.c
>  create mode 100644 test/fs/Makefile
>  create mode 100644 test/fs/fs_basic.c
>
> --
> 2.43.0
>
> base-commit: e2fa3e570f83ab0f9ce667ddaec9dc738bcf05b9
> branch: testa-us

Unfortunately this one has double-signoff, so I will send a v2 with
this corrected.

Regards,
Simon


More information about the U-Boot mailing list