Complete unit test for models-pdp 36/84636/2
authorliamfallon <liam.fallon@est.tech>
Tue, 9 Apr 2019 11:55:57 +0000 (11:55 +0000)
committerliamfallon <liam.fallon@est.tech>
Tue, 9 Apr 2019 11:55:57 +0000 (11:55 +0000)
This review completes the unit test for the models-pdp module, for persistence
of PDP groups and for PDP group filtering.

Added unit test of filters for TOSCA policy types and policies.

Added fix to allow filters to pass when the value being
checked is null.

Issue-ID: POLICY-1095
Change-Id: I982400ef39f0282d813d49e484a58207e03b8a63
Signed-off-by: liamfallon <liam.fallon@est.tech>
18 files changed:
models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
models-base/src/test/java/org/onap/policy/models/base/PfObjectFilterTest.java
models-examples/src/main/resources/policies/vCPE.policies.optimization.input.tosca.yaml
models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpSubGroup.java
models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpProvider.java
models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java
models-pdp/src/test/resources/testdata/PdpGroupsForFiltering.json
models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyToscaPersistenceTest.java
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaEntity.java
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyType.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/PojosTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestPojos.java with 99% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierOptVersionTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifierOptVersion.java with 93% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyIdentifierTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyIdentifier.java with 93% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicy.java with 71% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeFilterTest.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeIdentifierTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/TestToscaPolicyTypeIdentifier.java with 93% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeTest.java [new file with mode: 0644]

index 501d9c3..10ce4ea 100644 (file)
@@ -49,8 +49,8 @@ public interface PfObjectFilter<T extends Comparable<T>> {
      * @param pattern the pattern to check against
      * @return match or not
      */
-    public default boolean filterString(@NonNull final String value, final String pattern) {
-        return pattern == null || value.equals(pattern);
+    public default boolean filterString(final String value, final String pattern) {
+        return value == null || pattern == null || value.equals(pattern);
     }
 
     /**
index 3d16f8e..c131407 100644 (file)
@@ -84,14 +84,6 @@ public class PfObjectFilterTest {
         assertFalse(dof.filterString("Hello", "Goodbye"));
         assertTrue(dof.filterString("Hello", "Hello"));
 
-        assertThatThrownBy(() -> {
-            dof.filterString(null, null);
-        }).hasMessage("value is marked @NonNull but is null");
-
-        assertThatThrownBy(() -> {
-            dof.filterString(null, "hello");
-        }).hasMessage("value is marked @NonNull but is null");
-
         assertEquals(false, dof.filterString("Hello", "Goodbye"));
         assertEquals(true, dof.filterString("Hello", "Hello"));
         assertEquals(true, dof.filterString("Hello", null));
index 378e815..6e32cca 100644 (file)
@@ -1,6 +1,6 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 topology_template:
-policies:
+  policies:
     - 
         OSDF_CASABLANCA.Affinity_vCPE_1:
             type: onap.policies.optimization.AffinityPolicy
index 20e43f0..f0ff4a6 100644 (file)
@@ -290,12 +290,12 @@ public class JpaPdpSubGroup extends PfConcept implements PfAuthorative<PdpSubGro
 
         if (currentInstanceCount < 0) {
             result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                    "the current instance count of a PDP group may not be negative"));
+                    "the current instance count of a PDP sub group may not be negative"));
         }
 
         if (desiredInstanceCount < 0) {
             result.addValidationMessage(new PfValidationMessage(key, this.getClass(), ValidationResult.INVALID,
-                    "the desired instance count of a PDP group may not be negative"));
+                    "the desired instance count of a PDP sub group may not be negative"));
         }
 
         if (properties != null) {
@@ -311,7 +311,6 @@ public class JpaPdpSubGroup extends PfConcept implements PfAuthorative<PdpSubGro
             }
         }
 
-
         return validateSubConcepts(result);
     }
 
index bef3f15..bfdeda9 100644 (file)
@@ -67,35 +67,7 @@ public class PdpProvider {
     public List<PdpGroup> getPdpGroups(@NonNull final PfDao dao, final String name, final String version)
             throws PfModelException {
 
-        List<JpaPdpGroup> foundPdpGroups = dao.getFiltered(JpaPdpGroup.class, name, version);
-
-        if (foundPdpGroups != null) {
-            return asPdpGroupList(foundPdpGroups);
-        } else {
-            String errorMessage = "no PDP groups found for filter " + name + ":" + version;
-            LOGGER.warn(errorMessage);
-            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
-        }
-    }
-
-    /**
-     * Get latest PDP Groups, returns PDP groups in all states.
-     *
-     * @param dao the DAO to use to access the database
-     * @param name the name of the PDP group to get, null to get all PDP groups
-     * @return the PDP groups found
-     * @throws PfModelException on errors getting policies
-     */
-    public List<PdpGroup> getLatestPdpGroups(@NonNull final PfDao dao, final String name) throws PfModelException {
-        List<JpaPdpGroup> jpaPdpGroupList = new ArrayList<>();
-
-        if (name == null) {
-            jpaPdpGroupList.addAll(dao.getAll(JpaPdpGroup.class));
-        } else {
-            jpaPdpGroupList.addAll(dao.getAllVersions(JpaPdpGroup.class, name));
-        }
-
-        return asPdpGroupList(jpaPdpGroupList);
+        return asPdpGroupList(dao.getFiltered(JpaPdpGroup.class, name, version));
     }
 
     /**
@@ -106,8 +78,7 @@ public class PdpProvider {
      * @return the PDP groups found
      * @throws PfModelException on errors getting policies
      */
-    public List<PdpGroup> getFilteredPdpGroups(@NonNull final PfDao dao, @NonNull final PdpGroupFilter filter)
-            throws PfModelException {
+    public List<PdpGroup> getFilteredPdpGroups(@NonNull final PfDao dao, @NonNull final PdpGroupFilter filter) {
 
         List<JpaPdpGroup> jpaPdpGroupList = dao.getAll(JpaPdpGroup.class);
 
@@ -211,10 +182,7 @@ public class PdpProvider {
             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
         }
 
-        if (dao.update(jpaPdpSubgroup) == null) {
-            String errorMessage = "update of PDP subgroup \"" + jpaPdpSubgroup.getId() + "\" failed";
-            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
-        }
+        dao.update(jpaPdpSubgroup);
     }
 
     /**
@@ -228,8 +196,7 @@ public class PdpProvider {
      * @throws PfModelException on errors updating PDP subgroups
      */
     public void updatePdp(@NonNull final PfDao dao, @NonNull final String pdpGroupName,
-            @NonNull final String pdpGroupVersion, @NonNull final String pdpSubGroup, @NonNull final Pdp pdp)
-            throws PfModelException {
+            @NonNull final String pdpGroupVersion, @NonNull final String pdpSubGroup, @NonNull final Pdp pdp) {
 
         final PfReferenceKey pdpKey =
                 new PfReferenceKey(pdpGroupName, pdpGroupVersion, pdpSubGroup, pdp.getInstanceId());
@@ -243,10 +210,7 @@ public class PdpProvider {
             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
         }
 
-        if (dao.update(jpaPdp) == null) {
-            String errorMessage = "update of PDP \"" + jpaPdp.getId() + "\" failed";
-            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
-        }
+        dao.update(jpaPdp);
     }
 
     /**
@@ -258,8 +222,8 @@ public class PdpProvider {
      * @return the PDP group deleted
      * @throws PfModelException on errors deleting PDP groups
      */
-    public PdpGroup deletePdpGroup(@NonNull final PfDao dao, @NonNull final String name, @NonNull final String version)
-            throws PfModelException {
+    public PdpGroup deletePdpGroup(@NonNull final PfDao dao, @NonNull final String name,
+            @NonNull final String version) {
 
         PfConceptKey pdpGroupKey = new PfConceptKey(name, version);
 
@@ -298,11 +262,12 @@ public class PdpProvider {
      * @param pdpGroupVersion the version of the PDP group containing the PDP that the statistics are for
      * @param pdpType the PDP type of the subgroup containing the PDP that the statistics are for
      * @param pdpInstanceId the instance ID of the PDP to update statistics for
+     * @param pdpStatistics the statistics to update
      * @throws PfModelException on errors updating statistics
      */
     public void updatePdpStatistics(@NonNull final PfDao dao, @NonNull final String pdpGroupName,
             @NonNull final String pdpGroupVersion, @NonNull final String pdpType, @NonNull final String pdpInstanceId,
-            @NonNull final PdpStatistics pdppStatistics) throws PfModelException {
+            @NonNull final PdpStatistics pdpStatistics) throws PfModelException {
         // Not implemented yet
     }
 
index 4012eaa..bc77e4b 100644 (file)
@@ -36,14 +36,22 @@ import org.junit.Before;
 import org.junit.Test;
 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.dao.DaoParameters;
 import org.onap.policy.models.dao.PfDao;
 import org.onap.policy.models.dao.PfDaoFactory;
 import org.onap.policy.models.dao.impl.DefaultPfDao;
 import org.onap.policy.models.pdp.concepts.Pdp;
 import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
 import org.onap.policy.models.pdp.concepts.PdpGroups;
+import org.onap.policy.models.pdp.concepts.PdpStatistics;
+import org.onap.policy.models.pdp.concepts.PdpSubGroup;
+import org.onap.policy.models.pdp.enums.PdpHealthStatus;
+import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.models.pdp.persistence.provider.PdpProvider;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider;
 
 /**
@@ -123,6 +131,47 @@ public class PdpProviderTest {
         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
     }
 
+    @Test
+    public void testFilteredPdpGroupGet() throws Exception {
+        assertThatThrownBy(() -> {
+            new PdpProvider().getFilteredPdpGroups(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().getFilteredPdpGroups(null, PdpGroupFilter.builder().build());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().getFilteredPdpGroups(pfDao, null);
+        }).hasMessage("filter is marked @NonNull but is null");
+
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroupsForFiltering.json");
+        PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
+
+        assertEquals(5, new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()).size());
+
+        List<ToscaPolicyTypeIdentifier> policyTypeList = new ArrayList<>();
+        policyTypeList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3"));
+
+        List<ToscaPolicyIdentifier> policyList = new ArrayList<>();
+        policyList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6"));
+
+        // @formatter:off
+        final PdpGroupFilter filter = PdpGroupFilter.builder()
+                .groupState(PdpState.PASSIVE)
+                .name("PdpGroup0")
+                .version("1.2.3")
+                .matchPoliciesExactly(false)
+                .matchPolicyTypesExactly(false)
+                .pdpState(PdpState.PASSIVE)
+                .pdpType("APEX")
+                .policyTypeList(policyTypeList)
+                .policyList(policyList)
+                .build();
+        // @formatter:on
+        assertEquals(1, new PdpProvider().getFilteredPdpGroups(pfDao, filter).size());
+    }
+
     @Test
     public void testGroupsCreate() throws Exception {
         assertThatThrownBy(() -> {
@@ -150,6 +199,11 @@ public class PdpProviderTest {
 
         String gotJson = standardCoder.encode(gotPdpGroups0);
         assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
+
+        pdpGroups0.getGroups().get(0).setPdpGroupState(null);
+        assertThatThrownBy(() -> {
+            new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups());
+        }).hasMessageContaining("INVALID:pdpGroupState may not be null");
     }
 
     @Test
@@ -210,6 +264,11 @@ public class PdpProviderTest {
         List<Pdp> beforePdpInstances = updatePdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
         List<Pdp> afterPdpInstances = updatedPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances();
         assertTrue(beforePdpInstances.containsAll(afterPdpInstances));
+
+        pdpGroups0.getGroups().get(0).setPdpGroupState(null);
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpGroups(pfDao, pdpGroups0.getGroups());
+        }).hasMessageContaining("INVALID:pdpGroupState may not be null");
     }
 
     @Test
@@ -222,10 +281,26 @@ public class PdpProviderTest {
             new PdpProvider().deletePdpGroup(null, null, "version");
         }).hasMessage("dao is marked @NonNull but is null");
 
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(null, "name", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
         assertThatThrownBy(() -> {
             new PdpProvider().deletePdpGroup(null, "name", "version");
         }).hasMessage("dao is marked @NonNull but is null");
 
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(pfDao, null, "version");
+        }).hasMessage("name is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(pfDao, "name", null);
+        }).hasMessage("version is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().deletePdpGroup(pfDao, "name", "version");
+        }).hasMessage("delete of PDP group \"name:version\" failed, PDP group does not exist");
+
         String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
         PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
 
@@ -250,4 +325,539 @@ public class PdpProviderTest {
             new PdpProvider().deletePdpGroup(pfDao, "PdpGroup0", "1.2.3");
         }).hasMessage("delete of PDP group \"PdpGroup0:1.2.3\" failed, PDP group does not exist");
     }
+
+    @Test
+    public void testPdpSubgroupUpdate() throws Exception {
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, null, null, new PdpSubGroup());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, null, "version", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, null, "version", new PdpSubGroup());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, "name", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, "name", null, new PdpSubGroup());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, "name", "version", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(null, "name", "version", new PdpSubGroup());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, null, null, new PdpSubGroup());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, null, "version", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, null, "version", new PdpSubGroup());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "name", null, null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "name", null, new PdpSubGroup());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "name", "version", null);
+        }).hasMessage("pdpSubGroup is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "name", "version", new PdpSubGroup());
+        }).hasMessage("parameter \"localName\" is null");
+
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
+        PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
+
+        PdpGroups createdPdpGroups0 = new PdpGroups();
+        createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
+        String createdJson = standardCoder.encode(createdPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
+
+        PdpGroups gotPdpGroups0 = new PdpGroups();
+        gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
+
+        String gotJson = standardCoder.encode(gotPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
+
+        PdpSubGroup existingSubGroup = gotPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0);
+        existingSubGroup.setCurrentInstanceCount(10);
+        existingSubGroup.setDesiredInstanceCount(10);
+        new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
+
+        List<PdpGroup> afterUpdatePdpGroups = new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3");
+        assertEquals(10, afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getCurrentInstanceCount());
+        assertEquals(10, afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
+
+        existingSubGroup.setDesiredInstanceCount(-1);
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
+        }).hasMessageContaining("INVALID:the desired instance count of a PDP sub group may not be negative");
+        existingSubGroup.setDesiredInstanceCount(10);
+
+        existingSubGroup.setPdpType("Loooooooooooooooooooooooooooooooooooooooo"
+                + "ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongKey");
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpSubGroup(pfDao, "PdpGroup0", "1.2.3", existingSubGroup);
+        }).hasMessageContaining("Value too long for column");
+        existingSubGroup.setPdpType("APEX");
+    }
+
+    @Test
+    public void testPdpUpdate() throws Exception {
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, null, null, new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, null, "TYPE", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, null, "TYPE", new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, "version", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, "version", null, new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, "version", "TYPE", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, null, "version", "TYPE", new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", null, null, new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", null, "TYPE", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", null, "TYPE", new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", "version", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", "version", null, new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", "version", "TYPE", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(null, "name", "version", "TYPE", new Pdp());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, null, null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, null, null, new Pdp());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, null, "TYPE", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, null, "TYPE", new Pdp());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, "version", null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, "version", null, new Pdp());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, "version", "TYPE", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, null, "version", "TYPE", new Pdp());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", null, null, null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", null, null, new Pdp());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", null, "TYPE", null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", null, "TYPE", new Pdp());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", "version", null, null);
+        }).hasMessage("pdpSubGroup is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", "version", null, new Pdp());
+        }).hasMessage("pdpSubGroup is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", "version", "TYPE", null);
+        }).hasMessage("pdp is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "name", "version", "TYPE", new Pdp());
+        }).hasMessage("parameter \"localName\" is null");
+
+        String originalJson = ResourceUtils.getResourceAsString("testdata/PdpGroups0.json");
+        PdpGroups pdpGroups0 = standardCoder.decode(originalJson, PdpGroups.class);
+
+        PdpGroups createdPdpGroups0 = new PdpGroups();
+        createdPdpGroups0.setGroups(new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()));
+        String createdJson = standardCoder.encode(createdPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), createdJson.replaceAll("\\s+", ""));
+
+        PdpGroups gotPdpGroups0 = new PdpGroups();
+        gotPdpGroups0.setGroups(new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3"));
+
+        String gotJson = standardCoder.encode(gotPdpGroups0);
+        assertEquals(originalJson.replaceAll("\\s+", ""), gotJson.replaceAll("\\s+", ""));
+
+        Pdp existingPdp = gotPdpGroups0.getGroups().get(0).getPdpSubgroups().get(0).getPdpInstances().get(0);
+        existingPdp.setPdpState(PdpState.TEST);
+        existingPdp.setHealthy(PdpHealthStatus.TEST_IN_PROGRESS);
+        new PdpProvider().updatePdp(pfDao, "PdpGroup0", "1.2.3", "APEX", existingPdp);
+
+        List<PdpGroup> afterUpdatePdpGroups = new PdpProvider().getPdpGroups(pfDao, "PdpGroup0", "1.2.3");
+        assertEquals(PdpState.TEST,
+                afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getPdpState());
+        assertEquals(PdpHealthStatus.TEST_IN_PROGRESS,
+                afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getHealthy());
+
+        existingPdp.setMessage("");
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdp(pfDao, "PdpGroup0", "1.2.3", "APEX", existingPdp);
+        }).hasMessageContaining("INVALID:message may not be blank");
+        existingPdp.setMessage("A Message");
+    }
+
+    @Test
+    public void testGetPdpStatistics() throws PfModelException {
+        assertThatThrownBy(() -> {
+            new PdpProvider().getPdpStatistics(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().getPdpStatistics(null, null, "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().getPdpStatistics(null, "name", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertEquals(0, new PdpProvider().getPdpStatistics(pfDao, "name", "version").size());
+    }
+
+    @Test
+    public void testUpdatePdpStatistics() throws PfModelException {
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, null, null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, null, "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, null, "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, null, "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", null, null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", null, "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version",  null, "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, null, "version", "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, null, null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, null, "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, null, "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", null, "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", null, null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", null, "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", null, "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", null, new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", "inst", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(null, "name", "version", "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, null, null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, null, null, new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, null, "inst", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, null, "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", null, new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", "inst", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, null, "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, null, new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", null, "inst", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version",  null, "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", null, null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", null, new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", "inst", null);
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, null, "version", "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupName is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, null, null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, null, new PdpStatistics());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, "inst", null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, null, "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", null, null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", null, new PdpStatistics());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", "inst", null);
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", null, "TYPE", "inst", new PdpStatistics());
+        }).hasMessage("pdpGroupVersion is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, null, null);
+        }).hasMessage("pdpType is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, null, new PdpStatistics());
+        }).hasMessage("pdpType is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, "inst", null);
+        }).hasMessage("pdpType is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", null, "inst", new PdpStatistics());
+        }).hasMessage("pdpType is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", null, null);
+        }).hasMessage("pdpInstanceId is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", null, new PdpStatistics());
+        }).hasMessage("pdpInstanceId is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", "inst", null);
+        }).hasMessage("pdpStatistics is marked @NonNull but is null");
+
+        new PdpProvider().updatePdpStatistics(pfDao, "name", "version", "TYPE", "inst", new PdpStatistics());
+    }
 }
index 623ee4e..f9c822b 100644 (file)
@@ -1,22 +1,17 @@
 {
-    "groups": 
-    [
+    "groups": [
         {
             "name": "PdpGroup0",
             "version": "1.2.3",
             "description": "group description",
             "pdpGroupState": "PASSIVE",
-            "properties": 
-            {
+            "properties": {
                 "groupProperty0": "Value of Group Property 0"
             },
-
-            "pdpSubgroups": 
-            [
+            "pdpSubgroups": [
                 {
                     "pdpType": "APEX",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
@@ -30,9 +25,7 @@
                             "version": "7.8.9"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "ACTIVE",
                             "message": "message from PDP"
                         },
                         {
-                            "instanceId": "apex-0",
+                            "instanceId": "apex-1",
                             "pdpState": "PASSIVE",
                             "healthy": "NOT_HEALTHY",
                             "message": "message from PDP"
                         },
                         {
-                            "instanceId": "apex-0",
+                            "instanceId": "apex-2",
                             "pdpState": "SAFE",
                             "healthy": "NOT_HEALTHY",
                             "message": "message from PDP"
                         },
                         {
-                            "instanceId": "apex-0",
+                            "instanceId": "apex-3",
                             "pdpState": "TEST",
                             "healthy": "NOT_HEALTHY",
                             "message": "message from PDP"
                 }
             ]
         },
-
         {
             "name": "PdpGroup0",
             "version": "1.2.4",
             "description": "group description",
             "pdpGroupState": "ACTIVE",
-            "properties": 
-            {
+            "properties": {
                 "groupProperty0": "Value of Group Property 0"
             },
-
-            "pdpSubgroups": 
-            [
+            "pdpSubgroups": [
                 {
                     "pdpType": "APEX",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
                             "version": "0.1.2"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy2",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "ACTIVE",
                 }
             ]
         },
-
         {
             "name": "PdpGroup0",
             "version": "1.2.1",
             "description": "group description",
             "pdpGroupState": "SAFE",
-            "properties": 
-            {
+            "properties": {
                 "groupProperty0": "Value of Group Property 0"
             },
-
-            "pdpSubgroups": 
-            [
+            "pdpSubgroups": [
                 {
                     "pdpType": "APEX",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.1",
                             "version": "4.5.6"
                             "version": "0.1.2"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy2",
                             "version": "4.5.6"
                             "version": "1.2.3"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "SAFE",
                 },
                 {
                     "pdpType": "DROOLS",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "SAFE",
             "version": "1.2.1",
             "description": "group description",
             "pdpGroupState": "PASSIVE",
-            "properties": 
-            {
+            "properties": {
                 "groupProperty0": "Value of Group Property 0"
             },
-
-            "pdpSubgroups": 
-            [
+            "pdpSubgroups": [
                 {
                     "pdpType": "APEX",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.1",
                             "version": "4.5.6"
                             "version": "7.8.9"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "PASSIVE",
                 }
             ]
         },
-
         {
             "name": "PdpGroup1",
             "version": "1.2.3",
             "description": "group description",
             "pdpGroupState": "TEST",
-            "properties": 
-            {
+            "properties": {
                 "groupProperty0": "Value of Group Property 0"
             },
-
-            "pdpSubgroups": 
-            [
+            "pdpSubgroups": [
                 {
                     "pdpType": "APEX",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "TEST",
                 },
                 {
                     "pdpType": "DROOLS",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "PASSIVE",
                 },
                 {
                     "pdpType": "XACML",
-                    "supportedPolicyTypes": 
-                    [
+                    "supportedPolicyTypes": [
                         {
                             "name": "policy.type.0",
                             "version": "1.2.3"
                         }
                     ],
-
-                    "policies": 
-                    [
+                    "policies": [
                         {
                             "name": "Policy0",
                             "version": "4.5.6"
                         }
                     ],
-
                     "currentInstanceCount": 123,
                     "desiredInstanceCount": 456,
-                    "properties": 
-                    {
+                    "properties": {
                         "subgroupProperty0": "Value of sub Group Property 0"
                     },
-
-                    "pdpInstances": 
-                    [
+                    "pdpInstances": [
                         {
                             "instanceId": "apex-0",
                             "pdpState": "ACTIVE",
             ]
         }
     ]
-}
\ No newline at end of file
+}
index bf48292..8f05244 100644 (file)
@@ -117,7 +117,7 @@ public class PolicyToscaPersistenceTest {
                 }
             }
         } catch (Exception exc) {
-            LOGGER.warn("error processing policies", exc);
+            LOGGER.warn("error processing policy types", exc);
             fail("test should not throw an exception");
         }
     }
index e89b316..f5a178a 100644 (file)
@@ -54,7 +54,7 @@ public class ToscaEntity implements PfNameVersion {
     private String description;
 
     /**
-     * Copy COnstructor.
+     * Copy Constructor.
      *
      * @param copyObject object to copy from
      */
index 75f17ea..3a3b147 100644 (file)
 
 package org.onap.policy.models.tosca.authorative.concepts;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Map.Entry;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import lombok.NonNull;
 
 /**
  * Class to represent TOSCA policy type matching input/output from/to client.
@@ -39,6 +43,22 @@ import lombok.NoArgsConstructor;
 public class ToscaPolicyType extends ToscaEntity implements Comparable<ToscaPolicyType> {
     private Map<String, ToscaProperty> properties;
 
+    /**
+     * Copy Constructor.
+     *
+     * @param copyObject object to copy from
+     */
+    public ToscaPolicyType(@NonNull ToscaPolicyType copyObject) {
+        super(copyObject);
+
+        if (copyObject.properties != null) {
+            properties = new LinkedHashMap<>();
+            for (final Entry<String, ToscaProperty> propertyEntry : copyObject.properties.entrySet()) {
+                properties.put(propertyEntry.getKey(), propertyEntry.getValue());
+            }
+        }
+    }
+
     @Override
     public int compareTo(final ToscaPolicyType other) {
         return compareNameVersion(this, other);
@@ -39,7 +39,7 @@ import org.onap.policy.common.utils.validation.ToStringTester;
  * @author Chenfei Gao (cgao@research.att.com)
  *
  */
-public class TestPojos {
+public class PojosTest {
 
     private static final String POJO_PACKAGE = "org.onap.policy.models.tosca.authorative.concepts";
 
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java
new file mode 100644 (file)
index 0000000..4653296
--- /dev/null
@@ -0,0 +1,214 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.google.gson.GsonBuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.junit.BeforeClass;
+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.PfKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test of the {@link ToscaPolicyFilter} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaPolicyFilterTest {
+    // Logger for this class
+    private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyFilterTest.class);
+
+    // @formatter:off
+    private static final String[] policyResourceNames = {
+        "policies/vCPE.policies.optimization.input.tosca.yaml",
+        "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.guard.minmax.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
+
+    private static List<ToscaPolicy> policyList = new ArrayList<>();
+
+    /**
+     * Set up a Tosca Policy type list for filtering.
+     *
+     * @throws CoderException on JSON decoding errors
+     */
+    @BeforeClass
+    public static void setupTypeList() throws CoderException {
+        for (String policyResourceName : policyResourceNames) {
+            String policyString = ResourceUtils.getResourceAsString(policyResourceName);
+            if (policyResourceName.endsWith("yaml")) {
+                Object yamlObject = new Yaml().load(policyString);
+                policyString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+            }
+
+            ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyString, ToscaServiceTemplate.class);
+            assertNotNull(serviceTemplate);
+
+            for (Map<String, ToscaPolicy> foundPolicyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) {
+                for (Entry<String, ToscaPolicy> policyEntry : foundPolicyMap.entrySet()) {
+                    ToscaPolicy policy = policyEntry.getValue();
+                    if (policy.getName() == null) {
+                        policy.setName(policyEntry.getKey());
+                    }
+                    if (policy.getVersion() == null) {
+                        policy.setVersion(PfKey.NULL_KEY_VERSION);
+                    }
+                    if (policy.getTypeVersion() == null) {
+                        policy.setTypeVersion(PfKey.NULL_KEY_VERSION);
+                    }
+                    if (!policyList.contains(policy)) {
+                        policyList.add(policy);
+                    }
+                }
+            }
+        }
+
+        for (ToscaPolicy policy : policyList) {
+            LOGGER.info("using policy-" + policy.getName() + ":" + policy.getVersion() + ", type-" + policy.getType()
+                    + ":" + policy.getTypeVersion());
+        }
+    }
+
+    @Test
+    public void testNullList() {
+        ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
+
+        assertThatThrownBy(() -> {
+            filter.filter(null);
+        }).hasMessage("originalList is marked @NonNull but is null");
+    }
+
+    @Test
+    public void testFilterNothing() {
+        ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
+
+        List<ToscaPolicy> filteredList = filter.filter(policyList);
+        assertTrue(filteredList.containsAll(policyList));
+    }
+
+    @Test
+    public void testFilterLatestVersion() {
+        ToscaPolicyFilter filter = ToscaPolicyFilter.builder().version(ToscaPolicyFilter.LATEST_VERSION).build();
+
+        List<ToscaPolicy> filteredList = filter.filter(policyList);
+        assertEquals(15, filteredList.size());
+        assertEquals("1.0.0", filteredList.get(7).getVersion());
+        assertEquals("1.0.0", filteredList.get(12).getVersion());
+
+        assertEquals(17, policyList.size());
+        assertEquals(15, filteredList.size());
+
+        policyList.get(10).setVersion("2.0.0");
+        policyList.get(16).setVersion("3.4.5");
+        filteredList = filter.filter(policyList);
+        assertEquals(15, filteredList.size());
+        assertEquals("2.0.0", filteredList.get(7).getVersion());
+        assertEquals("3.4.5", filteredList.get(12).getVersion());
+
+        policyList.get(10).setVersion("1.0.0");
+        policyList.get(16).setVersion("1.0.0");
+        filteredList = filter.filter(policyList);
+        assertEquals(15, filteredList.size());
+        assertEquals("1.0.0", filteredList.get(7).getVersion());
+        assertEquals("1.0.0", filteredList.get(12).getVersion());
+    }
+
+    @Test
+    public void testFilterNameVersion() {
+        ToscaPolicyFilter filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").build();
+        List<ToscaPolicy> filteredList = filter.filter(policyList);
+        assertEquals(2, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().name("guard.frequency.scaleout").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(2, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().name("guard.frequency.scalein").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(0, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().version("1.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(17, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().name("OSDF_CASABLANCA.SubscriberPolicy_v1").version("1.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(1, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").version("1.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(2, filteredList.size());
+    }
+
+    @Test
+    public void testFilterTypeVersion() {
+        ToscaPolicyFilter filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").build();
+        List<ToscaPolicy> filteredList = filter.filter(policyList);
+        assertEquals(4, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().type("onap.policies.monitoring.cdap.tca.hi.lo.app").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(2, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.NonOperational").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(0, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().typeVersion("0.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(17, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().type("onap.policies.optimization.HpaPolicy").typeVersion("0.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(1, filteredList.size());
+
+        filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").typeVersion("0.0.0").build();
+        filteredList = filter.filter(policyList);
+        assertEquals(4, filteredList.size());
+    }
+}
@@ -28,13 +28,13 @@ import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
 /**
- * Test the other constructors, as {@link TestPojos} tests the other methods.
+ * Test the other constructors, as {@link PojosTest} tests the other methods.
  */
-public class TestToscaPolicyIdentifierOptVersion extends ToscaIdentifierTestBase<ToscaPolicyIdentifierOptVersion> {
+public class ToscaPolicyIdentifierOptVersionTest extends ToscaIdentifierTestBase<ToscaPolicyIdentifierOptVersion> {
     private static final String NAME = "my-name";
     private static final String VERSION = "1.2.3";
 
-    public TestToscaPolicyIdentifierOptVersion() {
+    public ToscaPolicyIdentifierOptVersionTest() {
         super(ToscaPolicyIdentifierOptVersion.class);
     }
 
@@ -26,13 +26,13 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 /**
- * Test the other constructors, as {@link TestPojos} tests the other methods.
+ * Test the other constructors, as {@link PojosTest} tests the other methods.
  */
-public class TestToscaPolicyIdentifier extends ToscaIdentifierTestBase<ToscaPolicyIdentifier> {
+public class ToscaPolicyIdentifierTest extends ToscaIdentifierTestBase<ToscaPolicyIdentifier> {
     private static final String NAME = "my-name";
     private static final String VERSION = "1.2.3";
 
-    public TestToscaPolicyIdentifier() {
+    public ToscaPolicyIdentifierTest() {
         super(ToscaPolicyIdentifier.class);
     }
 
 
 package org.onap.policy.models.tosca.authorative.concepts;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 
+import java.util.LinkedHashMap;
+
 import org.junit.Test;
 
 /**
- * Tests methods not tested by {@link TestPojos}.
+ * Tests methods not tested by {@link PojosTest}.
  */
-public class TestToscaPolicy {
+public class ToscaPolicyTest {
 
     @Test
     public void testGetIdentifier_testGetTypeIdentifier() {
+        assertThatThrownBy(() -> {
+            new ToscaPolicy(null);
+        }).hasMessage("copyObject is marked @NonNull but is null");
+
+
         ToscaPolicy policy = new ToscaPolicy();
 
         policy.setName("my_name");
@@ -45,5 +53,13 @@ public class TestToscaPolicy {
         ToscaPolicyTypeIdentifier type = policy.getTypeIdentifier();
         assertEquals("my_type", type.getName());
         assertEquals("3.2.1", type.getVersion());
+
+        ToscaPolicy clonedPolicy0 = new ToscaPolicy(policy);
+        assertEquals(0, policy.compareTo(clonedPolicy0));
+
+        policy.setProperties(new LinkedHashMap<String, Object>());
+        policy.getProperties().put("PropertyKey", "PropertyValue");
+        ToscaPolicy clonedPolicy1 = new ToscaPolicy(policy);
+        assertEquals(0, policy.compareTo(clonedPolicy1));
     }
 }
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeFilterTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeFilterTest.java
new file mode 100644 (file)
index 0000000..12d81ed
--- /dev/null
@@ -0,0 +1,175 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.google.gson.GsonBuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.junit.BeforeClass;
+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.PfKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test of the {@link ToscaPolicyTypeFilter} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaPolicyTypeFilterTest {
+    // Logger for this class
+    private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyTypeFilterTest.class);
+
+    // @formatter:off
+    private static final String[] policyTypeResourceNames = {
+        "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
+        "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
+        "policytypes/onap.policies.optimization.DistancePolicy.yaml",
+        "policytypes/onap.policies.optimization.HpaPolicy.yaml",
+        "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
+        "policytypes/onap.policies.optimization.PciPolicy.yaml",
+        "policytypes/onap.policies.optimization.QueryPolicy.yaml",
+        "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
+        "policytypes/onap.policies.optimization.Vim_fit.yaml",
+        "policytypes/onap.policies.optimization.VnfPolicy.yaml",
+        "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml"
+    };
+    // @formatter:on
+
+    private static List<ToscaPolicyType> typeList = new ArrayList<>();
+
+    /**
+     * Set up a Tosca Policy type list for filtering.
+     *
+     * @throws CoderException on JSON decoding errors
+     */
+    @BeforeClass
+    public static void setupTypeList() throws CoderException {
+        for (String policyTypeResourceName : policyTypeResourceNames) {
+            String policyTypeString = ResourceUtils.getResourceAsString(policyTypeResourceName);
+            Object yamlObject = new Yaml().load(policyTypeString);
+            String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+
+            ToscaServiceTemplate serviceTemplate =
+                    new StandardCoder().decode(yamlAsJsonString, ToscaServiceTemplate.class);
+            assertNotNull(serviceTemplate);
+
+            for (Map<String, ToscaPolicyType> foundPolicyTypeMap : serviceTemplate.getPolicyTypes()) {
+                for (Entry<String, ToscaPolicyType> policyTypeEntry : foundPolicyTypeMap.entrySet()) {
+                    ToscaPolicyType policyType = policyTypeEntry.getValue();
+                    if (policyType.getName() == null) {
+                        policyType.setName(policyTypeEntry.getKey());
+                    }
+                    if (policyType.getVersion() == null) {
+                        policyType.setVersion(PfKey.NULL_KEY_VERSION);
+                    }
+                    if (!typeList.contains(policyType)) {
+                        typeList.add(policyType);
+                    }
+                }
+            }
+        }
+
+        for (ToscaPolicyType type : typeList) {
+            LOGGER.info("using policy type-" + type.getName() + ":" + type.getVersion());
+        }
+    }
+
+    @Test
+    public void testNullList() {
+        ToscaPolicyTypeFilter filter = ToscaPolicyTypeFilter.builder().build();
+
+        assertThatThrownBy(() -> {
+            filter.filter(null);
+        }).hasMessage("originalList is marked @NonNull but is null");
+    }
+
+    @Test
+    public void testFilterNothing() {
+        ToscaPolicyTypeFilter filter = ToscaPolicyTypeFilter.builder().build();
+
+        List<ToscaPolicyType> filteredList = filter.filter(typeList);
+        assertTrue(filteredList.containsAll(typeList));
+    }
+
+    @Test
+    public void testFilterLatestVersion() {
+        ToscaPolicyTypeFilter filter =
+                ToscaPolicyTypeFilter.builder().version(ToscaPolicyTypeFilter.LATEST_VERSION).build();
+
+        List<ToscaPolicyType> filteredList = filter.filter(typeList);
+        assertEquals(13, filteredList.size());
+        assertEquals("1.0.0", filteredList.get(0).getVersion());
+        assertEquals("0.0.0", filteredList.get(4).getVersion());
+
+        typeList.get(12).setVersion("2.0.0");
+        filteredList = filter.filter(typeList);
+        assertEquals(13, filteredList.size());
+        assertEquals("2.0.0", filteredList.get(0).getVersion());
+        assertEquals("0.0.0", filteredList.get(4).getVersion());
+
+        typeList.get(12).setVersion("1.0.0");
+        filteredList = filter.filter(typeList);
+        assertEquals(13, filteredList.size());
+        assertEquals("1.0.0", filteredList.get(0).getVersion());
+        assertEquals("0.0.0", filteredList.get(4).getVersion());
+    }
+
+    @Test
+    public void testFilterNameVersion() {
+        ToscaPolicyTypeFilter filter = ToscaPolicyTypeFilter.builder().name("onap.policies.Monitoring").build();
+        List<ToscaPolicyType> filteredList = filter.filter(typeList);
+        assertEquals(2, filteredList.size());
+
+        filter = ToscaPolicyTypeFilter.builder().name("onap.policy.monitoring.cdap.tca.hi.lo.app").build();
+        filteredList = filter.filter(typeList);
+        assertEquals(1, filteredList.size());
+
+        filter = ToscaPolicyTypeFilter.builder().name("onap.policies.optimization.LpaPolicy").build();
+        filteredList = filter.filter(typeList);
+        assertEquals(0, filteredList.size());
+
+        filter = ToscaPolicyTypeFilter.builder().version("0.0.0").build();
+        filteredList = filter.filter(typeList);
+        assertEquals(9, filteredList.size());
+
+        filter = ToscaPolicyTypeFilter.builder().name("onap.policies.optimization.Vim_fit").version("0.0.0").build();
+        filteredList = filter.filter(typeList);
+        assertEquals(1, filteredList.size());
+
+        filter = ToscaPolicyTypeFilter.builder().name("onap.policies.optimization.Vim_fit").version("0.0.1").build();
+        filteredList = filter.filter(typeList);
+        assertEquals(0, filteredList.size());
+    }
+}
@@ -26,13 +26,13 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 /**
- * Test the other constructors, as {@link TestPojos} tests the other methods.
+ * Test the other constructors, as {@link PojosTest} tests the other methods.
  */
-public class TestToscaPolicyTypeIdentifier extends ToscaIdentifierTestBase<ToscaPolicyTypeIdentifier> {
+public class ToscaPolicyTypeIdentifierTest extends ToscaIdentifierTestBase<ToscaPolicyTypeIdentifier> {
     private static final String NAME = "my-name";
     private static final String VERSION = "1.2.3";
 
-    public TestToscaPolicyTypeIdentifier() {
+    public ToscaPolicyTypeIdentifierTest() {
         super(ToscaPolicyTypeIdentifier.class);
     }
 
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeTest.java
new file mode 100644 (file)
index 0000000..59a5a33
--- /dev/null
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.concepts;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+
+import java.util.LinkedHashMap;
+
+import org.junit.Test;
+
+/**
+ * Test of the {@link ToscaPolicyType} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class ToscaPolicyTypeTest {
+
+    @Test
+    public void testToscaPolicyType() {
+        assertThatThrownBy(() -> {
+            new ToscaPolicyType(null);
+        }).hasMessage("copyObject is marked @NonNull but is null");
+
+        ToscaPolicyType tpt = new ToscaPolicyType();
+        tpt.setName("AType");
+        tpt.setVersion("1.2.3");
+        tpt.setDerivedFrom("AParentType");
+        tpt.setDescription("Desc");
+
+        ToscaPolicyType clonedTpt0 = new ToscaPolicyType(tpt);
+        assertEquals(0, tpt.compareTo(clonedTpt0));
+
+        tpt.setMetadata(new LinkedHashMap<>());
+        tpt.setProperties(new LinkedHashMap<>());
+
+        tpt.getMetadata().put("MetaKey0", "Metavalue 0");
+
+        ToscaProperty tp = new ToscaProperty();
+        tpt.getProperties().put("Property0", tp);
+
+        ToscaPolicyType clonedTpt1 = new ToscaPolicyType(tpt);
+        assertEquals(0, tpt.compareTo(clonedTpt1));
+    }
+}