X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_port_resource_ids.py;h=d5877439395fbe8ad0ea52adaefa17c6e20ab1de;hb=3b96f670aad978447056a379085206470e61af07;hp=511af3577953ad77ec1cb7da366bcc6b85318794;hpb=f5edc06be0d8bedeb0904b348ba5e3e67c74f186;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_port_resource_ids.py b/ice_validator/tests/test_port_resource_ids.py index 511af35..d587743 100644 --- a/ice_validator/tests/test_port_resource_ids.py +++ b/ice_validator/tests/test_port_resource_ids.py @@ -2,7 +2,7 @@ # ============LICENSE_START======================================================= # org.onap.vvp/validation-scripts # =================================================================== -# Copyright © 2018 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,52 +35,37 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # import re + import pytest -import yaml +from tests import cached_yaml as yaml + from .helpers import validates -from .utils.vm_types import get_vm_type_for_nova_server from .utils.network_roles import ( get_network_role_from_port, get_network_type_from_port, property_uses_get_resource, ) +from .utils.vm_types import get_vm_type_for_nova_server -@validates( - "R-29865", - "R-69014", - "R-05201", - "R-68936", - "R-32025", - "R-11168", - "R-84322", - "R-96983", - "R-26506", - "R-20453", - "R-26351", -) -def test_port_resource_ids(heat_template): +@validates("R-20453", "R-26351", "R-26506", "R-681859") +def test_port_resource_ids(yaml_file): """ Check that all resource ids for ports follow the right naming convention to include the {vm_type} of the nova server it is associated to and also contains the {network_role} of the network it is associated with """ - with open(heat_template) as fh: + with open(yaml_file) as fh: yml = yaml.load(fh) # skip if resources are not defined if "resources" not in yml: pytest.skip("No resources specified in the heat template") - port_patterns = { - "internal": re.compile(r"(.+?)_\d+_int_(.+?)_port_\d+"), - "external": re.compile(r"(.+?)_\d+_(.+?)_port_\d+"), - } resources = yml["resources"] invalid_ports = [] @@ -96,10 +81,6 @@ def test_port_resource_ids(heat_template): if "networks" not in v["properties"]: continue - has_vm_type = False - has_network_role = True - port_resource = None - vm_type = get_vm_type_for_nova_server(v) if not vm_type: continue @@ -125,34 +106,38 @@ def test_port_resource_ids(heat_template): else: continue - has_vm_type = vm_type + "_" in port_id - has_network_role = False - - if port_resource: - if property_uses_get_resource(v, "network"): - continue - network_role = get_network_role_from_port(port_resource) - if not network_role: - continue - network_role = network_role.lower() + if property_uses_get_resource(v, "network"): + continue - network_type = get_network_type_from_port(port_resource) - if not network_type: - continue + network_role = get_network_role_from_port(port_resource) + if not network_role: + invalid_ports.append( + (port_id, "Unable to determine network role for port.") + ) + continue + network_role = network_role.lower() - if port_patterns[network_type].match(port_id): - has_network_role = True - else: - # match the assumed naming convention for ports - # if the specified port is provided via get_param - network_type = "external" - if "int_" in port_id: - network_type = "internal" - if port_patterns[network_type].match(port_id): - has_network_role = True - - if has_vm_type and has_network_role: + network_type = get_network_type_from_port(port_resource) + if not network_type: + invalid_ports.append( + (port_id, "Unable to determine network type for port (internal or external).") + ) continue - invalid_ports.append(port_id) - assert not set(invalid_ports) + if network_type == "external": + expected_r_id = r"{}_\d+_{}_port_\d+".format(vm_type, network_role) + else: + expected_r_id = r"{}_\d+_int_{}_port_\d+".format( + vm_type, network_role + ) + if not re.match(expected_r_id, port_id): + invalid_ports.append( + (port_id, "Did not match {}".format(expected_r_id)) + ) + + port_errors = "; ".join( + "{} -> {}".format(port, error) for port, error in invalid_ports + ) + msg = "The following ports have invalid resource IDs: {}".format(port_errors) + msg = msg.replace(r"\d+", "{index}") + assert not invalid_ports, msg