Reserve version integer check and delete eligibility check
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / provider / TestLegacyGuardPolicyProvider.java
index 085255f..e892d41 100644 (file)
@@ -40,6 +40,7 @@ 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.PolicyModelsProviderParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
 
@@ -51,11 +52,18 @@ import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
 public class TestLegacyGuardPolicyProvider {
 
     private static LegacyGuardPolicyProvider guardPolicyProvider;
+    private static PolicyTypeProvider policyTypeProvider;
     private static PolicyModelsProviderParameters providerParams;
     private static ApiParameterGroup apiParamGroup;
     private static StandardCoder standardCoder;
 
     private static final String POLICY_RESOURCE = "policies/vDNS.policy.guard.frequency.input.json";
+    private static final String POLICY_RESOURCE_VER1 = "policies/vDNS.policy.guard.frequency.input.ver1.json";
+    private static final String POLICY_RESOURCE_VER2 = "policies/vDNS.policy.guard.frequency.input.ver2.json";
+    private static final String POLICY_TYPE_RESOURCE =
+            "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.json";
+    private static final String POLICY_TYPE_ID = "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0";
+    private static final String POLICY_ID = "guard.frequency.scaleout:1.0.0";
 
     /**
      * Initializes parameters.
@@ -67,6 +75,7 @@ public class TestLegacyGuardPolicyProvider {
 
         standardCoder = new StandardCoder();
         providerParams = new PolicyModelsProviderParameters();
+        providerParams.setDatabaseDriver("org.h2.Driver");
         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
         providerParams.setDatabaseUser("policy");
         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
@@ -74,6 +83,7 @@ public class TestLegacyGuardPolicyProvider {
         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
         ParameterService.register(apiParamGroup, true);
         guardPolicyProvider = new LegacyGuardPolicyProvider();
+        policyTypeProvider = new PolicyTypeProvider();
     }
 
     /**
@@ -85,6 +95,7 @@ public class TestLegacyGuardPolicyProvider {
     public static void tearDown() throws PfModelException {
 
         guardPolicyProvider.close();
+        policyTypeProvider.close();
         ParameterService.deregister(apiParamGroup);
     }
 
@@ -94,17 +105,73 @@ public class TestLegacyGuardPolicyProvider {
 
         assertThatThrownBy(() -> {
             guardPolicyProvider.fetchGuardPolicy("dummy", null);
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("no policy found for policy: dummy:null");
 
         assertThatThrownBy(() -> {
             guardPolicyProvider.fetchGuardPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+            ToscaServiceTemplate policyTypeServiceTemplate =
+                    standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+            policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+
+            String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_VER1);
+            LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+            Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+            assertFalse(createdPolicy.isEmpty());
+
+            policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_VER2);
+            policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+            createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
+            assertNotNull(createdPolicy);
+            assertFalse(createdPolicy.isEmpty());
+
+            Map<String, LegacyGuardPolicyOutput> firstVersion =
+                    guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "1");
+            assertNotNull(firstVersion);
+            assertEquals("1",
+                    firstVersion.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
+
+            Map<String, LegacyGuardPolicyOutput> latestVersion =
+                    guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", null);
+            assertNotNull(latestVersion);
+            assertEquals("2",
+                    latestVersion.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
+        }).doesNotThrowAnyException();
+
+        assertThatThrownBy(() -> {
+            guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "1.0.0");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatThrownBy(() -> {
+            guardPolicyProvider.fetchGuardPolicy("guard.frequency.scaleout", "latest");
+        }).hasMessage("legacy policy version is not an integer");
+
+        assertThatCode(() -> {
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1");
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "2");
+            policyTypeProvider.deletePolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0");
+        }).doesNotThrowAnyException();
     }
 
     @Test
     public void testCreateGuardPolicy() {
 
+        assertThatThrownBy(() -> {
+            String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
+            LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+            guardPolicyProvider.createGuardPolicy(policyToCreate);
+        }).hasMessage("policy type " + POLICY_TYPE_ID + " for policy " + POLICY_ID + " does not exist");
+
         assertThatCode(() -> {
+            String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+            ToscaServiceTemplate policyTypeServiceTemplate =
+                    standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+            policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
             Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
@@ -122,33 +189,41 @@ public class TestLegacyGuardPolicyProvider {
 
         assertThatThrownBy(() -> {
             guardPolicyProvider.deleteGuardPolicy("dummy", null);
-        }).hasMessage("version is marked @NonNull but is null");
+        }).hasMessage("legacy policy version is not an integer");
 
         assertThatThrownBy(() -> {
-            guardPolicyProvider.deleteGuardPolicy("dummy", "dummy");
-        }).hasMessage("no policy found for policy ID: dummy");
+            guardPolicyProvider.deleteGuardPolicy("dummy", "1.0.0");
+        }).hasMessage("legacy policy version is not an integer");
 
         assertThatCode(() -> {
+            String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+            ToscaServiceTemplate policyTypeServiceTemplate =
+                    standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+            policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+
             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
             LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
             Map<String, LegacyGuardPolicyOutput> createdPolicy = guardPolicyProvider.createGuardPolicy(policyToCreate);
             assertNotNull(createdPolicy);
             assertFalse(createdPolicy.isEmpty());
-        }).doesNotThrowAnyException();
 
-        assertThatCode(() -> {
             Map<String, LegacyGuardPolicyOutput> deletedPolicy = guardPolicyProvider
-                    .deleteGuardPolicy("guard.frequency.scaleout", "1.0.0");
+                    .deleteGuardPolicy("guard.frequency.scaleout", "1");
             assertNotNull(deletedPolicy);
             assertFalse(deletedPolicy.isEmpty());
             assertTrue(deletedPolicy.containsKey("guard.frequency.scaleout"));
             assertEquals("onap.policies.controlloop.guard.FrequencyLimiter",
                     deletedPolicy.get("guard.frequency.scaleout").getType());
-            assertEquals("1.0.0", deletedPolicy.get("guard.frequency.scaleout").getVersion());
+            assertEquals("1",
+                    deletedPolicy.get("guard.frequency.scaleout").getMetadata().get("policy-version").toString());
         }).doesNotThrowAnyException();
 
         assertThatThrownBy(() -> {
-            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1.0.0");
-        }).hasMessage("no policy found for policy ID: guard.frequency.scaleout");
+            guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1");
+        }).hasMessage("no policy found for policy: guard.frequency.scaleout:1");
+
+        assertThatCode(() -> {
+            policyTypeProvider.deletePolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0");
+        }).doesNotThrowAnyException();
     }
 }