diff options
Diffstat (limited to 'dovetail/test_runner.py')
-rw-r--r-- | dovetail/test_runner.py | 56 |
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): |