[PATCH 1/2] test: allow multiple config options in buildconfigspec
Simon Glass
sjg at chromium.org
Sat May 3 23:26:47 CEST 2025
Hi Heinrich,
On Sat, 3 May 2025 at 07:32, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> In some cases we have alternative configuration options that supply the
> same functionality, e.g CONFIG_NET and CONFIG_NET_LWIP.
>
> Allow to specify all of them as arguments for buildconfigspec() and execute
> the text if any of these is fulfilled, e.g.
>
> @pytest.mark.buildconfigspec('net', 'net_lwip')
>
> Update the documentation.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> doc/develop/py_testing.rst | 24 ++++++++++++++++++++++++
> test/py/conftest.py | 10 +++++++---
> 2 files changed, 31 insertions(+), 3 deletions(-)
>
> diff --git a/doc/develop/py_testing.rst b/doc/develop/py_testing.rst
> index 217ae447035..7dbed8833bf 100644
> --- a/doc/develop/py_testing.rst
> +++ b/doc/develop/py_testing.rst
> @@ -514,3 +514,27 @@ of the `ubman.config` object, for example
> Build configuration values (from `.config`) may be accessed via the dictionary
> `ubman.config.buildconfig`, with keys equal to the Kconfig variable
> names.
> +
> +A required configuration setting can be defined via a buildconfigspec()
> +annotation. The name of the configuration option is specified in lower case. The
> +following annotation for a test requires CONFIG_EFI_LOADER=y:
> +
> +.. code-block:: python
> +
> + @pytest.mark.buildconfigspec('efi_loader')
> +
> +Sometimes multiple configuration option supply the same functionality. If
> +multiple arguments are passed to buildconfigspec(), only one of the
> +configuration options needs to be set. The following annotation requires that
> +either of CONFIG_NET or CONFIG_NET_LWIP is set:
> +
> +.. code-block:: python
> +
> + @pytest.mark.buildconfigspec('net', 'net lwip')
> +
> +The notbuildconfigspec() annotation can be used to require a configuration
> +option not to be set. The following annotation requires CONFIG_RISCV=n:
> +
> +.. code-block:: python
> +
> + @pytest.mark.notbuildconfigspec('riscv')
> diff --git a/test/py/conftest.py b/test/py/conftest.py
> index 5aea85647af..6c3ac67979a 100644
> --- a/test/py/conftest.py
> +++ b/test/py/conftest.py
> @@ -711,9 +711,13 @@ def setup_buildconfigspec(item):
> """
>
> for options in item.iter_markers('buildconfigspec'):
> - option = options.args[0]
> - if not ubconfig.buildconfig.get('config_' + option.lower(), None):
> - pytest.skip('.config feature "%s" not enabled' % option.lower())
> + nomatch = True
> + for arg in options.args:
> + if ubconfig.buildconfig.get('config_' + arg.lower(), None):
> + nomatch = False
> + if nomatch:
> + argsString = ', '.join(options.args)
> + pytest.skip(f'.config features "{argsString}" not enabled')
> for options in item.iter_markers('notbuildconfigspec'):
> option = options.args[0]
> if ubconfig.buildconfig.get('config_' + option.lower(), None):
> --
> 2.48.1
>
I ran into this problem too. Would it be possible to have CONFIG_NET
mean that we have networking (either option) and CONFIG_LWIP mean that
it is lwip? The current Kconfig seems a bit broken to me....
Regards,
Simon
More information about the U-Boot
mailing list