test: allow multiple config options in buildconfigspec

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@canonical.com>
Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Heinrich Schuchardt
2025-05-03 15:31:54 +02:00
parent 4fde49c317
commit 2bac578c5a
2 changed files with 31 additions and 3 deletions

View File

@@ -522,3 +522,27 @@ of the `ubman.config` object, for example
Build configuration values (from `.config`) may be accessed via the dictionary Build configuration values (from `.config`) may be accessed via the dictionary
`ubman.config.buildconfig`, with keys equal to the Kconfig variable `ubman.config.buildconfig`, with keys equal to the Kconfig variable
names. 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')

View File

@@ -711,9 +711,13 @@ def setup_buildconfigspec(item):
""" """
for options in item.iter_markers('buildconfigspec'): for options in item.iter_markers('buildconfigspec'):
option = options.args[0] nomatch = True
if not ubconfig.buildconfig.get('config_' + option.lower(), None): for arg in options.args:
pytest.skip('.config feature "%s" not enabled' % option.lower()) 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'): for options in item.iter_markers('notbuildconfigspec'):
option = options.args[0] option = options.args[0]
if ubconfig.buildconfig.get('config_' + option.lower(), None): if ubconfig.buildconfig.get('config_' + option.lower(), None):