X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Fparametrizers.py;h=38a93db2fde58d36a46c3b88697075061a748ada;hb=8540eb59f7e7f8ff2043a8eaf7edfc255a60874a;hp=33b214bfdfea4942db3c786574daa35948cace67;hpb=06511c3ae3ed91250586d4b1c14130d83eaa64c8;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/parametrizers.py b/ice_validator/tests/parametrizers.py old mode 100755 new mode 100644 index 33b214b..38a93db --- a/ice_validator/tests/parametrizers.py +++ b/ice_validator/tests/parametrizers.py @@ -1,12 +1,12 @@ # -*- coding: utf8 -*- -# ============LICENSE_START======================================================= +# ============LICENSE_START==================================================== # org.onap.vvp/validation-scripts # =================================================================== # Copyright © 2017 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed -# under the Apache License, Version 2.0 (the “License”); +# under the Apache License, Version 2.0 (the "License"); # you may not use this software except in compliance with the License. # You may obtain a copy of the License at # @@ -21,7 +21,7 @@ # # # Unless otherwise specified, all documentation contained herein is licensed -# under the Creative Commons License, Attribution 4.0 Intl. (the “License”); +# under the Creative Commons License, Attribution 4.0 Intl. (the "License"); # you may not use this documentation except in compliance with the License. # You may obtain a copy of the License at # @@ -35,387 +35,374 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # + +"""parametrizers +""" + from os import path, listdir import re -import yaml +from tests import cached_yaml as yaml import pytest from .helpers import get_parsed_yml_for_yaml_files, check_basename_ending from .utils.nested_files import get_list_of_nested_files -VERSION = '1.0.0' +VERSION = "1.0.0" # pylint: disable=invalid-name def get_template_dir(metafunc): - ''' + """ returns template_dir, either as its passed in on CLI 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") is None: return path.join( - path.dirname(path.realpath(__file__)), - 'fixtures', - metafunc.function.__module__.split('.')[-1]) + path.dirname(metafunc.module.__file__), + "fixtures", + metafunc.function.__module__.split(".")[-1], + ) else: - return metafunc.config.getoption('template_dir')[0] + return metafunc.config.getoption("template_dir")[0] + + +def file_is_a_nested_template(file): + directory = path.dirname(file) + nested_files = [] + for filename in listdir(directory): + if filename.endswith(".yaml") or filename.endswith(".yml"): + filename = "{}/{}".format(directory, filename) + try: + with open(filename) as fh: + yml = yaml.load(fh) + if "resources" not in yml: + continue + nested_files.extend( + get_list_of_nested_files(yml["resources"], path.dirname(filename)) + ) + except yaml.YAMLError as e: + print(e) # pylint: disable=superfluous-parens + continue + return file in nested_files def get_nested_files(filenames): - ''' + """ returns all the nested files for a set of filenames - ''' + """ nested_files = [] for filename in filenames: - try: - with open(filename) as fh: - yml = yaml.load(fh) - if "resources" not in yml: - continue - nested_files.extend(get_list_of_nested_files( - yml["resources"], - path.dirname(filename))) - except yaml.YAMLError as e: - print(e) # pylint: disable=superfluous-parens - continue + if file_is_a_nested_template(filename): + nested_files.append(filename) return nested_files def list_filenames_in_template_dir( - metafunc, - extensions, - template_type='', - sub_dirs=None): - ''' + metafunc, extensions, template_type="", sub_dirs=None +): + """ returns the filenames in a template_dir, either as its passed in on CLI or, during --self-test, the directory whos name matches the current tests module name - ''' + """ sub_dirs = [] if sub_dirs is None else sub_dirs template_dir = get_template_dir(metafunc) filenames = [] - if metafunc.config.getoption('self_test'): - filenames = [path.join(template_dir, s, f) - for s in sub_dirs - for f in listdir(path.join(template_dir, s)) - if path.isfile(path.join(template_dir, s, f)) - and path.splitext(f)[-1] in extensions - and check_basename_ending( - template_type, - path.splitext(f)[0])] + if metafunc.config.getoption("self_test"): + filenames = [ + path.join(template_dir, s, f) + for s in sub_dirs + for f in listdir(path.join(template_dir, s)) + if path.isfile(path.join(template_dir, s, f)) + and path.splitext(f)[-1] in extensions + and check_basename_ending(template_type, path.splitext(f)[0]) + ] else: - filenames = [path.join(template_dir, f) - for f in listdir(template_dir) - if path.isfile(path.join(template_dir, f)) - and path.splitext(f)[-1] in extensions - and check_basename_ending( - template_type, - path.splitext(f)[0])] + filenames = [ + path.join(template_dir, f) + for f in listdir(template_dir) + if path.isfile(path.join(template_dir, f)) + and path.splitext(f)[-1] in extensions + and check_basename_ending(template_type, path.splitext(f)[0]) + ] return filenames def list_template_dir( - metafunc, - extensions, - exclude_nested=True, - template_type='', - sub_dirs=None): - ''' + metafunc, extensions, exclude_nested=True, template_type="", sub_dirs=None +): + """ returns the filenames excluding the nested files for a template_dir, either as its passed in on CLI or, during --self-test, the directory whos name matches the current tests module name - ''' + """ sub_dirs = [] if sub_dirs is None else sub_dirs filenames = [] nested_files = [] filenames = list_filenames_in_template_dir( - metafunc, - extensions, - template_type, - sub_dirs) + metafunc, extensions, template_type, sub_dirs + ) if exclude_nested: nested_files = get_nested_files(filenames) return list(set(filenames) - set(nested_files)) def get_filenames_list( - metafunc, - extensions=None, - exclude_nested=False, - template_type=''): - ''' + metafunc, extensions=None, exclude_nested=False, template_type="" +): + """ returns the filename fixtures for the template dir, either as by how its passed in on CLI or, during --self-test, the directory whos name matches the current tests module name - ''' - extensions = [ - ".yaml", - ".yml", - ".env" - ] if extensions is None else extensions - if metafunc.config.getoption('self_test'): - filenames_list = list_template_dir(metafunc, - extensions, - exclude_nested, - template_type, - ['pass']) - filenames_list += [pytest.mark.xfail(f, strict=True) - for f in list_template_dir(metafunc, - extensions, - exclude_nested, - template_type, - ['fail'])] + """ + extensions = [".yaml", ".yml", ".env"] if extensions is None else extensions + if metafunc.config.getoption("self_test"): + filenames_list = list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["pass"] + ) + filenames_list += [ + pytest.mark.xfail(f, strict=True) + for f in list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["fail"] + ) + ] else: - filenames_list = list_template_dir(metafunc, - extensions, - exclude_nested, - template_type) + filenames_list = list_template_dir( + metafunc, extensions, exclude_nested, template_type + ) return filenames_list def get_filenames_lists( - metafunc, - extensions=None, - exclude_nested=False, - template_type=''): - ''' + metafunc, extensions=None, exclude_nested=False, template_type="" +): + """ returns the list of files in the template dir, either as by how its passed in on CLI or, during --self-test, the directory whos name matches the current tests module name - ''' - extensions = [ - ".yaml", - ".yml", - ".env" - ] if extensions is None else extensions + """ + extensions = [".yaml", ".yml", ".env"] if extensions is None else extensions filenames_lists = [] - if metafunc.config.getoption('self_test'): - filenames_lists.append(list_template_dir(metafunc, - extensions, - exclude_nested, - template_type, - ['pass'])) - filenames_lists.append(pytest.mark.xfail( - list_template_dir(metafunc, - extensions, - exclude_nested, - template_type, - ['fail']), - strict=True)) + if metafunc.config.getoption("self_test"): + filenames_lists.append( + list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["pass"] + ) + ) + filenames_lists.append( + pytest.mark.xfail( + list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["fail"] + ), + strict=True, + ) + ) else: - filenames_lists.append(list_template_dir(metafunc, - extensions, - exclude_nested, - template_type)) + filenames_lists.append( + list_template_dir(metafunc, extensions, exclude_nested, template_type) + ) return filenames_lists def get_parsed_yaml_files( - metafunc, - extensions, - exclude_nested=True, - template_type='', - sections=None): - ''' + metafunc, extensions, exclude_nested=True, template_type="", sections=None +): + """ returns the list of parsed yaml files in the specified template dir, either as by how its passed in on CLI or, during --self-test, the directory whos name matches the current tests module name - ''' + """ sections = [] if sections is None else sections extensions = [".yaml", ".yml"] - if metafunc.config.getoption('self_test'): - yaml_files = list_template_dir(metafunc, extensions, exclude_nested, - template_type, ['pass']) - parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, - sections) - - yaml_files = list_template_dir(metafunc, extensions, exclude_nested, - template_type, ['fail']) - parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, - sections) - parsed_yml_list += [pytest.mark.xfail(parsed_yml, strict=True) - for parsed_yml in parsed_yml_list] + if metafunc.config.getoption("self_test"): + yaml_files = list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["pass"] + ) + parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, sections) + + yaml_files = list_template_dir( + metafunc, extensions, exclude_nested, template_type, ["fail"] + ) + parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, sections) + parsed_yml_list += [ + pytest.mark.xfail(parsed_yml, strict=True) for parsed_yml in parsed_yml_list + ] else: yaml_files = list_template_dir(metafunc, extensions) - parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, - sections) + parsed_yml_list = get_parsed_yml_for_yaml_files(yaml_files, sections) return parsed_yml_list def parametrize_filenames(metafunc): - ''' + """ This param runs tests all files in the template dir - ''' + """ filenames = get_filenames_lists(metafunc) - metafunc.parametrize('filenames', filenames) + metafunc.parametrize("filenames", filenames) def parametrize_filename(metafunc): - ''' + """ This param runs tests once for every file in the template dir - ''' + """ filenames = get_filenames_list(metafunc) - metafunc.parametrize('filename', filenames) + metafunc.parametrize("filename", filenames) def parametrize_yaml_files(metafunc): - ''' + """ This param runs tests for the yaml files in the template dir - ''' - yaml_files = get_filenames_lists(metafunc, ['.yaml', '.yml'], False) + """ + yaml_files = get_filenames_lists(metafunc, [".yaml", ".yml"], False) metafunc.parametrize("yaml_files", yaml_files) def parametrize_yaml_file(metafunc): - ''' + """ This param runs tests for every yaml file in the template dir - ''' - yaml_files = get_filenames_list(metafunc, ['.yaml', '.yml'], False) - metafunc.parametrize('yaml_file', yaml_files) + """ + yaml_files = get_filenames_list(metafunc, [".yaml", ".yml"], False) + metafunc.parametrize("yaml_file", yaml_files) def parametrize_templates(metafunc): - ''' + """ This param runs tests for the template in the template dir - ''' - templates = get_filenames_lists(metafunc, ['.yaml', '.yml'], True) + """ + templates = get_filenames_lists(metafunc, [".yaml", ".yml"], True) metafunc.parametrize("templates", templates) def parametrize_template(metafunc): - ''' + """ This param runs tests for every template in the template dir - ''' - templates = get_filenames_list(metafunc, ['.yaml', '.yml'], True) - metafunc.parametrize('template', templates) + """ + templates = get_filenames_list(metafunc, [".yaml", ".yml"], True) + metafunc.parametrize("template", templates) def parametrize_parsed_yaml_file(metafunc): - ''' + """ This param runs tests for a parsed version of each yaml file in the template dir - ''' - parsed_yaml_files = get_parsed_yaml_files(metafunc, ['.yaml', '.yml'], - False) - metafunc.parametrize('parsed_yaml_file', parsed_yaml_files) + """ + parsed_yaml_files = get_parsed_yaml_files(metafunc, [".yaml", ".yml"], False) + metafunc.parametrize("parsed_yaml_file", parsed_yaml_files) def parametrize_heat_templates(metafunc): - ''' + """ This param runs tests for all heat templates in the template dir - ''' - heat_templates = get_filenames_lists(metafunc, ['.yaml', '.yml'], - True, 'heat') - metafunc.parametrize('heat_templates', heat_templates) + """ + heat_templates = get_filenames_lists(metafunc, [".yaml", ".yml"], True, "heat") + metafunc.parametrize("heat_templates", heat_templates) def parametrize_heat_template(metafunc): - ''' + """ This param runs tests for every heat template in the template dir - ''' - heat_templates = get_filenames_list(metafunc, ['.yaml', '.yml'], - True, 'heat') - metafunc.parametrize('heat_template', heat_templates) + """ + heat_templates = get_filenames_list(metafunc, [".yaml", ".yml"], True, "heat") + metafunc.parametrize("heat_template", heat_templates) def parametrize_volume_templates(metafunc): - ''' + """ This param runs tests for all volume templates in the template dir - ''' - volume_templates = get_filenames_lists(metafunc, ['.yaml', '.yml'], - True, 'volume') - metafunc.parametrize('volume_templates', volume_templates) + """ + volume_templates = get_filenames_lists(metafunc, [".yaml", ".yml"], True, "volume") + metafunc.parametrize("volume_templates", volume_templates) def parametrize_volume_template(metafunc): - ''' + """ This param runs tests for every volume template in the template dir - ''' - volume_templates = get_filenames_list(metafunc, ['.yaml', '.yml'], - True, 'volume') - metafunc.parametrize('volume_template', volume_templates) + """ + volume_templates = get_filenames_list(metafunc, [".yaml", ".yml"], True, "volume") + metafunc.parametrize("volume_template", volume_templates) def parametrize_environment_files(metafunc): - ''' + """ This param runs tests for all environment files in the template dir - ''' - env_files = get_filenames_lists(metafunc, ['.env']) - metafunc.parametrize('env_files', env_files) + """ + env_files = get_filenames_lists(metafunc, [".env"]) + metafunc.parametrize("env_files", env_files) def parametrize_environment_file(metafunc): - ''' + """ This param runs tests for every environment file in the template dir - ''' - env_files = get_filenames_list(metafunc, ['.env']) - metafunc.parametrize('env_file', env_files) + """ + env_files = get_filenames_list(metafunc, [".env"]) + metafunc.parametrize("env_file", env_files) def parametrize_parsed_environment_file(metafunc): - ''' + """ This param runs tests for every parsed environment file in the template dir - ''' - parsed_env_files = get_parsed_yaml_files(metafunc, ['.env']) - metafunc.parametrize('parsed_env_file', parsed_env_files) + """ + parsed_env_files = get_parsed_yaml_files(metafunc, [".env"]) + metafunc.parametrize("parsed_env_file", parsed_env_files) def parametrize_template_dir(metafunc): - ''' + """ This param passes a the template_dir as passed in on CLI or, during --self-test, passes in the sub directories of template_dir/pass/ and template_dir/fail template_dir = get_template_dir(metafunc) - ''' + """ template_dir = get_template_dir(metafunc) - if metafunc.config.getoption('self_test'): - dirs = [path.join(template_dir, s, t) - for s in ['pass'] - for t in listdir(path.join(template_dir, s)) - if path.isdir(path.join(template_dir, s, t))] - - dirs += [pytest.mark.xfail(path.join(template_dir, s, t)) - for s in ['fail'] - for t in listdir(path.join(template_dir, s)) - if path.isdir(path.join(template_dir, s, t))] + if metafunc.config.getoption("self_test"): + dirs = [ + path.join(template_dir, s, t) + for s in ["pass"] + for t in listdir(path.join(template_dir, s)) + if path.isdir(path.join(template_dir, s, t)) + ] + + dirs += [ + pytest.mark.xfail(path.join(template_dir, s, t)) + for s in ["fail"] + for t in listdir(path.join(template_dir, s)) + if path.isdir(path.join(template_dir, s, t)) + ] else: dirs = [template_dir] - metafunc.parametrize('template_dir', dirs) + metafunc.parametrize("template_dir", dirs) -def parametrize_environment_pair(metafunc, template_type=''): - ''' +def parametrize_environment_pair(metafunc, template_type=""): + """ Define a list of pairs of parsed yaml from the heat templates and environment files - ''' + """ pairs = [] - if metafunc.config.getoption('self_test'): - sub_dirs = ['pass', 'fail'] - env_files = list_template_dir(metafunc, ['.env'], True, - template_type, sub_dirs) - yaml_files = list_template_dir(metafunc, ['.yaml', '.yml'], True, - template_type, sub_dirs) + if metafunc.config.getoption("self_test"): + sub_dirs = ["pass", "fail"] + env_files = list_template_dir(metafunc, [".env"], True, template_type, sub_dirs) + yaml_files = list_template_dir( + metafunc, [".yaml", ".yml"], True, template_type, sub_dirs + ) else: - env_files = list_template_dir(metafunc, ['.env'], True, - template_type) - yaml_files = list_template_dir(metafunc, ['.yaml', '.yml'], - True, template_type) + env_files = list_template_dir(metafunc, [".env"], True, template_type) + yaml_files = list_template_dir(metafunc, [".yaml", ".yml"], True, template_type) for filename in env_files: basename = path.splitext(filename)[0] - if basename + '.yml' in yaml_files: - yfilename = basename + '.yml' + if basename + ".yml" in yaml_files: + yfilename = basename + ".yml" else: - yfilename = basename + '.yaml' + yfilename = basename + ".yaml" try: with open(filename) as fh: @@ -423,44 +410,44 @@ def parametrize_environment_pair(metafunc, template_type=''): with open(yfilename) as fh: yyml = yaml.load(fh) - if 'fail' in filename: - pairs.append(pytest.mark.xfail({"name": basename, - "yyml": yyml, - "eyml": eyml}, - strict=True)) + if "fail" in filename: + pairs.append( + pytest.mark.xfail( + {"name": basename, "yyml": yyml, "eyml": eyml}, strict=True + ) + ) else: pairs.append({"name": basename, "yyml": yyml, "eyml": eyml}) except yaml.YAMLError as e: print(e) # pylint: disable=superfluous-parens - metafunc.parametrize('environment_pair', pairs) + metafunc.parametrize("environment_pair", pairs) def parametrize_heat_volume_pair(metafunc): - ''' + """ Define a list of pairs of parsed yaml from the a heat and volume template - ''' + """ pairs = [] - if metafunc.config.getoption('self_test'): - sub_dirs = ['pass', 'fail'] - volume_files = list_template_dir(metafunc, ['.yaml', '.yml'], - True, 'volume', sub_dirs) - yaml_files = list_template_dir(metafunc, ['.yaml', '.yml'], - True, '', sub_dirs) + if metafunc.config.getoption("self_test"): + sub_dirs = ["pass", "fail"] + volume_files = list_template_dir( + metafunc, [".yaml", ".yml"], True, "volume", sub_dirs + ) + yaml_files = list_template_dir(metafunc, [".yaml", ".yml"], True, "", sub_dirs) else: - volume_files = list_template_dir(metafunc, ['.yaml', '.yml'], - True, 'volume') - yaml_files = list_template_dir(metafunc, ['.yaml', '.yml'], True) + volume_files = list_template_dir(metafunc, [".yaml", ".yml"], True, "volume") + yaml_files = list_template_dir(metafunc, [".yaml", ".yml"], True) - pattern = re.compile(r'\_volume$') + pattern = re.compile(r"\_volume$") for vfilename in volume_files: - basename = pattern.sub('', path.splitext(vfilename)[0]) - if basename + '.yml' in yaml_files: - yfilename = basename + '.yml' + basename = pattern.sub("", path.splitext(vfilename)[0]) + if basename + ".yml" in yaml_files: + yfilename = basename + ".yml" else: - yfilename = basename + '.yaml' + yfilename = basename + ".yaml" try: with open(vfilename) as fh: @@ -468,15 +455,16 @@ def parametrize_heat_volume_pair(metafunc): with open(yfilename) as fh: yyml = yaml.load(fh) - if 'fail' in vfilename: - pairs.append(pytest.mark.xfail({"name": basename, - "yyml": yyml, - "vyml": vyml}, - strict=True)) + if "fail" in vfilename: + pairs.append( + pytest.mark.xfail( + {"name": basename, "yyml": yyml, "vyml": vyml}, strict=True + ) + ) else: pairs.append({"name": basename, "yyml": yyml, "vyml": vyml}) except yaml.YAMLError as e: print(e) # pylint: disable=superfluous-parens - metafunc.parametrize('heat_volume_pair', pairs) + metafunc.parametrize("heat_volume_pair", pairs)