X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_nested_parameters.py;h=846a977c177ed053e3e61637b745227e3764a940;hb=59c9e996728d7d4d8d1e184857933deff68d4b91;hp=3e3bb06e499a43d6c3793322beb33aeccdc787c3;hpb=1f4df7c7ad27b23773ad9cdbe4db1632ce388cf1;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_nested_parameters.py b/ice_validator/tests/test_nested_parameters.py index 3e3bb06..846a977 100644 --- a/ice_validator/tests/test_nested_parameters.py +++ b/ice_validator/tests/test_nested_parameters.py @@ -2,7 +2,7 @@ # ============LICENSE_START==================================================== # org.onap.vvp/validation-scripts # =================================================================== -# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# Copyright © 2019 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed @@ -35,22 +35,27 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # """heat parameters """ - import pytest from tests import cached_yaml as yaml from tests.structures import Resource - -from .helpers import validates +from .helpers import validates, prop_iterator +import os VERSION = "1.0.0" -def check_nested_parameter_doesnt_change(yaml_file, parameter): +def check_nested_parameter_doesnt_change(yaml_file, nresource_type, *nprops): + """ + yaml_file: input heat template + nresource_type: target resource type to look for in nested file + nprops: list of props to dig through to get to parameter + """ + base_dir, _ = os.path.split(yaml_file) + invalid_parameters = [] with open(yaml_file) as fh: yml = yaml.load(fh) @@ -59,83 +64,211 @@ def check_nested_parameter_doesnt_change(yaml_file, parameter): if "resources" not in yml: pytest.skip("No resources specified in the heat template") - invalid_parameters = [] - - """ - checking if property: { get_param: }, then property == - - resource_id: - type: nested.yaml - properties: - property: { get_param: } - - resource_id: - type: OS::Heat::ResourceGroup - properties: - resource_def: - properties: - property: { get_param: } - """ for resource_id, resource in yml.get("resources", {}).items(): - r = Resource(resource_id=resource_id, resource=resource) - properties = r.get_nested_properties() - for k1, v1 in properties.items(): - if ( - isinstance(v1, dict) - and "get_param" in v1 - and parameter == v1.get("get_param") - ): - if k1 != parameter: - invalid_parameters.append( - { - "resource": r.resource_id, - "nested parameter": k1, - "parameter": parameter, - } - ) - - assert ( - not invalid_parameters - ), "Invalid parameter name change detected in nested template {}".format( - invalid_parameters + resource_type = resource.get("type") + if resource_type and ( + resource_type.endswith("yaml") + or resource_type.endswith("yml") + or resource_type == "OS::Heat::ResourceGroup" + ): + # workaround for subinterfaces + metadata = resource.get("metadata") + if metadata: + subinterface_type = metadata.get("subinterface_type") + if subinterface_type and subinterface_type == "network_collection": + continue + + r = Resource(resource_id=resource_id, resource=resource) + properties = r.get_nested_properties() + resources = r.get_nested_yaml(base_dir).get("resources", {}) + for nrid, nresource_dict in resources.items(): # iterate through nested file until found target r type + + if ( + nresource_dict.get("type") + and nresource_dict.get("type") != nresource_type + ): + continue + + for nparam in prop_iterator(nresource_dict, *nprops): # get iterator of all target parameters + if nparam: # iterator yields None if parameter isn't found + for k1, v1 in properties.items(): # found nparam, now comparing to parent template + if isinstance(v1, dict) and "get_param" in v1: + parameter = v1.get("get_param") + # k1: nested resource parameter definition + # parameter: parent parameter name + # nparam: nested parameter name + + # resolve list params like [param, { get_param: index }] + if isinstance(nparam, list): + nparam = nparam[0] + if isinstance(parameter, list): + parameter = parameter[0] + + if k1 != nparam: # we only care about the parameter we found in nested template + continue + + if k1 != parameter: + msg = ( + "{} property {} cannot change when passed into " + "a nested template. Nested parameter change detected in " + "resource {}: parent parameter = {}, nested parameter = {}".format( + nresource_type, + nprops, + resource_id, + parameter, + nparam, + ) + ) + invalid_parameters.append(msg) + + assert not invalid_parameters, "\n".join(invalid_parameters) + + +# @validates("R-708564") +# def test_parameter_name_doesnt_change_in_nested_template(yaml_file): +# check_nested_parameter_doesnt_change(yaml_file) + +@validates("R-708564") +def test_server_name_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change(heat_template, "OS::Nova::Server", "name") + + +@validates("R-708564") +def test_server_image_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change(heat_template, "OS::Nova::Server", "image") + + +@validates("R-708564") +def test_server_flavor_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change(heat_template, "OS::Nova::Server", "flavor") + + +@validates("R-708564") +def test_server_metadata_vnf_id_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vnf_id" ) -@validates("R-70757") -def test_vm_role_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vm_role") +@validates("R-708564") +def test_server_metadata_vf_module_id_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vf_module_id" + ) -@validates("R-44491") -def test_vnf_id_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vnf_id") +@validates("R-708564") +def test_server_metadata_vnf_name_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vnf_name" + ) -@validates("R-86237") -def test_vf_module_id_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vf_module_id") +@validates("R-708564") +def test_server_metadata_vf_module_name_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vf_module_name" + ) + + +@validates("R-708564") +def test_server_metadata_vm_role_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vm_role" + ) + + +@validates("R-708564") +def test_server_metadata_vf_module_index_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "vf_module_index" + ) + + +@validates("R-708564") +def test_server_metadata_workload_context_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "workload_context" + ) + + +@validates("R-708564") +def test_server_metadata_environment_context_parameter_name_doesnt_change_in_nested_template( + heat_template +): + check_nested_parameter_doesnt_change( + heat_template, "OS::Nova::Server", "metadata", "environment_context" + ) -@validates("R-16576") -def test_vnf_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vnf_name") +@validates("R-708564") +def test_port_network_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change(heat_template, "OS::Neutron::Port", "network") -@validates("R-49177") -def test_vf_module_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vf_module_name") +@validates("R-708564") +def test_port_fip_ip_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::Neutron::Port", "fixed_ips", "ip_address" + ) -@validates("R-22441") -def test_vf_module_index_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "vf_module_index") +@validates("R-708564") +def test_port_fip_subnet_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::Neutron::Port", "fixed_ips", "subnet" + ) -@validates("R-62954") -def test_environment_context_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "environment_context") +@validates("R-708564") +def test_port_aap_ip_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::Neutron::Port", "allowed_address_pairs", "ip_address" + ) -@validates("R-75202") -def test_workload_context_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file, "workload_context") +@validates("R-708564") +def test_vmi_net_ref_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::ContrailV2::VirtualMachineInterface", "virtual_network_refs" + ) + + +@validates("R-708564") +def test_vmi_aap_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, + "OS::ContrailV2::VirtualMachineInterface", + "virtual_machine_interface_allowed_address_pairs", + "virtual_machine_interface_allowed_address_pairs_allowed_address_pair", + "virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip", + "virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix" + ) + + +@validates("R-708564") +def test_iip_instance_ip_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::ContrailV2::InstanceIp", "instance_ip_address" + ) + + +@validates("R-708564") +def test_iip_subnet_uuid_parameter_name_doesnt_change_in_nested_template(heat_template): + check_nested_parameter_doesnt_change( + heat_template, "OS::ContrailV2::InstanceIp", "subnet_uuid" + )