Get policy type from policy-api
Added a class to retrieve a policy type from the policy-api.
Updated property files to include parameters that are needed
to configure it.
Updates per review comments:
- change PolicyApi to PolicyApiCaller
- use HttpClientFactory
- removed superfluous constructors from exception classes
- changed parameters to use RestServerParameters instead of BusTopicParams
Change-Id: I8aad6ca5a733c8ad9cc983496e745ebe7400dd17
Issue-ID: POLICY-1911
Signed-off-by: Jim Hahn <jrh3@att.com>
diff --git a/applications/common/pom.xml b/applications/common/pom.xml
index 0144767..acc74ea 100644
--- a/applications/common/pom.xml
+++ b/applications/common/pom.xml
@@ -49,6 +49,11 @@
</dependency>
<dependency>
<groupId>org.onap.policy.common</groupId>
+ <artifactId>policy-endpoints</artifactId>
+ <version>${policy.common.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.common</groupId>
<artifactId>utils-test</artifactId>
<version>${policy.common.version}</version>
</dependency>
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/NotFoundException.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/NotFoundException.java
new file mode 100644
index 0000000..260d16f
--- /dev/null
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/NotFoundException.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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;
+
+/**
+ * Exception indicating that the data of interest was not found when querying the
+ * policy-api.
+ */
+public class NotFoundException extends PolicyApiException {
+ private static final long serialVersionUID = 1L;
+
+ public NotFoundException(String message) {
+ super(message);
+ }
+
+ public NotFoundException(Throwable cause) {
+ super(cause);
+ }
+
+ public NotFoundException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCaller.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCaller.java
new file mode 100644
index 0000000..9d47517
--- /dev/null
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCaller.java
@@ -0,0 +1,106 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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 java.net.HttpURLConnection;
+import javax.ws.rs.core.Response;
+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.HttpClientConfigException;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
+import org.onap.policy.common.endpoints.parameters.RestServerParameters;
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Methods to access policy-api via REST service calls.
+ */
+public class PolicyApiCaller {
+ private static Logger logger = LoggerFactory.getLogger(PolicyApiCaller.class);
+
+ private static final String POLICY_TYPE_URI = "/policy/api/v1/policytypes/";
+ private static final String POLICY_TYPE_VERSION_URI = "/versions/";
+
+ private final HttpClient httpClient;
+
+ /**
+ * Constructs the object.
+ *
+ * @param params target specification
+ * @throws PolicyApiException if an error occurs
+ */
+ public PolicyApiCaller(RestServerParameters params) throws PolicyApiException {
+ BusTopicParams busParams = new BusTopicParams();
+ busParams.setClientName("policy-api");
+ busParams.setHostname(params.getHost());
+ busParams.setManaged(false);
+ busParams.setPassword(params.getPassword());
+ busParams.setPort(params.getPort());
+ busParams.setSerializationProvider(GsonMessageBodyHandler.class.getName());
+ busParams.setUseHttps(params.isHttps());
+ busParams.setUserName(params.getUserName());
+
+ try {
+ httpClient = makeClient(busParams);
+ } catch (HttpClientConfigException e) {
+ throw new PolicyApiException("connection to host: " + busParams.getHostname(), e);
+ }
+ }
+
+ /**
+ * Gets a policy type from policy-api.
+ *
+ * @param type policy type of interest
+ * @return the desired policy type
+ * @throws PolicyApiException if an error occurs
+ */
+ public ToscaPolicyType getPolicyType(ToscaPolicyTypeIdentifier type) throws PolicyApiException {
+
+ try {
+ Response resp = httpClient
+ .get(POLICY_TYPE_URI + type.getName() + POLICY_TYPE_VERSION_URI + type.getVersion());
+
+ switch (resp.getStatus()) {
+ case HttpURLConnection.HTTP_OK:
+ return resp.readEntity(ToscaPolicyType.class);
+ case HttpURLConnection.HTTP_NOT_FOUND:
+ logger.warn("policy-api not found {}", resp);
+ throw new NotFoundException(type.toString());
+ default:
+ logger.warn("policy-api request error {}", resp);
+ throw new PolicyApiException(type.toString());
+ }
+
+ } catch (RuntimeException e) {
+ logger.warn("policy-api connection error");
+ throw new PolicyApiException(type.toString(), e);
+ }
+ }
+
+ // these methods may be overridden by junit tests
+
+ protected HttpClient makeClient(BusTopicParams busParams) throws HttpClientConfigException {
+ return HttpClientFactoryInstance.getClientFactory().build(busParams);
+ }
+}
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiException.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiException.java
new file mode 100644
index 0000000..380bd19
--- /dev/null
+++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/PolicyApiException.java
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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;
+
+/**
+ * Exception occurring while accessing the policy-api.
+ */
+public class PolicyApiException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public PolicyApiException(String message) {
+ super(message);
+ }
+
+ public PolicyApiException(Throwable cause) {
+ super(cause);
+ }
+
+ public PolicyApiException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/ExceptionTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/ExceptionTest.java
new file mode 100644
index 0000000..63c6b24
--- /dev/null
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/ExceptionTest.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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 ExceptionTest {
+
+ @Test
+ public void test() {
+ ExceptionsTester tester = new ExceptionsTester();
+
+ assertEquals(3, tester.test(PolicyApiException.class));
+ assertEquals(3, tester.test(NotFoundException.class));
+ }
+}
diff --git a/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCallerTest.java b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCallerTest.java
new file mode 100644
index 0000000..6e7ec7c
--- /dev/null
+++ b/applications/common/src/test/java/org/onap/policy/pdp/xacml/application/common/PolicyApiCallerTest.java
@@ -0,0 +1,201 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.UUID;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+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.HttpClientConfigException;
+import org.onap.policy.common.endpoints.http.server.HttpServletServer;
+import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
+import org.onap.policy.common.endpoints.parameters.RestServerParameters;
+import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
+import org.onap.policy.common.gson.GsonMessageBodyHandler;
+import org.onap.policy.common.utils.network.NetworkUtil;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PolicyApiCallerTest {
+ private static final String MY_TYPE = "my-type";
+
+ private static final String MY_VERSION = "1.0.0";
+
+ private static final Logger logger = LoggerFactory.getLogger(PolicyApiCallerTest.class);
+
+ private static final String CLIENT_NAME = "policy-api";
+ private static final String NOT_A_TYPE = "other-type";
+ private static final String INVALID_TYPE = "invalid";
+ private static final String UNKNOWN_TYPE = "unknown";
+
+ private static int port;
+ private static RestServerParameters clientParams;
+
+ private PolicyApiCaller api;
+
+ /**
+ * Initializes {@link #clientParams} and starts a simple REST server to handle the
+ * test requests.
+ *
+ * @throws IOException if an error occurs
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ port = NetworkUtil.allocPort();
+
+ clientParams = mock(RestServerParameters.class);
+ when(clientParams.getHost()).thenReturn("localhost");
+ when(clientParams.getPort()).thenReturn(port);
+
+ Properties props = new Properties();
+ props.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, CLIENT_NAME);
+
+ final String svcpfx =
+ PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + CLIENT_NAME;
+
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, clientParams.getHost());
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX,
+ Integer.toString(clientParams.getPort()));
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
+ ApiRestController.class.getName());
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_AAF_SUFFIX, "false");
+ props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SERIALIZATION_PROVIDER,
+ GsonMessageBodyHandler.class.getName());
+
+ HttpServletServerFactoryInstance.getServerFactory().build(props).forEach(HttpServletServer::start);
+
+ assertTrue(NetworkUtil.isTcpPortOpen(clientParams.getHost(), clientParams.getPort(), 100, 100));
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ HttpServletServerFactoryInstance.getServerFactory().destroy();
+ }
+
+ /**
+ * Resets {@link #clientParams} and populates {@link #api}.
+ *
+ * @throws PolicyApiException if an error occurs
+ */
+ @Before
+ public void setUp() throws PolicyApiException {
+ when(clientParams.getPort()).thenReturn(port);
+
+ api = new PolicyApiCaller(clientParams);
+ }
+
+ @Test
+ public void testPolicyApi() {
+ assertThatThrownBy(() -> new PolicyApiCaller(clientParams) {
+ @Override
+ protected HttpClient makeClient(BusTopicParams busParams) throws HttpClientConfigException {
+ throw new HttpClientConfigException("expected exception");
+ }
+ }).isInstanceOf(PolicyApiException.class);
+ }
+
+ @Test
+ public void testGetPolicyType() throws Exception {
+
+ assertNotNull(api.getPolicyType(new ToscaPolicyTypeIdentifier(MY_TYPE, MY_VERSION)));
+
+ assertThatThrownBy(() -> api.getPolicyType(new ToscaPolicyTypeIdentifier(INVALID_TYPE, MY_VERSION)))
+ .isInstanceOf(PolicyApiException.class);
+
+ assertThatThrownBy(() -> api.getPolicyType(new ToscaPolicyTypeIdentifier(UNKNOWN_TYPE, MY_VERSION)))
+ .isInstanceOf(NotFoundException.class);
+
+ assertThatThrownBy(() -> api.getPolicyType(new ToscaPolicyTypeIdentifier(NOT_A_TYPE, MY_VERSION)))
+ .isInstanceOf(PolicyApiException.class);
+
+ // connect to a port that has no server
+ when(clientParams.getPort()).thenReturn(NetworkUtil.allocPort());
+ api = new PolicyApiCaller(clientParams);
+
+ assertThatThrownBy(() -> api.getPolicyType(new ToscaPolicyTypeIdentifier(MY_TYPE, MY_VERSION)))
+ .isInstanceOf(PolicyApiException.class);
+ }
+
+ /**
+ * Simple REST server to handle test requests.
+ */
+
+ @Path("/policy/api/v1")
+ @Produces({"application/json", "application/yaml"})
+ @Consumes({"application/json", "application/yaml"})
+ public static class ApiRestController {
+
+ /**
+ * Retrieves the specified version of a particular policy type.
+ *
+ * @param policyTypeId ID of desired policy type
+ * @param versionId version of desired policy type
+ * @param requestId optional request ID
+ *
+ * @return the Response object containing the results of the API operation
+ */
+ @GET
+ @Path("/policytypes/{policyTypeId}/versions/{versionId}")
+ public Response getSpecificVersionOfPolicyType(@PathParam("policyTypeId") String policyTypeId,
+ @PathParam("versionId") String versionId, @HeaderParam("X-ONAP-RequestID") UUID requestId) {
+
+ assertEquals(MY_VERSION, versionId);
+
+ switch (policyTypeId) {
+ case UNKNOWN_TYPE:
+ logger.info("request for unknown policy type");
+ return Response.status(Response.Status.NOT_FOUND).build();
+ case INVALID_TYPE:
+ logger.info("invalid request for policy type");
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ case NOT_A_TYPE:
+ logger.info("invalid request for policy type");
+ return Response.status(Response.Status.OK).entity("string-type").build();
+ default:
+ logger.info("request for policy type={} version={}", policyTypeId, versionId);
+ return Response.status(Response.Status.OK).entity(new ToscaPolicyType()).build();
+ }
+ }
+ }
+}
diff --git a/main/src/main/java/org/onap/policy/pdpx/main/parameters/XacmlPdpParameterGroup.java b/main/src/main/java/org/onap/policy/pdpx/main/parameters/XacmlPdpParameterGroup.java
index 167a2c4..5731a7b 100644
--- a/main/src/main/java/org/onap/policy/pdpx/main/parameters/XacmlPdpParameterGroup.java
+++ b/main/src/main/java/org/onap/policy/pdpx/main/parameters/XacmlPdpParameterGroup.java
@@ -21,6 +21,8 @@
package org.onap.policy.pdpx.main.parameters;
+import lombok.Getter;
+import lombok.Setter;
import org.onap.policy.common.endpoints.parameters.RestServerParameters;
import org.onap.policy.common.endpoints.parameters.TopicParameterGroup;
import org.onap.policy.common.parameters.GroupValidationResult;
@@ -32,12 +34,18 @@
* Class to hold all parameters needed for xacml pdp component.
*
*/
+@Getter
public class XacmlPdpParameterGroup implements ParameterGroup {
private static final String PARAM_REST_SERVER = "restServerParameters";
+ private static final String PARAM_POLICY_API = "policyApiParameters";
private static final String PARAM_TOPIC_PARAMETER_GROUP = "topicParameterGroup";
private static final String PARAM_APPLICATION_PATH = "applicationPath";
+
+ @Setter
private String name;
+
private RestServerParameters restServerParameters;
+ private RestServerParameters policyApiParameters;
private TopicParameterGroup topicParameterGroup;
private String applicationPath;
@@ -47,61 +55,16 @@
* @param name the parameter group name
*/
public XacmlPdpParameterGroup(final String name, final RestServerParameters restServerParameters,
- final TopicParameterGroup topicParameterGroup, final String applicationPath) {
+ final RestServerParameters policyApiParameters, final TopicParameterGroup topicParameterGroup,
+ final String applicationPath) {
this.name = name;
this.restServerParameters = restServerParameters;
+ this.policyApiParameters = policyApiParameters;
this.topicParameterGroup = topicParameterGroup;
this.applicationPath = applicationPath;
}
/**
- * Return the name of this parameter group instance.
- *
- * @return name the parameter group name
- */
- @Override
- public String getName() {
- return name;
- }
-
- /**
- * Set the name of this parameter group instance.
- *
- * @param name the parameter group name
- */
- @Override
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Return the restServerParameters of this parameter group instance.
- *
- * @return the restServerParameters
- */
- public RestServerParameters getRestServerParameters() {
- return restServerParameters;
- }
-
- /**
- * Return the topicParameterGroup of this parameter group instance.
- *
- * @return the topicParameterGroup
- */
- public TopicParameterGroup getTopicParameterGroup() {
- return topicParameterGroup;
- }
-
- /**
- * Returns the path where applications will store their data.
- *
- * @return String to the path
- */
- public String getApplicationPath() {
- return applicationPath;
- }
-
- /**
* Validate the parameter group.
*
* @return the result of the validation
@@ -118,6 +81,14 @@
} else {
validationResult.setResult(PARAM_REST_SERVER, restServerParameters.validate());
}
+ if (policyApiParameters == null) {
+ validationResult.setResult(PARAM_POLICY_API, ValidationStatus.INVALID,
+ "must have policyApiParameters to configure xacml pdp rest server");
+ } else {
+ // set the name - this only really matters for validation messages
+ policyApiParameters.setName(PARAM_POLICY_API);
+ validationResult.setResult(PARAM_POLICY_API, policyApiParameters.validate());
+ }
if (topicParameterGroup == null) {
validationResult.setResult(PARAM_TOPIC_PARAMETER_GROUP, ValidationStatus.INVALID,
"must have topicParameterGroup to configure xacml pdp topic sink and source");
diff --git a/main/src/test/java/org/onap/policy/pdpx/main/parameters/CommonTestData.java b/main/src/test/java/org/onap/policy/pdpx/main/parameters/CommonTestData.java
index fd79035..76d0704 100644
--- a/main/src/test/java/org/onap/policy/pdpx/main/parameters/CommonTestData.java
+++ b/main/src/test/java/org/onap/policy/pdpx/main/parameters/CommonTestData.java
@@ -22,6 +22,7 @@
package org.onap.policy.pdpx.main.parameters;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -37,14 +38,30 @@
*/
public class CommonTestData {
- private static final String REST_SERVER_PASSWORD = "zb!XztG34";
+ private static final String PASS_KEY = "password";
+ private static final String USER_KEY = "userName";
+ private static final String PORT_KEY = "port";
+ private static final String HOST_KEY = "host";
+ private static final String AAF_KEY = "aaf";
+ private static final String HTTPS_KEY = "https";
+
+ private static final String REST_SERVER_PASS = "zb!XztG34";
private static final String REST_SERVER_USER = "healthcheck";
private static final int REST_SERVER_PORT = 6969;
private static final String REST_SERVER_HOST = "0.0.0.0";
private static final boolean REST_SERVER_HTTPS = false;
private static final boolean REST_SERVER_AAF = false;
+
+ private static final String POLICY_API_PASS = "zb!XztG34";
+ private static final String POLICY_API_USER = "healthcheck";
+ private static final int POLICY_API_PORT = 6970;
+ private static final String POLICY_API_HOST = "0.0.0.0";
+ private static final boolean POLICY_API_HTTPS = false;
+ private static final boolean POLICY_API_AAF = false;
+
public static final String PDPX_GROUP_NAME = "XacmlPdpGroup";
- public static final List<TopicParameters> TOPIC_PARAMS = Arrays.asList(getTopicParams());
+ public static final List<TopicParameters> TOPIC_PARAMS =
+ Collections.unmodifiableList(Arrays.asList(getTopicParams()));
public static final Coder coder = new StandardCoder();
@@ -69,14 +86,14 @@
*/
public Map<String, Object> getRestServerParametersMap(final boolean isEmpty) {
final Map<String, Object> map = new TreeMap<>();
- map.put("https", REST_SERVER_HTTPS);
- map.put("aaf", REST_SERVER_AAF);
+ map.put(HTTPS_KEY, REST_SERVER_HTTPS);
+ map.put(AAF_KEY, REST_SERVER_AAF);
if (!isEmpty) {
- map.put("host", REST_SERVER_HOST);
- map.put("port", REST_SERVER_PORT);
- map.put("userName", REST_SERVER_USER);
- map.put("password", REST_SERVER_PASSWORD);
+ map.put(HOST_KEY, REST_SERVER_HOST);
+ map.put(PORT_KEY, REST_SERVER_PORT);
+ map.put(USER_KEY, REST_SERVER_USER);
+ map.put(PASS_KEY, REST_SERVER_PASS);
}
return map;
@@ -90,12 +107,12 @@
*/
public Map<String, Object> getRestServerParametersMap(final int port) {
final Map<String, Object> map = new TreeMap<>();
- map.put("https", REST_SERVER_HTTPS);
- map.put("aaf", REST_SERVER_AAF);
- map.put("host", REST_SERVER_HOST);
- map.put("port", port);
- map.put("userName", REST_SERVER_USER);
- map.put("password", REST_SERVER_PASSWORD);
+ map.put(HTTPS_KEY, REST_SERVER_HTTPS);
+ map.put(AAF_KEY, REST_SERVER_AAF);
+ map.put(HOST_KEY, REST_SERVER_HOST);
+ map.put(PORT_KEY, port);
+ map.put(USER_KEY, REST_SERVER_USER);
+ map.put(PASS_KEY, REST_SERVER_PASS);
return map;
}
@@ -117,6 +134,27 @@
}
/**
+ * Returns a property map for a RestServerParameters map for test cases.
+ *
+ * @param isEmpty boolean value to represent that object created should be empty or not
+ * @return a property map suitable for constructing an object
+ */
+ public Map<String, Object> getPolicyApiParametersMap(final boolean isEmpty) {
+ final Map<String, Object> map = new TreeMap<>();
+ map.put(HTTPS_KEY, POLICY_API_HTTPS);
+ map.put(AAF_KEY, POLICY_API_AAF);
+
+ if (!isEmpty) {
+ map.put(HOST_KEY, POLICY_API_HOST);
+ map.put(PORT_KEY, POLICY_API_PORT);
+ map.put(USER_KEY, POLICY_API_USER);
+ map.put(PASS_KEY, POLICY_API_PASS);
+ }
+
+ return map;
+ }
+
+ /**
* Returns a property map for a TopicParameters map for test cases.
*
* @param isEmpty boolean value to represent that object created should be empty or not
diff --git a/main/src/test/java/org/onap/policy/pdpx/main/parameters/TestXacmlPdpParameterGroup.java b/main/src/test/java/org/onap/policy/pdpx/main/parameters/TestXacmlPdpParameterGroup.java
index 1484edf..c66af0c 100644
--- a/main/src/test/java/org/onap/policy/pdpx/main/parameters/TestXacmlPdpParameterGroup.java
+++ b/main/src/test/java/org/onap/policy/pdpx/main/parameters/TestXacmlPdpParameterGroup.java
@@ -57,11 +57,13 @@
public void testXacmlPdpParameterGroup() throws IOException {
final RestServerParameters restServerParameters =
testData.toObject(testData.getRestServerParametersMap(false), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
final TopicParameterGroup topicParameterGroup =
testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
final XacmlPdpParameterGroup pdpxParameters =
- new XacmlPdpParameterGroup(CommonTestData.PDPX_GROUP_NAME,
- restServerParameters, topicParameterGroup, applicationPath.getAbsolutePath());
+ new XacmlPdpParameterGroup(CommonTestData.PDPX_GROUP_NAME, restServerParameters,
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
final GroupValidationResult validationResult = pdpxParameters.validate();
assertTrue(validationResult.isValid());
assertEquals(restServerParameters.getHost(), pdpxParameters.getRestServerParameters().getHost());
@@ -77,10 +79,12 @@
public void testXacmlPdpParameterGroup_NullName() {
final RestServerParameters restServerParameters =
testData.toObject(testData.getRestServerParametersMap(false), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
final TopicParameterGroup topicParameterGroup =
testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
final XacmlPdpParameterGroup pdpxParameters = new XacmlPdpParameterGroup(null, restServerParameters,
- topicParameterGroup, applicationPath.getAbsolutePath());
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
final GroupValidationResult validationResult = pdpxParameters.validate();
assertFalse(validationResult.isValid());
assertEquals(null, pdpxParameters.getName());
@@ -92,10 +96,12 @@
public void testXacmlPdpParameterGroup_EmptyName() {
final RestServerParameters restServerParameters =
testData.toObject(testData.getRestServerParametersMap(false), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
final TopicParameterGroup topicParameterGroup =
testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
final XacmlPdpParameterGroup pdpxParameters = new XacmlPdpParameterGroup("", restServerParameters,
- topicParameterGroup, applicationPath.getAbsolutePath());
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
final GroupValidationResult validationResult = pdpxParameters.validate();
assertFalse(validationResult.isValid());
assertEquals("", pdpxParameters.getName());
@@ -107,31 +113,50 @@
public void testXacmlPdpParameterGroup_EmptyRestServerParameters() {
final RestServerParameters restServerParameters =
testData.toObject(testData.getRestServerParametersMap(true), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
final TopicParameterGroup topicParameterGroup =
testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
final XacmlPdpParameterGroup pdpxParameters =
new XacmlPdpParameterGroup(CommonTestData.PDPX_GROUP_NAME, restServerParameters,
- topicParameterGroup, applicationPath.getAbsolutePath());
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
final GroupValidationResult validationResult = pdpxParameters.validate();
assertFalse(validationResult.isValid());
assertTrue(validationResult.getResult()
- .contains("\"org.onap.policy.common.endpoints.parameters.RestServerParameters\" INVALID, "
- + "parameter group has status INVALID"));
+ .contains("parameter group \"RestServerParameters\""));
+ }
+
+ @Test
+ public void testXacmlPdpParameterGroup_EmptyPolicyApiParameters() {
+ final RestServerParameters restServerParameters =
+ testData.toObject(testData.getRestServerParametersMap(false), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(true), RestServerParameters.class);
+ final TopicParameterGroup topicParameterGroup =
+ testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
+ final XacmlPdpParameterGroup pdpxParameters =
+ new XacmlPdpParameterGroup(CommonTestData.PDPX_GROUP_NAME, restServerParameters,
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
+ final GroupValidationResult validationResult = pdpxParameters.validate();
+ assertFalse(validationResult.isValid());
+ assertTrue(validationResult.getResult()
+ .contains("parameter group \"policyApiParameters\""));
}
@Test
public void testXacmlPdpParameterGroup_EmptyTopicParameterGroup() {
final RestServerParameters restServerParameters =
testData.toObject(testData.getRestServerParametersMap(false), RestServerParameters.class);
+ final RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
final TopicParameterGroup topicParameterGroup =
testData.toObject(testData.getTopicParametersMap(true), TopicParameterGroup.class);
final XacmlPdpParameterGroup pdpxParameters =
new XacmlPdpParameterGroup(CommonTestData.PDPX_GROUP_NAME, restServerParameters,
- topicParameterGroup, applicationPath.getAbsolutePath());
+ policyApiParameters, topicParameterGroup, applicationPath.getAbsolutePath());
final GroupValidationResult validationResult = pdpxParameters.validate();
assertFalse(validationResult.isValid());
assertTrue(validationResult.getResult()
- .contains("\"org.onap.policy.common.endpoints.parameters.TopicParameterGroup\" INVALID, "
- + "parameter group has status INVALID"));
+ .contains("parameter group \"TopicParameterGroup\""));
}
}
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 0edfc6f..5f75e6d 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
@@ -101,10 +101,12 @@
//
RestServerParameters rest =
testData.toObject(testData.getRestServerParametersMap(port), RestServerParameters.class);
+ RestServerParameters policyApiParameters =
+ testData.toObject(testData.getPolicyApiParametersMap(false), RestServerParameters.class);
TopicParameterGroup topicParameterGroup =
- testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
- XacmlPdpParameterGroup params =
- new XacmlPdpParameterGroup("XacmlPdpGroup", rest, topicParameterGroup, apps.getAbsolutePath());
+ testData.toObject(testData.getTopicParametersMap(false), TopicParameterGroup.class);
+ XacmlPdpParameterGroup params = new XacmlPdpParameterGroup("XacmlPdpGroup", rest, policyApiParameters,
+ topicParameterGroup, apps.getAbsolutePath());
final Gson gson = new GsonBuilder().create();
File fileParams = appsFolder.newFile("params.json");
String jsonParams = gson.toJson(params);
diff --git a/main/src/test/resources/parameters/MinimumParameters.json b/main/src/test/resources/parameters/MinimumParameters.json
index 6ae2aa9..42e5458 100644
--- a/main/src/test/resources/parameters/MinimumParameters.json
+++ b/main/src/test/resources/parameters/MinimumParameters.json
@@ -6,8 +6,14 @@
"userName": "healthcheck",
"password": "zb!XztG34"
},
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34"
+ },
"applicationPath": "apps.test",
- "topicParameterGroup": {
+ "topicParameterGroup": {
"topicSources" : [{
"topic" : "POLICY-PDP-PAP",
"servers" : [ "anyserver" ],
diff --git a/main/src/test/resources/parameters/NoParameters.json b/main/src/test/resources/parameters/NoParameters.json
index 953f70e..1b25951 100644
--- a/main/src/test/resources/parameters/NoParameters.json
+++ b/main/src/test/resources/parameters/NoParameters.json
@@ -5,6 +5,12 @@
"userName": "healthcheck",
"password": "zb!XztG34"
},
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34"
+ },
"topicParameterGroup": {
"topicSources" : [{
"topic" : "POLICY-PDP-PAP",
diff --git a/main/src/test/resources/parameters/XacmlPdpConfigParameters.json b/main/src/test/resources/parameters/XacmlPdpConfigParameters.json
index e5ab198..186a7b2 100644
--- a/main/src/test/resources/parameters/XacmlPdpConfigParameters.json
+++ b/main/src/test/resources/parameters/XacmlPdpConfigParameters.json
@@ -6,6 +6,12 @@
"userName": "healthcheck",
"password": "zb!XztG34"
},
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34"
+ },
"applicationPath": "src/test/resources/apps",
"topicParameterGroup": {
"topicSources" : [{
diff --git a/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidName.json b/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidName.json
index 8949a3c..27e7ef4 100644
--- a/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidName.json
+++ b/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidName.json
@@ -1,9 +1,29 @@
{
"name": " ",
- "restServerParameters": {
- "host": "0.0.0.0",
+ "restServerParameters":{
+ "host":"0.0.0.0",
"port": 6969,
+ "userName":"healthcheck",
+ "password":"zb!XztG34",
+ "https":true
+ },
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
"userName": "healthcheck",
"password": "zb!XztG34"
+ },
+ "applicationPath": "src/test/resources/apps",
+ "topicParameterGroup": {
+ "topicSources" : [{
+ "topic" : "POLICY-PDP-PAP",
+ "servers" : [ "anyserver" ],
+ "topicCommInfrastructure" : "noop"
+ }],
+ "topicSinks" : [{
+ "topic" : "POLICY-PDP-PAP",
+ "servers" : [ "anyserver" ],
+ "topicCommInfrastructure" : "noop"
+ }]
}
-}
+}
\ No newline at end of file
diff --git a/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidRestServerParameters.json b/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidRestServerParameters.json
index 8b8e5c6..d320b11 100644
--- a/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidRestServerParameters.json
+++ b/main/src/test/resources/parameters/XacmlPdpConfigParameters_InvalidRestServerParameters.json
@@ -5,5 +5,24 @@
"port": -1,
"userName": "",
"password": ""
+ },
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34"
+ },
+ "applicationPath": "src/test/resources/apps",
+ "topicParameterGroup": {
+ "topicSources" : [{
+ "topic" : "POLICY-PDP-PAP",
+ "servers" : [ "anyserver" ],
+ "topicCommInfrastructure" : "noop"
+ }],
+ "topicSinks" : [{
+ "topic" : "POLICY-PDP-PAP",
+ "servers" : [ "anyserver" ],
+ "topicCommInfrastructure" : "noop"
+ }]
}
}
diff --git a/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json b/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json
index 2d1f7cd..1c17414 100644
--- a/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json
+++ b/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json
@@ -7,6 +7,12 @@
"password":"zb!XztG34",
"https":true
},
+ "policyApiParameters": {
+ "host": "0.0.0.0",
+ "port": 6970,
+ "userName": "healthcheck",
+ "password": "zb!XztG34"
+ },
"applicationPath": "src/test/resources/apps",
"topicParameterGroup": {
"topicSources" : [{
diff --git a/packages/policy-xacmlpdp-tarball/src/main/resources/etc/defaultConfig.json b/packages/policy-xacmlpdp-tarball/src/main/resources/etc/defaultConfig.json
index cc56bd1..c7b7fe2 100644
--- a/packages/policy-xacmlpdp-tarball/src/main/resources/etc/defaultConfig.json
+++ b/packages/policy-xacmlpdp-tarball/src/main/resources/etc/defaultConfig.json
@@ -8,6 +8,14 @@
"https": true,
"aaf": false
},
+ "policyApiParameters": {
+ "host": "pap",
+ "port": 6969,
+ "userName": "healthcheck",
+ "password": "zb!XztG34",
+ "https": true,
+ "aaf": false
+ },
"applicationPath": "/opt/app/policy/pdpx/apps",
"topicParameterGroup": {
"topicSources" : [{