Commit e1bb5e65 authored by Jakub Kicinski's avatar Jakub Kicinski

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: default avatarWillem de Bruijn <willemb@google.com>
Tested-by: default avatarWillem de Bruijn <willemb@google.com>
Link: https://lore.kernel.org/r/20240502025325.1924923-1-kuba@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 1c8f43f4
...@@ -26,6 +26,9 @@ class cmd: ...@@ -26,6 +26,9 @@ class cmd:
self.process(terminate=False, fail=fail) self.process(terminate=False, fail=fail)
def process(self, terminate=True, fail=None): def process(self, terminate=True, fail=None):
if fail is None:
fail = not terminate
if terminate: if terminate:
self.proc.terminate() self.proc.terminate()
stdout, stderr = self.proc.communicate(timeout=5) stdout, stderr = self.proc.communicate(timeout=5)
...@@ -43,17 +46,18 @@ class cmd: ...@@ -43,17 +46,18 @@ class cmd:
class bkg(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): exit_wait=False):
super().__init__(comm, background=True, super().__init__(comm, background=True,
shell=shell, fail=fail, ns=ns, host=host) shell=shell, fail=fail, ns=ns, host=host)
self.terminate = not exit_wait self.terminate = not exit_wait
self.check_fail = fail
def __enter__(self): def __enter__(self):
return self return self
def __exit__(self, ex_type, ex_value, ex_tb): 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): def tool(name, args, json=None, ns=None, host=None):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment