From 7729258656215b5b616d9cb6872ddecb2f448770 Mon Sep 17 00:00:00 2001 From: Niklas Hambuechen Date: Mon, 22 Sep 2014 17:43:22 +0200 Subject: [PATCH] qa_utils: Make AssertCommand return stdout/stderr as well This is usefull if the run commands output something that's needed afterwards. Signed-off-by: Niklas Hambuechen Reviewed-by: Klaus Aehlig Cherry-picked-from: b47587b0d8b9646adbf519a7b7286a0576e582c0 Signed-off-by: Hrvoje Ribicic Reviewed-by: Klaus Aehlig --- qa/qa_utils.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/qa/qa_utils.py b/qa/qa_utils.py index cba84d850..102832e55 100644 --- a/qa/qa_utils.py +++ b/qa/qa_utils.py @@ -165,7 +165,7 @@ def AssertCommand(cmd, fail=False, node=None, log_cmd=True, max_seconds=None): @type max_seconds: double @param max_seconds: fail if the command takes more than C{max_seconds} seconds - @return: the return code of the command + @return: the return code, stdout and stderr of the command @raise qa_error.Error: if the command fails when it shouldn't or vice versa """ @@ -180,7 +180,10 @@ def AssertCommand(cmd, fail=False, node=None, log_cmd=True, max_seconds=None): cmdstr = utils.ShellQuoteArgs(cmd) start = datetime.datetime.now() - rcode = StartSSH(nodename, cmdstr, log_cmd=log_cmd).wait() + popen = StartSSH(nodename, cmdstr, log_cmd=log_cmd) + # Run the command + stdout, stderr = popen.communicate() + rcode = popen.returncode duration_seconds = TimedeltaToTotalSeconds(datetime.datetime.now() - start) _AssertRetCode(rcode, fail, cmdstr, nodename) @@ -190,7 +193,7 @@ def AssertCommand(cmd, fail=False, node=None, log_cmd=True, max_seconds=None): "Cmd '%s' took %f seconds, maximum of %f was exceeded" % (cmdstr, duration_seconds, max_seconds)) - return rcode + return rcode, stdout, stderr def AssertRedirectedCommand(cmd, fail=False, node=None, log_cmd=True): @@ -292,7 +295,8 @@ def StartSSH(node, cmd, strict=True, log_cmd=True): """ return StartLocalCommand(GetSSHCommand(node, cmd, strict=strict), - _nolog_opts=True, log_cmd=log_cmd) + _nolog_opts=True, log_cmd=log_cmd, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) def StartMultiplexer(node): @@ -549,10 +553,10 @@ def GenericQueryTest(cmd, fields, namefield="name", test_unknown=True): fail=True) # Check exit code for listing unknown field - AssertEqual(AssertRedirectedCommand([cmd, "list", - "--output=field/does/not/exist"], - fail=True), - constants.EXIT_UNKNOWN_FIELD) + rcode, _, _ = AssertRedirectedCommand([cmd, "list", + "--output=field/does/not/exist"], + fail=True) + AssertEqual(rcode, constants.EXIT_UNKNOWN_FIELD) def GenericQueryFieldsTest(cmd, fields): @@ -570,9 +574,9 @@ def GenericQueryFieldsTest(cmd, fields): utils.NiceSort(fields)) # Check exit code for listing unknown field - AssertEqual(AssertCommand([cmd, "list-fields", "field/does/not/exist"], - fail=True), - constants.EXIT_UNKNOWN_FIELD) + rcode, _, _ = AssertCommand([cmd, "list-fields", "field/does/not/exist"], + fail=True) + AssertEqual(rcode, constants.EXIT_UNKNOWN_FIELD) def AddToEtcHosts(hostnames): -- GitLab