mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
selftests: net: py: ensure defer() is only used within a test case
I wasted a couple of hours recently after accidentally adding a defer() from within a function which itself was called as part of defer(). This leads to an infinite loop of defer(). Make sure this cannot happen and raise a helpful exception. I understand that the pair of _ksft_defer_arm() calls may not be the most Pythonic way to implement this, but it's easy enough to understand. Reviewed-by: Petr Machata <petrm@nvidia.com> Link: https://patch.msgid.link/20260108225257.2684238-2-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
799a4912ee
commit
7a1ff3545a
|
|
@ -153,6 +153,11 @@ def ktap_result(ok, cnt=1, case_name="", comment=""):
|
|||
print(res, flush=True)
|
||||
|
||||
|
||||
def _ksft_defer_arm(state):
|
||||
""" Allow or disallow the use of defer() """
|
||||
utils.GLOBAL_DEFER_ARMED = state
|
||||
|
||||
|
||||
def ksft_flush_defer():
|
||||
global KSFT_RESULT
|
||||
|
||||
|
|
@ -315,6 +320,7 @@ def ksft_run(cases=None, globs=None, case_pfx=None, args=()):
|
|||
comment = ""
|
||||
cnt_key = ""
|
||||
|
||||
_ksft_defer_arm(True)
|
||||
try:
|
||||
func(*args)
|
||||
except KsftSkipEx as e:
|
||||
|
|
@ -332,6 +338,7 @@ def ksft_run(cases=None, globs=None, case_pfx=None, args=()):
|
|||
ksft_pr(f"Stopping tests due to {type(e).__name__}.")
|
||||
KSFT_RESULT = False
|
||||
cnt_key = 'fail'
|
||||
_ksft_defer_arm(False)
|
||||
|
||||
try:
|
||||
ksft_flush_defer()
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ class bkg(cmd):
|
|||
|
||||
|
||||
GLOBAL_DEFER_QUEUE = []
|
||||
GLOBAL_DEFER_ARMED = False
|
||||
|
||||
|
||||
class defer:
|
||||
|
|
@ -153,6 +154,8 @@ class defer:
|
|||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
|
||||
if not GLOBAL_DEFER_ARMED:
|
||||
raise Exception("defer queue not armed, did you use defer() outside of a test case?")
|
||||
self._queue = GLOBAL_DEFER_QUEUE
|
||||
self._queue.append(self)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user