Browse Source

[1290] put process output in subdir, and don't delete if scenario fails

Jelte Jansen 13 years ago
parent
commit
94282a20ab
1 changed files with 21 additions and 4 deletions
  1. 21 4
      tests/lettuce/features/terrain/terrain.py

+ 21 - 4
tests/lettuce/features/terrain/terrain.py

@@ -34,6 +34,7 @@ class RunningProcess:
         self.step = step
         self.process_name = process_name
         self.remove_files_on_exit = True
+        self._check_output_dir()
         self._create_filenames()
         self._start_process(args)
 
@@ -51,11 +52,24 @@ class RunningProcess:
         filebase = re.sub("[^a-zA-Z.\-_]", "", filebase)
         return filebase + "." + extension
 
+    def _check_output_dir(self):
+        # We may want to make this overridable by the user, perhaps
+        # through an environment variable. Since we currently expect
+        # lettuce to be run from our lettuce dir, we shall just use
+        # the relative path 'output/'
+        self._output_dir = os.getcwd() + os.sep + "output"
+        if not os.path.exists(self._output_dir):
+            os.mkdir(self._output_dir)
+        assert os.path.isdir(self._output_dir),\
+            self._output_dir + " is not a directory."
+
     def _create_filenames(self):
         filebase = self.step.scenario.feature.name + "-" +\
                    self.step.scenario.name + "-" + self.process_name
-        self.stderr_filename = self.mangle_filename(filebase, "stderr")
-        self.stdout_filename = self.mangle_filename(filebase, "stdout")
+        self.stderr_filename = self._output_dir + os.sep +\
+                               self.mangle_filename(filebase, "stderr")
+        self.stdout_filename = self._output_dir + os.sep +\
+                               self.mangle_filename(filebase, "stdout")
 
     def stop_process(self):
         if self.process is not None:
@@ -155,7 +169,7 @@ class RunningProcesses:
                                                                 only_new)
 
 @before.each_scenario
-def initialize(feature):
+def initialize(scenario):
     # Keep track of running processes
     world.processes = RunningProcesses()
 
@@ -169,6 +183,9 @@ def initialize(feature):
         shutil.copy(item[0], item[1])
 
 @after.each_scenario
-def cleanup(feature):
+def cleanup(scenario):
+    # Keep output files if the scenario failed
+    if not scenario.passed:
+        world.processes.keep_files()
     # Stop any running processes we may have had around
     world.processes.stop_all_processes()