Test decision from main entry 23/84523/7
authorPamela Dragosh <pdragosh@research.att.com>
Mon, 8 Apr 2019 12:47:38 +0000 (08:47 -0400)
committerPamela Dragosh <pdragosh@research.att.com>
Wed, 10 Apr 2019 12:39:41 +0000 (08:39 -0400)
Tests a decision upon startup. This also updates the use of
ToscaPolicyTypeIdentifier for all the applications.

Very basic packaging for applications and their properties.

Added cleaning of unused imports to remove sonar issues.

Added production persistence.xml file to guard application.
Not sure if we need a copy in the application/common resource
directory.

Issue-ID: POLICY-1440
Change-Id: If96eef5a9e0a7c6cc5461c0bdb6f0cd708cc41bb
Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
28 files changed:
applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationException.java [new file with mode: 0644]
applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationServiceProvider.java
applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/XacmlPolicyUtils.java
applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java
applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationExceptionTest.java [new file with mode: 0644]
applications/guard/src/main/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplication.java
applications/guard/src/main/java/org/onap/policy/xacml/pdp/application/guard/LegacyGuardPolicyRequest.java
applications/guard/src/main/resources/META-INF/persistence.xml
applications/guard/src/main/resources/unused/RootGuardPolicy.xml [moved from applications/guard/src/main/resources/RootGuardPolicy.xml with 100% similarity]
applications/guard/src/test/java/org/onap/policy/xacml/pdp/application/guard/GuardPdpApplicationTest.java
applications/monitoring/src/main/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplication.java
applications/monitoring/src/test/java/org/onap/policy/xacml/pdp/application/monitoring/MonitoringPdpApplicationTest.java
applications/monitoring/src/test/resources/xacml.properties
applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java
applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java
main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java
main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java
main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java
main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java
main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java
main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java
main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java
packages/policy-xacmlpdp-docker/src/main/docker/Dockerfile
packages/policy-xacmlpdp-tarball/src/main/resources/apps/guard/xacml.properties [new file with mode: 0644]
packages/policy-xacmlpdp-tarball/src/main/resources/apps/monitoring/RootMonitoringPolicy.xml [moved from applications/monitoring/src/main/resources/RootMonitoringPolicy.xml with 100% similarity]
packages/policy-xacmlpdp-tarball/src/main/resources/apps/monitoring/xacml.properties [new file with mode: 0644]
packages/policy-xacmlpdp-tarball/src/main/resources/apps/optimization/xacml.properties [new file with mode: 0644]
packages/policy-xacmlpdp-tarball/src/main/resources/etc/defaultConfig.json

diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationException.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationException.java
new file mode 100644 (file)
index 0000000..e87da76
--- /dev/null
@@ -0,0 +1,49 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. 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.pdp.xacml.application.common;
+
+public class XacmlApplicationException extends Exception {
+    private static final long serialVersionUID = 7588170228926173716L;
+
+    public XacmlApplicationException() {
+        super();
+    }
+
+    public XacmlApplicationException(String message) {
+        super(message);
+    }
+
+    public XacmlApplicationException(Throwable cause) {
+        super(cause);
+    }
+
+    public XacmlApplicationException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public XacmlApplicationException(String message, Throwable cause, boolean enableSuppression,
+            boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+
+}
index 2ddcd02..cf9b15c 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Map;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 
 /**
  * This interface is how the XACML REST controller can communicate
@@ -59,31 +60,30 @@ public interface XacmlApplicationServiceProvider {
      *
      * @param pathForData Local Path
      */
-    void             initialize(Path pathForData);
+    void             initialize(Path pathForData) throws XacmlApplicationException;
 
     /**
      * Returns a list of supported Tosca Policy Types.
      *
      * @return List of Strings (eg. "onap.policy.foo.bar")
      */
-    List<String>     supportedPolicyTypes();
+    List<ToscaPolicyTypeIdentifier>     supportedPolicyTypes();
 
     /**
      * Asks whether the application can support the incoming
      * Tosca Policy Type and version.
      *
-     * @param policyType String Tosca Policy Type
-     * @param policyTypeVersion String of the Tosca Policy Type version
+     * @param toscaPolicyId Identifier for policy type
      * @return true if supported
      */
-    boolean          canSupportPolicyType(String policyType, String policyTypeVersion);
+    boolean          canSupportPolicyType(ToscaPolicyTypeIdentifier toscaPolicyId);
 
     /**
      * Load a Map representation of a Tosca Policy.
      *
      * @param toscaPolicies Map of Tosca Policy Objects
      */
-    void             loadPolicies(Map<String, Object> toscaPolicies);
+    void             loadPolicies(Map<String, Object> toscaPolicies) throws XacmlApplicationException;
 
     /**
      * Makes a decision given the incoming request and returns a response.
index 30363b4..364b651 100644 (file)
@@ -329,10 +329,6 @@ public class XacmlPolicyUtils {
             properties.load(is);
             if (LOGGER.isDebugEnabled()) {
                 LOGGER.debug("Loaded xacml properties {} {}", System.lineSeparator(), properties);
-                //
-                // It would be nice to sort this first
-                //
-                properties.list(System.out);
                 for (Entry<Object, Object> entrySet : properties.entrySet()) {
                     LOGGER.debug("{} -> {}", entrySet.getKey(), entrySet.getValue());
                 }
@@ -349,7 +345,6 @@ public class XacmlPolicyUtils {
     public static void storeXacmlProperties(Properties properties, Path propertyPath) throws IOException {
         if (LOGGER.isDebugEnabled()) {
             LOGGER.debug("Storing xacml properties {} {} {}", properties, System.lineSeparator(), propertyPath);
-            properties.list(System.out);
         }
         try (OutputStream os = Files.newOutputStream(propertyPath)) {
             String strComments = "#";
@@ -367,6 +362,7 @@ public class XacmlPolicyUtils {
         return Paths.get(rootPath.toAbsolutePath().toString(), "xacml.properties");
     }
 
+    @FunctionalInterface
     public interface FileCreator {
         public File createAFile(String filename) throws IOException;
 
index 826acbc..19d8d82 100644 (file)
@@ -42,6 +42,8 @@ import java.util.Properties;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.slf4j.Logger;
@@ -69,12 +71,28 @@ public class StdXacmlApplicationServiceProvider implements XacmlApplicationServi
     }
 
     @Override
-    public void initialize(Path pathForData) {
+    public void initialize(Path pathForData) throws XacmlApplicationException {
         //
         // Save our path
         //
         this.pathForData = pathForData;
-        LOGGER.debug("New Path is {}", this.pathForData.toAbsolutePath());
+        LOGGER.info("New Path is {}", this.pathForData.toAbsolutePath());
+        //
+        // Ensure properties exist
+        //
+        Path propertiesPath = XacmlPolicyUtils.getPropertiesPath(pathForData);
+        if (! propertiesPath.toFile().exists()) {
+            LOGGER.info("Copying src/main/resources/xacml.properties to path");
+            //
+            // Properties do not exist, by default we will copy ours over
+            // from src/main/resources
+            //
+            try {
+                Files.copy(Paths.get("src/main/resources/xacml.properties"), propertiesPath);
+            } catch (IOException e) {
+                throw new XacmlApplicationException("Failed to copy xacml.propertis", e);
+            }
+        }
         //
         // Look for and load the properties object
         //
@@ -82,7 +100,7 @@ public class StdXacmlApplicationServiceProvider implements XacmlApplicationServi
             pdpProperties = XacmlPolicyUtils.loadXacmlProperties(XacmlPolicyUtils.getPropertiesPath(pathForData));
             LOGGER.debug("{}", pdpProperties);
         } catch (IOException e) {
-            LOGGER.error("{}", e);
+            throw new XacmlApplicationException("Failed to load xacml.propertis", e);
         }
         //
         // Create an engine
@@ -91,17 +109,17 @@ public class StdXacmlApplicationServiceProvider implements XacmlApplicationServi
     }
 
     @Override
-    public List<String> supportedPolicyTypes() {
+    public List<ToscaPolicyTypeIdentifier> supportedPolicyTypes() {
         return Collections.emptyList();
     }
 
     @Override
-    public boolean canSupportPolicyType(String policyType, String policyTypeVersion) {
+    public boolean canSupportPolicyType(ToscaPolicyTypeIdentifier policyTypeId) {
         return false;
     }
 
     @Override
-    public void loadPolicies(Map<String, Object> toscaPolicies) {
+    public void loadPolicies(Map<String, Object> toscaPolicies) throws XacmlApplicationException {
         throw new UnsupportedOperationException("Please override and implement loadPolicies");
     }
 
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationExceptionTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/XacmlApplicationExceptionTest.java
new file mode 100644 (file)
index 0000000..be27b31
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. 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.pdp.xacml.application.common;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onap.policy.common.utils.test.ExceptionsTester;
+
+public class XacmlApplicationExceptionTest {
+
+    @Test
+    public void test() {
+        assertEquals(5, new ExceptionsTester().test(XacmlApplicationException.class));
+    }
+}
index 1b12fca..41773ab 100644 (file)
@@ -25,12 +25,11 @@ package org.onap.policy.xacml.pdp.application.guard;
 import com.att.research.xacml.api.Request;
 import com.att.research.xacml.api.Response;
 import com.att.research.xacml.util.XACMLPolicyWriter;
-import com.google.common.collect.Lists;
 
 import java.io.IOException;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -39,7 +38,9 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.onap.policy.pdp.xacml.application.common.std.StdXacmlApplicationServiceProvider;
 import org.slf4j.Logger;
@@ -55,20 +56,22 @@ public class GuardPdpApplication extends StdXacmlApplicationServiceProvider {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(GuardPdpApplication.class);
     private static final String STRING_VERSION100 = "1.0.0";
-    private Map<String, String> supportedPolicyTypes = new HashMap<>();
+    private List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
     private LegacyGuardTranslator translator = new LegacyGuardTranslator();
 
     /** Constructor.
      *
      */
     public GuardPdpApplication() {
-        this.supportedPolicyTypes.put("onap.policies.controlloop.guard.FrequencyLimiter", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.controlloop.guard.MinMax", STRING_VERSION100);
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("onap.policies.controlloop.guard.FrequencyLimiter",
+                STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("onap.policies.controlloop.guard.MinMax",
+                STRING_VERSION100));
     }
 
     @Override
     public String applicationName() {
-        return "Guard Application";
+        return "guard";
     }
 
     @Override
@@ -77,34 +80,33 @@ public class GuardPdpApplication extends StdXacmlApplicationServiceProvider {
     }
 
     @Override
-    public List<String> supportedPolicyTypes() {
-        return Lists.newArrayList(supportedPolicyTypes.keySet());
+    public List<ToscaPolicyTypeIdentifier> supportedPolicyTypes() {
+        return supportedPolicyTypes;
     }
 
     @Override
-    public boolean canSupportPolicyType(String policyType, String policyTypeVersion) {
+    public boolean canSupportPolicyType(ToscaPolicyTypeIdentifier policyTypeId) {
         //
         // For the time being, restrict this if the version isn't known.
         // Could be too difficult to support changing of versions dynamically.
         //
-        if (! this.supportedPolicyTypes.containsKey(policyType)) {
-            return false;
+        for (ToscaPolicyTypeIdentifier supported : this.supportedPolicyTypes) {
+            if (policyTypeId.equals(supported)) {
+                return true;
+            }
         }
-        //
-        // Must match version exactly
-        //
-        return this.supportedPolicyTypes.get(policyType).equals(policyTypeVersion);
+        return false;
     }
 
     @Override
-    public void loadPolicies(Map<String, Object> toscaPolicies) {
+    public void loadPolicies(Map<String, Object> toscaPolicies) throws XacmlApplicationException {
         try {
             //
             // Convert the policies first
             //
             List<PolicyType> listPolicies = translator.scanAndConvertPolicies(toscaPolicies);
             if (listPolicies.isEmpty()) {
-                throw new ToscaPolicyConversionException("Converted 0 policies");
+                throw new XacmlApplicationException("Converted 0 policies");
             }
             //
             // Create a copy of the properties object
index 7346dde..fa04e6b 100644 (file)
@@ -79,9 +79,6 @@ public class LegacyGuardPolicyRequest {
     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:max")
     private Integer max;
 
-    @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:operation:operation-count")
-    private Integer operationCount;
-
     public LegacyGuardPolicyRequest() {
         super();
     }
@@ -150,12 +147,6 @@ public class LegacyGuardPolicyRequest {
         if (guard.containsKey("max")) {
             request.max = Integer.decode(guard.get("max").toString());
         }
-        //
-        // TODO - remove this when the PIP is hooked up
-        //
-        if (guard.containsKey("operationCount")) {
-            request.operationCount = Integer.decode(guard.get("operationCount").toString());
-        }
 
         return request;
     }
index 8d481a5..e01447e 100644 (file)
 
     <persistence-unit name="OperationsHistoryPU" transaction-type="RESOURCE_LOCAL">
         <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
+        <class>org.onap.policy.pdp.xacml.application.common.OnapOperationsHistoryDbao</class>
         <properties>
-             <property name="eclipselink.ddl-generation" value="create-tables" />
+            <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" />
+            <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://policydb:3306/policy" />
+            <property name="javax.persistence.jdbc.user" value="policy_user" />
+            <property name="javax.persistence.jdbc.password" value="policy_user" />
+            <property name="javax.persistence.schema-generation.database.action" value="create" />
+            <property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
+            <property name="eclipselink.ddl-generation.output-mode" value="database" />
             <property name="eclipselink.logging.level" value="INFO" />
         </properties>
     </persistence-unit>
index 0e5d859..be0ee2d 100644 (file)
@@ -54,7 +54,9 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.TextFileUtils;
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.pdp.xacml.application.common.OnapOperationsHistoryDbao;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.slf4j.Logger;
@@ -214,13 +216,15 @@ public class GuardPdpApplicationTest {
         //
         assertThat(service.supportedPolicyTypes()).isNotEmpty();
         assertThat(service.supportedPolicyTypes().size()).isEqualTo(2);
-        assertThat(service.canSupportPolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0"))
-            .isTrue();
-        assertThat(service.canSupportPolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.1"))
-            .isFalse();
-        assertThat(service.canSupportPolicyType("onap.policies.controlloop.guard.MinMax", "1.0.0")).isTrue();
-        assertThat(service.canSupportPolicyType("onap.policies.controlloop.guard.MinMax", "1.0.1")).isFalse();
-        assertThat(service.canSupportPolicyType("onap.foo", "1.0.1")).isFalse();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.controlloop.guard.FrequencyLimiter", "1.0.1"))).isFalse();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.controlloop.guard.MinMax", "1.0.0"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.controlloop.guard.MinMax", "1.0.1"))).isFalse();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier("onap.foo", "1.0.1"))).isFalse();
     }
 
     @Test
@@ -230,7 +234,8 @@ public class GuardPdpApplicationTest {
     }
 
     @Test
-    public void test3FrequencyLimiter() throws CoderException, FileNotFoundException, IOException {
+    public void test3FrequencyLimiter() throws CoderException, FileNotFoundException, IOException,
+        XacmlApplicationException {
         LOGGER.info("**************** Running test3 ****************");
         //
         // Now load the vDNS frequency limiter Policy - make sure
@@ -271,7 +276,7 @@ public class GuardPdpApplicationTest {
     }
 
     @Test
-    public void test4MinMax() throws CoderException, FileNotFoundException, IOException {
+    public void test4MinMax() throws CoderException, FileNotFoundException, IOException, XacmlApplicationException {
         LOGGER.info("**************** Running test4 ****************");
         //
         // Now load the vDNS min max Policy - make sure
@@ -317,7 +322,7 @@ public class GuardPdpApplicationTest {
     }
 
     @Test
-    public void test5MissingFields() throws FileNotFoundException, IOException {
+    public void test5MissingFields() throws FileNotFoundException, IOException, XacmlApplicationException {
         LOGGER.info("**************** Running test5 ****************");
         //
         // Most likely we would not get a policy with missing fields passed to
index d4ffb48..0c928b8 100644 (file)
@@ -27,7 +27,6 @@ import com.att.research.xacml.api.Response;
 import com.att.research.xacml.util.XACMLPolicyScanner;
 import com.att.research.xacml.util.XACMLPolicyWriter;
 import com.att.research.xacml.util.XACMLProperties;
-import com.google.common.collect.Lists;
 
 import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
@@ -35,8 +34,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -47,6 +46,7 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.onap.policy.pdp.xacml.application.common.std.StdCombinedPolicyResultsTranslator;
@@ -70,7 +70,7 @@ public class MonitoringPdpApplication extends StdXacmlApplicationServiceProvider
     private static final String ONAP_MONITORING_DERIVED_POLICY_TYPE = "onap.policies.monitoring";
 
     private StdCombinedPolicyResultsTranslator translator = new StdCombinedPolicyResultsTranslator();
-    private Map<String, String> supportedPolicyTypes = new HashMap<>();
+    private List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
 
     /**
      * Constructor.
@@ -79,12 +79,12 @@ public class MonitoringPdpApplication extends StdXacmlApplicationServiceProvider
         //
         // By default this supports just Monitoring policy types
         //
-        supportedPolicyTypes.put(ONAP_MONITORING_BASE_POLICY_TYPE, "1.0.0");
+        supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(ONAP_MONITORING_BASE_POLICY_TYPE, "1.0.0"));
     }
 
     @Override
     public String applicationName() {
-        return "Monitoring Application";
+        return "monitoring";
     }
 
     @Override
@@ -93,19 +93,19 @@ public class MonitoringPdpApplication extends StdXacmlApplicationServiceProvider
     }
 
     @Override
-    public synchronized List<String> supportedPolicyTypes() {
-        return Lists.newArrayList(supportedPolicyTypes.keySet());
+    public synchronized List<ToscaPolicyTypeIdentifier> supportedPolicyTypes() {
+        return supportedPolicyTypes;
     }
 
     @Override
-    public boolean canSupportPolicyType(String policyType, String policyTypeVersion) {
+    public boolean canSupportPolicyType(ToscaPolicyTypeIdentifier policyTypeId) {
         //
         // For Monitoring, we will attempt to support all versions
         // of the policy type. Since we are only packaging a decision
         // back with a JSON payload of the property contents.
         //
-        return (policyType.equals(ONAP_MONITORING_BASE_POLICY_TYPE)
-                || policyType.startsWith(ONAP_MONITORING_DERIVED_POLICY_TYPE));
+        return (policyTypeId.getName().equals(ONAP_MONITORING_BASE_POLICY_TYPE)
+                || policyTypeId.getName().startsWith(ONAP_MONITORING_DERIVED_POLICY_TYPE));
     }
 
     @Override
index 4af4bac..8099ffd 100644 (file)
@@ -46,6 +46,8 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.TextFileUtils;
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.slf4j.Logger;
@@ -131,11 +133,11 @@ public class MonitoringPdpApplicationTest {
         // Ensure it has the supported policy types and
         // can support the correct policy types.
         //
-        assertThat(service.canSupportPolicyType("onap.Monitoring", "1.0.0")).isTrue();
-        assertThat(service.canSupportPolicyType("onap.Monitoring", "1.5.0")).isTrue();
-        assertThat(service.canSupportPolicyType("onap.policies.monitoring.foobar", "1.0.1")).isTrue();
-        assertThat(service.canSupportPolicyType("onap.foobar", "1.0.0")).isFalse();
-        assertThat(service.supportedPolicyTypes()).contains("onap.Monitoring");
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier("onap.Monitoring", "1.0.0"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier("onap.Monitoring", "1.5.0"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.monitoring.foobar", "1.0.1"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier("onap.foobar", "1.0.0"))).isFalse();
         //
         // Ensure it supports decisions
         //
@@ -156,7 +158,7 @@ public class MonitoringPdpApplicationTest {
 
     @SuppressWarnings("unchecked")
     @Test
-    public void test3AddvDnsPolicy() throws IOException, CoderException {
+    public void test3AddvDnsPolicy() throws IOException, CoderException, XacmlApplicationException {
         //
         // Now load the vDNS Policy - make sure
         // the pdp can support it and have it load
@@ -185,8 +187,9 @@ public class MonitoringPdpApplicationTest {
                     //
                     assertThat(policyDefinition.containsKey("type")).isTrue();
                     assertThat(service.canSupportPolicyType(
+                            new ToscaPolicyTypeIdentifier(
                             policyDefinition.get("type").toString(),
-                            policyDefinition.get("version").toString()))
+                            policyDefinition.get("version").toString())))
                         .isTrue();
                 }
             }
index 56a92d6..36eac3c 100644 (file)
@@ -22,5 +22,5 @@ xacml.att.policyFinderFactory=org.onap.policy.pdp.xacml.application.common.OnapP
 # Policies to load
 #
 xacml.rootPolicies=monitoring
-monitoring.file=src/main/resources/RootMonitoringPolicy.xml
+monitoring.file=../../packages/policy-xacmlpdp-tarball/src/main/resources/apps/monitoring/RootMonitoringPolicy.xml
 
index 4a4a604..accf7a0 100644 (file)
@@ -25,12 +25,12 @@ package org.onap.policy.xacml.pdp.application.optimization;
 import com.att.research.xacml.api.Request;
 import com.att.research.xacml.api.Response;
 import com.att.research.xacml.util.XACMLPolicyWriter;
-import com.google.common.collect.Lists;
 
 import java.io.IOException;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -39,6 +39,7 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.onap.policy.pdp.xacml.application.common.std.StdMatchableTranslator;
@@ -52,26 +53,35 @@ public class OptimizationPdpApplication extends StdXacmlApplicationServiceProvid
     private static final String STRING_VERSION100 = "1.0.0";
 
     private StdMatchableTranslator translator = new StdMatchableTranslator();
-    private Map<String, String> supportedPolicyTypes = new HashMap<>();
+    private List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
 
     /**
      * Constructor.
      */
     public OptimizationPdpApplication() {
-        this.supportedPolicyTypes.put("onap.policies.optimization.AffinityPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.DistancePolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.HpaPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.OptimizationPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.PciPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.QueryPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.SubscriberPolicy", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.Vim_fit", STRING_VERSION100);
-        this.supportedPolicyTypes.put("onap.policies.optimization.VnfPolicy", STRING_VERSION100);
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.AffinityPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.DistancePolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.HpaPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.OptimizationPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.PciPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.QueryPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.SubscriberPolicy", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.Vim_fit", STRING_VERSION100));
+        this.supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.VnfPolicy", STRING_VERSION100));
     }
 
     @Override
     public String applicationName() {
-        return "Optimization Application";
+        return "optimization";
     }
 
     @Override
@@ -80,23 +90,26 @@ public class OptimizationPdpApplication extends StdXacmlApplicationServiceProvid
     }
 
     @Override
-    public synchronized List<String> supportedPolicyTypes() {
-        return Lists.newArrayList(supportedPolicyTypes.keySet());
+    public synchronized List<ToscaPolicyTypeIdentifier> supportedPolicyTypes() {
+        return Collections.unmodifiableList(supportedPolicyTypes);
     }
 
     @Override
-    public boolean canSupportPolicyType(String policyType, String policyTypeVersion) {
+    public boolean canSupportPolicyType(ToscaPolicyTypeIdentifier policyTypeId) {
         //
         // For the time being, restrict this if the version isn't known.
         // Could be too difficult to support changing of versions dynamically.
         //
-        if (! this.supportedPolicyTypes.containsKey(policyType)) {
-            return false;
-        }
         //
-        // Must match version exactly
+        // For the time being, restrict this if the version isn't known.
+        // Could be too difficult to support changing of versions dynamically.
         //
-        return this.supportedPolicyTypes.get(policyType).equals(policyTypeVersion);
+        for (ToscaPolicyTypeIdentifier supported : this.supportedPolicyTypes) {
+            if (policyTypeId.equals(supported)) {
+                return true;
+            }
+        }
+        return false;
     }
 
     @Override
index efbf730..e593d5f 100644 (file)
@@ -47,6 +47,8 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.TextFileUtils;
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
 import org.onap.policy.pdp.xacml.application.common.XacmlPolicyUtils;
 import org.slf4j.Logger;
@@ -139,8 +141,10 @@ public class OptimizationPdpApplicationTest {
         // Ensure it has the supported policy types and
         // can support the correct policy types.
         //
-        assertThat(service.canSupportPolicyType("onap.policies.optimization.AffinityPolicy", "1.0.0")).isTrue();
-        assertThat(service.canSupportPolicyType("onap.foobar", "1.0.0")).isFalse();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.policies.optimization.AffinityPolicy", "1.0.0"))).isTrue();
+        assertThat(service.canSupportPolicyType(new ToscaPolicyTypeIdentifier(
+                "onap.foobar", "1.0.0"))).isFalse();
     }
 
     @Test
@@ -157,7 +161,8 @@ public class OptimizationPdpApplicationTest {
 
     @SuppressWarnings("unchecked")
     @Test
-    public void test3AddOptimizationPolicies() throws CoderException, FileNotFoundException, IOException {
+    public void test3AddOptimizationPolicies() throws CoderException, FileNotFoundException, IOException,
+        XacmlApplicationException {
         //
         // Now load the optimization policies
         //
@@ -184,8 +189,9 @@ public class OptimizationPdpApplicationTest {
                     //
                     assertThat(policyDefinition.containsKey("type")).isTrue();
                     assertThat(service.canSupportPolicyType(
+                            new ToscaPolicyTypeIdentifier(
                             policyDefinition.get("type").toString(),
-                            policyDefinition.get("version").toString()))
+                            policyDefinition.get("version").toString())))
                         .isTrue();
                 }
             }
index e05120d..233bd7f 100644 (file)
@@ -58,6 +58,8 @@ public class XacmlPdpMessage {
         status.setState(state);
         status.setSupportedPolicyTypes(XacmlPdpApplicationManager.getToscaPolicyTypeIdents());
 
+        LOGGER.debug("formatStatusMessage state {} status{}", state, status);
+
         return status;
 
     }
index 68bf06d..f5b2fbf 100644 (file)
@@ -30,7 +30,6 @@ import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.pdpx.main.comm.XacmlPdpHeartbeatPublisher;
 import org.onap.policy.pdpx.main.comm.XacmlPdpMessage;
-import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 7d3292a..a5e1d03 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.policy.pdpx.main.rest;
 
+import java.io.IOException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -29,6 +31,7 @@ import java.util.Map;
 import java.util.ServiceLoader;
 import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException;
 import org.onap.policy.pdp.xacml.application.common.XacmlApplicationServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,44 +63,43 @@ public class XacmlPdpApplicationManager {
         // Load service
         //
         applicationLoader = ServiceLoader.load(XacmlApplicationServiceProvider.class);
-
         //
-        // Iterate through them the applications for actions and supported policy types
+        // Iterate through the applications for actions and supported policy types
         //
         for (XacmlApplicationServiceProvider application : applicationLoader) {
-
             LOGGER.info("Application {} supports {}", application.applicationName(),
                     application.supportedPolicyTypes());
-
             //
-            // Iterate through the actions and save in the providerActionMap
+            // We are not going to make this available unless the application can
+            // install correctly.
             //
-            int pathCount = 1;
-            for (String action : application.actionDecisionsSupported()) {
+            boolean applicationInitialized = false;
+            //
+            // Have it initialize at a path
+            //
+            try {
+                initializeApplicationPath(applicationPath, application);
                 //
-                // Save the actions that it supports
+                // We are initialized
                 //
-                providerActionMap.put(action, application);
+                applicationInitialized = true;
+            } catch (XacmlApplicationException e) {
+                LOGGER.error("Failed to initialize path for {}", application.applicationName(), e);
+            }
+            if (applicationInitialized) {
                 //
-                // Create a unique path for the application to store its data
-                // May need to scan this name to remove unsafe characters etc.
-                // But for debugging purposes, its good to use the application name
+                // Iterate through the actions and save in the providerActionMap
                 //
-                Path path = Paths.get(applicationPath.toAbsolutePath().toString(),
-                        application.applicationName(), Integer.toString(pathCount++));
+                for (String action : application.actionDecisionsSupported()) {
+                    //
+                    // Save the actions that it supports
+                    //
+                    providerActionMap.put(action, application);
+                }
                 //
-                // Have the application initialize
+                // Add all the supported policy types
                 //
-                application.initialize(path);
-            }
-
-            // Get string list of supportedPolicyTypes
-            List<String> supportedPolicyTypes = application.supportedPolicyTypes();
-
-            // Iterate through the supportedPolicyTypes to set the toscaPolicyTypeIdents
-            for (String name : supportedPolicyTypes) {
-                ToscaPolicyTypeIdentifier ident = new ToscaPolicyTypeIdentifier(name, "1.0.0");
-                toscaPolicyTypeIdents.add(ident);
+                toscaPolicyTypeIdents.addAll(application.supportedPolicyTypes());
             }
         }
         //
@@ -129,4 +131,34 @@ public class XacmlPdpApplicationManager {
         return types;
     }
 
+    private static void initializeApplicationPath(Path basePath, XacmlApplicationServiceProvider application)
+            throws XacmlApplicationException {
+        //
+        // Making an assumption that all application names are unique, and
+        // they can result in a valid directory being created.
+        //
+        Path path = Paths.get(basePath.toAbsolutePath().toString(), application.applicationName());
+        LOGGER.info("initializeApplicationPath {} at this path {}", application.applicationName(), path);
+        //
+        // Create that the directory if it does not exist. Ideally
+        // this is only for testing, but could be used for production
+        // Probably better to have the docker container and/or helm
+        // scripts setup the local directory.
+        //
+        if (! path.toFile().exists()) {
+            try {
+                //
+                // Try to create the directory
+                //
+                Files.createDirectory(path);
+            } catch (IOException e) {
+                LOGGER.error("Failed to create application directory", e);
+            }
+        }
+        //
+        // Have the application initialize
+        //
+        application.initialize(path);
+    }
+
 }
index b5915e1..62cdc34 100644 (file)
 package org.onap.policy.pdpx.main.startstop;
 
 import java.io.FileInputStream;
-import java.net.UnknownHostException;
 import java.util.Arrays;
 import java.util.Properties;
-import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException;
+
 import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
-import org.onap.policy.pdpx.main.comm.XacmlPdpPapRegistration;
 import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterGroup;
 import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterHandler;
 import org.slf4j.Logger;
index 5beeed3..9695c7b 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.policy.pdpx.main.startstop;
 
 import java.util.Arrays;
 import java.util.Properties;
+
 import org.onap.policy.common.endpoints.event.comm.TopicEndpoint;
 import org.onap.policy.common.endpoints.event.comm.TopicSource;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
@@ -33,7 +34,6 @@ import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.models.pdp.concepts.PdpUpdate;
 import org.onap.policy.models.pdp.enums.PdpMessageType;
 import org.onap.policy.models.pdp.enums.PdpState;
-import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
 import org.onap.policy.pdpx.main.PolicyXacmlPdpRuntimeException;
 import org.onap.policy.pdpx.main.comm.XacmlPdpMessage;
 import org.onap.policy.pdpx.main.comm.XacmlPdpPapRegistration;
index c93ba6f..b81336a 100644 (file)
@@ -23,12 +23,21 @@ package org.onap.policy.pdpx.main.rest;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Entity;
@@ -37,11 +46,14 @@ import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
+
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
 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.gson.GsonMessageBodyHandler;
@@ -50,6 +62,9 @@ import org.onap.policy.models.decisions.concepts.DecisionRequest;
 import org.onap.policy.models.decisions.concepts.DecisionResponse;
 import org.onap.policy.models.errors.concepts.ErrorResponse;
 import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
+import org.onap.policy.pdpx.main.parameters.RestServerBuilder;
+import org.onap.policy.pdpx.main.parameters.RestServerParameters;
+import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterGroup;
 import org.onap.policy.pdpx.main.startstop.Main;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,14 +75,40 @@ public class TestDecision {
 
     private static Main main;
 
+    @ClassRule
+    public static final TemporaryFolder appsFolder = new TemporaryFolder();
+
     /**
      * BeforeClass setup environment.
+     * @throws IOException Cannot create temp apps folder
      */
     @BeforeClass
-    public static void beforeClass() {
+    public static void beforeClass() throws IOException {
         System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog");
         System.setProperty("org.eclipse.jetty.LEVEL", "OFF");
-        main = startXacmlPdpService();
+        //
+        // Copy test directory over of the application directories
+        //
+        Path src = Paths.get("../packages/policy-xacmlpdp-tarball/src/main/resources/apps");
+        File apps = appsFolder.newFolder("apps");
+        Files.walk(src).forEach(source -> {
+            copy(source, apps.toPath().resolve(src.relativize(source)));
+        });
+        //
+        // Get the parameters file correct.
+        //
+        RestServerParameters rest = new RestServerParameters(new RestServerBuilder()
+                .setHost("0.0.0.0").setPort(6969).setUserName("healthcheck").setPassword("zb!XztG34"));
+        XacmlPdpParameterGroup params = new XacmlPdpParameterGroup("XacmlPdpGroup", rest, apps.getAbsolutePath());
+        final Gson gson = new GsonBuilder().create();
+        File fileParams = appsFolder.newFile("params.json");
+        String jsonParams = gson.toJson(params);
+        LOGGER.info("Creating new params: {}", jsonParams);
+        Files.write(fileParams.toPath(), jsonParams.getBytes());
+        //
+        // Start the service
+        //
+        main = startXacmlPdpService(fileParams);
     }
 
     @AfterClass
@@ -113,11 +154,11 @@ public class TestDecision {
 
         DecisionResponse response = getDecision(request);
         LOGGER.info("Response {}", response);
-        //assertThat(response.getErrorMessage()).isEqualToIgnoringCase("No application for action foo");
+        assertThat(response.getStatus()).isEqualTo("Permit");
     }
 
-    private static Main startXacmlPdpService() {
-        final String[] XacmlPdpConfigParameters = {"-c", "parameters/XacmlPdpConfigParameters.json", "-p",
+    private static Main startXacmlPdpService(File params) {
+        final String[] XacmlPdpConfigParameters = {"-c", params.getAbsolutePath(), "-p",
             "parameters/topic.properties"};
         return new Main(XacmlPdpConfigParameters);
     }
@@ -167,5 +208,13 @@ public class TestDecision {
                 .userName("healthcheck").password("zb!XztG34").managed(true).build());
     }
 
+    private static void copy(Path source, Path dest) {
+        try {
+            LOGGER.info("Copying {} to {}", source, dest);
+            Files.copy(source, dest, StandardCopyOption.REPLACE_EXISTING);
+        } catch (IOException e) {
+            LOGGER.error("Failed to copy {} to {}", source, dest);
+        }
+    }
 
 }
\ No newline at end of file
index 51f737a..5930dd5 100644 (file)
@@ -26,12 +26,11 @@ import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.net.UnknownHostException;
 import java.util.Properties;
+
 import org.junit.After;
 import org.junit.BeforeClass;
-
 import org.junit.Test;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException;
 import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
index e6b3746..3732e58 100644 (file)
@@ -10,30 +10,27 @@ ENV https_proxy $HTTPS_PROXY
 ENV BUILD_VERSION ${BUILD_VERSION}
 ENV POLICY_LOGS ${POLICY_LOGS}
 
-ENV POLICY_HOME=/opt/app/policy
-ENV POLICY_PDPX_HOME=${POLICY_HOME}/pdpx
+ENV POLICY_HOME=/opt/app/policy/pdpx
 
 RUN \
     apk add --no-cache --update busybox-extras bash nss procps coreutils findutils grep \
                                 zip unzip curl wget openssh maven openjdk8 jq httpie py-pip
 
-
 RUN addgroup policy && \
     adduser -S --shell /bin/bash -G policy policy
 
-RUN mkdir -p ${POLICY_PDPX_HOME} ${POLICY_LOGS} ${POLICY_HOME}/etc/ssl ${POLICY_PDPX_HOME}/bin && \
-    chown  -R policy:policy ${POLICY_HOME} ${POLICY_PDPX_HOME} ${POLICY_LOGS}
+RUN mkdir -p ${POLICY_HOME} ${POLICY_LOGS} ${POLICY_HOME}/etc/ssl ${POLICY_HOME}/bin ${POLICY_HOME}/apps && \
+    chown  -R policy:policy ${POLICY_HOME} ${POLICY_LOGS}
 
 RUN mkdir /packages
 COPY /maven/* /packages
-RUN tar xvfz /packages/policy-xacmlpdp.tar.gz --directory ${POLICY_PDPX_HOME} && \
+RUN tar xvfz /packages/policy-xacmlpdp.tar.gz --directory ${POLICY_HOME} && \
     rm /packages/policy-xacmlpdp.tar.gz
 
-WORKDIR ${POLICY_PDPX_HOME}
+WORKDIR ${POLICY_HOME}
 COPY policy-pdpx.sh  bin/.
-RUN chown -R policy:policy * && chmod +x bin/*.sh && \
-    cp ${POLICY_PDPX_HOME}/etc/ssl/* ${POLICY_HOME}/etc/ssl && chown policy:policy ${POLICY_HOME}/etc/ssl/*
+RUN chown -R policy:policy * && chmod +x bin/*.sh
 
 USER policy
-WORKDIR ${POLICY_PDPX_HOME}/bin
+WORKDIR ${POLICY_HOME}/bin
 ENTRYPOINT [ "bash", "./policy-pdpx.sh" ]
diff --git a/packages/policy-xacmlpdp-tarball/src/main/resources/apps/guard/xacml.properties b/packages/policy-xacmlpdp-tarball/src/main/resources/apps/guard/xacml.properties
new file mode 100644 (file)
index 0000000..e3ef3eb
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# Properties that the embedded PDP engine uses to configure and load
+#
+# Standard API Factories
+#
+xacml.dataTypeFactory=com.att.research.xacml.std.StdDataTypeFactory
+xacml.pdpEngineFactory=com.att.research.xacmlatt.pdp.ATTPDPEngineFactory
+xacml.pepEngineFactory=com.att.research.xacml.std.pep.StdEngineFactory
+xacml.pipFinderFactory=com.att.research.xacml.std.pip.StdPIPFinderFactory
+xacml.traceEngineFactory=com.att.research.xacml.std.trace.LoggingTraceEngineFactory
+#
+# AT&T PDP Implementation Factories
+#
+xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
+xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
+xacml.att.functionDefinitionFactory=com.att.research.xacmlatt.pdp.std.StdFunctionDefinitionFactory
+#
+# ONAP PDP Implementation Factories
+#
+xacml.att.policyFinderFactory=org.onap.policy.pdp.xacml.application.common.OnapPolicyFinderFactory
+
+#
+# Use a root combining algorithm
+#
+xacml.att.policyFinderFactory.combineRootPolicies=urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:permit-unless-deny
+
+xacml.pip.engines=historydb
+
+#
+# PIP Engine Definition
+#
+historydb.classname=org.onap.policy.pdp.xacml.application.common.OnapOperationsHistoryPipEngine
+historydb.issuer=urn:org:onap:xacml:guard:historydb
+historydb.name=operationHistoryDB
+historydb.description=Returns operation counts based on time window
+
+#
+# Database persistence for PIP
+#
+historydb.persistenceunit=OperationsHistoryPU
+
+# Policies to load
+#
+#xacml.rootPolicies=guard
+#guard.file=src/main/resources/RootGuardPolicy.xml
+
diff --git a/packages/policy-xacmlpdp-tarball/src/main/resources/apps/monitoring/xacml.properties b/packages/policy-xacmlpdp-tarball/src/main/resources/apps/monitoring/xacml.properties
new file mode 100644 (file)
index 0000000..8ad5152
--- /dev/null
@@ -0,0 +1,26 @@
+#
+# Properties that the embedded PDP engine uses to configure and load
+#
+# Standard API Factories
+#
+xacml.dataTypeFactory=com.att.research.xacml.std.StdDataTypeFactory
+xacml.pdpEngineFactory=com.att.research.xacmlatt.pdp.ATTPDPEngineFactory
+xacml.pepEngineFactory=com.att.research.xacml.std.pep.StdEngineFactory
+xacml.pipFinderFactory=com.att.research.xacml.std.pip.StdPIPFinderFactory
+xacml.traceEngineFactory=com.att.research.xacml.std.trace.LoggingTraceEngineFactory
+#
+# AT&T PDP Implementation Factories
+#
+xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
+xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
+xacml.att.functionDefinitionFactory=com.att.research.xacmlatt.pdp.std.StdFunctionDefinitionFactory
+#
+# ONAP PDP Implementation Factories
+#
+xacml.att.policyFinderFactory=org.onap.policy.pdp.xacml.application.common.OnapPolicyFinderFactory
+
+# Policies to load
+#
+xacml.rootPolicies=monitoring
+monitoring.file=/opt/app/policy/pdpx/apps/monitoring/RootMonitoringPolicy.xml
+
diff --git a/packages/policy-xacmlpdp-tarball/src/main/resources/apps/optimization/xacml.properties b/packages/policy-xacmlpdp-tarball/src/main/resources/apps/optimization/xacml.properties
new file mode 100644 (file)
index 0000000..5ea247c
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# Properties that the embedded PDP engine uses to configure and load
+#
+# Standard API Factories
+#
+xacml.dataTypeFactory=com.att.research.xacml.std.StdDataTypeFactory
+xacml.pdpEngineFactory=com.att.research.xacmlatt.pdp.ATTPDPEngineFactory
+xacml.pepEngineFactory=com.att.research.xacml.std.pep.StdEngineFactory
+xacml.pipFinderFactory=com.att.research.xacml.std.pip.StdPIPFinderFactory
+xacml.traceEngineFactory=com.att.research.xacml.std.trace.LoggingTraceEngineFactory
+#
+# AT&T PDP Implementation Factories
+#
+xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
+xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
+xacml.att.functionDefinitionFactory=com.att.research.xacmlatt.pdp.std.StdFunctionDefinitionFactory
+#
+# ONAP PDP Implementation Factories
+#
+xacml.att.policyFinderFactory=org.onap.policy.pdp.xacml.application.common.OnapPolicyFinderFactory
+
+#
+# Use a root combining algorithm
+#
+xacml.att.policyFinderFactory.combineRootPolicies=urn:com:att:xacml:3.0:policy-combining-algorithm:combined-permit-overrides
+
+#
+# Policies to load
+#
+xacml.rootPolicies=
+xacml.referencedPolicies=
\ No newline at end of file
index 561574a..cc13e5b 100644 (file)
@@ -7,5 +7,6 @@
         "password": "zb!XztG34",
         "https": true,
         "aaf": false
-    }
+    },
+    "applicationPath": "/opt/app/policy/pdpx/apps"
 }