X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FVatExecutor.py;h=03b73210200fea22f3ed5d89e51dcd65305a3438;hp=f0e28a1ae1efae4677a4c6d316c54868db3a57d2;hb=868380b0204758ef34c6be5bae0c9bdb00c4107f;hpb=8c12ff59f1a5e750151f5eb0e806dcc80e91c3c2 diff --git a/resources/libraries/python/VatExecutor.py b/resources/libraries/python/VatExecutor.py index f0e28a1ae1..03b7321020 100644 --- a/resources/libraries/python/VatExecutor.py +++ b/resources/libraries/python/VatExecutor.py @@ -11,6 +11,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +"""VAT executor library.""" + import json from robot.api import logger @@ -39,6 +41,7 @@ def cleanup_vat_json_output(json_output): class VatExecutor(object): + """Contains methods for executing VAT commands on DUTs.""" def __init__(self): self._stdout = None self._stderr = None @@ -62,7 +65,7 @@ class VatExecutor(object): Constants.RESOURCES_TPL_VAT, vat_name) # TODO this overwrites the output if the vat script has been used twice - remote_file_out = remote_file_path + ".out" + # remote_file_out = remote_file_path + ".out" cmd = "sudo -S {vat} {json} < {input}".format( vat=Constants.VAT_BIN_NAME, @@ -81,17 +84,29 @@ class VatExecutor(object): # self._delete_files(node, remote_file_path, remote_file_out) def execute_script_json_out(self, vat_name, node, timeout=10): + """Pass all arguments to 'execute_script' method, then cleanup returned + json output.""" self.execute_script(vat_name, node, timeout, json_out=True) self._stdout = cleanup_vat_json_output(self._stdout) @staticmethod def _delete_files(node, *files): + """Use SSH to delete the specified files on node. + + :param node: Node in topology. + :param files: Files to delete. + :type node: dict + :type files: iterable + """ + ssh = SSH() ssh.connect(node) files = " ".join([str(x) for x in files]) ssh.exec_command("rm {0}".format(files)) def script_should_have_failed(self): + """Read return code from last executed script and raise exception if the + script didn't fail.""" if self._ret_code is None: raise Exception("First execute the script!") if self._ret_code == 0: @@ -99,6 +114,8 @@ class VatExecutor(object): "Script execution passed, but failure was expected") def script_should_have_passed(self): + """Read return code from last executed script and raise exception if the + script failed.""" if self._ret_code is None: raise Exception("First execute the script!") if self._ret_code != 0: @@ -106,9 +123,11 @@ class VatExecutor(object): "Script execution failed, but success was expected") def get_script_stdout(self): + """Returns value of stdout from last executed script.""" return self._stdout def get_script_stderr(self): + """Returns value of stderr from last executed script.""" return self._stderr @staticmethod @@ -150,6 +169,7 @@ class VatTerminal(object): self._tty, 'sudo -S {}{}'.format(Constants.VAT_BIN_NAME, json_text), self.__VAT_PROMPT) + self._exec_failure = False def __enter__(self): return self @@ -166,9 +186,14 @@ class VatTerminal(object): None if not in JSON mode. """ logger.debug("Executing command in VAT terminal: {}".format(cmd)) - out = self._ssh.interactive_terminal_exec_command(self._tty, + try: + out = self._ssh.interactive_terminal_exec_command(self._tty, cmd, self.__VAT_PROMPT) + except: + self._exec_failure = True + raise + logger.debug("VAT output: {}".format(out)) if self.json: obj_start = out.find('{') @@ -177,7 +202,7 @@ class VatTerminal(object): array_end = out.rfind(']') if -1 == obj_start and -1 == array_start: - raise RuntimeError("No JSON data.") + raise RuntimeError("VAT: no JSON data.") if obj_start < array_start or -1 == array_start: start = obj_start @@ -193,9 +218,11 @@ class VatTerminal(object): def vat_terminal_close(self): """Close VAT terminal.""" - self._ssh.interactive_terminal_exec_command(self._tty, - 'quit', - self.__LINUX_PROMPT) + #interactive terminal is dead, we only need to close session + if not self._exec_failure: + self._ssh.interactive_terminal_exec_command(self._tty, + 'quit', + self.__LINUX_PROMPT) self._ssh.interactive_terminal_close(self._tty) def vat_terminal_exec_cmd_from_template(self, vat_template_file, **args):