diff options
Diffstat (limited to 'subplot/runcmd.py')
-rw-r--r-- | subplot/runcmd.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/subplot/runcmd.py b/subplot/runcmd.py new file mode 100644 index 0000000..631d8c0 --- /dev/null +++ b/subplot/runcmd.py @@ -0,0 +1,73 @@ +# Some step implementations for running commands and capturing the result. + +import logging +import os +import subprocess + + +# Run a command, capture its stdout, stderr, and exit code in context. +def runcmd(ctx, argv, **kwargs): + logging.debug(f"Running program") + logging.debug(f" cwd={os.getcwd()}") + logging.debug(f" argv={argv}") + logging.debug(f" kwargs={argv}") + p = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) + stdout, stderr = p.communicate("") + ctx["argv"] = argv + ctx["stdout"] = stdout.decode("utf-8") + ctx["stderr"] = stderr.decode("utf-8") + ctx["exit"] = p.returncode + + +# Check that latest exit code captured by runcmd was a specific one. +def exit_code_is(ctx, wanted): + logging.debug(f"Verifying exit code is {wanted} (it is {ctx.get('exit')})") + assert_eq(ctx.get("exit"), wanted) + + +# Check that latest exit code captured by runcmd was not a specific one. +def exit_code_is_not(ctx, unwanted): + logging.debug(f"Verifying exit code is NOT {unwanted} (it is {ctx.get('exit')})") + assert_ne(ctx.get("exit"), wanted) + + +# Check that latest exit code captured by runcmd was zero. +def exit_code_zero(ctx): + exit_code_is(ctx, 0) + + +# Check that latest exit code captured by runcmd was not zero. +def exit_code_nonzero(ctx): + exit_code_is_not(ctx, 0) + + +# Check that stdout of latest runcmd contains a specific string. +def stdout_contains(ctx, pattern=None): + logging.debug(f"Verifying stdout contains {pattern}") + logging.debug(f" stdout is {ctx.get('stdout', '')})") + stdout = ctx.get("stdout", "") + assert_eq(pattern in stdout, True) + + +# Check that stdout of latest runcmd does not contain a specific string. +def stdout_does_not_contain(ctx, pattern=None): + logging.debug(f"Verifying stdout does NOT contain {pattern}") + logging.debug(f" stdout is {ctx.get('stdout', '')})") + stdout = ctx.get("stdout", "") + assert_eq(pattern not in stdout, True) + + +# Check that stderr of latest runcmd does contains a specific string. +def stderr_contains(ctx, pattern=None): + logging.debug(f"Verifying stderr contains {pattern}") + logging.debug(f" stderr is {ctx.get('stderr', '')})") + stderr = ctx.get("stderr", "") + assert_eq(pattern in stderr, True) + + +# Check that stderr of latest runcmd does not contain a specific string. +def stderr_does_not_contain(ctx, pattern=None): + logging.debug(f"Verifying stderr does NOT contain {pattern}") + logging.debug(f" stderr is {ctx.get('stderr', '')})") + stderr = ctx.get("stderr", "") + assert_eq(pattern not in stderr, True) |