Use a subdir of run_dir for each test

Processes created have the scope of the test, so we should store
everything in a per-suite_run/per-test directory, otherwise everything
is stored in the same trial run_dir directory and it's really messy.

Change-Id: I06be2dd21710e14c1337d13b1fe6c2f68f037957
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 5c567f8..c78c9fc 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -76,6 +76,8 @@
     PASS = 'pass'
     FAIL = 'FAIL'
 
+    _run_dir = None
+
     def __init__(self, suite_run, test_basename):
         self.basename = test_basename
         super().__init__(log.C_TST, self.basename)
@@ -87,6 +89,11 @@
         self.fail_type = None
         self.fail_message = None
 
+    def get_run_dir(self):
+        if self._run_dir is None:
+            self._run_dir = util.Dir(self.suite_run.get_run_dir().new_dir(self._name))
+        return self._run_dir
+
     def run(self):
         try:
             log.large_separator(self.suite_run.trial.name(), self.suite_run.name(), self.name(), sublevel=3)
@@ -165,6 +172,7 @@
     _resource_requirements = None
     _config = None
     _processes = None
+    _run_dir = None
 
     def __init__(self, trial, suite_scenario_str, suite_definition, scenarios=[]):
         super().__init__(log.C_TST, suite_scenario_str)
@@ -209,6 +217,16 @@
             config.combine(combination, c)
         return combination
 
+    def get_run_dir(self):
+        if self._run_dir is None:
+            self._run_dir = util.Dir(self.trial.get_run_dir().new_dir(self.name()))
+        return self._run_dir
+
+    def get_test_run_dir(self):
+        if self.current_test:
+            return self.current_test.get_run_dir()
+        return self.get_run_dir()
+
     def resource_requirements(self):
         if self._resource_requirements is None:
             self._resource_requirements = self.combined('resources')
@@ -236,6 +254,7 @@
                 if names and not test.name() in names:
                     test.set_skip()
                     continue
+                self.current_test = test
                 test.run()
         except Exception:
             log.log_exn()