Interactive terminal fixes 03/3203/2
authorMiroslav Miklus <mmiklus@cisco.com>
Thu, 29 Sep 2016 15:03:17 +0000 (17:03 +0200)
committerPeter Mikus <pmikus@cisco.com>
Tue, 4 Oct 2016 05:53:06 +0000 (05:53 +0000)
- 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 <mmiklus@cisco.com>
resources/libraries/python/VatExecutor.py
resources/libraries/python/ssh.py

index f0e28a1..a0f9634 100644 (file)
@@ -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):
index 298c93e..b470e86 100644 (file)
@@ -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!