[VVP] Allow base templates to not have resources
[vvp/validation-scripts.git] / ice_validator / tests / test_initial_configuration.py
index f911ce9..13cc2c7 100644 (file)
@@ -65,24 +65,26 @@ def test_00_valid_yaml(filename):
         ).format(str(e).replace("\n", " "))
 
 
+def check_duplicate_keys(yaml_path):
+    import yaml as normal_yaml
+
+    try:
+        with open(yaml_path) as fh:
+            normal_yaml.load(fh, yaml_custom_utils.UniqueKeyLoader)  # nosec
+    except ConstructorError as e:
+        pytest.fail("{} {}".format(e.problem, e.problem_mark))
+
+
 @pytest.mark.base
 @validates("R-92635")
 def test_02_no_duplicate_keys_in_file(yaml_file):
-    """
-    Checks that no duplicate keys exist in a given YAML file.
-    """
-    import yaml as normal_yaml  # we can't use the caching version in this test
+    check_duplicate_keys(yaml_file)
 
-    normal_yaml.add_constructor(
-        yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
-        yaml_custom_utils.raise_duplicates_keys,
-    )
 
-    try:
-        with open(yaml_file) as fh:
-            normal_yaml.load(fh)
-    except ConstructorError as e:
-        pytest.fail("{} {}".format(e.problem, e.problem_mark))
+@pytest.mark.base
+@validates("R-92635")
+def test_02a_no_duplicate_keys_in_env(env_file):
+    check_duplicate_keys(env_file)
 
 
 @pytest.mark.base
@@ -93,7 +95,7 @@ def test_03_all_referenced_resources_exists(yaml_file):
     actually exists in all yaml files
     """
     with open(yaml_file) as fh:
-        yml = yaml.load(fh)
+        yml = yaml.safe_load(fh)
 
     # skip if resources are not defined
     if "resources" not in yml:
@@ -174,20 +176,10 @@ def test_05_all_get_param_have_defined_parameter(yaml_file):
 
 @validates("R-90152")
 @pytest.mark.base
-def test_06_heat_template_resource_section_has_resources(heat_template):
-
-    found_resource = False
-
-    with open(heat_template) as fh:
-        yml = yaml.load(fh)
-
-    resources = yml.get("resources")
-    if resources:
-        for k1, v1 in yml["resources"].items():
-            if not isinstance(v1, dict):
-                continue
-
-            found_resource = True
-            break
-
-    assert found_resource, "Heat templates must contain at least one resource"
+def test_06_heat_template_resource_section_has_resources(yaml_file):
+    template = load_yaml(yaml_file)
+    if "resources" not in template:
+        pytest.skip("No resources section")
+    assert (
+        len(template["resources"]) > 0
+    ), "If resources section present, then there must be at least 1 resource defined."