Changing policy decoder to support Tosca 55/91755/2
authorramverma <ram.krishna.verma@est.tech>
Sun, 21 Jul 2019 13:15:10 +0000 (13:15 +0000)
committerramverma <ram.krishna.verma@est.tech>
Sun, 21 Jul 2019 13:15:10 +0000 (13:15 +0000)
1) Updated PolicyDecoderFileInCsarToPolicy to parse ToscaPolicy &
TocsaPolicyType from the given csar.
2) Change the parameters
3) Tests cases updated/added.

Change-Id: Ic8d652ae8043d5d332f663a6862eb08e282591cf
Issue-ID: POLICY-1889
Signed-off-by: ramverma <ram.krishna.verma@est.tech>
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/PolicyDecoderFileInCsarToPolicy.java
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/PolicyDecoderFileInCsarToPolicyParameterGroup.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/policy/file/PolicyDecoderFileInCsarToPolicyParameterGroupTest.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/policy/file/PolicyDecoderFileInCsarToPolicyTest.java
plugins/reception-plugins/src/test/resources/service-Sampleservice-test.csar [new file with mode: 0644]
plugins/reception-plugins/src/test/resources/service-Sampleservice.csar [new file with mode: 0644]

index 7f1e53a..4b58d2d 100644 (file)
 package org.onap.policy.distribution.reception.decoding.policy.file;
 
 import java.io.IOException;
-import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Enumeration;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import org.apache.commons.io.IOUtils;
 import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.distribution.model.Csar;
 import org.onap.policy.distribution.model.PolicyInput;
 import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
 import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,10 +45,11 @@ import org.slf4j.LoggerFactory;
  *
  * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
  */
-public class PolicyDecoderFileInCsarToPolicy implements PolicyDecoder<Csar, ToscaPolicy> {
+public class PolicyDecoderFileInCsarToPolicy implements PolicyDecoder<Csar, ToscaEntity> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(PolicyDecoderFileInCsarToPolicy.class);
-    PolicyDecoderFileInCsarToPolicyParameterGroup decoderParameters;
+    private PolicyDecoderFileInCsarToPolicyParameterGroup decoderParameters;
+    private StandardCoder coder;
 
     /**
      * {@inheritDoc}.
@@ -55,6 +57,7 @@ public class PolicyDecoderFileInCsarToPolicy implements PolicyDecoder<Csar, Tosc
     @Override
     public void configure(final String parameterGroupName) {
         decoderParameters = ParameterService.get(parameterGroupName);
+        coder = new StandardCoder();
     }
 
     /**
@@ -69,24 +72,21 @@ public class PolicyDecoderFileInCsarToPolicy implements PolicyDecoder<Csar, Tosc
      * {@inheritDoc}.
      */
     @Override
-    public Collection<ToscaPolicy> decode(final Csar csar) throws PolicyDecodingException {
-        final Collection<ToscaPolicy> policyList = new ArrayList<>();
+    public Collection<ToscaEntity> decode(final Csar csar) throws PolicyDecodingException {
+        final Collection<ToscaEntity> policyList = new ArrayList<>();
 
         try (ZipFile zipFile = new ZipFile(csar.getCsarPath())) {
             final Enumeration<? extends ZipEntry> entries = zipFile.entries();
             while (entries.hasMoreElements()) {
                 final ZipEntry entry = entries.nextElement();
-                if (entry.getName().contains(decoderParameters.getPolicyFileName())) {
-                    final StringWriter writer = new StringWriter();
-                    IOUtils.copy(zipFile.getInputStream(entry), writer, "UTF-8");
-                    final ToscaPolicy policy = new ToscaPolicy();
-                    policy.setName(decoderParameters.getPolicyFileName());
-                    policy.setType(decoderParameters.getPolicyType());
-                    policy.setDescription(writer.toString());
+                if (entry.getName().contains(decoderParameters.getPolicyTypeFileName())
+                        || entry.getName().contains(decoderParameters.getPolicyFileName())) {
+                    final ToscaServiceTemplate policy =
+                            coder.decode(zipFile.getInputStream(entry), ToscaServiceTemplate.class);
                     policyList.add(policy);
                 }
             }
-        } catch (final IOException exp) {
+        } catch (final IOException | CoderException exp) {
             final String message = "Failed decoding the policy";
             LOGGER.error(message, exp);
             throw new PolicyDecodingException(message, exp);
index 958180d..1df563c 100644 (file)
@@ -33,25 +33,25 @@ import org.onap.policy.distribution.reception.parameters.PolicyDecoderConfigurat
 public class PolicyDecoderFileInCsarToPolicyParameterGroup extends PolicyDecoderConfigurationParameterGroup {
 
     private String policyFileName;
-    private String policyType;
+    private String policyTypeFileName;
 
     /**
      * Constructor for instantiating {@link PolicyDecoderFileInCsarToPolicyParameterGroup} class.
      *
      * @param policyFileName the policy file name
-     * @param policyType the policy type
+     * @param policyTypeFileName the policy type file name
      */
-    public PolicyDecoderFileInCsarToPolicyParameterGroup(final String policyFileName, final String policyType) {
+    public PolicyDecoderFileInCsarToPolicyParameterGroup(final String policyFileName, final String policyTypeFileName) {
         this.policyFileName = policyFileName;
-        this.policyType = policyType;
+        this.policyTypeFileName = policyTypeFileName;
     }
 
     public String getPolicyFileName() {
         return policyFileName;
     }
 
-    public String getPolicyType() {
-        return policyType;
+    public String getPolicyTypeFileName() {
+        return policyTypeFileName;
     }
 
     @Override
@@ -61,10 +61,6 @@ public class PolicyDecoderFileInCsarToPolicyParameterGroup extends PolicyDecoder
             validationResult.setResult("policyFileName", ValidationStatus.INVALID,
                     "must be a non-blank string containing the policy file name");
         }
-        if (!ParameterValidationUtils.validateStringParameter(policyType)) {
-            validationResult.setResult("policyType", ValidationStatus.INVALID,
-                    "must be a non-blank string containing the policy type");
-        }
         return validationResult;
     }
 }
index 0ea0890..2dd0998 100644 (file)
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
 import org.onap.policy.common.parameters.ValidationStatus;
-import org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicyParameterGroup;
 
 /**
  * Class to perform unit test of {@link PolicyDecoderFileInCsarToPolicyParameterGroup}.
@@ -36,30 +35,30 @@ public class PolicyDecoderFileInCsarToPolicyParameterGroupTest {
     @Test
     public void testConstructorAndGetters() {
         final PolicyDecoderFileInCsarToPolicyParameterGroup configurationParameters =
-                new PolicyDecoderFileInCsarToPolicyParameterGroup("SamplePolicy", "APEX");
+                new PolicyDecoderFileInCsarToPolicyParameterGroup("SamplePolicy", "SamplePolicyType");
         configurationParameters.setName("myConfiguration");
 
         assertEquals("myConfiguration", configurationParameters.getName());
         assertEquals("SamplePolicy", configurationParameters.getPolicyFileName());
-        assertEquals("APEX", configurationParameters.getPolicyType());
+        assertEquals("SamplePolicyType", configurationParameters.getPolicyTypeFileName());
         assertEquals(ValidationStatus.CLEAN, configurationParameters.validate().getStatus());
     }
 
     @Test
     public void testInvalidPolicyFileName() {
         final PolicyDecoderFileInCsarToPolicyParameterGroup configurationParameters =
-                new PolicyDecoderFileInCsarToPolicyParameterGroup("", "APEX");
+                new PolicyDecoderFileInCsarToPolicyParameterGroup("", "SamplePolicyType");
         configurationParameters.setName("myConfiguration");
 
         assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
     }
 
     @Test
-    public void testInvalidPolicyType() {
+    public void testEmptyPolicyType() {
         final PolicyDecoderFileInCsarToPolicyParameterGroup configurationParameters =
                 new PolicyDecoderFileInCsarToPolicyParameterGroup("SamplePolicy", "");
         configurationParameters.setName("myConfiguration");
 
-        assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
+        assertEquals(ValidationStatus.CLEAN, configurationParameters.validate().getStatus());
     }
 }
index f3f0217..2d0ba3b 100644 (file)
@@ -34,8 +34,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.distribution.model.Csar;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity;
 
 /**
  * Class to perform unit test of {@link PolicyDecoderFileInCsarToPolicy}.
@@ -45,8 +46,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 @RunWith(MockitoJUnitRunner.class)
 public class PolicyDecoderFileInCsarToPolicyTest {
 
-    private static final String POLICY_FILE_NAME = "SamplePolicyModelJAVASCRIPT";
-    private static final String POLICY_TYPE = "APEX";
+    private static final String POLICY_FILE_NAME = "apex_ddf_policy";
+    private static final String POLICY_TYPE_FILE_NAME = "apex_ddf_policy_type";
     private static final String GROUP_NAME = "apexPdpDecoderConfiguration";
 
     /**
@@ -55,7 +56,7 @@ public class PolicyDecoderFileInCsarToPolicyTest {
     @BeforeClass
     public static void setUp() {
         final PolicyDecoderFileInCsarToPolicyParameterGroup configurationParameters =
-                new PolicyDecoderFileInCsarToPolicyParameterGroup(POLICY_FILE_NAME, POLICY_TYPE);
+                new PolicyDecoderFileInCsarToPolicyParameterGroup(POLICY_FILE_NAME, POLICY_TYPE_FILE_NAME);
         configurationParameters.setName(GROUP_NAME);
         ParameterService.register(configurationParameters);
     }
@@ -74,23 +75,20 @@ public class PolicyDecoderFileInCsarToPolicyTest {
         final PolicyDecoderFileInCsarToPolicy decoder = new PolicyDecoderFileInCsarToPolicy();
         decoder.configure(GROUP_NAME);
 
-        final File file = new File("src/test/resources/sampleTestService.csar");
+        final File file = new File("src/test/resources/service-Sampleservice.csar");
         final Csar csar = new Csar(file.getAbsolutePath());
 
         try {
-            decoder.canHandle(csar);
-            final Collection<ToscaPolicy> policyHolders = decoder.decode(csar);
-            for (final ToscaPolicy policy : policyHolders) {
-                assertEquals(POLICY_FILE_NAME, policy.getName());
-                assertEquals(POLICY_TYPE, policy.getType());
-            }
+            assertTrue(decoder.canHandle(csar));
+            final Collection<ToscaEntity> policyHolders = decoder.decode(csar);
+            assertEquals(2, policyHolders.size());
         } catch (final Exception exp) {
             fail("Test must not throw an exception");
         }
     }
 
     @Test
-    public void testDecodePolicyError() throws IOException {
+    public void testDecodePolicyZipError() {
 
         final PolicyDecoderFileInCsarToPolicy decoder = new PolicyDecoderFileInCsarToPolicy();
         decoder.configure(GROUP_NAME);
@@ -99,10 +97,31 @@ public class PolicyDecoderFileInCsarToPolicyTest {
         final Csar csar = new Csar(file.getAbsolutePath());
 
         try {
-            decoder.canHandle(csar);
+            assertTrue(decoder.canHandle(csar));
             decoder.decode(csar);
             fail("Test must throw an exception");
         } catch (final Exception exp) {
+            assertTrue(exp.getCause() instanceof IOException);
+            assertTrue(exp.getMessage().contains("Failed decoding the policy"));
+        }
+    }
+
+
+    @Test
+    public void testDecodePolicyCoderError() {
+
+        final PolicyDecoderFileInCsarToPolicy decoder = new PolicyDecoderFileInCsarToPolicy();
+        decoder.configure(GROUP_NAME);
+
+        final File file = new File("src/test/resources/service-Sampleservice-test.csar");
+        final Csar csar = new Csar(file.getAbsolutePath());
+
+        try {
+            assertTrue(decoder.canHandle(csar));
+            decoder.decode(csar);
+            fail("Test must throw an exception");
+        } catch (final Exception exp) {
+            assertTrue(exp.getCause() instanceof CoderException);
             assertTrue(exp.getMessage().contains("Failed decoding the policy"));
         }
     }
diff --git a/plugins/reception-plugins/src/test/resources/service-Sampleservice-test.csar b/plugins/reception-plugins/src/test/resources/service-Sampleservice-test.csar
new file mode 100644 (file)
index 0000000..f7360cd
Binary files /dev/null and b/plugins/reception-plugins/src/test/resources/service-Sampleservice-test.csar differ
diff --git a/plugins/reception-plugins/src/test/resources/service-Sampleservice.csar b/plugins/reception-plugins/src/test/resources/service-Sampleservice.csar
new file mode 100644 (file)
index 0000000..bb457e6
Binary files /dev/null and b/plugins/reception-plugins/src/test/resources/service-Sampleservice.csar differ