(not sure we want this, but just throwing it out there..)
Add new @ksft_disruptive decorator to mark the tests that might be disruptive to the system. Depending on how well the previous test works in the CI we might want to disable disruptive tests by default and only let the developers run them manually.
In the future we can add similar decorators to, for example, avoid running slow tests all the time. And/or have some option to run only 'fast' tests for some sort of smoke test scenario.
$ ./stats.py --skip-disruptive KTAP version 1 1..5 ok 1 stats.check_pause ok 2 stats.check_fec ok 3 stats.pkt_byte_sum ok 4 stats.qstat_by_ifindex ok 5 stats.check_down # SKIP marked as disruptive # Totals: pass:4 fail:0 xfail:0 xpass:0 skip:1 error:0
Signed-off-by: Stanislav Fomichev sdf@fomichev.me -- Cc: Shuah Khan shuah@kernel.org Cc: Joe Damato jdamato@fastly.com Cc: Petr Machata petrm@nvidia.com Cc: linux-kselftest@vger.kernel.org --- tools/testing/selftests/drivers/net/stats.py | 2 ++ tools/testing/selftests/net/lib/py/ksft.py | 22 ++++++++++++++++++++ 2 files changed, 24 insertions(+)
diff --git a/tools/testing/selftests/drivers/net/stats.py b/tools/testing/selftests/drivers/net/stats.py index 6f8bef379565..04508894ef9c 100755 --- a/tools/testing/selftests/drivers/net/stats.py +++ b/tools/testing/selftests/drivers/net/stats.py @@ -3,6 +3,7 @@
from lib.py import ksft_run, ksft_exit, ksft_pr from lib.py import ksft_ge, ksft_eq, ksft_in, ksft_true, ksft_raises, KsftSkipEx, KsftXfailEx +from lib.py import ksft_disruptive from lib.py import EthtoolFamily, NetdevFamily, RtnlFamily, NlError from lib.py import NetDrvEnv from lib.py import ip @@ -134,6 +135,7 @@ rtnl = RtnlFamily() ksft_eq(cm.exception.nl_msg.extack['bad-attr'], '.ifindex')
+@ksft_disruptive def check_down(cfg) -> None: try: qstat = netfam.qstats_get({"ifindex": cfg.ifindex}, dump=True) diff --git a/tools/testing/selftests/net/lib/py/ksft.py b/tools/testing/selftests/net/lib/py/ksft.py index f26c20df9db4..f6545a45942a 100644 --- a/tools/testing/selftests/net/lib/py/ksft.py +++ b/tools/testing/selftests/net/lib/py/ksft.py @@ -1,6 +1,8 @@ # SPDX-License-Identifier: GPL-2.0
+import argparse import builtins +import functools import inspect import sys import time @@ -10,6 +12,7 @@ from .utils import global_defer_queue
KSFT_RESULT = None KSFT_RESULT_ALL = True +KSFT_ARGS = None
class KsftFailEx(Exception): @@ -127,7 +130,26 @@ KSFT_RESULT_ALL = True KSFT_RESULT = False
+def ksft_disruptive(func): + """ + Decorator that marks the test as disruptive. Disruptive tests + can be skipped by adding --skip-disruptive argument. + """ + + @functools.wraps(func) + def wrapper(*args, **kwargs): + if KSFT_ARGS.skip_disruptive: + raise KsftSkipEx(f"marked as disruptive") + return func(*args, **kwargs) + return wrapper + + def ksft_run(cases=None, globs=None, case_pfx=None, args=()): + parser = argparse.ArgumentParser() + parser.add_argument('--skip-disruptive', default=False, action='store_true', help='skip tests that might be disruptive (e.g. restart the interface)') + global KSFT_ARGS + KSFT_ARGS = parser.parse_args() + cases = cases or []
if globs and case_pfx: