Add generic isctest.run.EnvCmd helper to pytest

A generic helper that calls the environment-specified binaries in a
developer-friendly manner, i.e. passing arguments as strings rather than
having to split them first.

The isctest.run.cmd() remains as the basis which provides a clean and
robust interface, while the isctest.run.EnvCmd() can be used as a
convenient wrapper for tests, or when there are some shared default
parameters.

The isctest.run.Dig() is superseded with the isctest.run.EnvCmd(). In
the future, we might revisit adding Dig() or command-specific helpers
again, but it probably only makes sense if they offer command-aware
attributes / methods, rather than just being shortcuts to
isctest.run.EnvCmd().

(cherry picked from commit ff613a72d7)
This commit is contained in:
Nicki Křížek 2025-10-23 12:36:56 +02:00
parent b3e82d1d20
commit eabafffe37
2 changed files with 11 additions and 9 deletions

View file

@ -83,15 +83,17 @@ def cmd(
return CmdResult(exc)
class Dig:
def __init__(self, base_params: str = ""):
self.base_params = base_params
class EnvCmd:
"""Helper for executing binaries from env with optional base parameters."""
def __call__(self, params: str) -> CmdResult:
"""Run the dig command with the given parameters."""
return cmd(
[os.environ.get("DIG")] + f"{self.base_params} {params}".split(),
)
def __init__(self, name: str, base_params: str = ""):
self.bin_path = os.environ[name]
self.base_params = base_params.split()
def __call__(self, params: str, **kwargs) -> CmdResult:
"""Call the command. Keyword arguments from isctest.run.cmd() are supported."""
args = self.base_params + params.split()
return cmd([self.bin_path] + args, **kwargs)
def retry_with_timeout(func, timeout, delay=1, msg=None):

View file

@ -28,7 +28,7 @@ def test_dig_tcp_keepalive_handling(named_port, servers):
options_received = line.split()[0]
return int(options_received)
dig = isctest.run.Dig(f"-p {str(named_port)}")
dig = isctest.run.EnvCmd("DIG", f"-p {str(named_port)}")
isctest.log.info("check that dig handles TCP keepalive in query")
assert "; TCP KEEPALIVE" in dig("+qr +keepalive foo.example. @10.53.0.2").out