Implement validation and hierarchical get
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / PolicyToscaPersistenceTest.java
index 1aedcaf..0cdc2ad 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019-2020 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,11 +22,12 @@ package org.onap.policy.models.provider.impl;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import com.google.gson.GsonBuilder;
 
+import java.net.URISyntaxException;
 import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import lombok.NonNull;
 
@@ -41,9 +42,8 @@ import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
 
 /**
@@ -52,30 +52,10 @@ import org.yaml.snakeyaml.Yaml;
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 public class PolicyToscaPersistenceTest {
-    // Logger for this class
-    private static final Logger LOGGER = LoggerFactory.getLogger(PolicyToscaPersistenceTest.class);
-
     private StandardCoder standardCoder;
 
     private PolicyModelsProvider databaseProvider;
 
-    // @formatter:off
-    private String[] policyResourceNames = {
-        "policies/vCPE.policy.monitoring.input.tosca.json",
-        "policies/vCPE.policy.monitoring.input.tosca.yaml",
-        "policies/vCPE.policy.operational.input.tosca.yaml",
-        "policies/vDNS.policy.guard.frequency.input.tosca.json",
-        "policies/vDNS.policy.guard.frequency.input.tosca.yaml",
-        "policies/vDNS.policy.monitoring.input.tosca.json",
-        "policies/vDNS.policy.monitoring.input.tosca.yaml",
-        "policies/vDNS.policy.operational.input.tosca.yaml",
-        "policies/vFirewall.policy.monitoring.input.tosca.json",
-        "policies/vFirewall.policy.monitoring.input.tosca.yaml",
-        "policies/vFirewall.policy.operational.input.tosca.json",
-        "policies/vFirewall.policy.operational.input.tosca.yaml"
-    };
-    // @formatter:on
-
     /**
      * Initialize provider.
      *
@@ -84,6 +64,8 @@ public class PolicyToscaPersistenceTest {
      */
     @Before
     public void setupParameters() throws Exception {
+        // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
+
         PolicyModelsProviderParameters parameters = new PolicyModelsProviderParameters();
         parameters.setDatabaseDriver("org.h2.Driver");
         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
@@ -97,7 +79,7 @@ public class PolicyToscaPersistenceTest {
     }
 
     /**
-     * Set up the standard coder.
+     * Set up standard coder.
      */
     @Before
     public void setupStandardCoder() {
@@ -110,26 +92,27 @@ public class PolicyToscaPersistenceTest {
     }
 
     @Test
-    public void testPolicyPersistence() {
-        try {
-            for (String policyResourceName : policyResourceNames) {
-                String policyString = ResourceUtils.getResourceAsString(policyResourceName);
-
-                if (policyResourceName.endsWith("yaml")) {
-                    testYamlStringPolicyPersistence(policyString);
-                } else {
-                    testJsonStringPolicyPersistence(policyString);
-                }
+    public void testToscaPolicyPersistence() throws Exception {
+        Set<String> policyResources = ResourceUtils.getDirectoryContents("policies");
+
+        for (String policyResource : policyResources) {
+            if (!policyResource.contains("\\.tosca\\.")) {
+                continue;
+            }
+
+            String policyString = ResourceUtils.getResourceAsString(policyResource);
+
+            if (policyResource.endsWith("yaml")) {
+                testYamlStringPolicyPersistence(policyString);
+            } else {
+                testJsonStringPolicyPersistence(policyString);
             }
-        } catch (Exception exc) {
-            LOGGER.warn("error processing policy types", exc);
-            fail("test should not throw an exception");
         }
     }
 
     private void testYamlStringPolicyPersistence(final String policyString) throws Exception {
         Object yamlObject = new Yaml().load(policyString);
-        String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+        String yamlAsJsonString = new StandardCoder().encode(yamlObject);
 
         testJsonStringPolicyPersistence(yamlAsJsonString);
     }
@@ -146,51 +129,55 @@ public class PolicyToscaPersistenceTest {
         assertNotNull(serviceTemplate);
 
         databaseProvider.createPolicies(serviceTemplate);
+        databaseProvider.updatePolicies(serviceTemplate);
 
-        for (String policyKey : serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).keySet()) {
-            ToscaPolicy incomingPolicy = serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey);
-            ToscaPolicy databasePolicy =
-                    databaseProvider.getPolicies(incomingPolicy.getName(), incomingPolicy.getVersion())
-                            .getToscaTopologyTemplate().getPolicies().get(0).get(policyKey);
-            assertEquals(incomingPolicy.getType(), databasePolicy.getType());
-        }
-    }
-
-    private void createPolicyTypes() throws CoderException, PfModelException {
-        Object yamlObject = new Yaml().load(
-                ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
-        String yamlAsJsonString = new StandardCoder().encode(yamlObject);
+        for (Map<String, ToscaPolicy> policyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) {
+            for (ToscaPolicy policy : policyMap.values()) {
+                ToscaServiceTemplate gotToscaServiceTemplate =
+                        databaseProvider.getPolicies(policy.getName(), policy.getVersion());
 
-        ToscaServiceTemplate toscaServiceTemplatePolicyType =
-                standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+                assertEquals(policy.getType(), gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+                        .get(policy.getName()).getType());
 
-        assertNotNull(toscaServiceTemplatePolicyType);
-        databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+                gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build());
 
-        yamlObject = new Yaml().load(
-                ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.Operational.yaml"));
-        yamlAsJsonString = new StandardCoder().encode(yamlObject);
+                assertEquals(policy.getType(),
+                        getToscaPolicyFromMapList(gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies(),
+                                policy.getName()).getType());
 
-        toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+                gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(
+                        ToscaPolicyFilter.builder().name(policy.getName()).version(policy.getVersion()).build());
 
-        assertNotNull(toscaServiceTemplatePolicyType);
-        databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+                assertEquals(policy.getType(), gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+                        .get(policy.getName()).getType());
+            }
+        }
+    }
 
-        yamlObject = new Yaml().load(
-                ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.operational.Common.yaml"));
-        yamlAsJsonString = new StandardCoder().encode(yamlObject);
+    private ToscaPolicy getToscaPolicyFromMapList(List<Map<String, ToscaPolicy>> toscaPolicyMapList,
+            String policyName) {
+        ToscaPolicy toscaPolicy = new ToscaPolicy();
+        for (Map<String, ToscaPolicy> policyMap : toscaPolicyMapList) {
+            toscaPolicy = policyMap.get(policyName);
+            if (toscaPolicy != null) {
+                break;
+            }
+        }
+        return toscaPolicy;
+    }
 
-        toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+    private void createPolicyTypes() throws CoderException, PfModelException, URISyntaxException {
+        Set<String> policyTypeResources = ResourceUtils.getDirectoryContents("policytypes");
 
-        assertNotNull(toscaServiceTemplatePolicyType);
-        databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
-        yamlObject = new Yaml().load(
-                ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml"));
-        yamlAsJsonString = new StandardCoder().encode(yamlObject);
+        for (String policyTypeResource : policyTypeResources) {
+            Object yamlObject = new Yaml().load(ResourceUtils.getResourceAsString(policyTypeResource));
+            String yamlAsJsonString = new StandardCoder().encode(yamlObject);
 
-        toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+            ToscaServiceTemplate toscaServiceTemplatePolicyType =
+                    standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
 
-        assertNotNull(toscaServiceTemplatePolicyType);
-        databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+            assertNotNull(toscaServiceTemplatePolicyType);
+            databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+        }
     }
 }