X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=ice_validator%2Ftests%2Ftest_volume_outputs_consumed.py;h=575e5dcf4425a960f3ea87c55ac02e281a78a68b;hb=60d5ad7d00eadd6395eca186e6fa76a43df3c6cf;hp=648a6891414561df57104709d411d9d8246b1716;hpb=c42086a36bbfaf9286e1c08330f25d1b06a35f4b;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 648a689..575e5dc 100644 --- a/ice_validator/tests/test_volume_outputs_consumed.py +++ b/ice_validator/tests/test_volume_outputs_consumed.py @@ -6,7 +6,7 @@ # =================================================================== # # 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 # @@ -37,15 +37,72 @@ # # 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): - ''' +def expected_template_module_pair(volume_path): + """Returns the path to the expected base or incremental module for a given volume""" + base_dir, filename = os.path.split(volume_path) + return os.path.join(base_dir, filename.replace("_volume", "")) + + +@validates("R-82732") +def test_volume_module_name_matches_incremental_or_base_module(volume_template): + expected_template_name = expected_template_module_pair(volume_template) + assert os.path.exists( + expected_template_name + ), "Could not find corresponding module ({}) for volume module ({}".format( + expected_template_name, 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_template = expected_template_module_pair(volume_template) + + # Make sure all the output parameters in the volume module are + # consumed by the expected base or incremental module + if not os.path.exists(pair_template): + pytest.skip("Expected pair module not found") + with open(volume_template, "r") as f: + volume = yaml.load(f) + with open(pair_template, "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_template + ) + ) + + # Now make sure that none of the output parameters appear in any other + # template + template_files = set(glob.glob("*.yaml")) + errors = {} + for template_path in template_files: + if template_path in (pair_template, 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