[PATCH 1/2] test: allow multiple config options in buildconfigspec

Tom Rini trini at konsulko.com
Mon May 5 15:45:57 CEST 2025


On Sun, May 04, 2025 at 07:27:43AM +0200, Heinrich Schuchardt wrote:
> Simon Glass <sjg at chromium.org> schrieb am Sa., 3. Mai 2025, 23:27:
> 
> > 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
> >
> 
> Hello Simon,
> 
> Yes, we can think about reworking the network configuration in a future
> series.
> 
> E.g. have as choice
> 
> * CONFIG_NET_LEGACY
> * CONFIG_NET_LWIP
> * CONFIG_NET_NONE
> 
> and CONFIG_NET := !CONFIG_NONE

Just note that it's non-trivial to reach that state correctly, which is
why we don't have it today (some of the challenges and problems are
documented in earlier iterations of the lwIP patchset itself which did
try going down this path).

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20250505/d800d4b6/attachment.sig>


More information about the U-Boot mailing list