summaryrefslogtreecommitdiff
path: root/tests/cloud_tests/config.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cloud_tests/config.py')
-rw-r--r--tests/cloud_tests/config.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/tests/cloud_tests/config.py b/tests/cloud_tests/config.py
new file mode 100644
index 00000000..f3a13c9a
--- /dev/null
+++ b/tests/cloud_tests/config.py
@@ -0,0 +1,113 @@
+# This file is part of cloud-init. See LICENSE file for license information.
+
+import glob
+import os
+
+from cloudinit import util as c_util
+from tests.cloud_tests import (BASE_DIR, TEST_CONF_DIR)
+
+# conf files
+CONF_EXT = '.yaml'
+VERIFY_EXT = '.py'
+PLATFORM_CONF = os.path.join(BASE_DIR, 'platforms.yaml')
+RELEASES_CONF = os.path.join(BASE_DIR, 'releases.yaml')
+TESTCASE_CONF = os.path.join(BASE_DIR, 'testcases.yaml')
+
+
+def path_to_name(path):
+ """
+ convert abs or rel path to test config to path under configs/
+ if already a test name, do nothing
+ """
+ dir_path, file_name = os.path.split(os.path.normpath(path))
+ name = os.path.splitext(file_name)[0]
+ return os.sep.join((os.path.basename(dir_path), name))
+
+
+def name_to_path(name):
+ """
+ convert test config path under configs/ to full config path,
+ if already a full path, do nothing
+ """
+ name = os.path.normpath(name)
+ if not name.endswith(CONF_EXT):
+ name = name + CONF_EXT
+ return name if os.path.isabs(name) else os.path.join(TEST_CONF_DIR, name)
+
+
+def name_sanatize(name):
+ """
+ sanatize test name to be used as a module name
+ """
+ return name.replace('-', '_')
+
+
+def name_to_module(name):
+ """
+ convert test name to a loadable module name under testcases/
+ """
+ name = name_sanatize(path_to_name(name))
+ return name.replace(os.path.sep, '.')
+
+
+def merge_config(base, override):
+ """
+ merge config and base
+ """
+ res = base.copy()
+ res.update(override)
+ res.update({k: merge_config(base.get(k, {}), v)
+ for k, v in override.items() if isinstance(v, dict)})
+ return res
+
+
+def load_platform_config(platform):
+ """
+ load configuration for platform
+ """
+ main_conf = c_util.read_conf(PLATFORM_CONF)
+ return merge_config(main_conf.get('default_platform_config'),
+ main_conf.get('platforms')[platform])
+
+
+def load_os_config(os_name):
+ """
+ load configuration for os
+ """
+ main_conf = c_util.read_conf(RELEASES_CONF)
+ return merge_config(main_conf.get('default_release_config'),
+ main_conf.get('releases')[os_name])
+
+
+def load_test_config(path):
+ """
+ load a test config file by either abs path or rel path
+ """
+ return merge_config(c_util.read_conf(TESTCASE_CONF)['base_test_data'],
+ c_util.read_conf(name_to_path(path)))
+
+
+def list_enabled_platforms():
+ """
+ list all platforms enabled for testing
+ """
+ platforms = c_util.read_conf(PLATFORM_CONF).get('platforms')
+ return [k for k, v in platforms.items() if v.get('enabled')]
+
+
+def list_enabled_distros():
+ """
+ list all distros enabled for testing
+ """
+ releases = c_util.read_conf(RELEASES_CONF).get('releases')
+ return [k for k, v in releases.items() if v.get('enabled')]
+
+
+def list_test_configs():
+ """
+ list all available test config files by abspath
+ """
+ return [os.path.abspath(f) for f in
+ glob.glob(os.sep.join((TEST_CONF_DIR, '*', '*.yaml')))]
+
+# vi: ts=4 expandtab