X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_base_template_names.py;h=861843fe4fe6f59f416b889aa28a1703918730b4;hb=HEAD;hp=f9196a90b00b902dd73297ca04038eec23e22373;hpb=f5edc06be0d8bedeb0904b348ba5e3e67c74f186;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_base_template_names.py b/ice_validator/tests/test_base_template_names.py index f9196a9..861843f 100644 --- a/ice_validator/tests/test_base_template_names.py +++ b/ice_validator/tests/test_base_template_names.py @@ -2,7 +2,7 @@ # ============LICENSE_START==================================================== # org.onap.vvp/validation-scripts # =================================================================== -# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# Copyright © 2020 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed @@ -18,8 +18,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # -# -# # Unless otherwise specified, all documentation contained herein is licensed # under the Creative Commons License, Attribution 4.0 Intl. (the "License"); # you may not use this documentation except in compliance with the License. @@ -34,43 +32,76 @@ # limitations under the License. # # ============LICENSE_END============================================ -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. -# - -"""base template names -""" from os import listdir from os import path import re +from pathlib import Path + +import pytest from .helpers import check_basename_ending from .helpers import validates -VERSION = '1.2.0' -# is 'base', starts with 'base_', contains '_base_', ends with '_base' -RE_BASE = re.compile(r'(^base$)|(^base_)|(_base_)|(_base$)') +RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)") + +def list_filenames(template_dir): + return [ + f + for f in listdir(template_dir) + if path.isfile(path.join(template_dir, f)) + and path.splitext(f)[-1] in [".yaml", ".yml"] + ] -@validates('R-37028', 'R-87485', 'R-81339', 'R-87247', 'R-76057') + +@validates("R-81339", "R-87247", "R-76057") +def test_template_names_valid_characters(template_dir): + filenames = list_filenames(template_dir) + errors = [] + for f in filenames: + stem = Path(f).stem + if not stem.replace("_", "").isalnum(): + errors.append(f) + assert not errors, ( + "The following Heat template names include characters other than " + "alphanumerics and underscores: {}" + ).format(", ".join(errors)) + + +@validates("R-37028", "R-87485", "R-81339", "R-87247", "R-76057") def test_base_template_names(template_dir): - ''' + """ Check all base templates have a filename that includes "_base_". - ''' - base_template_count = 0 - filenames = [f for f in listdir(template_dir) - if path.isfile(path.join(template_dir, f)) and - path.splitext(f)[-1] in ['.yaml', '.yml']] + """ + filenames = list_filenames(template_dir) + + if not filenames and listdir(template_dir): + pytest.skip("Nested directory detected. Let that test fail instead.") + + base_modules = [] for filename in filenames: - filename = path.splitext(filename)[0] + basename = path.splitext(filename)[0] # volume templates are tied to their parent naming wise - if check_basename_ending('volume', filename): + if check_basename_ending("volume", basename): continue - if RE_BASE.search(filename): - base_template_count += 1 - msg = 'must be 1 "*_base_*" in %s not %d' % (filenames, base_template_count) - assert base_template_count == 1, msg + if RE_BASE.search(basename.lower()): + base_modules.append(filename) + + if not base_modules: + msg = ( + "No base module detected in the following files " + "from the template directory: {}" + ).format(", ".join(filenames)) + elif len(base_modules) > 1: + msg = ( + "Multiple base modules detected in the template " + "directory, but only one is allowed: {}" + ).format(", ".join(base_modules)) + else: + msg = "" + + assert len(base_modules) == 1, msg