Merge "Create RobotFramework class"
[functest.git] / functest / ci / run_tests.py
index d4acd9c..03d62d9 100644 (file)
@@ -19,6 +19,7 @@ import sys
 import textwrap
 
 import prettytable
+import yaml
 
 import functest.ci.tier_builder as tb
 import functest.core.testcase as testcase
@@ -29,6 +30,16 @@ from functest.utils.constants import CONST
 # __name__ cannot be used here
 logger = logging.getLogger('functest.ci.run_tests')
 
+CONFIG_FUNCTEST_PATH = pkg_resources.resource_filename(
+    'functest', 'ci/config_functest.yaml')
+CONFIG_PATCH_PATH = pkg_resources.resource_filename(
+    'functest', 'ci/config_patch.yaml')
+CONFIG_AARCH64_PATCH_PATH = pkg_resources.resource_filename(
+    'functest', 'ci/config_aarch64_patch.yaml')
+# set the architecture to default
+pod_arch = os.getenv("POD_ARCH", None)
+arch_filter = ['aarch64']
+
 
 class Result(enum.Enum):
     EX_OK = os.EX_OK
@@ -75,6 +86,44 @@ class Runner(object):
             CONST.__getattribute__('DEPLOY_SCENARIO'),
             pkg_resources.resource_filename('functest', 'ci/testcases.yaml'))
 
+    @staticmethod
+    def update_config_file():
+        Runner.patch_file(CONFIG_PATCH_PATH)
+
+        if pod_arch and pod_arch in arch_filter:
+            Runner.patch_file(CONFIG_AARCH64_PATCH_PATH)
+
+        if "TEST_DB_URL" in os.environ:
+            Runner.update_db_url()
+
+    @staticmethod
+    def patch_file(patch_file_path):
+        logger.debug('Updating file: %s', patch_file_path)
+        with open(patch_file_path) as f:
+            patch_file = yaml.safe_load(f)
+
+        updated = False
+        for key in patch_file:
+            if key in CONST.__getattribute__('DEPLOY_SCENARIO'):
+                new_functest_yaml = dict(ft_utils.merge_dicts(
+                    ft_utils.get_functest_yaml(), patch_file[key]))
+                updated = True
+
+        if updated:
+            os.remove(CONFIG_FUNCTEST_PATH)
+            with open(CONFIG_FUNCTEST_PATH, "w") as f:
+                f.write(yaml.dump(new_functest_yaml, default_style='"'))
+
+    @staticmethod
+    def update_db_url():
+        with open(CONFIG_FUNCTEST_PATH) as f:
+            functest_yaml = yaml.safe_load(f)
+
+        with open(CONFIG_FUNCTEST_PATH, "w") as f:
+            functest_yaml["results"]["test_db_url"] = os.environ.get(
+                'TEST_DB_URL')
+            f.write(yaml.dump(functest_yaml, default_style='"'))
+
     @staticmethod
     def source_rc_file():
         rc_file = CONST.__getattribute__('openstack_creds')
@@ -192,6 +241,8 @@ class Runner(object):
             self.run_tier(tier)
 
     def main(self, **kwargs):
+        Runner.update_config_file()
+
         if 'noclean' in kwargs:
             self.clean_flag = not kwargs['noclean']
         if 'report' in kwargs: