aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java2
-rw-r--r--main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java1
-rw-r--r--main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java82
-rw-r--r--main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java4
-rw-r--r--main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java2
-rw-r--r--main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java59
-rw-r--r--main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java3
7 files changed, 116 insertions, 37 deletions
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java b/main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java
index e05120d7..233bd7f7 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/comm/XacmlPdpMessage.java
@@ -58,6 +58,8 @@ public class XacmlPdpMessage {
status.setState(state);
status.setSupportedPolicyTypes(XacmlPdpApplicationManager.getToscaPolicyTypeIdents());
+ LOGGER.debug("formatStatusMessage state {} status{}", state, status);
+
return status;
}
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java b/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java
index 68bf06dd..f5b2fbfa 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java
@@ -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;
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java b/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java
index 7d3292a6..a5e1d030 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/rest/XacmlPdpApplicationManager.java
@@ -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);
+ }
+
}
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java b/main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java
index b5915e11..62cdc34a 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/startstop/Main.java
@@ -21,12 +21,10 @@
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;
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java
index 5beeed38..9695c7b9 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/startstop/XacmlPdpActivator.java
@@ -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;
diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java
index c93ba6f7..b81336a5 100644
--- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java
+++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java
@@ -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
diff --git a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java
index 51f737a0..5930dd5e 100644
--- a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java
+++ b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java
@@ -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;