X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_nested_parameters.py;h=97d2f76d47c2e4e814c9b8fb079c12a54d9020b0;hb=1bc097aa957e560147b4d9af49d25e69a6692702;hp=12b5768b5076af1d0e02c513a0cbb9f056f5ac8f;hpb=912ea4cdf9721f66339c47bbfdcf4315ca7bd424;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_nested_parameters.py b/ice_validator/tests/test_nested_parameters.py index 12b5768..97d2f76 100644 --- a/ice_validator/tests/test_nested_parameters.py +++ b/ice_validator/tests/test_nested_parameters.py @@ -42,13 +42,20 @@ import pytest from tests import cached_yaml as yaml from tests.structures import Resource -from .helpers import validates -from .utils.nested_iterables import is_pseudo_param +from .helpers import validates, prop_iterator +import os VERSION = "1.0.0" -def check_nested_parameter_doesnt_change(yaml_file): +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) @@ -57,22 +64,6 @@ def check_nested_parameter_doesnt_change(yaml_file): if "resources" not in yml: pytest.skip("No resources specified in the heat template") - invalid_parameters = [] - """ - checking if property: { get_param: parameter }, then property == parameter - - resource_id: - type: nested.yaml - properties: - property: { get_param: parameter } - - resource_id: - type: OS::Heat::ResourceGroup - properties: - resource_def: - properties: - property: { get_param: parameter } - """ for resource_id, resource in yml.get("resources", {}).items(): resource_type = resource.get("type") if resource_type and ( @@ -89,32 +80,213 @@ def check_nested_parameter_doesnt_change(yaml_file): 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: - parameter = v1.get("get_param") - if isinstance(parameter, list): - parameter = parameter[0] - - if is_pseudo_param(parameter): - continue - - if k1 != parameter: - invalid_parameters.append( - { - "resource": r.resource_id, - "nested parameter": k1, - "parameter": parameter, - "file": yaml_file, - } - ) - - assert ( - not invalid_parameters - ), "Invalid parameter name change detected in nested template {}".format( - invalid_parameters + 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 and "get_param" in nparam + ): # iterator yields None if parameter isn't found + nparam = nparam.get("get_param") + 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-708564") -def test_parameter_name_doesnt_change_in_nested_template(yaml_file): - check_nested_parameter_doesnt_change(yaml_file) +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-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-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-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-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-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-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-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" + )