Merge "Remove unnecessary check for pytest.skip"
[vvp/validation-scripts.git] / ice_validator / tests / test_nova_servers_vm_types.py
index 233304c..36ada32 100644 (file)
@@ -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,7 +35,6 @@
 #
 # ============LICENSE_END============================================
 #
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
 #
 
 import pytest
@@ -43,21 +42,20 @@ import re
 
 from tests import cached_yaml as yaml
 
-from .helpers import validates
+from .helpers import validates, is_nova_server
 
-from .utils.vm_types import get_vm_types_for_resource
-from .utils.vm_types import get_vm_types
+from .utils.vm_types import get_vm_types_for_resource, get_vm_types
 
 from .utils.network_roles import get_network_roles
 
 
-@validates('R-57282')
-def test_vm_type_consistent_on_nova_servers(heat_template):
-    '''
+@validates("R-57282")
+def test_vm_type_consistent_on_nova_servers(yaml_file):
+    """
     Make sure all nova servers have properly formatted properties
     for their name, image and flavor
-    '''
-    with open(heat_template) as fh:
+    """
+    with open(yaml_file) as fh:
         yml = yaml.load(fh)
 
     # skip if resources are not defined
@@ -66,24 +64,20 @@ def test_vm_type_consistent_on_nova_servers(heat_template):
 
     invalid_nova_servers = []
     for k, v in yml["resources"].items():
-        if not isinstance(v, dict):
-            continue
-        if v.get('type') != 'OS::Nova::Server':
+        if not is_nova_server(v):
             continue
-        if 'properties' not in v:
-            continue
-
         vm_types = get_vm_types_for_resource(v)
         if len(vm_types) != 1:
             invalid_nova_servers.append(k)
 
-    assert not set(invalid_nova_servers), \
-        "vm_types not consistant on the following resources {}" \
-        .format(invalid_nova_servers)
+    assert not set(
+        invalid_nova_servers
+    ), "vm_types not consistant on the following resources: {}".format(
+        ",".join(invalid_nova_servers)
+    )
 
 
-@validates('R-48067',
-           'R-00977')
+@validates("R-48067", "R-00977")
 def test_vm_type_network_role_collision(yaml_file):
     with open(yaml_file) as fh:
         yml = yaml.load(fh)
@@ -100,51 +94,46 @@ def test_vm_type_network_role_collision(yaml_file):
     collisions = []
     for nr in network_roles:
         for vt in vm_types:
-            if vt in nr or nr in vt:
-                collisions.append({"vm_type": vt, "network_role": nr})
-
-    assert not collisions, \
-        "vm_type and network_role should not be substrings {}" .format(collisions)
-
-
-@validates('R-50436',
-           'R-45188',
-           'R-40499')
+            if vt in nr:
+                collisions.append(
+                    (
+                        "vm_type ({}) cannot be a substring " "of network_role ({})"
+                    ).format(vt, nr)
+                )
+            elif nr in vt:
+                collisions.append(
+                    (
+                        "network_role ({}) cannot be a substring " "of vm_type ({})"
+                    ).format(nr, vt)
+                )
+
+    assert not collisions, ", ".join(collisions)
+
+
+@validates("R-50436", "R-45188", "R-40499")
 def test_nova_server_flavor_parameter(yaml_file):
-
-    prop = "flavor"
-    check_nova_parameter_format(prop, yaml_file)
+    check_nova_parameter_format("flavor", yaml_file)
 
 
-@validates('R-51430',
-           'R-54171',
-           'R-87817')
+@validates("R-51430", "R-54171", "R-87817")
 def test_nova_server_name_parameter(yaml_file):
+    check_nova_parameter_format("name", yaml_file)
 
-    prop = "name"
-    check_nova_parameter_format(prop, yaml_file)
 
-
-@validates('R-71152',
-           'R-45188',
-           'R-57282')
+@validates("R-71152", "R-57282", "R-58670")
 def test_nova_server_image_parameter(yaml_file):
-
-    prop = "image"
-    check_nova_parameter_format(prop, yaml_file)
+    check_nova_parameter_format("image", yaml_file)
 
 
 def check_nova_parameter_format(prop, yaml_file):
 
     formats = {
         "string": {
-            "name": re.compile(r'(.+?)_name_\d+$'),
-            "flavor": re.compile(r'(.+?)_flavor_name$'),
-            "image": re.compile(r'(.+?)_image_name$')
+            "name": re.compile(r"(.+?)_name_\d+$"),
+            "flavor": re.compile(r"(.+?)_flavor_name$"),
+            "image": re.compile(r"(.+?)_image_name$"),
         },
-        "comma_delimited_list": {
-            "name": re.compile(r'(.+?)_names$')
-        }
+        "comma_delimited_list": {"name": re.compile(r"(.+?)_names$")},
     }
 
     with open(yaml_file) as fh:
@@ -163,31 +152,28 @@ def check_nova_parameter_format(prop, yaml_file):
     for k, v in yml["resources"].items():
         if not isinstance(v, dict):
             continue
-        if v.get('type') != 'OS::Nova::Server':
+        if v.get("type") != "OS::Nova::Server":
             continue
 
-        prop_param = v.get("properties", {}) \
-                      .get(prop, {}) \
-                      .get("get_param")
+        prop_val = v.get("properties", {}).get(prop, {})
+        prop_param = prop_val.get("get_param", "") if isinstance(prop_val, dict) else ""
 
         if not prop_param:
             pytest.skip("{} doesn't have property {}".format(k, prop))
         elif isinstance(prop_param, list):
             prop_param = prop_param[0]
 
-        template_param_type = yml.get("parameters", {}) \
-                                 .get(prop_param, {}) \
-                                 .get("type")
+        template_param_type = yml.get("parameters", {}).get(prop_param, {}).get("type")
 
         if not template_param_type:
             pytest.skip("could not determine param type for {}".format(prop_param))
 
-        format_match = formats.get(template_param_type, {}) \
-                              .get(prop)
+        format_match = formats.get(template_param_type, {}).get(prop)
 
         if not format_match or not format_match.match(prop_param):
-            invalid_parameters.append(prop_param)
+            msg = (
+                "Invalid parameter format ({}) on Resource ID ({}) property" " ({})"
+            ).format(prop_param, k, prop)
+            invalid_parameters.append(msg)
 
-    assert not set(invalid_parameters), \
-        "invalid {} parameters detected {}" \
-        .format(prop, invalid_parameters)
+    assert not set(invalid_parameters), ", ".join(invalid_parameters)