From 5dc98f39c227fb09ce59caa38d28f0dba8558e4b Mon Sep 17 00:00:00 2001 From: Miroslav Miklus Date: Thu, 29 Sep 2016 17:03:17 +0200 Subject: [PATCH] Interactive terminal fixes - remember if execution timed out and do not try to send "quit" on close - increase timeout of vat command execution from 10s to 60s Change-Id: I2b96a6dce1220eff45002276d1fe8a771fca2205 Signed-off-by: Miroslav Miklus --- resources/libraries/python/VatExecutor.py | 18 +++++++++++++----- resources/libraries/python/ssh.py | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/resources/libraries/python/VatExecutor.py b/resources/libraries/python/VatExecutor.py index f0e28a1ae1..a0f9634d8c 100644 --- a/resources/libraries/python/VatExecutor.py +++ b/resources/libraries/python/VatExecutor.py @@ -150,6 +150,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 +167,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 +183,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 +199,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): diff --git a/resources/libraries/python/ssh.py b/resources/libraries/python/ssh.py index 298c93ee8e..b470e86ccc 100644 --- a/resources/libraries/python/ssh.py +++ b/resources/libraries/python/ssh.py @@ -213,7 +213,7 @@ class SSH(object): @staticmethod def interactive_terminal_exec_command(chan, cmd, prompt, - time_out=10): + time_out=30): """Execute command on interactive terminal. interactive_terminal_open() method has to be called first! -- 2.16.6