From: Petr Machata <petrm@nvidia.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: <davem@davemloft.net>, <netdev@vger.kernel.org>,
<edumazet@google.com>, <pabeni@redhat.com>,
<andrew+netdev@lunn.ch>, <horms@kernel.org>,
<willemdebruijn.kernel@gmail.com>, <shuah@kernel.org>,
<sdf@fomichev.me>, <krakauer@google.com>,
<linux-kselftest@vger.kernel.org>, <petrm@nvidia.com>,
<matttbe@kernel.org>
Subject: Re: [PATCH net-next v2 03/12] selftests: net: py: add test variants
Date: Wed, 19 Nov 2025 15:42:39 +0100 [thread overview]
Message-ID: <87ecpucbt7.fsf@nvidia.com> (raw)
In-Reply-To: <20251118215126.2225826-4-kuba@kernel.org>
Jakub Kicinski <kuba@kernel.org> writes:
> diff --git a/tools/testing/selftests/net/lib/py/ksft.py b/tools/testing/selftests/net/lib/py/ksft.py
> index 52c42c313cf2..47e0af210bee 100644
> --- a/tools/testing/selftests/net/lib/py/ksft.py
> +++ b/tools/testing/selftests/net/lib/py/ksft.py
> @@ -185,6 +185,49 @@ KSFT_DISRUPTIVE = True
> return wrapper
>
>
> +class KsftNamedVariant:
> + """ Named string name + argument list tuple for @ksft_variants """
> +
> + def __init__(self, name, *params):
> + self.params = params
> + self.name = name or "_".join([str(x) for x in self.params])
> +
> +
> +def ksft_variants(params):
> + """
> + Decorator defining the sets of inputs for a test.
> + The parameters will be included in the name of the resulting sub-case.
> + Parameters can be either single object, tuple or a KsftNamedVariant.
> + The argument can be a list or a generator.
> +
> + Example:
> +
> + @ksft_variants([
> + (1, "a"),
> + (2, "b"),
> + KsftNamedVariant("three", 3, "c"),
> + ])
> + def my_case(cfg, a, b):
> + pass # ...
> +
> + ksft_run(cases=[my_case], args=(cfg, ))
> +
> + Will generate cases:
> + my_case.1_a
> + my_case.2_b
> + my_case.three
> + """
> +
> + def decorator(func):
> + @functools.wraps(func)
> + def wrapper():
> + return func
> + wrapper.ksft_variants = params
> + wrapper.original_func = func
> + return wrapper
> + return decorator
This uses the wrapper() merely as a vessel to carry the three
attributes. I think the idea would be better expressed as a namedtupple
from collections import namedtuple
KsftCaseFunction = namedtuple("KsftCaseFunction",
['name', 'original_func', 'variants'])
def ksft_variants(params):
return lambda func: KsftCaseFunction(func.__name__, func, params)
> +
> +
> def ksft_setup(env):
> """
> Setup test framework global state from the environment.
> @@ -236,7 +279,19 @@ KSFT_DISRUPTIVE = True
> break
>
> for func in cases:
> - test_cases.append((func, args, func.__name__))
> + if hasattr(func, 'ksft_variants'):
Then this could just be if callable(func) just call it, else the complex
processing.
I'm not married to the namedtuple idea, but I consider using a function
as essentially a struct wrong. It should be a general object.
> + # Parametrized test - create case for each param
> + for param in func.ksft_variants:
> + if not isinstance(param, KsftNamedVariant):
> + if not isinstance(param, tuple):
> + param = (param, )
> + param = KsftNamedVariant(None, *param)
> +
> + test_cases.append((func.original_func,
> + (*args, *param.params),
> + func.__name__ + "." + param.name))
> + else:
> + test_cases.append((func, args, func.__name__))
>
> return test_cases
next prev parent reply other threads:[~2025-11-19 14:55 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-18 21:51 [PATCH net-next v2 00/12] selftests: drv-net: convert GRO and Toeplitz tests to work for drivers in NIPA Jakub Kicinski
2025-11-18 21:51 ` [PATCH net-next v2 01/12] selftests: net: py: coding style improvements Jakub Kicinski
2025-11-19 13:40 ` Petr Machata
2025-11-19 14:32 ` Jakub Kicinski
2025-11-19 16:06 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 02/12] selftests: net: py: extract the case generation logic Jakub Kicinski
2025-11-19 14:11 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 03/12] selftests: net: py: add test variants Jakub Kicinski
2025-11-19 14:42 ` Petr Machata [this message]
2025-11-18 21:51 ` [PATCH net-next v2 04/12] selftests: drv-net: xdp: use variants for qstat tests Jakub Kicinski
2025-11-19 14:57 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 05/12] selftests: net: relocate gro and toeplitz tests to drivers/net Jakub Kicinski
2025-11-19 15:09 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 06/12] selftests: net: py: support ksft ready without wait Jakub Kicinski
2025-11-19 16:31 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 07/12] selftests: net: py: read ip link info about remote dev Jakub Kicinski
2025-11-19 15:33 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 08/12] netdevsim: pass packets thru GRO on Rx Jakub Kicinski
2025-11-19 15:43 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 09/12] selftests: drv-net: add a Python version of the GRO test Jakub Kicinski
2025-11-19 15:54 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 10/12] selftests: drv-net: hw: convert the Toeplitz test to Python Jakub Kicinski
2025-11-19 16:39 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 11/12] netdevsim: add loopback support Jakub Kicinski
2025-11-19 17:01 ` Petr Machata
2025-11-18 21:51 ` [PATCH net-next v2 12/12] selftests: net: remove old setup_* scripts Jakub Kicinski
2025-11-19 17:04 ` Petr Machata
2025-11-18 22:31 ` [PATCH net-next v2 00/12] selftests: drv-net: convert GRO and Toeplitz tests to work for drivers in NIPA Willem de Bruijn
2025-11-19 0:25 ` Jakub Kicinski
2025-11-19 0:32 ` Willem de Bruijn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ecpucbt7.fsf@nvidia.com \
--to=petrm@nvidia.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=krakauer@google.com \
--cc=kuba@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=matttbe@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=willemdebruijn.kernel@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).