Create code infrastructure for policy forwarding 61/63861/2
authormmis <michael.morris@ericsson.com>
Mon, 27 Aug 2018 22:29:24 +0000 (23:29 +0100)
committermmis <michael.morris@ericsson.com>
Thu, 30 Aug 2018 15:52:30 +0000 (16:52 +0100)
Added sending of polices from the policy forwarder to the xacml PDP and
added handling of parameters for configuring the policy forwarders

Issue-ID: POLICY-926
Change-Id: I26effe70769f7edc765470a1a9ad40ed9faad82d
Signed-off-by: mmis <michael.morris@ericsson.com>
43 files changed:
forwarding/src/main/java/org/onap/policy/distribution/forwarding/PolicyForwarder.java
forwarding/src/main/java/org/onap/policy/distribution/forwarding/parameters/PolicyForwarderParameters.java
main/src/main/java/org/onap/policy/distribution/main/parameters/DistributionParameterGroup.java
main/src/main/java/org/onap/policy/distribution/main/parameters/DistributionParameterHandler.java
main/src/main/java/org/onap/policy/distribution/main/parameters/PolicyForwarderConfigurationParameterGroup.java [moved from plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/pap/engine/XacmlPapServletPolicyForwarder.java with 67% similarity]
main/src/main/java/org/onap/policy/distribution/main/parameters/PolicyForwarderConfigurationParametersJsonAdapter.java [new file with mode: 0644]
main/src/main/java/org/onap/policy/distribution/main/startstop/DistributionActivator.java
main/src/test/java/org/onap/policy/distribution/main/parameters/CommonTestData.java
main/src/test/java/org/onap/policy/distribution/main/parameters/TestDistributionParameterGroup.java
main/src/test/java/org/onap/policy/distribution/main/parameters/TestDistributionParameterHandler.java
main/src/test/java/org/onap/policy/distribution/main/parameters/TestPluginHandlerParameters.java
main/src/test/java/org/onap/policy/distribution/main/parameters/TestPolicyForwarderParameters.java
main/src/test/java/org/onap/policy/distribution/main/startstop/TestDistributionActivator.java
main/src/test/java/org/onap/policy/distribution/main/testclasses/DummyPolicyForwarder.java
main/src/test/java/org/onap/policy/distribution/main/testclasses/DummyPolicyForwarderParameterGroup.java [new file with mode: 0644]
main/src/test/resources/parameters/DistributionConfigParameters.json
main/src/test/resources/parameters/DistributionConfigParameters_EmptyPolicyDecoder.json
main/src/test/resources/parameters/DistributionConfigParameters_EmptyPolicyForwarder.json
main/src/test/resources/parameters/DistributionConfigParameters_EmptyReceptionHandler.json
main/src/test/resources/parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json
main/src/test/resources/parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json [new file with mode: 0644]
main/src/test/resources/parameters/DistributionConfigParameters_InvalidName.json
main/src/test/resources/parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json
main/src/test/resources/parameters/DistributionConfigParameters_InvalidRestServerParameters.json
main/src/test/resources/parameters/DistributionConfigParameters_NoPolicyDecoder.json
main/src/test/resources/parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json [new file with mode: 0644]
main/src/test/resources/parameters/MinimumParameters.json
model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java [new file with mode: 0644]
model/src/main/java/org/onap/policy/distribution/model/Policy.java
plugins/forwarding-plugins/pom.xml
plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyAdapter.java [new file with mode: 0644]
plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarder.java [new file with mode: 0644]
plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarderParameterGroup.java [new file with mode: 0644]
plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/AbstractXacmlPdpPolicyAdapter.java [new file with mode: 0644]
plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/XacmlPdpOptimizationPolicyAdapter.java [new file with mode: 0644]
plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderParameterGroupTest.java [new file with mode: 0644]
plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderTest.java [new file with mode: 0644]
plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyDecoder.java [new file with mode: 0644]
plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyReceptionHandler.java [new file with mode: 0644]
plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/pdpx/PdpxPolicy.java
reception/src/main/java/org/onap/policy/distribution/reception/handling/PluginHandler.java
reception/src/test/java/org/onap/policy/distribution/reception/handling/AbstractReceptionHandlerTest.java
reception/src/test/java/org/onap/policy/distribution/reception/handling/DummyPolicyForwarder.java

index 5272fc9..5bd5380 100644 (file)
@@ -25,9 +25,24 @@ import org.onap.policy.distribution.model.Policy;
 
 /**
  * Forwards polices.
+ * <p>
+ * To create a policy forwarder a class implementing this interface must be created, along with a
+ * concrete sub class of PolicyForwarderConfigurationParameterGroup to handle configuration
+ * parameters for the policy forwarder.
  */
 public interface PolicyForwarder {
 
+    /**
+     * Configure the policy forwarder.
+     * <p>
+     * This method will be invoked immediately after instantiation in order for the policy forwarder
+     * to configure itself.
+     * 
+     * @param parameterGroupName the name of the parameter group which contains the configuration
+     *        for the policy forwarder
+     */
+    void configure(String parameterGroupName);
+
     /**
      * Forward the given policies.
      * 
index 28a1b1b..2426ccc 100644 (file)
@@ -37,16 +37,20 @@ public class PolicyForwarderParameters implements ParameterGroup {
 
     private String forwarderType;
     private String forwarderClassName;
+    private String forwarderConfigurationName;
 
     /**
      * Constructor for instantiating PolicyForwarderParameters.
      *
      * @param forwarderType the policy forwarder type
      * @param forwarderClassName the policy forwarder class name
+     * @param forwarderConfigurationName the name of the configuration for the policy forwarder
      */
-    public PolicyForwarderParameters(final String forwarderType, final String forwarderClassName) {
+    public PolicyForwarderParameters(final String forwarderType, final String forwarderClassName,
+            final String forwarderConfigurationName) {
         this.forwarderType = forwarderType;
         this.forwarderClassName = forwarderClassName;
+        this.forwarderConfigurationName = forwarderConfigurationName;
     }
 
     /**
@@ -67,6 +71,15 @@ public class PolicyForwarderParameters implements ParameterGroup {
         return forwarderClassName;
     }
 
+    /**
+     * Return the name of the forwarder configuration of this PolicyForwarderParameters instance.
+     *
+     * @return the the name of the forwarder configuration
+     */
+    public String getForwarderConfigurationName() {
+        return forwarderConfigurationName;
+    }
+
     /**
      * {@inheritDoc}
      */
index a188fb0..2729125 100644 (file)
@@ -20,9 +20,9 @@
 
 package org.onap.policy.distribution.main.parameters;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import org.onap.policy.common.parameters.GroupValidationResult;
 import org.onap.policy.common.parameters.ParameterGroup;
 import org.onap.policy.common.parameters.ValidationStatus;
@@ -38,6 +38,9 @@ public class DistributionParameterGroup implements ParameterGroup {
     private String name;
     private RestServerParameters restServerParameters;
     private Map<String, ReceptionHandlerParameters> receptionHandlerParameters;
+    private Map<String, PolicyForwarderConfigurationParameterGroup> policyForwarderConfigurationParameters =
+            new LinkedHashMap<>();
+
 
     /**
      * Create the distribution parameter group.
@@ -45,10 +48,12 @@ public class DistributionParameterGroup implements ParameterGroup {
      * @param name the parameter group name
      */
     public DistributionParameterGroup(final String name, final RestServerParameters restServerParameters,
-            final Map<String, ReceptionHandlerParameters> receptionHandlerParameters) {
+            final Map<String, ReceptionHandlerParameters> receptionHandlerParameters,
+            final Map<String, PolicyForwarderConfigurationParameterGroup> policyForwarderConfigurationParameters) {
         this.name = name;
         this.restServerParameters = restServerParameters;
         this.receptionHandlerParameters = receptionHandlerParameters;
+        this.policyForwarderConfigurationParameters = policyForwarderConfigurationParameters;
     }
 
     /**
@@ -89,6 +94,26 @@ public class DistributionParameterGroup implements ParameterGroup {
         return restServerParameters;
     }
 
+
+    /**
+     * Gets the policy forwarder configuration parameter map.
+     *
+     * @return the policy forwarder configuration parameter map
+     */
+    public Map<String, PolicyForwarderConfigurationParameterGroup> getPolicyForwarderConfigurationParameters() {
+        return policyForwarderConfigurationParameters;
+    }
+
+    /**
+     * Sets the policy forwarder configuration parameter map.
+     *
+     * @param eventInputParameters the policy forwarder configuration parameters
+     */
+    public void setPolicyForwarderConfigurationParameters(
+            final Map<String, PolicyForwarderConfigurationParameterGroup> policyForwarderConfigurationParameters) {
+        this.policyForwarderConfigurationParameters = policyForwarderConfigurationParameters;
+    }
+
     /**
      * Validate the parameter group.
      *
@@ -107,6 +132,7 @@ public class DistributionParameterGroup implements ParameterGroup {
             validationResult.setResult("restServerParameters", restServerParameters.validate());
         }
         validateReceptionHandlers(validationResult);
+        validateForwarderConfigurations(validationResult);
         return validationResult;
     }
 
@@ -126,4 +152,12 @@ public class DistributionParameterGroup implements ParameterGroup {
             }
         }
     }
+
+    private void validateForwarderConfigurations(final GroupValidationResult validationResult) {
+        for (final Entry<String, PolicyForwarderConfigurationParameterGroup> configurationParameters : policyForwarderConfigurationParameters
+                .entrySet()) {
+            validationResult.setResult("policyForwarderConfigurationParameters", configurationParameters.getKey(),
+                    configurationParameters.getValue().validate());
+        }
+    }
 }
index 3174b8c..5cc507e 100644 (file)
@@ -22,9 +22,7 @@ package org.onap.policy.distribution.main.parameters;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
-
 import java.io.FileReader;
-
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.common.parameters.GroupValidationResult;
@@ -32,7 +30,8 @@ import org.onap.policy.distribution.main.PolicyDistributionException;
 import org.onap.policy.distribution.main.startstop.DistributionCommandLineArguments;
 
 /**
- * This class handles reading, parsing and validating of policy distribution parameters from JSON files.
+ * This class handles reading, parsing and validating of policy distribution parameters from JSON
+ * files.
  */
 public class DistributionParameterHandler {
     private static final Logger LOGGER = FlexLogger.getLogger(DistributionParameterHandler.class);
@@ -51,7 +50,8 @@ public class DistributionParameterHandler {
         // Read the parameters
         try {
             // Read the parameters from JSON using Gson
-            final Gson gson = new GsonBuilder().create();
+            final Gson gson = new GsonBuilder().registerTypeAdapter(PolicyForwarderConfigurationParameterGroup.class,
+                    new PolicyForwarderConfigurationParametersJsonAdapter()).create();
             distributionParameterGroup = gson.fromJson(new FileReader(arguments.getFullConfigurationFilePath()),
                     DistributionParameterGroup.class);
         } catch (final Exception e) {
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policy.distribution.forwarding.pap.engine;
-
-import java.util.Collection;
+package org.onap.policy.distribution.main.parameters;
 
+import org.onap.policy.common.parameters.ParameterGroup;
 import org.onap.policy.distribution.forwarding.PolicyForwarder;
-import org.onap.policy.distribution.model.Policy;
 
 /**
- * Forwards policies to the XACML PAP Servlet.
+ * Base class of all {@link ParameterGroup} classes for configuration parameters for
+ * {@link PolicyForwarder} classes
  */
-public class XacmlPapServletPolicyForwarder implements PolicyForwarder {
+public abstract class PolicyForwarderConfigurationParameterGroup implements ParameterGroup {
+
+    private String name;
 
     @Override
-    public void forward(final Collection<Policy> policies) {
-        // Send policies to PAP using common/policy-endpoints
+    public String getName() {
+        return name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
     }
 
 }
diff --git a/main/src/main/java/org/onap/policy/distribution/main/parameters/PolicyForwarderConfigurationParametersJsonAdapter.java b/main/src/main/java/org/onap/policy/distribution/main/parameters/PolicyForwarderConfigurationParametersJsonAdapter.java
new file mode 100644 (file)
index 0000000..5ce15a2
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-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.main.parameters;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import java.lang.reflect.Type;
+import org.slf4j.ext.XLogger;
+import org.slf4j.ext.XLoggerFactory;
+
+/**
+ * This class deserialises policy forwarder parameters from JSON.
+ */
+public class PolicyForwarderConfigurationParametersJsonAdapter
+        implements JsonDeserializer<PolicyForwarderConfigurationParameterGroup> {
+    private static final XLogger LOGGER =
+            XLoggerFactory.getXLogger(PolicyForwarderConfigurationParametersJsonAdapter.class);
+
+    private static final String PARAMETER_CLASS_NAME = "parameterClassName";
+    private static final String POLICY_FORWARDER_PARAMETERS = "parameters";
+
+    @Override
+    public PolicyForwarderConfigurationParameterGroup deserialize(final JsonElement json, final Type typeOfT,
+            final JsonDeserializationContext context) {
+        final JsonObject jsonObject = json.getAsJsonObject();
+
+        final String policyForwarderParameterClassName = getParameterGroupClassName(jsonObject);
+        Class<?> policyForwarderParameterClass = getParameterGroupClass(policyForwarderParameterClassName);
+
+        return context.deserialize(jsonObject.get(POLICY_FORWARDER_PARAMETERS), policyForwarderParameterClass);
+    }
+
+    private String getParameterGroupClassName(final JsonObject jsonObject) {
+        final JsonPrimitive classNameJsonPrimitive = ((JsonPrimitive) jsonObject.get(PARAMETER_CLASS_NAME));
+
+        if (classNameJsonPrimitive == null || classNameJsonPrimitive.getAsString().length() == 0) {
+            final String errorMessage = "parameter \"" + PARAMETER_CLASS_NAME + "\" value \""
+                    + (classNameJsonPrimitive != null ? classNameJsonPrimitive.getAsString() : "null")
+                    + "\" invalid in JSON file";
+            LOGGER.warn(errorMessage);
+            throw new IllegalArgumentException(errorMessage);
+        }
+        return classNameJsonPrimitive.getAsString().replaceAll("\\s+", "");
+    }
+
+    private Class<?> getParameterGroupClass(final String policyForwarderParameterClassName) {
+        Class<?> policyForwarderParameterClass = null;
+        try {
+            policyForwarderParameterClass = Class.forName(policyForwarderParameterClassName);
+        } catch (final ClassNotFoundException e) {
+            final String errorMessage = "parameter \"" + PARAMETER_CLASS_NAME + "\" value \""
+                    + policyForwarderParameterClassName + "\", could not find class";
+            LOGGER.warn(errorMessage, e);
+            throw new IllegalArgumentException(errorMessage, e);
+        }
+        return policyForwarderParameterClass;
+    }
+
+}
index 70724a1..792c472 100644 (file)
@@ -22,20 +22,21 @@ package org.onap.policy.distribution.main.startstop;
 
 import java.util.HashMap;
 import java.util.Map;
-
+import java.util.Map.Entry;
 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.main.PolicyDistributionException;
 import org.onap.policy.distribution.main.parameters.DistributionParameterGroup;
+import org.onap.policy.distribution.main.parameters.PolicyForwarderConfigurationParameterGroup;
 import org.onap.policy.distribution.main.rest.DistributionRestServer;
 import org.onap.policy.distribution.reception.decoding.PluginInitializationException;
 import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
 import org.onap.policy.distribution.reception.parameters.ReceptionHandlerParameters;
 
 /**
- * This class wraps a distributor so that it can be activated as a complete service together with all its distribution
- * and forwarding handlers.
+ * This class wraps a distributor so that it can be activated as a complete service together with
+ * all its distribution and forwarding handlers.
  */
 public class DistributionActivator {
     // The logger for this class
@@ -148,6 +149,11 @@ public class DistributionActivator {
             ParameterService.register(params.getPssdConfigurationParametersGroup());
             ParameterService.register(params.getPluginHandlerParameters());
         }
+        for (final Entry<String, PolicyForwarderConfigurationParameterGroup> forwarderConfiguration : distributionParameterGroup
+                .getPolicyForwarderConfigurationParameters().entrySet()) {
+            forwarderConfiguration.getValue().setName(forwarderConfiguration.getKey());
+            ParameterService.register(forwarderConfiguration.getValue());
+        }
     }
 
     /**
@@ -163,6 +169,11 @@ public class DistributionActivator {
             ParameterService.deregister((params.getPssdConfigurationParametersGroup().getName()));
             ParameterService.deregister((params.getPluginHandlerParameters().getName()));
         }
+        for (final Entry<String, PolicyForwarderConfigurationParameterGroup> forwarderConfiguration : distributionParameterGroup
+                .getPolicyForwarderConfigurationParameters().entrySet()) {
+            forwarderConfiguration.getValue().setName(forwarderConfiguration.getKey());
+            ParameterService.deregister(forwarderConfiguration.getKey());
+        }
     }
 
     /**
index ac58b83..186aa82 100644 (file)
@@ -24,8 +24,9 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.onap.policy.distribution.forwarding.parameters.PolicyForwarderParameters;
+import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
+import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup.DummyPolicyForwarderParameterGroupBuilder;
 import org.onap.policy.distribution.reception.parameters.PluginHandlerParameters;
 import org.onap.policy.distribution.reception.parameters.PolicyDecoderParameters;
 import org.onap.policy.distribution.reception.parameters.PssdConfigurationParametersGroup;
@@ -48,6 +49,8 @@ public class CommonTestData {
     public static final String FORWARDER_TYPE = "DummyForwarder";
     public static final String FORWARDER_CLASS_NAME =
             "org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder";
+    public static final String FORWARDER_CONFIGURATION_PARAMETERS = "dummyConfiguration";
+    public static final String FORWARDER_HOST = "192.168.99.100";
     public static final String RECEPTION_HANDLER_TYPE = "DummyReceptionHandler";
     public static final String RECEPTION_HANDLER_CLASS_NAME =
             "org.onap.policy.distribution.main.testclasses.DummyReceptionHandler";
@@ -142,8 +145,8 @@ public class CommonTestData {
         final Map<String, PolicyForwarderParameters> policyForwarders =
                 new HashMap<String, PolicyForwarderParameters>();
         if (!isEmpty) {
-            final PolicyForwarderParameters pFParameters =
-                    new PolicyForwarderParameters(FORWARDER_TYPE, FORWARDER_CLASS_NAME);
+            final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters(FORWARDER_TYPE,
+                    FORWARDER_CLASS_NAME, FORWARDER_CONFIGURATION_PARAMETERS);
             policyForwarders.put(DUMMY_ENGINE_FORWARDER_KEY, pFParameters);
         }
         return policyForwarders;
@@ -163,4 +166,24 @@ public class CommonTestData {
         }
         return policyDecoders;
     }
+
+    /**
+     * Returns PolicyForwarderConfigurationParameterGroups for test cases.
+     *
+     * @param isEmpty boolean value to represent that object created should be empty or not
+     * @return the PolicyForwarderConfigurationParameterGroups
+     */
+    public Map<String, PolicyForwarderConfigurationParameterGroup> getPolicyForwarderConfigurationParameters(
+            final boolean isEmpty) {
+        final Map<String, PolicyForwarderConfigurationParameterGroup> policyForwarderConfigurationParameters =
+                new HashMap<String, PolicyForwarderConfigurationParameterGroup>();
+        if (!isEmpty) {
+            DummyPolicyForwarderParameterGroup dummyPolicyForwarderParameterGroup =
+                    new DummyPolicyForwarderParameterGroupBuilder().setUseHttps(true).setHostname(FORWARDER_HOST)
+                            .setPort(1234).setUserName("myUser").setPassword("myPassword").setIsManaged(true).build();
+            policyForwarderConfigurationParameters.put(FORWARDER_CONFIGURATION_PARAMETERS,
+                    dummyPolicyForwarderParameterGroup);
+        }
+        return policyForwarderConfigurationParameters;
+    }
 }
index a2d7258..0c8c80d 100644 (file)
@@ -26,9 +26,9 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.Map;
-
 import org.junit.Test;
 import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
 import org.onap.policy.distribution.reception.parameters.ReceptionHandlerParameters;
 
 /**
@@ -44,9 +44,12 @@ public class TestDistributionParameterGroup {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false);
         final Map<String, ReceptionHandlerParameters> receptionHandlerParameters = commonTestData
                         .getReceptionHandlerParameters(false);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
 
-        final DistributionParameterGroup distributionParameters = new DistributionParameterGroup(
-                        CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters, receptionHandlerParameters);
+        final DistributionParameterGroup distributionParameters =
+                new DistributionParameterGroup(CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters,
+                        receptionHandlerParameters, forwarderConfigurations);
         final GroupValidationResult validationResult = distributionParameters.validate();
         assertTrue(validationResult.isValid());
         assertEquals(restServerParameters.getHost(), distributionParameters.getRestServerParameters().getHost());
@@ -69,6 +72,9 @@ public class TestDistributionParameterGroup {
                         .getPluginHandlerParameters(),
                         distributionParameters.getReceptionHandlerParameters()
                                         .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getPluginHandlerParameters());
+        assertEquals(CommonTestData.FORWARDER_HOST,
+                ((DummyPolicyForwarderParameterGroup) distributionParameters.getPolicyForwarderConfigurationParameters()
+                        .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS)).getHostname());
     }
 
     @Test
@@ -76,9 +82,11 @@ public class TestDistributionParameterGroup {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false);
         final Map<String, ReceptionHandlerParameters> receptionHandlerParameters = commonTestData
                         .getReceptionHandlerParameters(false);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
 
         final DistributionParameterGroup distributionParameters = new DistributionParameterGroup(null,
-                        restServerParameters, receptionHandlerParameters);
+                restServerParameters, receptionHandlerParameters, forwarderConfigurations);
         final GroupValidationResult validationResult = distributionParameters.validate();
         assertFalse(validationResult.isValid());
         assertEquals(null, distributionParameters.getName());
@@ -105,9 +113,11 @@ public class TestDistributionParameterGroup {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false);
         final Map<String, ReceptionHandlerParameters> receptionHandlerParameters = commonTestData
                         .getReceptionHandlerParameters(false);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
 
         final DistributionParameterGroup distributionParameters = new DistributionParameterGroup("",
-                        restServerParameters, receptionHandlerParameters);
+                restServerParameters, receptionHandlerParameters, forwarderConfigurations);
         final GroupValidationResult validationResult = distributionParameters.validate();
         assertFalse(validationResult.isValid());
         assertEquals("", distributionParameters.getName());
@@ -131,9 +141,11 @@ public class TestDistributionParameterGroup {
     @Test
     public void testDistributionParameterGroup_NullReceptionHandlerParameters() {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
         try {
             final DistributionParameterGroup distributionParameters = new DistributionParameterGroup(
-                            CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters, null);
+                    CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters, null, forwarderConfigurations);
             distributionParameters.validate();
             fail("test should throw an exception here");
         } catch (final Exception e) {
@@ -147,9 +159,11 @@ public class TestDistributionParameterGroup {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(false);
         final Map<String, ReceptionHandlerParameters> receptionHandlerParameters = commonTestData
                         .getReceptionHandlerParameters(true);
-
-        final DistributionParameterGroup distributionParameters = new DistributionParameterGroup(
-                        CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters, receptionHandlerParameters);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
+        final DistributionParameterGroup distributionParameters =
+                new DistributionParameterGroup(CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters,
+                        receptionHandlerParameters, forwarderConfigurations);
         distributionParameters.validate();
         GroupValidationResult result = distributionParameters.validate();
         assertFalse(result.isValid());
@@ -161,9 +175,12 @@ public class TestDistributionParameterGroup {
         final RestServerParameters restServerParameters = commonTestData.getRestServerParameters(true);
         final Map<String, ReceptionHandlerParameters> receptionHandlerParameters = commonTestData
                         .getReceptionHandlerParameters(false);
+        final Map<String, PolicyForwarderConfigurationParameterGroup> forwarderConfigurations =
+                commonTestData.getPolicyForwarderConfigurationParameters(false);
 
-        final DistributionParameterGroup distributionParameters = new DistributionParameterGroup(
-                        CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters, receptionHandlerParameters);
+        final DistributionParameterGroup distributionParameters =
+                new DistributionParameterGroup(CommonTestData.DISTRIBUTION_GROUP_NAME, restServerParameters,
+                        receptionHandlerParameters, forwarderConfigurations);
         final GroupValidationResult validationResult = distributionParameters.validate();
         assertFalse(validationResult.isValid());
         assertTrue(validationResult.getResult()
index 8b47498..14d1a10 100644 (file)
@@ -27,10 +27,10 @@ import static org.junit.Assert.fail;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-
 import org.junit.Test;
 import org.onap.policy.distribution.main.PolicyDistributionException;
 import org.onap.policy.distribution.main.startstop.DistributionCommandLineArguments;
+import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
 
 /**
  * Class to perform unit test of DistributionParameterHandler.
@@ -40,8 +40,7 @@ import org.onap.policy.distribution.main.startstop.DistributionCommandLineArgume
 public class TestDistributionParameterHandler {
     @Test
     public void testParameterHandlerNoParameterFile() throws PolicyDistributionException {
-        final String[] noArgumentString =
-        { "-c", "parameters/NoParameterFile.json" };
+        final String[] noArgumentString = {"-c", "parameters/NoParameterFile.json"};
 
         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
         noArguments.parse(noArgumentString);
@@ -56,8 +55,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testParameterHandlerEmptyParameters() throws PolicyDistributionException {
-        final String[] emptyArgumentString =
-        { "-c", "parameters/EmptyParameters.json" };
+        final String[] emptyArgumentString = {"-c", "parameters/EmptyParameters.json"};
 
         final DistributionCommandLineArguments emptyArguments = new DistributionCommandLineArguments();
         emptyArguments.parse(emptyArgumentString);
@@ -72,8 +70,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testParameterHandlerBadParameters() throws PolicyDistributionException {
-        final String[] badArgumentString =
-        { "-c", "parameters/BadParameters.json" };
+        final String[] badArgumentString = {"-c", "parameters/BadParameters.json"};
 
         final DistributionCommandLineArguments badArguments = new DistributionCommandLineArguments();
         badArguments.parse(badArgumentString);
@@ -90,8 +87,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testParameterHandlerInvalidParameters() throws PolicyDistributionException {
-        final String[] invalidArgumentString =
-        { "-c", "parameters/InvalidParameters.json" };
+        final String[] invalidArgumentString = {"-c", "parameters/InvalidParameters.json"};
 
         final DistributionCommandLineArguments invalidArguments = new DistributionCommandLineArguments();
         invalidArguments.parse(invalidArgumentString);
@@ -108,8 +104,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testParameterHandlerNoParameters() throws PolicyDistributionException {
-        final String[] noArgumentString =
-        { "-c", "parameters/NoParameters.json" };
+        final String[] noArgumentString = {"-c", "parameters/NoParameters.json"};
 
         final DistributionCommandLineArguments noArguments = new DistributionCommandLineArguments();
         noArguments.parse(noArgumentString);
@@ -124,8 +119,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testParameterHandlerMinumumParameters() throws PolicyDistributionException {
-        final String[] minArgumentString =
-        { "-c", "parameters/MinimumParameters.json" };
+        final String[] minArgumentString = {"-c", "parameters/MinimumParameters.json"};
 
         final DistributionCommandLineArguments minArguments = new DistributionCommandLineArguments();
         minArguments.parse(minArgumentString);
@@ -136,8 +130,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testDistributionParameterGroup() throws PolicyDistributionException {
-        final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters.json" };
+        final String[] distributionConfigParameters = {"-c", "parameters/DistributionConfigParameters.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -155,12 +148,50 @@ public class TestDistributionParameterHandler {
                 parGroup.getReceptionHandlerParameters().get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY)
                         .getPluginHandlerParameters().getPolicyForwarders()
                         .get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
+        assertEquals(CommonTestData.FORWARDER_HOST,
+                ((DummyPolicyForwarderParameterGroup) parGroup.getPolicyForwarderConfigurationParameters()
+                        .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS)).getHostname());
+    }
+
+    @Test
+    public void testDistributionParameterGroup_InvalidForwarderConfigurationClassName()
+            throws PolicyDistributionException {
+        final String[] distributionConfigParameters =
+            {"-c", "parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json"};
+
+        final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
+        arguments.parse(distributionConfigParameters);
+
+        try {
+            new DistributionParameterHandler().getParameters(arguments);
+            fail("test should throw an exception here");
+        } catch (final Exception e) {
+            assertTrue(e.getMessage().contains("parameter \"parameterClassName\" value \"\" invalid in JSON file"));
+        }
+    }
+
+    @Test
+    public void testDistributionParameterGroup_UnknownForwarderConfigurationClassName()
+            throws PolicyDistributionException {
+        final String[] distributionConfigParameters =
+            {"-c", "parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json"};
+
+        final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
+        arguments.parse(distributionConfigParameters);
+
+        try {
+            new DistributionParameterHandler().getParameters(arguments);
+            fail("test should throw an exception here");
+        } catch (final Exception e) {
+            assertTrue(e.getMessage().contains(
+                    "parameter \"parameterClassName\" value \"org.onap.policy.Unknown\", could not find class"));
+        }
     }
 
     @Test
     public void testDistributionParameterGroup_InvalidName() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_InvalidName.json" };
+            {"-c", "parameters/DistributionConfigParameters_InvalidName.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -177,7 +208,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_NoReceptionHandler() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_NoReceptionHandler.json" };
+            {"-c", "parameters/DistributionConfigParameters_NoReceptionHandler.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -193,7 +224,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_EmptyReceptionHandler() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_EmptyReceptionHandler.json" };
+            {"-c", "parameters/DistributionConfigParameters_EmptyReceptionHandler.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -209,7 +240,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_NoPolicyDecoder() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_NoPolicyDecoder.json" };
+            {"-c", "parameters/DistributionConfigParameters_NoPolicyDecoder.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -225,7 +256,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_NoPolicyForwarder() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_NoPolicyForwarder.json" };
+            {"-c", "parameters/DistributionConfigParameters_NoPolicyForwarder.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -241,7 +272,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_EmptyPolicyDecoder() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_EmptyPolicyDecoder.json" };
+            {"-c", "parameters/DistributionConfigParameters_EmptyPolicyDecoder.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -257,7 +288,7 @@ public class TestDistributionParameterHandler {
     @Test
     public void testDistributionParameterGroup_EmptyPolicyForwarder() throws PolicyDistributionException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_EmptyPolicyForwarder.json" };
+            {"-c", "parameters/DistributionConfigParameters_EmptyPolicyForwarder.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -274,7 +305,7 @@ public class TestDistributionParameterHandler {
     public void testDistributionParameterGroup_InvalidReceptionHandlerParameters()
             throws PolicyDistributionException, IOException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json" };
+            {"-c", "parameters/DistributionConfigParameters_InvalidReceptionHandlerParameters.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -294,7 +325,7 @@ public class TestDistributionParameterHandler {
     public void testDistributionParameterGroup_InvalidDecoderAndForwarderParameters()
             throws PolicyDistributionException, IOException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json" };
+            {"-c", "parameters/DistributionConfigParameters_InvalidDecoderAndForwarderParameters.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -314,7 +345,7 @@ public class TestDistributionParameterHandler {
     public void testDistributionParameterGroup_InvalidRestServerParameters()
             throws PolicyDistributionException, IOException {
         final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters_InvalidRestServerParameters.json" };
+            {"-c", "parameters/DistributionConfigParameters_InvalidRestServerParameters.json"};
 
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         arguments.parse(distributionConfigParameters);
@@ -332,8 +363,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testDistributionVersion() throws PolicyDistributionException {
-        final String[] distributionConfigParameters =
-        { "-v" };
+        final String[] distributionConfigParameters = {"-v"};
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         final String version = arguments.parse(distributionConfigParameters);
         assertTrue(version.startsWith("ONAP Policy Framework Distribution Service"));
@@ -341,8 +371,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testDistributionHelp() throws PolicyDistributionException {
-        final String[] distributionConfigParameters =
-        { "-h" };
+        final String[] distributionConfigParameters = {"-h"};
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         final String help = arguments.parse(distributionConfigParameters);
         assertTrue(help.startsWith("usage:"));
@@ -350,8 +379,7 @@ public class TestDistributionParameterHandler {
 
     @Test
     public void testDistributionInvalidOption() throws PolicyDistributionException {
-        final String[] distributionConfigParameters =
-        { "-d" };
+        final String[] distributionConfigParameters = {"-d"};
         final DistributionCommandLineArguments arguments = new DistributionCommandLineArguments();
         try {
             arguments.parse(distributionConfigParameters);
index 552ee50..9eeae35 100644 (file)
@@ -26,7 +26,6 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.Map;
-
 import org.junit.Test;
 import org.onap.policy.common.parameters.GroupValidationResult;
 import org.onap.policy.distribution.forwarding.parameters.PolicyForwarderParameters;
index d64df1b..9907bfb 100644 (file)
@@ -23,6 +23,9 @@ package org.onap.policy.distribution.main.parameters;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.onap.policy.distribution.main.parameters.CommonTestData.FORWARDER_CLASS_NAME;
+import static org.onap.policy.distribution.main.parameters.CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS;
+import static org.onap.policy.distribution.main.parameters.CommonTestData.FORWARDER_TYPE;
 
 import org.junit.Test;
 import org.onap.policy.common.parameters.GroupValidationResult;
@@ -38,20 +41,20 @@ public class TestPolicyForwarderParameters {
     @Test
     public void testPolicyForwarderParameters() {
         final PolicyForwarderParameters pFParameters =
-                new PolicyForwarderParameters(CommonTestData.FORWARDER_TYPE, CommonTestData.FORWARDER_CLASS_NAME);
+                new PolicyForwarderParameters(FORWARDER_TYPE, FORWARDER_CLASS_NAME, FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
-        assertEquals(CommonTestData.FORWARDER_TYPE, pFParameters.getForwarderType());
-        assertEquals(CommonTestData.FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
+        assertEquals(FORWARDER_TYPE, pFParameters.getForwarderType());
+        assertEquals(FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
         assertTrue(validationResult.isValid());
     }
 
     @Test
     public void testPolicyForwarderParameters_InvalidForwarderType() {
         final PolicyForwarderParameters pFParameters =
-                new PolicyForwarderParameters("", CommonTestData.FORWARDER_CLASS_NAME);
+                new PolicyForwarderParameters("", FORWARDER_CLASS_NAME, FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
         assertEquals("", pFParameters.getForwarderType());
-        assertEquals(CommonTestData.FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
+        assertEquals(FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
         assertFalse(validationResult.isValid());
         assertTrue(validationResult.getResult().contains(
                 "field \"forwarderType\" type \"java.lang.String\" value \"\" INVALID, must be a non-blank string"));
@@ -59,7 +62,8 @@ public class TestPolicyForwarderParameters {
 
     @Test
     public void testPolicyForwarderParameters_InvalidForwarderClassName() {
-        final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters(CommonTestData.FORWARDER_TYPE, "");
+        final PolicyForwarderParameters pFParameters =
+                new PolicyForwarderParameters(FORWARDER_TYPE, "", FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
         assertEquals(CommonTestData.FORWARDER_TYPE, pFParameters.getForwarderType());
         assertEquals("", pFParameters.getForwarderClassName());
@@ -71,7 +75,8 @@ public class TestPolicyForwarderParameters {
 
     @Test
     public void testPolicyForwarderParameters_InvalidForwarderTypeAndClassName() {
-        final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters("", "");
+        final PolicyForwarderParameters pFParameters =
+                new PolicyForwarderParameters("", "", FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
         assertEquals("", pFParameters.getForwarderType());
         assertEquals("", pFParameters.getForwarderClassName());
@@ -86,10 +91,10 @@ public class TestPolicyForwarderParameters {
     @Test
     public void testPolicyForwarderParameters_NullForwarderType() {
         final PolicyForwarderParameters pFParameters =
-                new PolicyForwarderParameters(null, CommonTestData.FORWARDER_CLASS_NAME);
+                new PolicyForwarderParameters(null, FORWARDER_CLASS_NAME, FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
         assertEquals(null, pFParameters.getForwarderType());
-        assertEquals(CommonTestData.FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
+        assertEquals(FORWARDER_CLASS_NAME, pFParameters.getForwarderClassName());
         assertFalse(validationResult.isValid());
         assertTrue(validationResult.getResult()
                 .contains("field \"forwarderType\" type \"java.lang.String\" value \"null\" INVALID, "
@@ -99,9 +104,9 @@ public class TestPolicyForwarderParameters {
     @Test
     public void testPolicyForwarderParameters_NullForwarderClassName() {
         final PolicyForwarderParameters pFParameters =
-                new PolicyForwarderParameters(CommonTestData.FORWARDER_TYPE, null);
+                new PolicyForwarderParameters(FORWARDER_TYPE, null, FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
-        assertEquals(CommonTestData.FORWARDER_TYPE, pFParameters.getForwarderType());
+        assertEquals(FORWARDER_TYPE, pFParameters.getForwarderType());
         assertEquals(null, pFParameters.getForwarderClassName());
         assertFalse(validationResult.isValid());
         assertTrue(validationResult.getResult()
@@ -111,11 +116,11 @@ public class TestPolicyForwarderParameters {
 
     @Test
     public void testPolicyForwarderParameters_InvalidForwarderClass() {
-        final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters(CommonTestData.FORWARDER_TYPE,
-                CommonTestData.FORWARDER_CLASS_NAME + "Invalid");
+        final PolicyForwarderParameters pFParameters = new PolicyForwarderParameters(FORWARDER_TYPE,
+                FORWARDER_CLASS_NAME + "Invalid", FORWARDER_CONFIGURATION_PARAMETERS);
         final GroupValidationResult validationResult = pFParameters.validate();
-        assertEquals(CommonTestData.FORWARDER_TYPE, pFParameters.getForwarderType());
-        assertEquals(CommonTestData.FORWARDER_CLASS_NAME + "Invalid", pFParameters.getForwarderClassName());
+        assertEquals(FORWARDER_TYPE, pFParameters.getForwarderType());
+        assertEquals(FORWARDER_CLASS_NAME + "Invalid", pFParameters.getForwarderClassName());
         assertFalse(validationResult.isValid());
         assertTrue(validationResult.getResult().contains("policy forwarder class not found in classpath"));
     }
index c901b5d..47ac82b 100644 (file)
@@ -28,6 +28,7 @@ import org.onap.policy.distribution.main.PolicyDistributionException;
 import org.onap.policy.distribution.main.parameters.CommonTestData;
 import org.onap.policy.distribution.main.parameters.DistributionParameterGroup;
 import org.onap.policy.distribution.main.parameters.DistributionParameterHandler;
+import org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup;
 
 /**
  * Class to perform unit test of DistributionActivator.
@@ -38,8 +39,7 @@ public class TestDistributionActivator {
 
     @Test
     public void testDistributionActivator() throws PolicyDistributionException {
-        final String[] distributionConfigParameters =
-        { "-c", "parameters/DistributionConfigParameters.json" };
+        final String[] distributionConfigParameters = {"-c", "parameters/DistributionConfigParameters.json"};
 
         final DistributionCommandLineArguments arguments =
                 new DistributionCommandLineArguments(distributionConfigParameters);
@@ -61,6 +61,9 @@ public class TestDistributionActivator {
                 activator.getParameterGroup().getReceptionHandlerParameters()
                         .get(CommonTestData.DUMMY_RECEPTION_HANDLER_KEY).getPluginHandlerParameters()
                         .getPolicyForwarders().get(CommonTestData.DUMMY_ENGINE_FORWARDER_KEY).getForwarderType());
+        assertEquals(DummyPolicyForwarderParameterGroup.class,
+                activator.getParameterGroup().getPolicyForwarderConfigurationParameters()
+                        .get(CommonTestData.FORWARDER_CONFIGURATION_PARAMETERS).getClass());
         activator.terminate();
     }
 }
index 5cae0c6..c9c7fef 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.policy.distribution.main.testclasses;
 
 import java.util.ArrayList;
 import java.util.Collection;
-
 import org.onap.policy.distribution.forwarding.PolicyForwarder;
 import org.onap.policy.distribution.forwarding.PolicyForwardingException;
 import org.onap.policy.distribution.model.Policy;
@@ -49,4 +48,7 @@ public class DummyPolicyForwarder implements PolicyForwarder {
     public boolean receivedPolicy(final Policy policy) {
         return policiesReceived.contains(policy);
     }
+
+    @Override
+    public void configure(String parameterGroupName) {}
 }
diff --git a/main/src/test/java/org/onap/policy/distribution/main/testclasses/DummyPolicyForwarderParameterGroup.java b/main/src/test/java/org/onap/policy/distribution/main/testclasses/DummyPolicyForwarderParameterGroup.java
new file mode 100644 (file)
index 0000000..66217d1
--- /dev/null
@@ -0,0 +1,131 @@
+/*-
+ * ============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.main.testclasses;
+
+import org.onap.policy.common.parameters.GroupValidationResult;
+import org.onap.policy.distribution.main.parameters.PolicyForwarderConfigurationParameterGroup;
+
+/**
+ * Dummy policy forwarder parameter group.
+ */
+public class DummyPolicyForwarderParameterGroup extends PolicyForwarderConfigurationParameterGroup {
+
+    private boolean useHttps;
+    private String hostname;
+    private int port;
+    private String userName;
+    private String password;
+    private boolean isManaged;
+
+    public boolean isUseHttps() {
+        return useHttps;
+    }
+
+    public String getHostname() {
+        return hostname;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public boolean isManaged() {
+        return isManaged;
+    }
+
+    /**
+     * Builder for DummyPolicyForwarderParameterGroup.
+     */
+    public static class DummyPolicyForwarderParameterGroupBuilder {
+        private boolean useHttps;
+        private String hostname;
+        private int port;
+        private String userName;
+        private String password;
+        private boolean isManaged;
+
+        public DummyPolicyForwarderParameterGroupBuilder setUseHttps(final boolean useHttps) {
+            this.useHttps = useHttps;
+            return this;
+        }
+
+        public DummyPolicyForwarderParameterGroupBuilder setHostname(final String hostname) {
+            this.hostname = hostname;
+            return this;
+        }
+
+        public DummyPolicyForwarderParameterGroupBuilder setPort(final int port) {
+            this.port = port;
+            return this;
+        }
+
+        public DummyPolicyForwarderParameterGroupBuilder setUserName(final String userName) {
+            this.userName = userName;
+            return this;
+        }
+
+        public DummyPolicyForwarderParameterGroupBuilder setPassword(final String password) {
+            this.password = password;
+            return this;
+        }
+
+        public DummyPolicyForwarderParameterGroupBuilder setIsManaged(final boolean isManaged) {
+            this.isManaged = isManaged;
+            return this;
+        }
+
+        /**
+         * Creates a new DummyPolicyForwarderParameterGroup instance.
+         */
+        public DummyPolicyForwarderParameterGroup build() {
+            return new DummyPolicyForwarderParameterGroup(this);
+        }
+    }
+
+    /**
+     * Construct an instance.
+     *
+     * @param builder the builder create the instance from
+     */
+    private DummyPolicyForwarderParameterGroup(final DummyPolicyForwarderParameterGroupBuilder builder) {
+        this.useHttps = builder.useHttps;
+        this.hostname = builder.hostname;
+        this.port = builder.port;
+        this.userName = builder.userName;
+        this.password = builder.password;
+        this.isManaged = builder.isManaged;
+    }
+
+    @Override
+    public GroupValidationResult validate() {
+        final GroupValidationResult validationResult = new GroupValidationResult(this);
+        return validationResult;
+    }
+
+}
index 29e3e46..7a55762 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationParameters": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index ce66777..d11ac9e 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index 3eceef2..c534154 100644 (file)
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index 7473300..b8010f8 100644 (file)
@@ -7,5 +7,18 @@
         "password":"zb!XztG34"
     },
     "receptionHandlerParameters":{
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
\ No newline at end of file
index 4d1c409..0c9caa6 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     },
                     "PAPStandaloneForwarder":{
                         "forwarderType":"",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.PapStandalonePolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.PapStandalonePolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     },
                     "PAPEngineForwarder":{
                         "forwarderType":"PAPEngineForwarder",
-                        "forwarderClassName":""
+                        "forwarderClassName":"",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
                 
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
diff --git a/main/src/test/resources/parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json b/main/src/test/resources/parameters/DistributionConfigParameters_InvalidForwarderConfigurationClassName.json
new file mode 100644 (file)
index 0000000..ba895a6
--- /dev/null
@@ -0,0 +1,67 @@
+{
+    "name":"SDCDistributionGroup",
+    "restServerParameters":{
+        "host":"0.0.0.0",
+        "port":6969,
+        "userName":"healthcheck",
+        "password":"zb!XztG34"
+    },
+    "receptionHandlerParameters":{
+        "DummyReceptionHandler":{
+            "receptionHandlerType":"DummyReceptionHandler",
+            "receptionHandlerClassName":"org.onap.policy.distribution.main.testclasses.DummyReceptionHandler",
+            "pssdConfiguration":{
+                "asdcAddress": "localhost",
+                "messageBusAddress": [
+                    "a.com",
+                    "b.com",
+                    "c.com"
+                 ],
+                "user": "tbdsdc-1480",
+                "password": "tbdsdc-1480",
+                "pollingInterval":20,
+                "pollingTimeout":30,
+                "consumerId": "policy-id",
+                "artifactTypes": [
+                    "TOSCA_CSAR",
+                    "HEAT"
+                ],
+                "consumerGroup": "policy-group",
+                "environmentName": "environmentName",
+                "keystorePath": "null",
+                "keystorePassword": "null",
+                "activeserverTlsAuth": false,
+                "isFilterinEmptyResources": true,
+                "isUseHttpsWithDmaap": false
+            },
+            "pluginHandlerParameters":{
+                "policyDecoders":{
+                    "DummyDecoder":{
+                        "decoderType":"DummyDecoder",
+                        "decoderClassName":"org.onap.policy.distribution.main.testclasses.DummyDecoder"
+                    }
+                },
+                "policyForwarders":{
+                    "DummyForwarder":{
+                        "forwarderType":"DummyForwarder",
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationParameters": "dummyConfiguration"
+                    }
+                }
+            }
+        }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
+    }
+}
index 377c70e..7cafc26 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index 0ea171e..793702f 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index 85d450e..0d65033 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
index ffb4c72..f9392db 100644 (file)
                 "policyForwarders":{
                     "DummyForwarder":{
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
diff --git a/main/src/test/resources/parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json b/main/src/test/resources/parameters/DistributionConfigParameters_UnknownForwarderConfigurationClassName.json
new file mode 100644 (file)
index 0000000..c189671
--- /dev/null
@@ -0,0 +1,67 @@
+{
+    "name":"SDCDistributionGroup",
+    "restServerParameters":{
+        "host":"0.0.0.0",
+        "port":6969,
+        "userName":"healthcheck",
+        "password":"zb!XztG34"
+    },
+    "receptionHandlerParameters":{
+        "DummyReceptionHandler":{
+            "receptionHandlerType":"DummyReceptionHandler",
+            "receptionHandlerClassName":"org.onap.policy.distribution.main.testclasses.DummyReceptionHandler",
+            "pssdConfiguration":{
+                "asdcAddress": "localhost",
+                "messageBusAddress": [
+                    "a.com",
+                    "b.com",
+                    "c.com"
+                 ],
+                "user": "tbdsdc-1480",
+                "password": "tbdsdc-1480",
+                "pollingInterval":20,
+                "pollingTimeout":30,
+                "consumerId": "policy-id",
+                "artifactTypes": [
+                    "TOSCA_CSAR",
+                    "HEAT"
+                ],
+                "consumerGroup": "policy-group",
+                "environmentName": "environmentName",
+                "keystorePath": "null",
+                "keystorePassword": "null",
+                "activeserverTlsAuth": false,
+                "isFilterinEmptyResources": true,
+                "isUseHttpsWithDmaap": false
+            },
+            "pluginHandlerParameters":{
+                "policyDecoders":{
+                    "DummyDecoder":{
+                        "decoderType":"DummyDecoder",
+                        "decoderClassName":"org.onap.policy.distribution.main.testclasses.DummyDecoder"
+                    }
+                },
+                "policyForwarders":{
+                    "DummyForwarder":{
+                        "forwarderType":"DummyForwarder",
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationParameters": "dummyConfiguration"
+                    }
+                }
+            }
+        }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.Unknown",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
+    }
+}
index c113d2c..1b797de 100644 (file)
                 "policyForwarders":{  
                     "DummyForwarder":{  
                         "forwarderType":"DummyForwarder",
-                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder"
+                        "forwarderClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarder",
+                        "forwarderConfigurationName": "dummyConfiguration"
                     }
                 }
             }
         }
+    },
+    "policyForwarderConfigurationParameters":{
+        "dummyConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.main.testclasses.DummyPolicyForwarderParameterGroup",
+            "parameters":{
+                "useHttps": false,
+                "hostname": "192.168.99.100",
+                "port": 8081,
+                "userName": "user",
+                "password": "pw123",
+                "isManaged": true
+            }
+        }
     }
 }
diff --git a/model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java b/model/src/main/java/org/onap/policy/distribution/model/OptimizationPolicy.java
new file mode 100644 (file)
index 0000000..797ea4b
--- /dev/null
@@ -0,0 +1,126 @@
+/*-
+ * ============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.model;
+
+import java.util.Date;
+
+/**
+ * An optimization policy
+ */
+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;
+    private Date timetolive;
+    private String guard;
+    private String riskLevel;
+    private String riskType;
+
+    @Override
+    public String getPolicyName() {
+        return policyName;
+    }
+
+    @Override
+    public String getPolicyType() {
+        return OPTIMIZATION;
+    }
+
+    public void setPolicyName(String policyName) {
+        this.policyName = policyName;
+    }
+
+    public String getPolicyDescription() {
+        return policyDescription;
+    }
+
+    public void setPolicyDescription(String policyDescription) {
+        this.policyDescription = policyDescription;
+    }
+
+    public String getPolicyConfigType() {
+        return policyConfigType;
+    }
+
+    public void setPolicyConfigType(String policyConfigType) {
+        this.policyConfigType = policyConfigType;
+    }
+
+    public String getOnapName() {
+        return onapName;
+    }
+
+    public void setOnapName(String onapName) {
+        this.onapName = onapName;
+    }
+
+    public String getConfigBody() {
+        return configBody;
+    }
+
+    public void setConfigBody(String configBody) {
+        this.configBody = configBody;
+    }
+
+    public String getConfigBodyType() {
+        return configBodyType;
+    }
+
+    public void setConfigBodyType(String configBodyType) {
+        this.configBodyType = configBodyType;
+    }
+
+    public Date getTimetolive() {
+        return timetolive;
+    }
+
+    public void setTimetolive(Date timetolive) {
+        this.timetolive = timetolive;
+    }
+
+    public String getGuard() {
+        return guard;
+    }
+
+    public void setGuard(String guard) {
+        this.guard = guard;
+    }
+
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+
+    public void setRiskLevel(String riskLevel) {
+        this.riskLevel = riskLevel;
+    }
+
+    public String getRiskType() {
+        return riskType;
+    }
+
+    public void setRiskType(String riskType) {
+        this.riskType = riskType;
+    }
+}
index 74bc9e9..749f5b3 100644 (file)
@@ -25,6 +25,18 @@ package org.onap.policy.distribution.model;
  */
 public interface Policy {
 
-    // Add methods for PolicyForwarder to use when composing REST call to PAP
+    /**
+     * Get the name of the policy.
+     * 
+     * @return the name of the policy
+     */
+    String getPolicyName();
+
+    /**
+     * Get the type of the policy.
+     * 
+     * @return the type of the policy
+     */
+    String getPolicyType();
 
 }
index 24985bb..006caa9 100644 (file)
             <artifactId>forwarding</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.onap.policy.distribution</groupId>
+            <artifactId>main</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.engine</groupId>
+            <artifactId>PolicyEngineAPI</artifactId>
+            <version>1.3.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.thoughtworks</groupId>
+            <artifactId>web-stub</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyAdapter.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyAdapter.java
new file mode 100644 (file)
index 0000000..c50eac1
--- /dev/null
@@ -0,0 +1,53 @@
+/*-
+ * ============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.forwarding.xacml.pdp;
+
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.distribution.model.Policy;
+
+/**
+ * Adapts {@link Policy} objects to objects compatible with the XACML PDP API.
+ */
+public interface XacmlPdpPolicyAdapter<T extends Policy> {
+
+    /**
+     * Get the policy.
+     * 
+     * @return the policy
+     */
+    T getPolicy();
+
+    /**
+     * Get as a {@link PolicyParameters} object.
+     * 
+     * @returna {@link PolicyParameters} object
+     */
+    PolicyParameters getAsPolicyParameters();
+
+    /**
+     * Get as a {@link PushPolicyParameters} object.
+     * 
+     * @returna {@link PushPolicyParameters} object
+     */
+    PushPolicyParameters getAsPushPolicyParameters(final String pdpGroups);
+
+}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarder.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarder.java
new file mode 100644 (file)
index 0000000..30d8f3a
--- /dev/null
@@ -0,0 +1,135 @@
+/*-
+ * ============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.forwarding.xacml.pdp;
+
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+import java.util.Collections;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
+import org.onap.policy.common.endpoints.http.client.HttpClient;
+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.forwarding.PolicyForwarder;
+import org.onap.policy.distribution.forwarding.xacml.pdp.adapters.XacmlPdpOptimizationPolicyAdapter;
+import org.onap.policy.distribution.model.OptimizationPolicy;
+import org.onap.policy.distribution.model.Policy;
+import org.springframework.http.HttpStatus;
+
+/**
+ * Forwards policies to the XACML PDP.
+ */
+public class XacmlPdpPolicyForwarder implements PolicyForwarder {
+
+    private static final Logger LOGGER = FlexLogger.getLogger(XacmlPdpPolicyForwarder.class);
+    private static final String BASE_PATH = "pdp/api/";
+
+    private XacmlPdpPolicyForwarderParameterGroup configurationParameters = null;
+
+
+    @Override
+    public void forward(final Collection<Policy> policies) {
+        for (Policy policy : policies) {
+            forward(policy);
+        }
+    }
+
+    private void forward(Policy policy) {
+        XacmlPdpPolicyAdapter<?> policyAdapter = getXacmlPdpPolicyAdapter(policy);
+
+        if (policyAdapter == null) {
+            LOGGER.error("Cannot forward policy " + policy + ". Unsupported policy type "
+                    + policy.getClass().getSimpleName());
+            return;
+        }
+
+        boolean policyCreated = createPolicy(policyAdapter);
+        if (policyCreated) {
+            pushPolicy(policyAdapter);
+        }
+    }
+
+    private XacmlPdpPolicyAdapter<?> getXacmlPdpPolicyAdapter(Policy policy) {
+        if (policy instanceof OptimizationPolicy) {
+            return new XacmlPdpOptimizationPolicyAdapter((OptimizationPolicy) policy);
+        }
+        return null;
+    }
+
+    private boolean createPolicy(XacmlPdpPolicyAdapter<?> policyAdapter) {
+        PolicyParameters policyParameters = policyAdapter.getAsPolicyParameters();
+        Entity<PolicyParameters> entity = Entity.entity(policyParameters, MediaType.APPLICATION_JSON);
+
+        return invokeHttpClient(entity, "createPolicy", policyAdapter.getPolicy().getPolicyName());
+    }
+
+    private boolean pushPolicy(XacmlPdpPolicyAdapter<?> policyAdapter) {
+        PushPolicyParameters pushPolicyParameters =
+                policyAdapter.getAsPushPolicyParameters(configurationParameters.getPdpGroup());
+        Entity<PushPolicyParameters> entity = Entity.entity(pushPolicyParameters, MediaType.APPLICATION_JSON);
+
+        return invokeHttpClient(entity, "pushPolicy", policyAdapter.getPolicy().getPolicyName());
+    }
+
+    private boolean invokeHttpClient(final Entity<?> entity, final String method, final String policyName) {
+
+        try {
+            Response response = getHttpClient().put(method, entity,
+                    Collections.singletonMap("ClientAuth", configurationParameters.getClientAuth()));
+
+            if (response.getStatus() != HttpStatus.OK.value()) {
+                LOGGER.error(
+                        "Invocation of method " + method + " failed for policy " + policyName + ". Response status: "
+                                + response.getStatus() + ", Response status info: " + response.getStatusInfo());
+                return false;
+            }
+        } catch (KeyManagementException | NoSuchAlgorithmException exception) {
+            LOGGER.error("Invocation of method " + method + " failed for policy " + policyName
+                    + " due to error opening Http client", exception);
+            return false;
+        }
+        return true;
+    }
+
+    private HttpClient getHttpClient() throws KeyManagementException, NoSuchAlgorithmException {
+        boolean useHttps = configurationParameters.isUseHttps();
+        String hostname = configurationParameters.getHostname();
+        int port = configurationParameters.getPort();
+        String userName = configurationParameters.getUserName();
+        String password = configurationParameters.getPassword();
+        boolean managed = configurationParameters.isManaged();
+        BusTopicParams params = BusTopicParams.builder().clientName("SDC Dist").useHttps(useHttps).hostname(hostname)
+                .port(port).userName(userName).password(password).basePath(BASE_PATH).managed(managed).build();
+        return HttpClient.factory.build(params);
+    }
+
+    @Override
+    public void configure(String parameterGroupName) {
+        configurationParameters = ParameterService.get(parameterGroupName);
+    }
+
+}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarderParameterGroup.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/XacmlPdpPolicyForwarderParameterGroup.java
new file mode 100644 (file)
index 0000000..e72e64a
--- /dev/null
@@ -0,0 +1,182 @@
+/*-
+ * ============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.forwarding.xacml.pdp;
+
+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.main.parameters.PolicyForwarderConfigurationParameterGroup;
+
+/**
+ * Holds the parameters for the{@link XacmlPdpPolicyForwarder}
+ */
+public class XacmlPdpPolicyForwarderParameterGroup extends PolicyForwarderConfigurationParameterGroup {
+
+    public static final String POLICY_FORWARDER_PLUGIN_CLASS = XacmlPdpPolicyForwarder.class.getCanonicalName();
+
+    private boolean useHttps;
+    private String hostname;
+    private int port;
+    private String userName;
+    private String password;
+    private String clientAuth;
+    private boolean isManaged;
+    private String pdpGroup;
+
+    public boolean isUseHttps() {
+        return useHttps;
+    }
+
+    public String getHostname() {
+        return hostname;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public String getClientAuth() {
+        return clientAuth;
+    }
+
+    public boolean isManaged() {
+        return isManaged;
+    }
+
+    public String getPdpGroup() {
+        return pdpGroup;
+    }
+
+    /**
+     * Builder for XacmlPdpPolicyForwarderParameterGroup.
+     */
+    public static class XacmlPdpPolicyForwarderParameterGroupBuilder {
+        private boolean useHttps = false;
+        private String hostname;
+        private int port;
+        private String userName;
+        private String password;
+        private String clientAuth;
+        private boolean isManaged = true;
+        private String pdpGroup;
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setUseHttps(final boolean useHttps) {
+            this.useHttps = useHttps;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setHostname(final String hostname) {
+            this.hostname = hostname;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setPort(final int port) {
+            this.port = port;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setUserName(final String userName) {
+            this.userName = userName;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setPassword(final String password) {
+            this.password = password;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setClientAuth(final String clientAuth) {
+            this.clientAuth = clientAuth;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setIsManaged(final boolean isManaged) {
+            this.isManaged = isManaged;
+            return this;
+        }
+
+        public XacmlPdpPolicyForwarderParameterGroupBuilder setPdpGroup(final String pdpGroup) {
+            this.pdpGroup = pdpGroup;
+            return this;
+        }
+
+        /**
+         * Creates a new XacmlPapServletPolicyForwarderParameterGroup instance.
+         */
+        public XacmlPdpPolicyForwarderParameterGroup build() {
+            return new XacmlPdpPolicyForwarderParameterGroup(this);
+        }
+    }
+
+    /**
+     * Construct an instance
+     *
+     * @param builder the builder create the instance from
+     */
+    private XacmlPdpPolicyForwarderParameterGroup(final XacmlPdpPolicyForwarderParameterGroupBuilder builder) {
+        this.useHttps = builder.useHttps;
+        this.hostname = builder.hostname;
+        this.port = builder.port;
+        this.userName = builder.userName;
+        this.password = builder.password;
+        this.clientAuth = builder.clientAuth;
+        this.isManaged = builder.isManaged;
+        this.pdpGroup = builder.pdpGroup;
+    }
+
+    @Override
+    public GroupValidationResult validate() {
+        final GroupValidationResult validationResult = new GroupValidationResult(this);
+        if (!ParameterValidationUtils.validateStringParameter(hostname)) {
+            validationResult.setResult("hostname", ValidationStatus.INVALID,
+                    "must be a non-blank string containing hostname/ipaddress");
+        }
+        if (!ParameterValidationUtils.validateIntParameter(port)) {
+            validationResult.setResult("port", ValidationStatus.INVALID, "must be a positive integer containing port");
+        }
+        if (!ParameterValidationUtils.validateStringParameter(userName)) {
+            validationResult.setResult("userName", ValidationStatus.INVALID,
+                    "must be a non-blank string containing userName");
+        }
+        if (!ParameterValidationUtils.validateStringParameter(password)) {
+            validationResult.setResult("password", ValidationStatus.INVALID,
+                    "must be a non-blank string containing password");
+        }
+        if (!ParameterValidationUtils.validateStringParameter(clientAuth)) {
+            validationResult.setResult("clientAuth", ValidationStatus.INVALID,
+                    "must be a non-blank string containing clientAuth");
+        }
+        if (!ParameterValidationUtils.validateStringParameter(pdpGroup)) {
+            validationResult.setResult("pdpGroup", ValidationStatus.INVALID,
+                    "must be a non-blank string containing pdpGroup");
+        }
+        return validationResult;
+    }
+
+}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/AbstractXacmlPdpPolicyAdapter.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/AbstractXacmlPdpPolicyAdapter.java
new file mode 100644 (file)
index 0000000..c136516
--- /dev/null
@@ -0,0 +1,54 @@
+/*-
+ * ============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.forwarding.xacml.pdp.adapters;
+
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyAdapter;
+import org.onap.policy.distribution.model.Policy;
+
+/**
+ * Base class for {@link XacmlPdpPolicyAdapter} implementations.
+ * 
+ * @param <T> the type of policy the adapter handles
+ */
+public abstract class AbstractXacmlPdpPolicyAdapter<T extends Policy> implements XacmlPdpPolicyAdapter<T> {
+
+    private T policy;
+
+    protected AbstractXacmlPdpPolicyAdapter(T policy) {
+        this.policy = policy;
+    }
+
+    @Override
+    public T getPolicy() {
+        return policy;
+    }
+
+    @Override
+    public PushPolicyParameters getAsPushPolicyParameters(String pdpGroups) {
+        PushPolicyParameters pushPolicyParameters = new PushPolicyParameters();
+        pushPolicyParameters.setPolicyName(policy.getPolicyName());
+        pushPolicyParameters.setPolicyType(policy.getPolicyType());
+        pushPolicyParameters.setPdpGroup(pdpGroups);
+        return pushPolicyParameters;
+    }
+
+}
diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/XacmlPdpOptimizationPolicyAdapter.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/xacml/pdp/adapters/XacmlPdpOptimizationPolicyAdapter.java
new file mode 100644 (file)
index 0000000..1ec654f
--- /dev/null
@@ -0,0 +1,54 @@
+/*-
+ * ============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.forwarding.xacml.pdp.adapters;
+
+import org.onap.policy.api.PolicyConfigType;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.distribution.model.OptimizationPolicy;
+
+/**
+ * Adapts {@link OptimizationPolicy} objects to objects compatible with the XACML PDP API.
+ */
+public class XacmlPdpOptimizationPolicyAdapter extends AbstractXacmlPdpPolicyAdapter<OptimizationPolicy> {
+
+    /**
+     * Create an instance to adapt the given {@link OptimizationPolicy}.
+     * 
+     * @param optimizationPolicy the {@link OptimizationPolicy} to be adapted
+     */
+    public XacmlPdpOptimizationPolicyAdapter(final OptimizationPolicy optimizationPolicy) {
+        super(optimizationPolicy);
+    }
+
+    @Override
+    public PolicyParameters getAsPolicyParameters() {
+        PolicyParameters policyParameters = new PolicyParameters();
+        policyParameters.setPolicyName(getPolicy().getPolicyName());
+        policyParameters.setPolicyDescription(getPolicy().getPolicyDescription());
+        policyParameters.setPolicyConfigType(PolicyConfigType.valueOf(getPolicy().getPolicyConfigType()));
+        policyParameters.setOnapName(getPolicy().getOnapName());
+        policyParameters.setRiskLevel(getPolicy().getRiskLevel());
+        policyParameters.setConfigBody(getPolicy().getConfigBody());
+        policyParameters.setRiskType(getPolicy().getRiskType());
+        return policyParameters;
+    }
+
+}
diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderParameterGroupTest.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderParameterGroupTest.java
new file mode 100644 (file)
index 0000000..1241b7f
--- /dev/null
@@ -0,0 +1,98 @@
+/*-
+ * ============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.forwarding.xacml.pdp.engine;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.onap.policy.common.parameters.ValidationStatus;
+import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarderParameterGroup;
+import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarderParameterGroup.XacmlPdpPolicyForwarderParameterGroupBuilder;
+
+public class XacmlPdpPolicyForwarderParameterGroupTest {
+
+    @Test
+    public void testBuilderAndGetters() {
+        XacmlPdpPolicyForwarderParameterGroupBuilder builder =
+                new XacmlPdpPolicyForwarderParameterGroupBuilder();
+        XacmlPdpPolicyForwarderParameterGroup configurationParameters =
+                builder.setUseHttps(true).setHostname("10.10.10.10").setPort(1234).setUserName("myUser")
+                        .setPassword("myPassword").setClientAuth("myClientAuth").setIsManaged(false).build();
+
+        assertTrue(configurationParameters.isUseHttps());
+        assertEquals("10.10.10.10", configurationParameters.getHostname());
+        assertEquals(1234, configurationParameters.getPort());
+        assertEquals("myUser", configurationParameters.getUserName());
+        assertEquals("myPassword", configurationParameters.getPassword());
+        assertEquals("myClientAuth", configurationParameters.getClientAuth());
+        assertFalse(configurationParameters.isManaged());
+    }
+
+    @Test
+    public void testInvalidHostName() {
+        XacmlPdpPolicyForwarderParameterGroupBuilder builder =
+                new XacmlPdpPolicyForwarderParameterGroupBuilder();
+        XacmlPdpPolicyForwarderParameterGroup configurationParameters = builder.setUseHttps(true).setHostname("")
+                .setPort(1234).setUserName("myUser").setPassword("myPassword").setIsManaged(false).build();
+        configurationParameters.setName("myConfiguration");
+
+        assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
+    }
+
+    @Test
+    public void testInvalidPort() {
+        XacmlPdpPolicyForwarderParameterGroupBuilder builder =
+                new XacmlPdpPolicyForwarderParameterGroupBuilder();
+        XacmlPdpPolicyForwarderParameterGroup configurationParameters =
+                builder.setUseHttps(true).setHostname("10.10.10.10").setPort(-1234).setUserName("myUser")
+                        .setPassword("myPassword").setIsManaged(false).build();
+        configurationParameters.setName("myConfiguration");
+
+        assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
+    }
+
+    @Test
+    public void testInvalidUserName() {
+        XacmlPdpPolicyForwarderParameterGroupBuilder builder =
+                new XacmlPdpPolicyForwarderParameterGroupBuilder();
+        XacmlPdpPolicyForwarderParameterGroup configurationParameters =
+                builder.setUseHttps(true).setHostname("10.10.10.10").setPort(1234).setUserName("")
+                        .setPassword("myPassword").setIsManaged(false).build();
+        configurationParameters.setName("myConfiguration");
+
+        assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
+    }
+
+    @Test
+    public void testInvalidPassword() {
+        XacmlPdpPolicyForwarderParameterGroupBuilder builder =
+                new XacmlPdpPolicyForwarderParameterGroupBuilder();
+        XacmlPdpPolicyForwarderParameterGroup configurationParameters =
+                builder.setUseHttps(true).setHostname("10.10.10.10").setPort(1234).setUserName("myUser").setPassword("")
+                        .setIsManaged(false).build();
+        configurationParameters.setName("myConfiguration");
+
+        assertEquals(ValidationStatus.INVALID, configurationParameters.validate().getStatus());
+    }
+
+}
diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderTest.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/engine/XacmlPdpPolicyForwarderTest.java
new file mode 100644 (file)
index 0000000..d851b64
--- /dev/null
@@ -0,0 +1,338 @@
+/*-
+ * ============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.forwarding.xacml.pdp.engine;
+
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Response;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.api.PolicyParameters;
+import org.onap.policy.api.PushPolicyParameters;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
+import org.onap.policy.common.endpoints.http.client.HttpClient;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactory;
+import org.onap.policy.common.parameters.ParameterGroup;
+import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarder;
+import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpPolicyForwarderParameterGroup.XacmlPdpPolicyForwarderParameterGroupBuilder;
+import org.onap.policy.distribution.main.PolicyDistributionException;
+import org.onap.policy.distribution.model.OptimizationPolicy;
+import org.onap.policy.distribution.model.Policy;
+
+public class XacmlPdpPolicyForwarderTest {
+
+    private static final BusTopicParams BUS_TOPIC_PARAMS = BusTopicParams.builder().useHttps(false).hostname("myHost")
+            .port(1234).userName("myUser").password("myPassword").managed(true).build();
+    private static final String CLIENT_AUTH = "ClientAuth";
+    private static final String CLIENT_AUTH_VALUE = "myClientAuth";
+    private static final String PDP_GROUP_VALUE = "myPdpGroup";
+    private HashMap<String, Object> headers = new HashMap<>();
+    private BusTopicParamsMatcher matcher = new BusTopicParamsMatcher(BUS_TOPIC_PARAMS);
+
+    /**
+     * Set up.
+     */
+    @BeforeClass
+    public static void setUp() {
+        ParameterGroup parameterGroup = new XacmlPdpPolicyForwarderParameterGroupBuilder()
+                .setUseHttps(BUS_TOPIC_PARAMS.isUseHttps()).setHostname(BUS_TOPIC_PARAMS.getHostname())
+                .setPort(BUS_TOPIC_PARAMS.getPort()).setUserName(BUS_TOPIC_PARAMS.getUserName())
+                .setPassword(BUS_TOPIC_PARAMS.getPassword()).setClientAuth(CLIENT_AUTH_VALUE)
+                .setIsManaged(BUS_TOPIC_PARAMS.isManaged()).setPdpGroup(PDP_GROUP_VALUE).build();
+        parameterGroup.setName("xacmlPdpConfiguration");
+        ParameterService.register(parameterGroup);
+    }
+
+    @Test
+    public void testForwardPolicy() throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException,
+            SecurityException, IllegalArgumentException, IllegalAccessException, PolicyDistributionException {
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
+        when(httpClientMock.put(eq("createPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+        when(httpClientMock.put(eq("pushPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+
+        HttpClientFactory httpClientFactoryMock = mock(HttpClientFactory.class);
+        when(httpClientFactoryMock.build(argThat(matcher))).thenReturn(httpClientMock);
+
+        overwriteField(HttpClient.class, "factory", null, httpClientFactoryMock);
+
+        XacmlPdpPolicyForwarder forwarder = new XacmlPdpPolicyForwarder();
+        forwarder.configure("xacmlPdpConfiguration");
+
+        Collection<Policy> policies = new ArrayList<>();
+
+        OptimizationPolicy policy1 = new OptimizationPolicy();
+        policy1.setPolicyName("policy1");
+        policy1.setPolicyConfigType("Optimization");
+        policies.add(policy1);
+
+        Policy policy2 = new UnsupportedPolicy();
+        policies.add(policy2);
+
+        OptimizationPolicy policy3 = new OptimizationPolicy();
+        policy3.setPolicyName("policy3");
+        policy3.setPolicyConfigType("Optimization");
+        policies.add(policy3);
+
+        forwarder.forward(policies);
+
+        verify(httpClientMock).put(eq("createPolicy"), argThat(new PolicyParametersEntityMatcher(policy1)),
+                eq(headers));
+        verify(httpClientMock).put(eq("createPolicy"), argThat(new PolicyParametersEntityMatcher(policy3)),
+                eq(headers));
+        verify(httpClientMock).put(eq("pushPolicy"), argThat(new PushPolicyParametersEntityMatcher(policy1)),
+                eq(headers));
+        verify(httpClientMock).put(eq("pushPolicy"), argThat(new PushPolicyParametersEntityMatcher(policy3)),
+                eq(headers));
+    }
+
+    @Test
+    public void testForwardPolicy_CreateFailsPushNotInvoked()
+            throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, PolicyDistributionException {
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
+        when(httpClientMock.put(eq("createPolicy"), anyObject(), eq(headers))).thenReturn(Response.status(400).build());
+        when(httpClientMock.put(eq("pushPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+
+        HttpClientFactory httpClientFactoryMock = mock(HttpClientFactory.class);
+        when(httpClientFactoryMock.build(argThat(matcher))).thenReturn(httpClientMock);
+
+        overwriteField(HttpClient.class, "factory", null, httpClientFactoryMock);
+
+        XacmlPdpPolicyForwarder forwarder = new XacmlPdpPolicyForwarder();
+        forwarder.configure("xacmlPdpConfiguration");
+
+        Collection<Policy> policies = new ArrayList<>();
+        OptimizationPolicy policy = new OptimizationPolicy();
+        policy.setPolicyName("policy");
+        policy.setPolicyConfigType("Optimization");
+        policies.add(policy);
+        forwarder.forward(policies);
+
+        verify(httpClientMock).put(eq("createPolicy"), argThat(new PolicyParametersEntityMatcher(policy)), eq(headers));
+        verify(httpClientMock, times(0)).put(eq("pushPolicy"), anyObject(), anyObject());
+    }
+
+    @Test
+    public void testForwardPolicy_PushFails()
+            throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, PolicyDistributionException {
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
+        when(httpClientMock.put(eq("createPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+        when(httpClientMock.put(eq("pushPolicy"), anyObject(), eq(headers))).thenReturn(Response.status(400).build());
+
+        HttpClientFactory httpClientFactoryMock = mock(HttpClientFactory.class);
+        when(httpClientFactoryMock.build(argThat(matcher))).thenReturn(httpClientMock);
+
+        overwriteField(HttpClient.class, "factory", null, httpClientFactoryMock);
+
+        XacmlPdpPolicyForwarder forwarder = new XacmlPdpPolicyForwarder();
+        forwarder.configure("xacmlPdpConfiguration");
+
+        Collection<Policy> policies = new ArrayList<>();
+        OptimizationPolicy policy = new OptimizationPolicy();
+        policy.setPolicyName("policy");
+        policy.setPolicyConfigType("Optimization");
+        policies.add(policy);
+        forwarder.forward(policies);
+
+        verify(httpClientMock).put(eq("createPolicy"), argThat(new PolicyParametersEntityMatcher(policy)), eq(headers));
+        verify(httpClientMock).put(eq("pushPolicy"), argThat(new PushPolicyParametersEntityMatcher(policy)),
+                eq(headers));
+    }
+
+    @Test
+    public void testForwardPolicy_HttpClientInitFailureForPolicyCreate()
+            throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, PolicyDistributionException {
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
+        when(httpClientMock.put(eq("createPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+        when(httpClientMock.put(eq("pushPolicy"), anyObject(), eq(headers))).thenReturn(Response.status(400).build());
+
+        HttpClientFactory httpClientFactoryMock = mock(HttpClientFactory.class);
+        when(httpClientFactoryMock.build(argThat(matcher))).thenThrow(new KeyManagementException());
+
+        overwriteField(HttpClient.class, "factory", null, httpClientFactoryMock);
+
+        XacmlPdpPolicyForwarder forwarder = new XacmlPdpPolicyForwarder();
+        forwarder.configure("xacmlPdpConfiguration");
+
+        Collection<Policy> policies = new ArrayList<>();
+        OptimizationPolicy policy = new OptimizationPolicy();
+        policy.setPolicyName("policy");
+        policy.setPolicyConfigType("Optimization");
+        policies.add(policy);
+        forwarder.forward(policies);
+
+        verify(httpClientMock, times(0)).put(eq("createPolicy"), anyObject(), anyObject());
+        verify(httpClientMock, times(0)).put(eq("pushPolicy"), anyObject(), anyObject());
+    }
+
+    @Test
+    public void testForwardPolicy_HttpClientInitFailureForPolicyPush()
+            throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, PolicyDistributionException {
+
+        HttpClient httpClientMock = mock(HttpClient.class);
+        headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
+        when(httpClientMock.put(eq("createPolicy"), anyObject(), eq(headers))).thenReturn(Response.ok().build());
+        when(httpClientMock.put(eq("pushPolicy"), anyObject(), eq(headers))).thenReturn(Response.status(400).build());
+
+        HttpClientFactory httpClientFactoryMock = mock(HttpClientFactory.class);
+        when(httpClientFactoryMock.build(argThat(matcher))).thenReturn(httpClientMock)
+                .thenThrow(new KeyManagementException());
+
+        overwriteField(HttpClient.class, "factory", null, httpClientFactoryMock);
+
+        XacmlPdpPolicyForwarder forwarder = new XacmlPdpPolicyForwarder();
+        forwarder.configure("xacmlPdpConfiguration");
+
+        Collection<Policy> policies = new ArrayList<>();
+        OptimizationPolicy policy = new OptimizationPolicy();
+        policy.setPolicyName("policy");
+        policy.setPolicyConfigType("Optimization");
+        policies.add(policy);
+        forwarder.forward(policies);
+
+        verify(httpClientMock).put(eq("createPolicy"), argThat(new PolicyParametersEntityMatcher(policy)), eq(headers));
+        verify(httpClientMock, times(0)).put(eq("pushPolicy"), anyObject(), anyObject());
+    }
+
+    private void overwriteField(final Class<?> clazz, final String fieldName, final Object object, final Object value)
+            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+        Field field = clazz.getField(fieldName);
+        field.setAccessible(true);
+        Field modifiersField = Field.class.getDeclaredField("modifiers");
+        modifiersField.setAccessible(true);
+        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
+        field.set(object, value);
+    }
+
+    class BusTopicParamsMatcher extends BaseMatcher<BusTopicParams> {
+
+        private BusTopicParams busTopicParams;
+
+        BusTopicParamsMatcher(final BusTopicParams busTopicParams) {
+            this.busTopicParams = busTopicParams;
+        }
+
+        @Override
+        public boolean matches(Object arg0) {
+            if (arg0 instanceof BusTopicParams) {
+                BusTopicParams toCompareTo = (BusTopicParams) arg0;
+                return toCompareTo.isUseHttps() == busTopicParams.isUseHttps()
+                        && toCompareTo.getHostname().equals(busTopicParams.getHostname())
+                        && toCompareTo.getPort() == busTopicParams.getPort()
+                        && toCompareTo.getUserName().equals(busTopicParams.getUserName())
+                        && toCompareTo.getPassword().equals(busTopicParams.getPassword())
+                        && toCompareTo.isManaged() == busTopicParams.isManaged();
+            }
+            return false;
+        }
+
+        @Override
+        public void describeTo(Description arg0) {}
+    }
+
+    class PolicyParametersEntityMatcher extends BaseMatcher<Entity<PolicyParameters>> {
+
+        private OptimizationPolicy policy;
+
+        PolicyParametersEntityMatcher(final OptimizationPolicy policy) {
+            this.policy = policy;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public boolean matches(Object arg0) {
+            if (arg0 instanceof Entity) {
+                PolicyParameters toCompareTo = ((Entity<PolicyParameters>) arg0).getEntity();
+                return toCompareTo.getPolicyName().equals(policy.getPolicyName())
+                        && toCompareTo.getPolicyConfigType().toString().equals(policy.getPolicyConfigType());
+            }
+            return false;
+        }
+
+        @Override
+        public void describeTo(Description arg0) {}
+    }
+
+    class PushPolicyParametersEntityMatcher extends BaseMatcher<Entity<PushPolicyParameters>> {
+
+        private Policy policy;
+
+        PushPolicyParametersEntityMatcher(final Policy policy) {
+            this.policy = policy;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public boolean matches(Object arg0) {
+            if (arg0 instanceof Entity) {
+                PushPolicyParameters toCompareTo = ((Entity<PushPolicyParameters>) arg0).getEntity();
+                return toCompareTo.getPolicyName().equals(policy.getPolicyName())
+                        && toCompareTo.getPolicyType().equals(policy.getPolicyType())
+                        && toCompareTo.getPdpGroup().equals(PDP_GROUP_VALUE);
+            }
+            return false;
+        }
+
+        @Override
+        public void describeTo(Description arg0) {}
+    }
+
+    class UnsupportedPolicy implements Policy {
+
+        @Override
+        public String getPolicyName() {
+            return "unsupported";
+        }
+
+        @Override
+        public String getPolicyType() {
+            return "unsupported";
+        }
+    }
+}
diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyDecoder.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyDecoder.java
new file mode 100644 (file)
index 0000000..e09357c
--- /dev/null
@@ -0,0 +1,59 @@
+/*-
+ * ============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.forwarding.xacml.pdp.testclasses;
+
+import java.util.Collection;
+
+import org.onap.policy.distribution.model.Policy;
+import org.onap.policy.distribution.model.PolicyInput;
+import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
+import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
+
+/**
+ * Class to create a dummy decoder for test cases.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public class DummyDecoder implements PolicyDecoder<PolicyInput, Policy> {
+
+    private boolean canHandleValue;
+    private Collection<Policy> policesToReturn;
+
+    public DummyDecoder() {
+        this.canHandleValue = false;
+        this.policesToReturn = null;
+    }
+
+    public DummyDecoder(final boolean canHandleValue, final Collection<Policy> policesToReturn) {
+        this.canHandleValue = canHandleValue;
+        this.policesToReturn = policesToReturn;
+    }
+
+    @Override
+    public boolean canHandle(final PolicyInput policyInput) {
+        return canHandleValue;
+    }
+
+    @Override
+    public Collection<Policy> decode(final PolicyInput input) throws PolicyDecodingException {
+        return policesToReturn;
+    }
+}
diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyReceptionHandler.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/xacml/pdp/testclasses/DummyReceptionHandler.java
new file mode 100644 (file)
index 0000000..c093481
--- /dev/null
@@ -0,0 +1,37 @@
+/*-
+ * ============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.forwarding.xacml.pdp.testclasses;
+
+import org.onap.policy.distribution.reception.handling.AbstractReceptionHandler;
+
+/**
+ * Class to create a dummy reception handler for test cases.
+ *
+ * @author Ram Krishna Verma (ram.krishna.verma@ericsson.com)
+ */
+public class DummyReceptionHandler extends AbstractReceptionHandler {
+
+    @Override
+    public void initializeReception(final String parameterGroupName) {}
+
+    @Override
+    public void destroy() {}
+}
index 6e0eb3b..135d256 100644 (file)
@@ -28,4 +28,14 @@ import org.onap.policy.distribution.reception.decoding.PolicyDecoder;
  */
 public class PdpxPolicy implements Policy {
 
+    @Override
+    public String getPolicyName() {
+        return null;
+    }
+
+    @Override
+    public String getPolicyType() {
+        return null;
+    }
+
 }
index eb1a33a..4f3f41e 100644 (file)
@@ -23,7 +23,6 @@ package org.onap.policy.distribution.reception.handling;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
-
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.common.parameters.ParameterService;
@@ -114,7 +113,9 @@ public class PluginHandler {
             try {
                 final Class<PolicyForwarder> policyForwarderClass =
                         (Class<PolicyForwarder>) Class.forName(forwarderParameters.getForwarderClassName());
-                policyForwarders.add(policyForwarderClass.newInstance());
+                PolicyForwarder policyForwarder = policyForwarderClass.newInstance();
+                policyForwarder.configure(forwarderParameters.getForwarderConfigurationName());
+                policyForwarders.add(policyForwarder);
             } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException exp) {
                 LOGGER.error("exception occured while initializing forwarders", exp);
                 throw new PluginInitializationException(exp.getMessage(), exp.getCause());
index 83fe5a4..d339507 100644 (file)
@@ -29,7 +29,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.junit.Test;
 import org.onap.policy.common.parameters.ParameterService;
 import org.onap.policy.distribution.forwarding.PolicyForwarder;
@@ -57,6 +56,7 @@ public class AbstractReceptionHandlerTest {
     private static final String FORWARDER_TYPE = "DummyForwarder";
     private static final String FORWARDER_CLASS_NAME =
             "org.onap.policy.distribution.reception.handling.DummyPolicyForwarder";
+    private static final String FORWARDER_CONFIGURATION_PARAMETERS = "DummyConfiguration";
 
     @Test
     public void testInputReceived() throws PolicyDecodingException, NoSuchFieldException, SecurityException,
@@ -121,9 +121,29 @@ public class AbstractReceptionHandlerTest {
     }
 
     class DummyPolicy1 implements Policy {
+
+        @Override
+        public String getPolicyName() {
+            return null;
+        }
+
+        @Override
+        public String getPolicyType() {
+            return null;
+        }
     }
 
     class DummyPolicy2 implements Policy {
+
+        @Override
+        public String getPolicyName() {
+            return null;
+        }
+
+        @Override
+        public String getPolicyType() {
+            return null;
+        }
     }
 
     private void setUpPlugins(final AbstractReceptionHandler receptionHandler,
@@ -160,7 +180,7 @@ public class AbstractReceptionHandlerTest {
         final Map<String, PolicyForwarderParameters> policyForwarders =
                 new HashMap<String, PolicyForwarderParameters>();
         final PolicyForwarderParameters pFParameters =
-                new PolicyForwarderParameters(FORWARDER_TYPE, FORWARDER_CLASS_NAME);
+                new PolicyForwarderParameters(FORWARDER_TYPE, FORWARDER_CLASS_NAME, FORWARDER_CONFIGURATION_PARAMETERS);
         policyForwarders.put(FORWARDER_KEY, pFParameters);
         return policyForwarders;
     }
index acee469..a665c54 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.policy.distribution.reception.handling;
 
 import java.util.ArrayList;
 import java.util.Collection;
-
 import org.onap.policy.distribution.forwarding.PolicyForwarder;
 import org.onap.policy.distribution.forwarding.PolicyForwardingException;
 import org.onap.policy.distribution.model.Policy;
@@ -49,4 +48,7 @@ public class DummyPolicyForwarder implements PolicyForwarder {
     public boolean receivedPolicy(final Policy policy) {
         return policiesReceived.contains(policy);
     }
+
+    @Override
+    public void configure(String parameterGroupName) {}
 }