Add validation methods for PAP REST API
[policy/models.git] / models-pdp / src / test / java / org / onap / policy / models / pdp / concepts / PdpSubGroupTest.java
index 4284f71..7a7babe 100644 (file)
@@ -23,19 +23,28 @@ package org.onap.policy.models.pdp.concepts;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Map;
 import java.util.TreeMap;
-
 import org.junit.Test;
+import org.onap.policy.common.parameters.ValidationResult;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 
 /**
- * Test the copy constructor, as {@link ModelsTest} tests the other methods.
+ * Test methods not tested by {@link ModelsTest}.
  */
 public class PdpSubGroupTest {
+    private static final Coder coder = new StandardCoder();
 
     @Test
     public void testCopyConstructor() {
@@ -44,10 +53,9 @@ public class PdpSubGroupTest {
         final PdpSubGroup orig = new PdpSubGroup();
 
         // verify with null values
-        assertEquals(
-                "PdpSubGroup(pdpType=null, supportedPolicyTypes=[], policies=[], "
+        assertEquals("PdpSubGroup(pdpType=null, supportedPolicyTypes=[], policies=[], "
                         + "currentInstanceCount=0, desiredInstanceCount=0, properties=null, pdpInstances=[])",
-                new PdpSubGroup(orig).toString());
+                        new PdpSubGroup(orig).toString());
 
         // verify with all values
         orig.setCurrentInstanceCount(10);
@@ -80,4 +88,113 @@ public class PdpSubGroupTest {
 
         assertEquals(orig.toString(), new PdpSubGroup(orig).toString());
     }
+
+    @Test
+    public void testValidatePapRest() throws Exception {
+        PdpSubGroup subgrp = new PdpSubGroup();
+
+        subgrp.setDesiredInstanceCount(1);
+        subgrp.setPdpType("pdp-type");
+        subgrp.setSupportedPolicyTypes(Arrays.asList(makeIdent("type-X", "3.0.0", ToscaPolicyTypeIdentifier.class)));
+        subgrp.setPolicies(Arrays.asList(makeIdent("policy-X", "4.0.0", ToscaPolicyIdentifier.class)));
+
+        // valid
+        ValidationResult result = subgrp.validatePapRest();
+        assertNotNull(result);
+        assertTrue(result.isValid());
+        assertNull(result.getResult());
+
+        // zero count
+        PdpSubGroup sub2 = new PdpSubGroup(subgrp);
+        sub2.setDesiredInstanceCount(0);
+        assertInvalid(sub2);
+
+        // negative count
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.setDesiredInstanceCount(-1);
+        assertInvalid(sub2);
+
+        // null pdp type
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.setPdpType(null);
+        assertInvalid(sub2);
+
+        // null policy types
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.setSupportedPolicyTypes(null);
+        assertInvalid(sub2);
+
+        // empty policy types
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.setSupportedPolicyTypes(Collections.emptyList());
+        assertInvalid(sub2);
+
+        // null policy type item
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.getSupportedPolicyTypes().set(0, null);
+        assertInvalid(sub2);
+
+        // invalid policy type item
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.getSupportedPolicyTypes().set(0, makeIdent(null, "3.0.0", ToscaPolicyTypeIdentifier.class));
+        assertInvalid(sub2);
+
+        // null policies
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.setPolicies(null);
+        assertInvalid(sub2);
+
+        // null policy item
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.getPolicies().set(0, null);
+        assertInvalid(sub2);
+
+        // invalid policy item
+        sub2 = new PdpSubGroup(subgrp);
+        sub2.getPolicies().set(0, makeIdent(null, "3.0.0", ToscaPolicyIdentifier.class));
+        assertInvalid(sub2);
+    }
+
+    private void assertInvalid(PdpSubGroup sub2) {
+        ValidationResult result = sub2.validatePapRest();
+        assertNotNull(result);
+        assertFalse(result.isValid());
+        assertNotNull(result.getResult());
+    }
+
+    /**
+     * Makes an identifier. Uses JSON which does no error checking.
+     *
+     * @param name name to put into the identifier
+     * @param version version to put into the identifier
+     * @param clazz type of identifier to create
+     * @return a new identifier
+     * @throws CoderException if the JSON cannot be decoded
+     */
+    public <T> T makeIdent(String name, String version, Class<T> clazz) throws CoderException {
+        StringBuilder bldr = new StringBuilder();
+        bldr.append("{");
+
+        if (name != null) {
+            bldr.append("'name':'");
+            bldr.append(name);
+            bldr.append("'");
+        }
+
+        if (version != null) {
+            if (name != null) {
+                bldr.append(',');
+            }
+
+            bldr.append("'version':'");
+            bldr.append(version);
+            bldr.append("'");
+        }
+
+        bldr.append("}");
+
+        String json = bldr.toString().replace('\'', '"');
+
+        return coder.decode(json, clazz);
+    }
 }