diff options
Diffstat (limited to 'ice_validator/tests')
-rw-r--r-- | ice_validator/tests/conftest.py | 20 | ||||
-rw-r--r-- | ice_validator/tests/helpers.py | 58 | ||||
-rw-r--r-- | ice_validator/tests/parametrizers.py | 4 | ||||
-rw-r--r-- | ice_validator/tests/test_environment_file_parameters.py | 10 |
4 files changed, 87 insertions, 5 deletions
diff --git a/ice_validator/tests/conftest.py b/ice_validator/tests/conftest.py index 2507753..9868067 100644 --- a/ice_validator/tests/conftest.py +++ b/ice_validator/tests/conftest.py @@ -44,7 +44,8 @@ import os import re import time -from preload import create_preloads +from preload.model import create_preloads +from config import get_generator_plugin_names from tests.helpers import get_output_dir try: @@ -828,6 +829,23 @@ def pytest_addoption(parser): help="optional category of test to execute", ) + parser.addoption( + "--env-directory", + dest="env_dir", + action="store", + help="optional directory of .env files for preload generation" + ) + + parser.addoption( + "--preload-format", + dest="preload_formats", + action="append", + help=( + "Preload format to create (multiple allowed). If not provided " + "then all available formats will be created: {}" + ).format(", ".join(get_generator_plugin_names())) + ) + def pytest_configure(config): """ diff --git a/ice_validator/tests/helpers.py b/ice_validator/tests/helpers.py index ff82c71..94effed 100644 --- a/ice_validator/tests/helpers.py +++ b/ice_validator/tests/helpers.py @@ -42,7 +42,9 @@ import os import re +import zipfile from collections import defaultdict +from typing import Set from boltons import funcutils from tests import cached_yaml as yaml @@ -356,3 +358,59 @@ def get_output_dir(config): if not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True) return output_dir + + +def first(seq, predicate, default=None): + """ + Return the first item in sequence that satisfies the callable, predicate, or + returns the default if not found. + + :param seq: iterable sequence of objects + :param predicate: callable that accepts one item from the sequence + :param default: value to return if not found (default is None) + :return: default value if no item satisfies the predicate + """ + return next((i for i in seq if predicate(i)), default) + + +def check(predicate, message): + """ + Raise a RuntimeError with the provided message if predicate is False. + + Example: + check(path.is_file(), "{} must be a file".format(path.as_posix())) + + :param predicate: boolean condition + :param message: message + """ + if not predicate: + raise RuntimeError(message) + + +def unzip(zip_path, target_dir): + """ + Extracts a Zip archive located at zip_path to target_dir (which will be + created if it already exists) + + :param zip_path: path to valid zip file + :param target_dir: directory to unzip zip_path + """ + check(zipfile.is_zipfile(zip_path), "{} is not a valid zipfile or does not exist".format(zip_path)) + archive = zipfile.ZipFile(zip_path) + if not os.path.exists(target_dir): + os.makedirs(target_dir, exist_ok=True) + archive.extractall(path=target_dir) + + +def remove(sequence, exclude, key=None): + """ + Remove a copy of sequence that items occur in exclude. + + :param sequence: sequence of objects + :param exclude: objects to excluded (must support ``in`` check) + :param key: optional function to extract key from item in sequence + :return: list of items not in the excluded + """ + key_func = key if key else lambda x: x + result = (s for s in sequence if key_func(s) not in exclude) + return set(result) if isinstance(sequence, Set) else list(result) diff --git a/ice_validator/tests/parametrizers.py b/ice_validator/tests/parametrizers.py index 35cf6e0..763296c 100644 --- a/ice_validator/tests/parametrizers.py +++ b/ice_validator/tests/parametrizers.py @@ -58,7 +58,7 @@ def get_template_dir(metafunc): or, during --self-test, the directory whos name matches the current tests module name """ - if metafunc.config.getoption("template_dir") is None: + if metafunc.config.getoption("template_dir", None) is None: return path.join( path.dirname(metafunc.module.__file__), "fixtures", @@ -155,7 +155,7 @@ def get_filenames_lists( """ extensions = [".yaml", ".yml", ".env"] if extensions is None else extensions filenames_lists = [] - if metafunc.config.getoption("self_test"): + if metafunc.config.getoption("self_test", None): filenames_lists.append( list_template_dir( metafunc, extensions, exclude_nested, template_type, ["pass"] diff --git a/ice_validator/tests/test_environment_file_parameters.py b/ice_validator/tests/test_environment_file_parameters.py index ff57c35..69485bc 100644 --- a/ice_validator/tests/test_environment_file_parameters.py +++ b/ice_validator/tests/test_environment_file_parameters.py @@ -218,16 +218,22 @@ def run_test_parameter(yaml_file, resource_type, *prop, **kwargs): assert not invalid_parameters, "\n".join(invalid_parameters) -def get_preload_excluded_parameters(yaml_file): +def get_preload_excluded_parameters(yaml_file, persistent_only=False, env_spec=None): """ Returns set of all parameters that should not be included in the preload's vnf parameters/tag-values section. + + if persistent_only only parameters that are marked as persistent will + be excluded """ + env_spec = env_spec or ENV_PARAMETER_SPEC results = [] - for resource_type, specs in ENV_PARAMETER_SPEC.items(): + for resource_type, specs in env_spec.items(): # apply to all resources if not in the format of an OpenStack resource all_resources = "::" not in resource_type for spec in specs: + if persistent_only and not spec.get("persistent"): + continue results.extend(get_template_parameters(yaml_file, resource_type, spec, all_resources)) return {item["param"] for item in results} |