Add missing entry_schema for operational policy type
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / PolicyLegacyOperationalPersistenceTest.java
index 90d00fc..30428b0 100644 (file)
@@ -1,6 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019-2020 Nordix Foundation.
+ *  Modifications Copyright (C) 2020 AT&T.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,25 +23,26 @@ 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.Gson;
 
+import java.net.URISyntaxException;
 import java.util.Base64;
+import java.util.Set;
 
 import lombok.NonNull;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.models.base.PfModelException;
 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.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
 
 /**
  * Test persistence of monitoring policies to and from the database.
@@ -48,24 +50,21 @@ import org.slf4j.LoggerFactory;
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 public class PolicyLegacyOperationalPersistenceTest {
-    // Logger for this class
-    private static final Logger LOGGER = LoggerFactory.getLogger(PolicyLegacyOperationalPersistenceTest.class);
-
-    private Gson gson;
+    private StandardCoder standardCoder;
 
     private PolicyModelsProvider databaseProvider;
 
     // @formatter:off
     private String[] policyInputResourceNames = {
-        "policies/vCPE.policy.operational.input.json",
-        "policies/vDNS.policy.operational.input.json",
-        "policies/vFirewall.policy.operational.input.json"
+        "policies/vCPE.policy.operational.legacy.input.json",
+        "policies/vDNS.policy.operational.legacy.input.json",
+        "policies/vFirewall.policy.operational.legacy.input.json"
     };
 
     private String[] policyOutputResourceNames = {
-        "policies/vCPE.policy.operational.output.json",
-        "policies/vDNS.policy.operational.output.json",
-        "policies/vFirewall.policy.operational.output.json"
+        "policies/vCPE.policy.operational.legacy.output.json",
+        "policies/vDNS.policy.operational.legacy.output.json",
+        "policies/vFirewall.policy.operational.legacy.output.json"
     };
     // @formatter:on
 
@@ -73,25 +72,30 @@ public class PolicyLegacyOperationalPersistenceTest {
      * Initialize provider.
      *
      * @throws PfModelException on exceptions in the tests
+     * @throws CoderException on JSON encoding and decoding errors
      */
     @Before
-    public void setupParameters() throws PfModelException {
+    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");
         parameters.setDatabaseUser("policy");
         parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
         parameters.setPersistenceUnit("ToscaConceptTest");
 
         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
-        databaseProvider.init();
+
+        createPolicyTypes();
     }
 
     /**
-     * Set up GSON.
+     * Set up standard coder.
      */
     @Before
-    public void setupGson() {
-        gson = new Gson();
+    public void setupStandardCoder() {
+        standardCoder = new StandardCoder();
     }
 
     @After
@@ -100,16 +104,11 @@ public class PolicyLegacyOperationalPersistenceTest {
     }
 
     @Test
-    public void testPolicyPersistence() {
-        try {
-            for (int i = 0; i < policyInputResourceNames.length; i++) {
-                String policyInputString = ResourceUtils.getResourceAsString(policyInputResourceNames[i]);
-                String policyOutputString = ResourceUtils.getResourceAsString(policyOutputResourceNames[i]);
-                testJsonStringPolicyPersistence(policyInputString, policyOutputString);
-            }
-        } catch (Exception exc) {
-            LOGGER.warn("error processing policies", exc);
-            fail("test should not throw an exception");
+    public void testLegacyOperationalPolicyPersistence() throws Exception {
+        for (int i = 0; i < policyInputResourceNames.length; i++) {
+            String policyInputString = ResourceUtils.getResourceAsString(policyInputResourceNames[i]);
+            String policyOutputString = ResourceUtils.getResourceAsString(policyOutputResourceNames[i]);
+            testJsonStringPolicyPersistence(policyInputString, policyOutputString);
         }
     }
 
@@ -122,17 +121,23 @@ public class PolicyLegacyOperationalPersistenceTest {
      */
     public void testJsonStringPolicyPersistence(@NonNull final String policyInputString,
             final String policyOutputString) throws Exception {
-        LegacyOperationalPolicy lop = gson.fromJson(policyInputString, LegacyOperationalPolicy.class);
+        LegacyOperationalPolicy lop = standardCoder.decode(policyInputString, LegacyOperationalPolicy.class);
 
         assertNotNull(lop);
 
         LegacyOperationalPolicy createdLop = databaseProvider.createOperationalPolicy(lop);
         assertEquals(createdLop, lop);
 
-        LegacyOperationalPolicy gotLop = databaseProvider.getOperationalPolicy(lop.getPolicyId());
+        LegacyOperationalPolicy gotLop = databaseProvider.getOperationalPolicy(lop.getPolicyId(), null);
         assertEquals(gotLop, lop);
 
-        String actualRetrievedJson = gson.toJson(gotLop);
+        LegacyOperationalPolicy updatedLop = databaseProvider.updateOperationalPolicy(lop);
+        assertEquals(gotLop, updatedLop);
+
+        LegacyOperationalPolicy deletedLop = databaseProvider.deleteOperationalPolicy(lop.getPolicyId(), "1");
+        assertEquals(gotLop, deletedLop);
+
+        String actualRetrievedJson = standardCoder.encode(gotLop);
 
         // All of this dash/underscore stuff is to avoid a checkstyle error around escaping unicode characters
         assertEquals(
@@ -140,4 +145,19 @@ public class PolicyLegacyOperationalPersistenceTest {
                 actualRetrievedJson.replaceAll("\\s+", "").replaceAll("u0027", "_-_-_-_").replaceAll("\\\\_-_-_-_",
                         "'"));
     }
+
+    private void createPolicyTypes() throws CoderException, PfModelException, URISyntaxException {
+        Set<String> policyTypeResources = ResourceUtils.getDirectoryContents("policytypes");
+
+        for (String policyTypeResource : policyTypeResources) {
+            Object yamlObject = new Yaml().load(ResourceUtils.getResourceAsString(policyTypeResource));
+            String yamlAsJsonString = new StandardCoder().encode(yamlObject);
+
+            ToscaServiceTemplate toscaServiceTemplatePolicyType =
+                    standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+
+            assertNotNull(toscaServiceTemplatePolicyType);
+            databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+        }
+    }
 }