summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2024-05-01 19:53:25 -0700
committerJakub Kicinski <kuba@kernel.org>2024-05-02 18:20:49 -0700
commite1bb5e65de8355ee76f51c6bfee2328ac5b2be15 (patch)
tree77fb0371c16f4973530137b3b5874c8bfb59650c
parent1c8f43f477d92fda15bccd703b808cd46899cd3c (diff)
selftests: net: py: check process exit code in bkg() and background cmd()
We're a bit too loose with error checking for background processes. cmd() completely ignores the fail argument passed to the constructor if background is True. Default to checking for errors if process is not terminated explicitly. Caller can override with True / False. For bkg() the processing step is called magically by __exit__ so record the value passed in the constructor. Reported-by: Willem de Bruijn <willemb@google.com> Tested-by: Willem de Bruijn <willemb@google.com> Link: https://lore.kernel.org/r/20240502025325.1924923-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--tools/testing/selftests/net/lib/py/utils.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/tools/testing/selftests/net/lib/py/utils.py b/tools/testing/selftests/net/lib/py/utils.py
index b57d467afd0f..ec8b086b4fcb 100644
--- a/tools/testing/selftests/net/lib/py/utils.py
+++ b/tools/testing/selftests/net/lib/py/utils.py
@@ -26,6 +26,9 @@ class cmd:
self.process(terminate=False, fail=fail)
def process(self, terminate=True, fail=None):
+ if fail is None:
+ fail = not terminate
+
if terminate:
self.proc.terminate()
stdout, stderr = self.proc.communicate(timeout=5)
@@ -43,17 +46,18 @@ class cmd:
class bkg(cmd):
- def __init__(self, comm, shell=True, fail=True, ns=None, host=None,
+ def __init__(self, comm, shell=True, fail=None, ns=None, host=None,
exit_wait=False):
super().__init__(comm, background=True,
shell=shell, fail=fail, ns=ns, host=host)
self.terminate = not exit_wait
+ self.check_fail = fail
def __enter__(self):
return self
def __exit__(self, ex_type, ex_value, ex_tb):
- return self.process(terminate=self.terminate)
+ return self.process(terminate=self.terminate, fail=self.check_fail)
def tool(name, args, json=None, ns=None, host=None):