X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_volume_outputs_consumed.py;h=41a5c30d1c0744772c68c017065e6a02026a8aa8;hb=00c64458942602efe5a3b712540b98ac94fb60f4;hp=3ee7178f32b658b03b8c32120514db1ef71c9f07;hpb=f5edc06be0d8bedeb0904b348ba5e3e67c74f186;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_volume_outputs_consumed.py b/ice_validator/tests/test_volume_outputs_consumed.py index 3ee7178..41a5c30 100644 --- a/ice_validator/tests/test_volume_outputs_consumed.py +++ b/ice_validator/tests/test_volume_outputs_consumed.py @@ -2,7 +2,7 @@ # ============LICENSE_START======================================================= # org.onap.vvp/validation-scripts # =================================================================== -# Copyright © 2018 AT&T Intellectual Property. All rights reserved. +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed @@ -35,17 +35,87 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # +import glob +import os + +import pytest +from tests import cached_yaml as yaml + from .helpers import validates -@validates('R-11200', 'R-89913', 'R-07443') -def test_volume_outputs_consumed(heat_volume_pair): - ''' +class VolumePairModule: + def __init__(self, volume_path): + self.volume_path = volume_path + + @property + def path_options(self): + expected_path, _ = self.volume_path.rsplit("_volume", maxsplit=1) + return (expected_path + ".yaml", expected_path + ".yml") + + @property + def exists(self): + return any(os.path.exists(option) for option in self.path_options) + + def get_module_path(self): + """ + Return the path of the volume module's pair if it exists, + otherwise None + """ + for option in self.path_options: + if os.path.exists(option): + return option + return None + + +@validates("R-82732") +def test_volume_module_name_matches_incremental_or_base_module(volume_template): + pair_module = VolumePairModule(volume_template) + assert pair_module.exists, ( + "Could not find a corresponding module ({}) for " + "volume module ({})" + ).format(" or ".join(pair_module.path_options), volume_template) + + +@validates("R-11200", "R-07443") +def test_volume_outputs_consumed(template_dir, volume_template): + """ Check that all outputs in a volume template is consumed by the corresponding heat template - ''' - outputs = heat_volume_pair["vyml"]["outputs"].keys() - parameters = heat_volume_pair["yyml"]["parameters"].keys() - assert set(outputs) <= set(parameters) + """ + pair_module = VolumePairModule(volume_template) + if not pair_module.exists: + pytest.skip("No pair module found for volume template") + with open(volume_template, "r") as f: + volume = yaml.load(f) + with open(pair_module.get_module_path(), "r") as f: + pair = yaml.load(f) + outputs = set(volume.get("outputs", {}).keys()) + parameters = set(pair.get("parameters", {}).keys()) + missing_output_parameters = outputs.difference(parameters) + assert not missing_output_parameters, ( + "The output parameters ({}) in {} were not all " + "used by the expected module {}".format( + ",".join(missing_output_parameters), volume_template, pair_module + ) + ) + + # Now make sure that none of the output parameters appear in any other + # template + template_files = set(glob.glob("*.yaml")).union(glob.glob(".yml")) + errors = {} + for template_path in template_files: + if template_path in (pair_module, volume_template): + continue # Skip these files since we already checked this pair + with open(template_path, "r") as f: + template = yaml.load(f) + parameters = set(template.get("parameters", {}).keys()) + misused_outputs = outputs.intersection(parameters) + if misused_outputs: + errors[template_path] = misused_outputs + message = ", ".join( + "{} ({})".format(path, ", ".join(params)) for path, params in errors.items() + ) + assert not errors, ( + "Volume output parameters detected in unexpected modules: " + message + )