Aligned decoder with forwarder for opt. policies 11/66711/2
authormmis <michael.morris@ericsson.com>
Fri, 14 Sep 2018 08:00:25 +0000 (09:00 +0100)
committermmis <michael.morris@ericsson.com>
Fri, 14 Sep 2018 17:31:41 +0000 (18:31 +0100)
Changed decoder for optimization policies to generate instance of
OptimizationPolicy (instead of PdpxPolicy) as expected by the forwarder.
Without this change there is a mismatch between the decoder and the
forwarder.

Added parameters for configuring the static elements of the optimization
policies and setting of these elements.

Issue-ID: POLICY-927
Change-Id: Ib91a905dc89eed13622fb88e4dd19b3cb9f62c75
Signed-off-by: mmis <michael.morris@ericsson.com>
16 files changed:
model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java
packages/policy-distribution-tarball/src/main/resources/etc/defaultConfig.json
plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderTest.java
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ConfigBody.java [new file with mode: 0644]
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ExtractFromNode.java
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpx.java
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterBuilder.java [new file with mode: 0644]
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterGroup.java [new file with mode: 0644]
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/handling/sdc/SdcReceptionHandlerConfigurationParameterGroup.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestAttribute.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestContent.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestDirective.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestFlavorFeature.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestFlavorProperty.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestHpaFeatureAttribute.java
plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/pdpx/TestPolicyDecoderCsarPdpx.java

index 971077c..71b7cef 100644 (file)
@@ -30,7 +30,6 @@ public class OptimizationPolicy implements Policy {
     private static final String OPTIMIZATION = "Optimization";
     private String policyName;
     private String policyDescription;
-    private String policyConfigType;
     private String onapName;
     private String configBody;
     private String configBodyType;
@@ -62,11 +61,7 @@ public class OptimizationPolicy implements Policy {
     }
 
     public String getPolicyConfigType() {
-        return policyConfigType;
-    }
-
-    public void setPolicyConfigType(final String policyConfigType) {
-        this.policyConfigType = policyConfigType;
+        return OPTIMIZATION;
     }
 
     public String getOnapName() {
index 4a0013c..01aefb2 100644 (file)
         "SDCReceptionHandler":{
             "receptionHandlerType":"SDC",
             "receptionHandlerClassName":"org.onap.policy.distribution.reception.handling.sdc.SdcReceptionHandler",
-            "pssdConfiguration":{
-                "asdcAddress": "localhost",
+           "receptionHandlerConfigurationName":"sdcConfiguration",
+            "pluginHandlerParameters":{
+                "policyDecoders":{
+                    "CsarDecoder":{
+                        "decoderType":"CsarDecoder",
+                        "decoderClassName":"org.onap.policy.distribution.reception.decoding.pdpx.PolicyDecoderCsarPdpx",
+                        "decoderConfigurationName": "csarToOptimizationPolicyConfiguration"
+                    }
+                },
+                "policyForwarders":{
+                    "PAPEngineForwarder":{
+                        "forwarderType":"PAPEngine",
+                        "forwarderClassName":"org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarder",
+                        "forwarderConfigurationName": "xacmlPdpConfiguration"
+                    }
+                }
+            }
+        }
+    },
+    "receptionHandlerConfigurationParameters":{
+        "sdcConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.reception.handling.sdc.SdcReceptionHandlerConfigurationParameterGroup",
+            "parameters":{
+               "asdcAddress": "sdc-be.onap:8443",
                 "messageBusAddress": [
-                    "a.com",
-                    "b.com",
-                    "c.com"
+                    "message-router.onap"
                  ],
-                "user": "tbdsdc-1480",
-                "password": "tbdsdc-1480",
+                "user": "sdc-1480",
+                "password": "sdc-1480",
                 "pollingInterval":20,
                 "pollingTimeout":30,
                 "consumerId": "policy-id",
                 "activeserverTlsAuth": false,
                 "isFilterinEmptyResources": true,
                 "isUseHttpsWithDmaap": false
-            },
-            "pluginHandlerParameters":{
-                "policyDecoders":{
-                    "TOSCADecoder":{
-                        "decoderType":"ToscaDecoder",
-                        "decoderClassName":"org.onap.policy.distribution.reception.decoding.pdpx.PolicyDecoderToscaPdpx"
-                    }
-                },
-                "policyForwarders":{
-                    "PAPEngineForwarder":{
-                        "forwarderType":"PAPEngine",
-                        "forwarderClassName":"org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarder",
-                        "forwarderConfigurationName": "xacmlPdpConfiguration"
-                    }
-                }
+               }
+        }
+    },
+    "policyDecoderConfigurationParameters":{
+        "csarToOptimizationPolicyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.reception.decoding.pdpx.PolicyDecoderCsarPdpxConfigurationParameterGroup",
+            "parameters":{
+                "policyNamePrefix": "oofCasablanca",
+                "onapName": "OOF",
+                "version": "1.0",
+                "priority": "3",
+                "riskType": "Test",
+                "riskLevel": "2"
             }
         }
     },
index d851b64..9ef88b4 100644 (file)
@@ -99,7 +99,6 @@ public class XacmlPdpPolicyForwarderTest {
 
         OptimizationPolicy policy1 = new OptimizationPolicy();
         policy1.setPolicyName("policy1");
-        policy1.setPolicyConfigType("Optimization");
         policies.add(policy1);
 
         Policy policy2 = new UnsupportedPolicy();
@@ -107,7 +106,6 @@ public class XacmlPdpPolicyForwarderTest {
 
         OptimizationPolicy policy3 = new OptimizationPolicy();
         policy3.setPolicyName("policy3");
-        policy3.setPolicyConfigType("Optimization");
         policies.add(policy3);
 
         forwarder.forward(policies);
@@ -143,7 +141,6 @@ public class XacmlPdpPolicyForwarderTest {
         Collection<Policy> policies = new ArrayList<>();
         OptimizationPolicy policy = new OptimizationPolicy();
         policy.setPolicyName("policy");
-        policy.setPolicyConfigType("Optimization");
         policies.add(policy);
         forwarder.forward(policies);
 
@@ -172,7 +169,6 @@ public class XacmlPdpPolicyForwarderTest {
         Collection<Policy> policies = new ArrayList<>();
         OptimizationPolicy policy = new OptimizationPolicy();
         policy.setPolicyName("policy");
-        policy.setPolicyConfigType("Optimization");
         policies.add(policy);
         forwarder.forward(policies);
 
@@ -202,7 +198,6 @@ public class XacmlPdpPolicyForwarderTest {
         Collection<Policy> policies = new ArrayList<>();
         OptimizationPolicy policy = new OptimizationPolicy();
         policy.setPolicyName("policy");
-        policy.setPolicyConfigType("Optimization");
         policies.add(policy);
         forwarder.forward(policies);
 
@@ -232,7 +227,6 @@ public class XacmlPdpPolicyForwarderTest {
         Collection<Policy> policies = new ArrayList<>();
         OptimizationPolicy policy = new OptimizationPolicy();
         policy.setPolicyName("policy");
-        policy.setPolicyConfigType("Optimization");
         policies.add(policy);
         forwarder.forward(policies);
 
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ConfigBody.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/ConfigBody.java
new file mode 100644 (file)
index 0000000..72d9bd2
--- /dev/null
@@ -0,0 +1,97 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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.distribution.reception.decoding.pdpx;
+
+public class ConfigBody {
+
+    private String service;
+    private String description;
+    private String version;
+    private String priority;
+    private String riskType;
+    private String riskLevel;
+    private String guard;
+    private Content content;
+
+    public String getService() {
+        return service;
+    }
+
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getPriority() {
+        return priority;
+    }
+
+    public void setPriority(String priority) {
+        this.priority = priority;
+    }
+
+    public String getRiskType() {
+        return riskType;
+    }
+
+    public void setRiskType(String riskType) {
+        this.riskType = riskType;
+    }
+
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+
+    public void setRiskLevel(String riskLevel) {
+        this.riskLevel = riskLevel;
+    }
+
+    public String getGuard() {
+        return guard;
+    }
+
+    public void setGuard(String guard) {
+        this.guard = guard;
+    }
+
+    public Content getContent() {
+        return content;
+    }
+
+    public void setContent(Content content) {
+        this.content = content;
+    }
+}
index 1d0f621..7c839a2 100644 (file)
 
 package org.onap.policy.distribution.reception.decoding.pdpx;
 
-import java.io.FileWriter;
-import java.io.Writer;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
@@ -76,14 +73,16 @@ public class ExtractFromNode {
     }
 
     /**
-     * ExtractInfo from VNF , each VNF may includes more than one VDUs and CPs return new generated PdpxPolicy if it has
-     * got Hpa feature info or else return null.
+     * ExtractInfo from VNF , each VNF may includes more than one VDUs and CPs return new generated
+     * PdpxPolicy if it has got Hpa feature info or else return null.
      *
      * @param node the NodeTemplate
+     * 
      * @return the extracted info from input node
+     * 
      * @throws PolicyDecodingException if extract fails
      */
-    public PdpxPolicy extractInfo(final NodeTemplate node) throws PolicyDecodingException {
+    public Content extractInfo(final NodeTemplate node) throws PolicyDecodingException {
 
         LOGGER.debug("the meta data of this nodetemplate = " + sdcCsarHelper.getNodeTemplateMetadata(node));
         final List<NodeTemplate> lnodeChild = sdcCsarHelper.getNodeTemplateChildren(node);
@@ -106,31 +105,23 @@ public class ExtractFromNode {
         LOGGER.debug("the size of vdu is =" + lnodeVdu.size());
         LOGGER.debug("the size of cp is =" + lnodeVduCp.size());
 
-        final PdpxPolicy pdpxPolicy = new PdpxPolicy();
-        final Content content = pdpxPolicy.getContent();
+        final Content content = new Content();
         extractInfoVdu(lnodeVdu, content);
         extractInfoVduCp(lnodeVduCp, content);
         if (content.getFlavorFeatures().isEmpty()) {
             return null;
         }
-        String outputFile = sdcCsarHelper.getNodeTemplateMetadata(node).getValue("name");
-        outputFile += ".json";
-        LOGGER.debug("outputFile = " + outputFile);
-        try (Writer writer = new FileWriter(outputFile)) {
-            gson.toJson(pdpxPolicy, writer);
-        } catch (final Exception exp) {
-            final String message = "Failed writing generated policies to file";
-            LOGGER.error(message, exp);
-            throw new PolicyDecodingException(message, exp);
-        }
-        return pdpxPolicy;
+
+        return content;
     }
 
 
     /**
-     * ExtractInfofromVdu, supported hpa features, All under the capability of tosca.nodes.nfv.Vdu.Compute.
+     * ExtractInfofromVdu, supported hpa features, All under the capability of
+     * tosca.nodes.nfv.Vdu.Compute.
      *
      * @param lnodeVdu the list of Vdu node
+     * 
      * @param content to be change based on lnodeVdu
      */
     public void extractInfoVdu(final List<NodeTemplate> lnodeVdu, final Content content) {
@@ -158,9 +149,11 @@ public class ExtractFromNode {
     }
 
     /**
-     * GenerateBasicCapability, supported hpa features, All under the capability of tosca.nodes.nfv.Vdu.Compute.
+     * GenerateBasicCapability, supported hpa features, All under the capability of
+     * tosca.nodes.nfv.Vdu.Compute.
      *
      * @param capabilityAssignment represents the capability of node
+     * 
      * @param flavorFeature represents all the features of specified flavor
      */
     private void generateBasicCapability(final CapabilityAssignment capabilityAssignment, FlavorFeature flavorFeature){
@@ -195,11 +188,14 @@ public class ExtractFromNode {
     }
 
     /**
-     * GenerateHpaFeatureAttribute based on the value of featureValue. the format: "hpa-attribute-key": "pciVendorId",
-     * "hpa-attribute-value": "1234", "operator": "=", "unit": "xxx".
+     * GenerateHpaFeatureAttribute based on the value of featureValue. the format:
+     * "hpa-attribute-key": "pciVendorId", "hpa-attribute-value": "1234", "operator": "=", "unit":
+     * "xxx".
      *
      * @param hpaAttributeKey get from the high layer tosca DM
+     * 
      * @param featureValue get from the high layer tosca DM
+     * 
      */
     private HpaFeatureAttribute generateHpaFeatureAttribute(final String hpaAttributeKey, final String featureValue) {
         //based on input featureValue, return back a suitable hpaFeatureAttribute
@@ -221,11 +217,13 @@ public class ExtractFromNode {
     }
 
     /**
-     * GenerateHugePages, supported hpa features, All under the capability of tosca.nodes.nfv.Vdu.Compute. The format is
-     * a map like: {"schema-version": "0", "schema-location": "", "platform-id": "generic", "mandatory": true,
-     * "configuration-value": "2 MB"}
+     * GenerateHugePages, supported hpa features, All under the capability of
+     * tosca.nodes.nfv.Vdu.Compute. The format is a map like: {"schema-version": "0",
+     * "schema-location": "", "platform-id": "generic", "mandatory": true, "configuration-value": "2
+     * MB"}
      *
      * @param capabilityAssignment represents the capability of node
+     * 
      * @param flavorFeature represents all the features of specified flavor
      */
     private void generateHugePages(final CapabilityAssignment capabilityAssignment, FlavorFeature flavorFeature){
@@ -255,6 +253,7 @@ public class ExtractFromNode {
      * tosca.nodes.nfv.VduCp.
      *
      * @param lnodeVduCp the list of VduCp node
+     * 
      * @param content to be change based on lnodeVduCp
      * @throws PolicyDecodingException if extract CP fails
      */
index 03f0c04..030c470 100644 (file)
 
 package org.onap.policy.distribution.reception.decoding.pdpx;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.common.parameters.ParameterService;
 import org.onap.policy.distribution.model.Csar;
+import org.onap.policy.distribution.model.OptimizationPolicy;
 import org.onap.policy.distribution.model.PolicyInput;
 import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
 import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
@@ -38,25 +41,40 @@ import org.onap.sdc.toscaparser.api.NodeTemplate;
 /**
  * Decodes PDP-X policies from a CSAR file.
  */
-public class PolicyDecoderCsarPdpx implements PolicyDecoder<Csar, PdpxPolicy> {
+public class PolicyDecoderCsarPdpx implements PolicyDecoder<Csar, OptimizationPolicy> {
 
     private static final Logger LOGGER = FlexLogger.getLogger(PolicyDecoderCsarPdpx.class);
+    private final Gson gson = new GsonBuilder().serializeNulls().disableHtmlEscaping().create();
+    private PolicyDecoderCsarPdpxConfigurationParameterGroup decoderParameters;
 
     @Override
-    public Collection<PdpxPolicy> decode(final Csar csar) throws PolicyDecodingException {
-        final List<PdpxPolicy> lPdpxPolicy = new ArrayList<>();
+    public Collection<OptimizationPolicy> decode(final Csar csar) throws PolicyDecodingException {
+        final List<OptimizationPolicy> policys = new ArrayList<>();
         final ISdcCsarHelper sdcCsarHelper = parseCsar(csar);
         final List<NodeTemplate> lnodeVf = sdcCsarHelper.getServiceVfList();
         LOGGER.debug("the size of Vf = " + lnodeVf.size());
         final ExtractFromNode extractFromNode = new ExtractFromNode();
         extractFromNode.setSdcCsarHelper(sdcCsarHelper);
         for (final NodeTemplate node : lnodeVf) {
-            final PdpxPolicy ret = extractFromNode.extractInfo(node);
-            if (ret != null) {
-                lPdpxPolicy.add(ret);
+            final Content content = extractFromNode.extractInfo(node);
+            if (content != null) {
+                final OptimizationPolicy policy = new OptimizationPolicy();
+                policy.setOnapName(decoderParameters.getOnapName());
+                policy.setPolicyName(decoderParameters.getPolicyNamePrefix() + "." + content.getIdentity());
+                ConfigBody configBody = new ConfigBody();
+                configBody.setService("hpaPolicy");
+                configBody.setDescription("OOF Policy");
+                configBody.setVersion(decoderParameters.getVersion());
+                configBody.setPriority(decoderParameters.getPriority());
+                configBody.setRiskLevel(decoderParameters.getRiskLevel());
+                configBody.setRiskType(decoderParameters.getRiskType());
+                configBody.setGuard("false");
+                configBody.setContent(content);
+                policy.setConfigBody(gson.toJson(configBody));
+                policys.add(policy);
             }
         }
-        return lPdpxPolicy;
+        return policys;
     }
 
     @Override
@@ -88,6 +106,6 @@ public class PolicyDecoderCsarPdpx implements PolicyDecoder<Csar, PdpxPolicy> {
 
     @Override
     public void configure(final String parameterGroupName) {
-        throw new UnsupportedOperationException("The method is not supprted");
+        decoderParameters = ParameterService.get(parameterGroupName);
     }
 }
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterBuilder.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterBuilder.java
new file mode 100644 (file)
index 0000000..199d582
--- /dev/null
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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.distribution.reception.decoding.pdpx;
+
+/**
+ * This class builds an instance of {@link PolicyDecodeCsarPdpxConfigurationParameterGroup} class.
+ */
+public class PolicyDecoderCsarPdpxConfigurationParameterBuilder {
+
+    private String policyNamePrefix;
+    private String onapName;
+    private String version;
+    private String priority;
+    private String riskType;
+    private String riskLevel;
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setPolicyNamePrefix(final String policyNamePrefix) {
+        this.policyNamePrefix = policyNamePrefix;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setOnapName(final String onapName) {
+        this.onapName = onapName;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setVersion(final String version) {
+        this.version = version;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setPriority(final String priority) {
+        this.priority = priority;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setRiskType(final String riskType) {
+        this.riskType = riskType;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterBuilder setRiskLevel(final String riskLevel) {
+        this.riskLevel = riskLevel;
+        return this;
+    }
+
+    public PolicyDecoderCsarPdpxConfigurationParameterGroup build() {
+        return new PolicyDecoderCsarPdpxConfigurationParameterGroup(this);
+    }
+
+    public String getPolicyNamePrefix() {
+        return policyNamePrefix;
+    }
+
+    public String getOnapName() {
+        return onapName;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public String getPriority() {
+        return priority;
+    }
+
+    public String getRiskType() {
+        return riskType;
+    }
+
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+
+}
+
+
diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterGroup.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PolicyDecoderCsarPdpxConfigurationParameterGroup.java
new file mode 100644 (file)
index 0000000..d785b82
--- /dev/null
@@ -0,0 +1,112 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Intel. All rights reserved.
+ * ================================================================================
+ * 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.distribution.reception.decoding.pdpx;
+
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.common.parameters.ValidationStatus;
+import org.onap.policy.common.utils.validation.ParameterValidationUtils;
+import org.onap.policy.distribution.reception.handling.sdc.SdcReceptionHandlerConfigurationParameterGroup;
+import org.onap.policy.distribution.reception.parameters.PolicyDecoderConfigurationParameterGroup;
+
+/**
+ * This class handles reading, parsing and validating of the paramaters for the
+ * {@link PolicyDecoderCsarPdpx}
+ */
+public class PolicyDecoderCsarPdpxConfigurationParameterGroup extends PolicyDecoderConfigurationParameterGroup {
+
+    private String policyNamePrefix;
+    private String onapName;
+    private String version;
+    private String priority;
+    private String riskType;
+    private String riskLevel;
+
+    /**
+     * The constructor for instantiating {@link SdcReceptionHandlerConfigurationParameterGroup}
+     * class.
+     *
+     * @param builder the SDC configuration builder
+     */
+    public PolicyDecoderCsarPdpxConfigurationParameterGroup(
+            final PolicyDecoderCsarPdpxConfigurationParameterBuilder builder) {
+        policyNamePrefix = builder.getPolicyNamePrefix();
+        onapName = builder.getOnapName();
+        version = builder.getVersion();
+        priority = builder.getPriority();
+        riskType = builder.getRiskType();
+        riskLevel = builder.getRiskLevel();
+    }
+
+    public String getPolicyNamePrefix() {
+        return policyNamePrefix;
+    }
+
+    public String getOnapName() {
+        return onapName;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public String getPriority() {
+        return priority;
+    }
+
+    public String getRiskType() {
+        return riskType;
+    }
+
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public GroupValidationResult validate() {
+        final GroupValidationResult validationResult = new GroupValidationResult(this);
+        validateStringElement(validationResult, policyNamePrefix, "policyNamePrefix");
+        validateStringElement(validationResult, onapName, "onapName");
+        validateStringElement(validationResult, version, "version");
+        validateStringElement(validationResult, priority, "priority");
+        validateStringElement(validationResult, riskType, "riskType");
+        validateStringElement(validationResult, riskLevel, "riskLevel");
+        return validationResult;
+    }
+
+    /**
+     * Validate the string element.
+     *
+     * @param validationResult the result object
+     * @param element the element to validate
+     * @param elementName the element name for error message
+     */
+    private void validateStringElement(final GroupValidationResult validationResult, final String element,
+            final String elementName) {
+        if (!ParameterValidationUtils.validateStringParameter(element)) {
+            validationResult.setResult(elementName, ValidationStatus.INVALID,
+                    elementName + " must be a non-blank string");
+        }
+    }
+}
+
index bbee652..0140fb5 100644 (file)
 package org.onap.policy.distribution.reception.handling.sdc;
 
 import java.util.List;
-import java.util.UUID;
-
 import org.onap.policy.common.parameters.GroupValidationResult;
 import org.onap.policy.common.parameters.ValidationStatus;
 import org.onap.policy.common.utils.validation.ParameterValidationUtils;
 import org.onap.policy.distribution.reception.parameters.ReceptionHandlerConfigurationParameterGroup;
 
 /**
- * This class handles reading, parsing and validating of the Policy SDC Service Distribution parameters from Json
- * format, which strictly adheres to the interface:IConfiguration, defined by SDC SDK.
+ * This class handles reading, parsing and validating of the Policy SDC Service Distribution
+ * parameters from Json format, which strictly adheres to the interface:IConfiguration, defined by
+ * SDC SDK.
  */
 public class SdcReceptionHandlerConfigurationParameterGroup extends ReceptionHandlerConfigurationParameterGroup {
 
@@ -51,7 +50,8 @@ public class SdcReceptionHandlerConfigurationParameterGroup extends ReceptionHan
     private boolean isUseHttpsWithDmaap;
 
     /**
-     * The constructor for instantiating {@link SdcReceptionHandlerConfigurationParameterGroup} class.
+     * The constructor for instantiating {@link SdcReceptionHandlerConfigurationParameterGroup}
+     * class.
      *
      * @param builder the SDC configuration builder
      */
@@ -135,16 +135,6 @@ public class SdcReceptionHandlerConfigurationParameterGroup extends ReceptionHan
         return isUseHttpsWithDmaap;
     }
 
-    /**
-     * Set the name of this group.
-     *
-     * @param name the name to set.
-     */
-    @Override
-    public void setName(final String name) {
-        super.setName(name + "_" + UUID.randomUUID().toString());
-    }
-
     /**
      * {@inheritDoc}
      */
index f11a7ec..565f17d 100644 (file)
@@ -39,7 +39,7 @@ public class TestAttribute {
         attribute.setAttributeName(attributeName);
         attribute.setAttributeValue(attributeValue);
 
-        validateReport(attributeName,attributeValue,attribute);
+        validateReport(attributeName, attributeValue, attribute);
     }
 
     private void validateReport(final String name, final String value, final Attribute attribute) {
index a329a3e..56534d8 100644 (file)
@@ -41,11 +41,11 @@ public class TestContent {
         content.setIdentity(identity);
         content.setPolicyType(policyType);
 
-        validateReport(resources, identity, policyType,content);
+        validateReport(resources, identity, policyType, content);
     }
 
-    private void validateReport(final String resources, final String identity, final String policyType, 
-                                final Content content) {
+    private void validateReport(final String resources, final String identity, final String policyType,
+            final Content content) {
         assertEquals(resources, content.getResources());
         assertEquals(identity, content.getIdentity());
         assertEquals(policyType, content.getPolicyType());
index 48d11d3..cc8d946 100644 (file)
@@ -37,7 +37,7 @@ public class TestDirective {
         final Directive directive = new Directive();
         directive.setType(type);
 
-        validateReport(type,directive);
+        validateReport(type, directive);
     }
 
     private void validateReport(final String type, final Directive directive) {
index 47b4e34..e4de275 100644 (file)
@@ -39,7 +39,7 @@ public class TestFlavorFeature {
         flavorFeature.setId(id);
         flavorFeature.setType(type);
 
-        validateReport(id,type,flavorFeature);
+        validateReport(id, type, flavorFeature);
     }
 
     private void validateReport(final String id, final String type, final FlavorFeature flavorFeature) {
index b5a535d..da6c26f 100644 (file)
@@ -43,11 +43,11 @@ public class TestFlavorProperty {
         flavorProperty.setArchitecture(architecture);
         flavorProperty.setHpaVersion(hpaVersion);
 
-        validateReport(hpaFeature,mandatory,architecture,hpaVersion,flavorProperty);
+        validateReport(hpaFeature, mandatory, architecture, hpaVersion, flavorProperty);
     }
 
     private void validateReport(final String hpaFeature, final String mandatory, final String architecture,
-                                final String hpaVersion, final FlavorProperty flavorProperty) {
+            final String hpaVersion, final FlavorProperty flavorProperty) {
         assertEquals(hpaFeature, flavorProperty.getHpaFeature());
         assertEquals(mandatory, flavorProperty.getMandatory());
         assertEquals(architecture, flavorProperty.getArchitecture());
index 40c30eb..f2f514d 100644 (file)
@@ -43,11 +43,11 @@ public class TestHpaFeatureAttribute {
         hpaFeatureAttribute.setOperator(operator);
         hpaFeatureAttribute.setUnit(unit);
 
-        validateReport(hpaAttributeKey,hpaAttributeValue,operator,unit,hpaFeatureAttribute);
+        validateReport(hpaAttributeKey, hpaAttributeValue, operator, unit, hpaFeatureAttribute);
     }
 
     private void validateReport(final String hpaAttributeKey, final String hpaAttributeValue, final String operator,
-                                final String unit, final HpaFeatureAttribute hpaFeatureAttribute) {
+            final String unit, final HpaFeatureAttribute hpaFeatureAttribute) {
         assertEquals(hpaAttributeKey, hpaFeatureAttribute.getHpaAttributeKey());
         assertEquals(hpaAttributeValue, hpaFeatureAttribute.getHpaAttributeValue());
         assertEquals(operator, hpaFeatureAttribute.getOperator());
index 11bce32..0585b23 100644 (file)
 package org.onap.policy.distribution.reception.decoding.pdpx;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.util.Collection;
-
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
 import org.onap.policy.distribution.model.Csar;
+import org.onap.policy.distribution.model.OptimizationPolicy;
+import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
 
 /**
  * Class to perform unit test of {@link PolicyDecoderCsarPdpx}.
@@ -38,178 +39,164 @@ import org.onap.policy.distribution.model.Csar;
  */
 public class TestPolicyDecoderCsarPdpx {
 
+    private static final String CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION = "csarToOptimizationPolicyConfiguration";
+
+    /**
+     * Set up for test cases.
+     */
+    @BeforeClass
+    public static void setUp() {
+        ParameterGroup parameterGroup = new PolicyDecoderCsarPdpxConfigurationParameterBuilder().setOnapName("onapName")
+                .setPolicyNamePrefix("OOF").setPriority("5").setRiskLevel("2").setRiskType("Test").setVersion("1.0")
+                .build();
+        parameterGroup.setName(CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION);
+        ParameterService.register(parameterGroup);
+    }
+
     @Test
-    public void testHpaPolicy2Vnf() throws IOException {
+    public void testHpaPolicy2Vnf() throws IOException, PolicyDecodingException {
         Csar csar = new Csar("src/test/resources/service-TestNs8-csar.csar");
         PolicyDecoderCsarPdpx policyDecoderCsarPdpx = new PolicyDecoderCsarPdpx();
-        try {
-            Collection<PdpxPolicy> ret = policyDecoderCsarPdpx.decode(csar);
-            assertEquals(2, ret.size());
-            PdpxPolicy pdpxPolicy = (PdpxPolicy) ret.toArray()[0];
-            assertEquals("Optimization", pdpxPolicy.getContent().getPolicyType());
-            assertEquals(1, pdpxPolicy.getContent().getFlavorFeatures().size());
-
-            FlavorFeature flavorFeature = pdpxPolicy.getContent().getFlavorFeatures().get(0);
-            assertEquals("vdu_vnf_1", flavorFeature.getId());
-            assertEquals("tosca.node.nfv.Vdu.Compute", flavorFeature.getType());
-            assertEquals(1, flavorFeature.getDirectives().size());
-            Directive directive = flavorFeature.getDirectives().get(0);
-            assertEquals("flavor_directive", directive.getType());            
-            assertEquals(1, directive.getAttributes().size());
-            assertEquals("flavorName", directive.getAttributes().get(0).getAttributeName());
-            assertEquals("", directive.getAttributes().get(0).getAttributeValue());
-            assertEquals(2, flavorFeature.getFlavorProperties().size());
-            FlavorProperty flavorProperty = flavorFeature.getFlavorProperties().get(0);
-            assertEquals("BasicCapabilities", flavorProperty.getHpaFeature());
-            assertEquals("true", flavorProperty.getMandatory());
-            assertEquals("generic", flavorProperty.getArchitecture());
-            assertEquals("v1", flavorProperty.getHpaVersion());
-            assertEquals(0, flavorProperty.getDirectives().size());
-            assertEquals(1, flavorProperty.getHpaFeatureAttributes().size());
-            HpaFeatureAttribute hpaFeatreAttribute = flavorProperty.getHpaFeatureAttributes().get(0);
-            assertEquals("virtualMemSize",hpaFeatreAttribute.getHpaAttributeKey());
-            assertEquals("4096",hpaFeatreAttribute.getHpaAttributeValue());
-            assertEquals("",hpaFeatreAttribute.getOperator());
-            assertEquals("MB",hpaFeatreAttribute.getUnit());
-            
-        } catch (Exception e) {
-            fail("test should not thrown an exception here: " + e.getMessage());
-        }
+        policyDecoderCsarPdpx.configure(CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION);
+
+        Collection<OptimizationPolicy> ret = policyDecoderCsarPdpx.decode(csar);
+
+        assertEquals(2, ret.size());
+        OptimizationPolicy policy = (OptimizationPolicy) ret.toArray()[0];
+
+        assertEquals("onapName", policy.getOnapName());
+        assertTrue(policy.getPolicyName().startsWith("OOF."));
+        assertTrue(policy.getConfigBody().contains("\"priority\":\"5\""));
+        assertTrue(policy.getConfigBody().contains("\"riskLevel\":\"2\""));
+        assertTrue(policy.getConfigBody().contains("\"riskType\":\"Test\""));
+        assertTrue(policy.getConfigBody().contains("\"version\":\"1.0\""));
+        assertTrue(policy.getConfigBody().contains("\"policyType\":\"Optimization\""));
+
+        assertTrue(policy.getConfigBody().contains("\"id\":\"vdu_vnf_1\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"tosca.node.nfv.Vdu.Compute\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"flavor_directive\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-feature\":\"BasicCapabilities\""));
+        assertTrue(policy.getConfigBody().contains("\"mandatory\":\"true\""));
+        assertTrue(policy.getConfigBody().contains("\"architecture\":\"generic\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-version\":\"v1\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"virtualMemSize\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"MB\""));
     }
 
     @Test
-    public void testHpaPolicySriov() throws IOException {
+    public void testHpaPolicySriov() throws IOException, PolicyDecodingException {
         Csar csar = new Csar("src/test/resources/hpaPolicySriov.csar");
         PolicyDecoderCsarPdpx policyDecoderCsarPdpx = new PolicyDecoderCsarPdpx();
-        try {
-            Collection<PdpxPolicy> ret = policyDecoderCsarPdpx.decode(csar);
-            assertEquals(2, ret.size());
-            PdpxPolicy pdpxPolicy = (PdpxPolicy) ret.toArray()[0];
-            assertEquals("Optimization", pdpxPolicy.getContent().getPolicyType());
-            assertEquals(1, pdpxPolicy.getContent().getFlavorFeatures().size());
-
-            FlavorFeature flavorFeature = pdpxPolicy.getContent().getFlavorFeatures().get(0);
-            assertEquals("vdu_vnf_1", flavorFeature.getId());
-            assertEquals("tosca.node.nfv.Vdu.Compute", flavorFeature.getType());
-            assertEquals(1, flavorFeature.getDirectives().size());
-            Directive directive = flavorFeature.getDirectives().get(0);
-            assertEquals("flavor_directive", directive.getType());            
-            assertEquals(1, directive.getAttributes().size());
-            assertEquals("flavorName", directive.getAttributes().get(0).getAttributeName());
-            assertEquals("", directive.getAttributes().get(0).getAttributeValue());
-            assertEquals(4, flavorFeature.getFlavorProperties().size());
-            FlavorProperty flavorProperty = flavorFeature.getFlavorProperties().get(3);
-            assertEquals("SriovNICNetwork", flavorProperty.getHpaFeature());
-            assertEquals("true", flavorProperty.getMandatory());
-            assertEquals("generic", flavorProperty.getArchitecture());
-            assertEquals("v1", flavorProperty.getHpaVersion());
-            assertEquals(0, flavorProperty.getDirectives().size());
-            assertEquals(3, flavorProperty.getHpaFeatureAttributes().size());
-
-            HpaFeatureAttribute pciVendorId = flavorProperty.getHpaFeatureAttributes().get(0);
-            assertEquals("pciVendorId",pciVendorId.getHpaAttributeKey());
-            assertEquals("1234",pciVendorId.getHpaAttributeValue());
-            assertEquals("",pciVendorId.getOperator());
-            assertEquals("",pciVendorId.getUnit());
-            HpaFeatureAttribute pciDeviceId = flavorProperty.getHpaFeatureAttributes().get(1);
-            assertEquals("pciDeviceId",pciDeviceId.getHpaAttributeKey());
-            assertEquals("5678",pciDeviceId.getHpaAttributeValue());
-            assertEquals("",pciDeviceId.getOperator());
-            assertEquals("",pciDeviceId.getUnit());
-            HpaFeatureAttribute pciNumDevices = flavorProperty.getHpaFeatureAttributes().get(2);
-            assertEquals("pciNumDevices",pciNumDevices.getHpaAttributeKey());
-            assertEquals("1",pciNumDevices.getHpaAttributeValue());
-            assertEquals("",pciNumDevices.getOperator());
-            assertEquals("",pciNumDevices.getUnit());
-        } catch (Exception e) {
-            fail("test should not thrown an exception here: " + e.getMessage());
-        }
+        policyDecoderCsarPdpx.configure(CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION);
+
+        Collection<OptimizationPolicy> policies = policyDecoderCsarPdpx.decode(csar);
+        OptimizationPolicy policy = (OptimizationPolicy) policies.toArray()[0];
+
+        assertEquals("onapName", policy.getOnapName());
+        assertTrue(policy.getPolicyName().startsWith("OOF."));
+        assertTrue(policy.getConfigBody().contains("\"priority\":\"5\""));
+        assertTrue(policy.getConfigBody().contains("\"riskLevel\":\"2\""));
+        assertTrue(policy.getConfigBody().contains("\"riskType\":\"Test\""));
+        assertTrue(policy.getConfigBody().contains("\"version\":\"1.0\""));
+        assertTrue(policy.getConfigBody().contains("\"policyType\":\"Optimization\""));
+
+        assertTrue(policy.getConfigBody().contains("\"id\":\"vdu_vnf_1\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"tosca.node.nfv.Vdu.Compute\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"flavor_directive\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_name\":\"flavorName\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_value\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-feature\":\"SriovNICNetwork\""));
+        assertTrue(policy.getConfigBody().contains("\"mandatory\":\"true\""));
+        assertTrue(policy.getConfigBody().contains("\"architecture\":\"generic\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-version\":\"v1\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciVendorId\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"1234\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciDeviceId\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"5678\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciNumDevices\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"1\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
     }
 
     @Test
-    public void testHpaPolicyPciePassthrough() throws IOException {
+    public void testHpaPolicyPciePassthrough() throws IOException, PolicyDecodingException {
         Csar csar = new Csar("src/test/resources/hpaPolicyPciePassthrough.csar");
         PolicyDecoderCsarPdpx policyDecoderCsarPdpx = new PolicyDecoderCsarPdpx();
-        try {
-            Collection<PdpxPolicy> ret = policyDecoderCsarPdpx.decode(csar);
-            assertEquals(2, ret.size());
-            PdpxPolicy pdpxPolicy = (PdpxPolicy) ret.toArray()[0];
-            assertEquals("Optimization", pdpxPolicy.getContent().getPolicyType());
-            assertEquals(1, pdpxPolicy.getContent().getFlavorFeatures().size());
-
-            FlavorFeature flavorFeature = pdpxPolicy.getContent().getFlavorFeatures().get(0);
-            assertEquals("vdu_vnf_1", flavorFeature.getId());
-            assertEquals("tosca.node.nfv.Vdu.Compute", flavorFeature.getType());
-            assertEquals(1, flavorFeature.getDirectives().size());
-            Directive directive = flavorFeature.getDirectives().get(0);
-            assertEquals("flavor_directive", directive.getType());            
-            assertEquals(1, directive.getAttributes().size());
-            assertEquals("flavorName", directive.getAttributes().get(0).getAttributeName());
-            assertEquals("", directive.getAttributes().get(0).getAttributeValue());
-            assertEquals(4, flavorFeature.getFlavorProperties().size());
-            FlavorProperty flavorProperty = flavorFeature.getFlavorProperties().get(3);
-            assertEquals("pciePassthrough", flavorProperty.getHpaFeature());
-            assertEquals("true", flavorProperty.getMandatory());
-            assertEquals("generic", flavorProperty.getArchitecture());
-            assertEquals("v1", flavorProperty.getHpaVersion());
-            assertEquals(0, flavorProperty.getDirectives().size());
-            assertEquals(3, flavorProperty.getHpaFeatureAttributes().size());
-
-            HpaFeatureAttribute pciVendorId = flavorProperty.getHpaFeatureAttributes().get(0);
-            assertEquals("pciVendorId",pciVendorId.getHpaAttributeKey());
-            assertEquals("1234",pciVendorId.getHpaAttributeValue());
-            assertEquals("",pciVendorId.getOperator());
-            assertEquals("",pciVendorId.getUnit());
-            HpaFeatureAttribute pciDeviceId = flavorProperty.getHpaFeatureAttributes().get(1);
-            assertEquals("pciDeviceId",pciDeviceId.getHpaAttributeKey());
-            assertEquals("5678",pciDeviceId.getHpaAttributeValue());
-            assertEquals("",pciDeviceId.getOperator());
-            assertEquals("",pciDeviceId.getUnit());
-            HpaFeatureAttribute pciNumDevices = flavorProperty.getHpaFeatureAttributes().get(2);
-            assertEquals("pciNumDevices",pciNumDevices.getHpaAttributeKey());
-            assertEquals("1",pciNumDevices.getHpaAttributeValue());
-            assertEquals("",pciNumDevices.getOperator());
-            assertEquals("",pciNumDevices.getUnit());
-        } catch (Exception e) {
-            fail("test should not thrown an exception here: " + e.getMessage());
-        }
+        policyDecoderCsarPdpx.configure(CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION);
+
+        Collection<OptimizationPolicy> policies = policyDecoderCsarPdpx.decode(csar);
+        assertEquals(2, policies.size());
+        OptimizationPolicy policy = (OptimizationPolicy) policies.toArray()[0];
+
+        assertEquals("onapName", policy.getOnapName());
+        assertTrue(policy.getPolicyName().startsWith("OOF."));
+        assertTrue(policy.getConfigBody().contains("\"priority\":\"5\""));
+        assertTrue(policy.getConfigBody().contains("\"riskLevel\":\"2\""));
+        assertTrue(policy.getConfigBody().contains("\"riskType\":\"Test\""));
+        assertTrue(policy.getConfigBody().contains("\"version\":\"1.0\""));
+        assertTrue(policy.getConfigBody().contains("\"policyType\":\"Optimization\""));
+
+        assertTrue(policy.getConfigBody().contains("\"id\":\"vdu_vnf_1\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"tosca.node.nfv.Vdu.Compute\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"flavor_directive\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_name\":\"flavorName\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_value\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-feature\":\"pciePassthrough\""));
+        assertTrue(policy.getConfigBody().contains("\"mandatory\":\"true\""));
+        assertTrue(policy.getConfigBody().contains("\"architecture\":\"generic\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-version\":\"v1\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciVendorId\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"1234\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciDeviceId\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"5678\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"pciNumDevices\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"1\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"\""));
+
+
     }
 
     @Test
-    public void testHpaPolicyHugePage() throws IOException {
+    public void testHpaPolicyHugePage() throws IOException, PolicyDecodingException {
         Csar csar = new Csar("src/test/resources/hpaPolicyHugePage.csar");
         PolicyDecoderCsarPdpx policyDecoderCsarPdpx = new PolicyDecoderCsarPdpx();
-        try {
-            Collection<PdpxPolicy> ret = policyDecoderCsarPdpx.decode(csar);
-            assertEquals(2, ret.size());
-            PdpxPolicy pdpxPolicy = (PdpxPolicy) ret.toArray()[0];
-            assertEquals("Optimization", pdpxPolicy.getContent().getPolicyType());
-            assertEquals(1, pdpxPolicy.getContent().getFlavorFeatures().size());
-
-            FlavorFeature flavorFeature = pdpxPolicy.getContent().getFlavorFeatures().get(0);
-            assertEquals("vdu_vnf_1", flavorFeature.getId());
-            assertEquals("tosca.node.nfv.Vdu.Compute", flavorFeature.getType());
-            assertEquals(1, flavorFeature.getDirectives().size());
-            Directive directive = flavorFeature.getDirectives().get(0);
-            assertEquals("flavor_directive", directive.getType());            
-            assertEquals(1, directive.getAttributes().size());
-            assertEquals("flavorName", directive.getAttributes().get(0).getAttributeName());
-            assertEquals("", directive.getAttributes().get(0).getAttributeValue());
-            assertEquals(3, flavorFeature.getFlavorProperties().size());
-            FlavorProperty flavorProperty = flavorFeature.getFlavorProperties().get(2);
-            assertEquals("hugePages", flavorProperty.getHpaFeature());
-            assertEquals("false", flavorProperty.getMandatory());
-            assertEquals("generic", flavorProperty.getArchitecture());
-            assertEquals("v1", flavorProperty.getHpaVersion());
-            assertEquals(0, flavorProperty.getDirectives().size());
-            assertEquals(1, flavorProperty.getHpaFeatureAttributes().size());
-            HpaFeatureAttribute hpaFeatreAttribute = flavorProperty.getHpaFeatureAttributes().get(0);
-            assertEquals("memoryPageSize",hpaFeatreAttribute.getHpaAttributeKey());
-            assertEquals("2",hpaFeatreAttribute.getHpaAttributeValue());
-            assertEquals("",hpaFeatreAttribute.getOperator());
-            assertEquals("MB",hpaFeatreAttribute.getUnit());
-        } catch (Exception e) {
-            fail("test should not thrown an exception here: " + e.getMessage());
-        }
+        policyDecoderCsarPdpx.configure(CSAR_TO_OPTIMIZATION_POLICY_CONFIGURATION);
+
+        Collection<OptimizationPolicy> policies = policyDecoderCsarPdpx.decode(csar);
+        assertEquals(2, policies.size());
+        OptimizationPolicy policy = (OptimizationPolicy) policies.toArray()[0];
+
+        assertEquals("onapName", policy.getOnapName());
+        assertTrue(policy.getPolicyName().startsWith("OOF."));
+        assertTrue(policy.getConfigBody().contains("\"priority\":\"5\""));
+        assertTrue(policy.getConfigBody().contains("\"riskLevel\":\"2\""));
+        assertTrue(policy.getConfigBody().contains("\"riskType\":\"Test\""));
+        assertTrue(policy.getConfigBody().contains("\"version\":\"1.0\""));
+        assertTrue(policy.getConfigBody().contains("\"policyType\":\"Optimization\""));
+
+        assertTrue(policy.getConfigBody().contains("\"id\":\"vdu_vnf_1\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"tosca.node.nfv.Vdu.Compute\""));
+        assertTrue(policy.getConfigBody().contains("\"type\":\"flavor_directive\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_name\":\"flavorName\""));
+        assertTrue(policy.getConfigBody().contains("\"attribute_value\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-feature\":\"hugePages\""));
+        assertTrue(policy.getConfigBody().contains("\"mandatory\":\"false\""));
+        assertTrue(policy.getConfigBody().contains("\"architecture\":\"generic\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-version\":\"v1\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-key\":\"memoryPageSize\""));
+        assertTrue(policy.getConfigBody().contains("\"hpa-attribute-value\":\"2\""));
+        assertTrue(policy.getConfigBody().contains("\"operator\":\"\""));
+        assertTrue(policy.getConfigBody().contains("\"unit\":\"MB\""));
     }
 }