X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_neutron_port_network_attachment.py;h=61b127e7dc5bc7f38270952c027c9ba6b40a0ec6;hb=0e2e6cdfb6b659c29ad1a59ac37d3a50191577a0;hp=dfbad351e3689bf5c7f69fa4a58fb8099d941dbe;hpb=2a54fa88a546576581deb1fa57cf85591446bb6a;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_neutron_port_network_attachment.py b/ice_validator/tests/test_neutron_port_network_attachment.py index dfbad35..61b127e 100644 --- a/ice_validator/tests/test_neutron_port_network_attachment.py +++ b/ice_validator/tests/test_neutron_port_network_attachment.py @@ -3,36 +3,33 @@ import re import pytest -from tests.helpers import validates, get_base_template_from_yaml_files -from tests.parametrizers import get_nested_files +from tests.helpers import validates, get_base_template_from_yaml_files, get_param +from tests.utils.nested_files import get_nested_files from tests.structures import Heat + INTERNAL_UUID_PATTERN = re.compile(r"^int_(?P.+?)_net_id$") INTERNAL_NAME_PATTERN = re.compile(r"^int_(?P.+?)_net_name$") -INTERNAL_PORT = re.compile(r"^(?P.+)_(?P\d+)_int_" - r"(?P.+)_port_(?P\d+)$") +INTERNAL_PORT = re.compile( + r"^(?P.+)_(?P\d+)_int_" + r"(?P.+)_port_(?P\d+)$" +) -EXTERNAL_PORT = re.compile(r"^(?P.+)_(?P\d+)_(?!int_)" - r"(?P.+)_port_(?P\d+)$") +EXTERNAL_PORT = re.compile( + r"^(?P.+)_(?P\d+)_(?!int_)" + r"(?P.+)_port_(?P\d+)$" +) EXTERNAL_UUID_PATTERN = re.compile(r"^(?!int_)(?P.+?)_net_id$") EXTERNAL_NAME_PATTERN = re.compile(r"^(?!int_)(?P.+?)_net_name$") -INTERNAL_NETWORK_PATTERN = re.compile(r"^int_(?P.+?)" - r"_(network|RVN)$") +INTERNAL_NETWORK_PATTERN = re.compile(r"^int_(?P.+?)" r"_(network|RVN)$") def is_incremental_module(yaml_file, base_path, nested_paths): return yaml_file != base_path and yaml_file not in nested_paths -def get_param(prop_val): - if not isinstance(prop_val, dict): - return None - param = prop_val.get("get_param") - return param if isinstance(param, str) else None - - @validates("R-86182", "R-22688") def test_internal_network_parameters(yaml_files): base_path = get_base_template_from_yaml_files(yaml_files) @@ -40,8 +37,9 @@ def test_internal_network_parameters(yaml_files): pytest.skip("No base module found") base_heat = Heat(filepath=base_path) nested_paths = get_nested_files(yaml_files) - incremental_modules = [f for f in yaml_files - if is_incremental_module(f, base_path, nested_paths)] + incremental_modules = [ + f for f in yaml_files if is_incremental_module(f, base_path, nested_paths) + ] errors = [] for module in incremental_modules: heat = Heat(filepath=module) @@ -52,63 +50,75 @@ def test_internal_network_parameters(yaml_files): network = (port.get("properties") or {}).get("network") or {} if isinstance(network, dict) and ( - "get_resource" in network or "get_attr" in network): + "get_resource" in network or "get_attr" in network + ): continue param = get_param(network) if not param: - errors.append(( - "The internal port ({}) must either connect to a network " - "in the base module using get_param or to a network " - "created in this module ({})" - ).format(rid, os.path.split(module)[1])) + errors.append( + ( + "The internal port ({}) must either connect to a network " + "in the base module using get_param or to a network " + "created in this module ({})" + ).format(rid, os.path.split(module)[1]) + ) continue - param_match = ( - INTERNAL_UUID_PATTERN.match(param) - or INTERNAL_NAME_PATTERN.match(param) - ) + param_match = INTERNAL_UUID_PATTERN.match( + param + ) or INTERNAL_NAME_PATTERN.match(param) if not param_match: - errors.append(( - "The internal port ({}) network parameter ({}) does not " - "match one of the required naming conventions of " - "int_{{network-role}}_net_id or " - "int_{{network-role}}_net_name " - "for connecting to an internal network. " - "If this is not an internal port, then change the resource " - "ID to adhere to the external port naming convention." - ).format(rid, param)) + errors.append( + ( + "The internal port ({}) network parameter ({}) does not " + "match one of the required naming conventions of " + "int_{{network-role}}_net_id or " + "int_{{network-role}}_net_name " + "for connecting to an internal network. " + "If this is not an internal port, then change the resource " + "ID to adhere to the external port naming convention." + ).format(rid, param) + ) continue if param not in base_heat.yml.get("outputs", {}): base_module = os.path.split(base_path)[1] - errors.append(( - "The internal network parameter ({}) attached to port ({}) " - "must be defined in the output section of the base module ({})." - ).format(param, rid, base_module)) + errors.append( + ( + "The internal network parameter ({}) attached to port ({}) " + "must be defined in the output section of the base module ({})." + ).format(param, rid, base_module) + ) continue param_network_role = param_match.groupdict().get("network_role") rid_network_role = rid_match.groupdict().get("network_role") if param_network_role.lower() != rid_network_role.lower(): - errors.append(( - "The network role ({}) extracted from the resource ID ({}) " - "does not match network role ({}) extracted from the " - "network parameter ({})" - ).format(rid_network_role, rid, param_network_role, param)) + errors.append( + ( + "The network role ({}) extracted from the resource ID ({}) " + "does not match network role ({}) extracted from the " + "network parameter ({})" + ).format(rid_network_role, rid, param_network_role, param) + ) resources = base_heat.get_all_resources(os.path.split(base_path)[0]) - networks = {rid: resource for rid, resource in resources.items() - if resource.get("type") - in {"OS::Neutron::Net", - "OS::ContrailV2::VirtualNetwork"}} + networks = { + rid: resource + for rid, resource in resources.items() + if resource.get("type") + in {"OS::Neutron::Net", "OS::ContrailV2::VirtualNetwork"} + } matches = (INTERNAL_NETWORK_PATTERN.match(n) for n in networks) roles = {m.groupdict()["network_role"].lower() for m in matches if m} if param_network_role.lower() not in roles: - errors.append(( - "No internal network with a network role of {} was " - "found in the base modules networks: {}" - ).format(param_network_role, ", ".join(networks))) + errors.append( + ( + "No internal network with a network role of {} was " + "found in the base modules networks: {}" + ).format(param_network_role, ", ".join(networks)) + ) assert not errors, ". ".join(errors) @@ -120,40 +130,47 @@ def test_external_network_parameter(heat_template): for rid, port in heat.neutron_port_resources.items(): rid_match = EXTERNAL_PORT.match(rid) if not rid_match: - continue # only test external ports + continue # only test external ports network = (port.get("properties") or {}).get("network") or {} if not isinstance(network, dict) or "get_param" not in network: - errors.append(( - "The external port ({}) must assign the network property " - "using get_param. If this port is for an internal network, " - "then change the resource ID format to the external format." - ).format(rid)) + errors.append( + ( + "The external port ({}) must assign the network property " + "using get_param. If this port is for an internal network, " + "then change the resource ID format to the external format." + ).format(rid) + ) continue param = get_param(network) if not param: - errors.append(( - "The get_param function on the network property of port ({}) " - "must only take a single, string parameter." - ).format(rid)) + errors.append( + ( + "The get_param function on the network property of port ({}) " + "must only take a single, string parameter." + ).format(rid) + ) continue - param_match = ( - EXTERNAL_NAME_PATTERN.match(param) - or EXTERNAL_UUID_PATTERN.match(param) + param_match = EXTERNAL_NAME_PATTERN.match(param) or EXTERNAL_UUID_PATTERN.match( + param ) if not param_match: - errors.append(( - "The network parameter ({}) on port ({}) does not match one of " - "{{network-role}}_net_id or {{network-role}}_net_name." - ).format(param, rid)) + errors.append( + ( + "The network parameter ({}) on port ({}) does not match one of " + "{{network-role}}_net_id or {{network-role}}_net_name." + ).format(param, rid) + ) continue rid_network_role = rid_match.groupdict()["network_role"] param_network_role = param_match.groupdict()["network_role"] if rid_network_role.lower() != param_network_role.lower(): - errors.append(( - "The network role ({}) extracted from the resource ID ({}) " - "does not match network role ({}) extracted from the " - "network parameter ({})" - ).format(rid_network_role, rid, param_network_role, param)) + errors.append( + ( + "The network role ({}) extracted from the resource ID ({}) " + "does not match network role ({}) extracted from the " + "network parameter ({})" + ).format(rid_network_role, rid, param_network_role, param) + ) assert not errors, ". ".join(errors)