api: Implement log_dump/log_details
[vpp.git] / test / framework.py
index 79dfe1a..4bc64a1 100644 (file)
@@ -84,7 +84,7 @@ class VppDiedError(Exception):
 
         try:
             self.signal_name = VppDiedError.signals_by_value[-rv]
-        except KeyError:
+        except (KeyError, TypeError):
             pass
 
         if testcase is None and method_name is None:
@@ -681,10 +681,9 @@ class VppTestCase(unittest.TestCase):
         super(VppTestCase, self).setUp()
         self.reporter.send_keep_alive(self)
         if self.vpp_dead:
-            raise VppDiedError(self.__class__.__name__, self._testMethodName,
-                               "VPP is dead when setting up the test "
-                               "(%s.%s)." % (self.__class__.__name__,
-                                             self._testMethodName))
+
+            raise VppDiedError(rv=None, testcase=self.__class__.__name__,
+                               method_name=self._testMethodName)
         self.sleep(.1, "during setUp")
         self.vpp_stdout_deque.append(
             "--- test setUp() for %s.%s(%s) starts here ---\n" %
@@ -1458,15 +1457,24 @@ class VppTestRunner(unittest.TextTestRunner):
 
 
 class Worker(Thread):
-    def __init__(self, args, logger, env={}):
+    def __init__(self, args, logger, env=None):
         self.logger = logger
         self.args = args
+        self.process = None
         self.result = None
+        env = {} if env is None else env
         self.env = copy.deepcopy(env)
         super(Worker, self).__init__()
 
     def run(self):
         executable = self.args[0]
+        if not os.path.exists(executable) or not os.access(
+                executable, os.F_OK | os.X_OK):
+            # Exit code that means some system file did not exist,
+            # could not be opened, or had some other kind of error.
+            self.result = os.EX_OSFILE
+            raise EnvironmentError(
+                "executable '%s' is not found or executable." % executable)
         self.logger.debug("Running executable w/args `%s'" % self.args)
         env = os.environ.copy()
         env.update(self.env)