summaryrefslogtreecommitdiffstats
path: root/dovetail/test_runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail/test_runner.py')
-rw-r--r--dovetail/test_runner.py56
1 files changed, 52 insertions, 4 deletions
diff --git a/dovetail/test_runner.py b/dovetail/test_runner.py
index d2697f6d..934efb74 100644
--- a/dovetail/test_runner.py
+++ b/dovetail/test_runner.py
@@ -7,13 +7,18 @@
# http://www.apache.org/licenses/LICENSE-2.0
#
-import os
import json
-import utils.dovetail_utils as dt_utils
-import utils.dovetail_logger as dt_logger
-from utils.dovetail_config import DovetailConfig as dt_cfg
+import os
+
+import jinja2
+import jinja2.meta
+import yaml
from container import Container
+from dovetail import constants
+from utils.dovetail_config import DovetailConfig as dt_cfg
+import utils.dovetail_utils as dt_utils
+import utils.dovetail_logger as dt_logger
class DockerRunner(object):
@@ -143,9 +148,52 @@ class FunctestRunner(DockerRunner):
class YardstickRunner(DockerRunner):
+ config_file_name = 'yardstick_config.yml'
+
def __init__(self, testcase):
self.type = 'yardstick'
super(YardstickRunner, self).__init__(testcase)
+ self._update_yardstick_config(testcase)
+
+ @staticmethod
+ def _render(task_template, **kwargs):
+ return jinja2.Template(task_template).render(**kwargs)
+
+ @staticmethod
+ def _add_testcase_info(testcase, config_item=None):
+ if not config_item:
+ config_item = {}
+ config_item['validate_testcase'] = testcase.validate_testcase()
+ config_item['testcase'] = testcase.name()
+ return config_item
+
+ def _update_yardstick_config(self, testcase):
+ config_item = None
+ pod_file = os.path.join(dt_cfg.dovetail_config['config_dir'],
+ dt_cfg.dovetail_config['pod_file'])
+ config_file = os.path.join(constants.CONF_PATH, self.config_file_name)
+ pod_info = dt_utils.read_yaml_file(pod_file, self.logger)
+ task_template = dt_utils.read_plain_file(config_file, self.logger)
+ if not (pod_info and task_template):
+ return None
+ try:
+ process_info = pod_info['process_info']
+ except KeyError as e:
+ process_info = None
+ if process_info:
+ for item in process_info:
+ try:
+ if item['testcase_name'] == testcase.name():
+ config_item = self._add_testcase_info(testcase, item)
+ break
+ except KeyError as e:
+ self.logger.error('Need key {} in {}'.format(e, item))
+ if not config_item:
+ config_item = self._add_testcase_info(testcase)
+ full_task = self._render(task_template, **config_item)
+ full_task_yaml = yaml.load(full_task)
+ dt_cfg.dovetail_config.update(full_task_yaml)
+ return dt_cfg.dovetail_config
class BottlenecksRunner(DockerRunner):