aboutsummaryrefslogtreecommitdiffstats
path: root/models-interactions/model-actors
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2021-07-26 11:11:09 -0400
committerJim Hahn <jrh3@att.com>2021-07-27 17:05:44 -0400
commit70770572844f95a11206ae008dd62e42aedfe04d (patch)
treee7759ec1aaee2ab92443f2fd9febc440a2cc70bd /models-interactions/model-actors
parent9a3996ce25be50c01c644efcac075a056de37451 (diff)
Add "configure" operation to xacml
Added "configure" operation to xacml simulator and actor.xacml. Issue-ID: POLICY-3502 Change-Id: Ia206303c65ce4e54187d818da9253dabfe864d62 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'models-interactions/model-actors')
-rw-r--r--models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperation.java83
-rw-r--r--models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/XacmlActor.java1
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperationTest.java150
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/GuardOperationTest.java6
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorParamsTest.java (renamed from models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorParamsTest.java)2
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorTest.java (renamed from models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorTest.java)6
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/resources/service.yaml4
-rw-r--r--models-interactions/model-actors/actor.xacml/src/test/resources/xacml.configure.test-policy.json22
8 files changed, 269 insertions, 5 deletions
diff --git a/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperation.java b/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperation.java
new file mode 100644
index 000000000..ed8e6778b
--- /dev/null
+++ b/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperation.java
@@ -0,0 +1,83 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2021 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.xacml;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import javax.ws.rs.core.Response;
+import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
+import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
+import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
+import org.onap.policy.models.decisions.concepts.DecisionRequest;
+import org.onap.policy.models.decisions.concepts.DecisionResponse;
+
+public class ConfigureOperation extends DecisionOperation {
+
+ // operation name
+ public static final String NAME = "Configure";
+
+ /**
+ * Constructs the object.
+ *
+ * @param params operation parameters
+ * @param config configuration for this operation
+ */
+ public ConfigureOperation(ControlLoopOperationParams params, HttpConfig config) {
+ super(params, config, Collections.emptyList());
+ }
+
+ @Override
+ protected DecisionRequest makeRequest() {
+ if (params.getPayload() == null) {
+ throw new IllegalArgumentException("missing payload");
+ }
+
+ DecisionRequest req = config.makeRequest();
+ req.setRequestId(getSubRequestId());
+ req.setResource(params.getPayload());
+
+ return req;
+ }
+
+ @Override
+ protected CompletableFuture<OperationOutcome> postProcessResponse(OperationOutcome outcome, String url,
+ Response rawResponse, DecisionResponse response) {
+
+ outcome.setResponse(response);
+
+ // check for policies
+ Map<String, Object> policies = response.getPolicies();
+ if (policies == null || policies.isEmpty()) {
+ outcome.setResult(OperationResult.FAILURE);
+ outcome.setMessage("response contains no policies");
+ return CompletableFuture.completedFuture(outcome);
+ }
+
+ outcome.setResult(OperationResult.SUCCESS);
+
+ // set the message
+ outcome.setMessage(response.getMessage());
+
+ return CompletableFuture.completedFuture(outcome);
+ }
+}
diff --git a/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/XacmlActor.java b/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/XacmlActor.java
index ab7452266..664aae1ec 100644
--- a/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/XacmlActor.java
+++ b/models-interactions/model-actors/actor.xacml/src/main/java/org/onap/policy/controlloop/actor/xacml/XacmlActor.java
@@ -35,5 +35,6 @@ public class XacmlActor extends HttpActor<XacmlActorParams> {
super(NAME, XacmlActorParams.class);
addOperator(new DecisionOperator(NAME, GuardOperation.NAME, GuardOperation::new));
+ addOperator(new DecisionOperator(NAME, ConfigureOperation.NAME, ConfigureOperation::new));
}
}
diff --git a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperationTest.java b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperationTest.java
new file mode 100644
index 000000000..8d41d121d
--- /dev/null
+++ b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/ConfigureOperationTest.java
@@ -0,0 +1,150 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2021 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop.actor.xacml;
+
+import static org.assertj.core.api.Assertions.assertThat;
+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.util.Map;
+import java.util.function.Consumer;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
+import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
+import org.onap.policy.controlloop.actor.test.BasicHttpOperation;
+import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
+import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
+import org.onap.policy.models.decisions.concepts.DecisionRequest;
+import org.onap.policy.models.decisions.concepts.DecisionResponse;
+
+public class ConfigureOperationTest extends BasicHttpOperation {
+
+ @Mock
+ private Consumer<OperationOutcome> started;
+ @Mock
+ private Consumer<OperationOutcome> completed;
+
+ private DecisionConfig operConfig;
+ private ConfigureOperation oper;
+
+ /**
+ * Starts the simulator.
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ org.onap.policy.simulators.Util.buildXacmlSim();
+
+ BusTopicParams clientParams = BusTopicParams.builder().clientName(MY_CLIENT).basePath("policy/pdpx/v1/")
+ .hostname("localhost").managed(true).port(org.onap.policy.simulators.Util.XACMLSIM_SERVER_PORT)
+ .build();
+ HttpClientFactoryInstance.getClientFactory().build(clientParams);
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() {
+ HttpClientFactoryInstance.getClientFactory().destroy();
+ HttpServletServerFactoryInstance.getServerFactory().destroy();
+ }
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ super.setUpBasic();
+
+ operConfig = mock(DecisionConfig.class);
+ when(operConfig.makeRequest()).thenAnswer(args -> {
+ DecisionRequest req = new DecisionRequest();
+ req.setAction("guard");
+ req.setOnapComponent("my-onap-component");
+ req.setOnapInstance("my-onap-instance");
+ req.setOnapName("my-onap-name");
+ return req;
+ });
+
+ config = operConfig;
+ initConfig();
+
+ params = params.toBuilder().startCallback(started).completeCallback(completed).build();
+
+ oper = new ConfigureOperation(params, config);
+ }
+
+ @Test
+ public void testConstructor() {
+ assertEquals(DEFAULT_ACTOR, oper.getActorName());
+ assertEquals(DEFAULT_OPERATION, oper.getName());
+ }
+
+ /**
+ * Tests "success" case with simulator.
+ */
+ @Test
+ public void testSuccess() throws Exception {
+ DecisionParams opParams =
+ DecisionParams.builder().clientName(MY_CLIENT).path("decision").action("configure").build();
+ config = new DecisionConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
+
+ params = params.toBuilder().payload(Map.of("policy-id", "test-policy")).retry(0).timeoutSec(5)
+ .executor(blockingExecutor).build();
+ oper = new ConfigureOperation(params, config);
+
+ outcome = oper.start().get();
+ assertEquals(OperationResult.SUCCESS, outcome.getResult());
+
+ DecisionResponse response = outcome.getResponse();
+ assertTrue(response instanceof DecisionResponse);
+ assertNotNull(response.getPolicies());
+ assertThat(response.getPolicies()).containsKey("test-policy");
+ }
+
+ /**
+ * Tests "failure" case with simulator.
+ */
+ @Test
+ public void testFailure() throws Exception {
+ DecisionParams opParams =
+ DecisionParams.builder().clientName(MY_CLIENT).path("decision").action("configure").build();
+ config = new DecisionConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
+
+ params = params.toBuilder().payload(Map.of("policy-id", "nonexistent")).retry(0).timeoutSec(5)
+ .executor(blockingExecutor).build();
+ oper = new ConfigureOperation(params, config);
+
+ outcome = oper.start().get();
+ assertEquals(OperationResult.FAILURE, outcome.getResult());
+
+ DecisionResponse response = outcome.getResponse();
+ assertTrue(response instanceof DecisionResponse);
+ assertNotNull(response.getPolicies());
+ assertThat(response.getPolicies()).isEmpty();
+ }
+
+}
diff --git a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/GuardOperationTest.java b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/GuardOperationTest.java
index 2988d695b..28e28fdd4 100644
--- a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/GuardOperationTest.java
+++ b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/GuardOperationTest.java
@@ -107,7 +107,8 @@ public class GuardOperationTest extends BasicHttpOperation {
*/
@Test
public void testSuccess() throws Exception {
- DecisionParams opParams = DecisionParams.builder().clientName(MY_CLIENT).path("decision").build();
+ DecisionParams opParams =
+ DecisionParams.builder().clientName(MY_CLIENT).path("decision").action("guard").build();
config = new DecisionConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
@@ -123,7 +124,8 @@ public class GuardOperationTest extends BasicHttpOperation {
*/
@Test
public void testFailure() throws Exception {
- DecisionParams opParams = DecisionParams.builder().clientName(MY_CLIENT).path("decision").build();
+ DecisionParams opParams =
+ DecisionParams.builder().clientName(MY_CLIENT).path("decision").action("guard").build();
config = new DecisionConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor)
diff --git a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorParamsTest.java b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorParamsTest.java
index 0b0495620..4e1b9b05d 100644
--- a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorParamsTest.java
+++ b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorParamsTest.java
@@ -35,7 +35,7 @@ import org.onap.policy.controlloop.actor.xacml.XacmlActorParams;
import org.onap.policy.controlloop.actorserviceprovider.Util;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ActorParams;
-public class DecisionActorParamsTest {
+public class XacmlActorParamsTest {
private static final String CONTAINER = "my-container";
private static final String CLIENT = "my-client";
private static final int TIMEOUT = 10;
diff --git a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorTest.java b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorTest.java
index 47c294c24..5c32f92bc 100644
--- a/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/DecisionActorTest.java
+++ b/models-interactions/model-actors/actor.xacml/src/test/java/org/onap/policy/controlloop/actor/xacml/XacmlActorTest.java
@@ -28,14 +28,15 @@ import java.util.stream.Collectors;
import org.junit.Test;
import org.onap.policy.controlloop.actor.test.BasicActor;
-public class DecisionActorTest extends BasicActor {
+public class XacmlActorTest extends BasicActor {
@Test
public void test() {
final XacmlActor prov = new XacmlActor();
// verify that it has the operators we expect
- var expected = Arrays.asList(GuardOperation.NAME).stream().sorted().collect(Collectors.toList());
+ var expected = Arrays.asList(GuardOperation.NAME, ConfigureOperation.NAME).stream().sorted()
+ .collect(Collectors.toList());
var actual = prov.getOperationNames().stream().sorted().collect(Collectors.toList());
assertEquals(expected.toString(), actual.toString());
@@ -44,5 +45,6 @@ public class DecisionActorTest extends BasicActor {
verifyActorService(XacmlActor.NAME, "service.yaml");
assertTrue(prov.getOperator(GuardOperation.NAME) instanceof DecisionOperator);
+ assertTrue(prov.getOperator(ConfigureOperation.NAME) instanceof DecisionOperator);
}
}
diff --git a/models-interactions/model-actors/actor.xacml/src/test/resources/service.yaml b/models-interactions/model-actors/actor.xacml/src/test/resources/service.yaml
index 81f4b8413..77a87b72e 100644
--- a/models-interactions/model-actors/actor.xacml/src/test/resources/service.yaml
+++ b/models-interactions/model-actors/actor.xacml/src/test/resources/service.yaml
@@ -33,3 +33,7 @@ actors:
operations:
Guard:
path: decide
+ action: guard
+ Configure:
+ path: decision
+ action: configure
diff --git a/models-interactions/model-actors/actor.xacml/src/test/resources/xacml.configure.test-policy.json b/models-interactions/model-actors/actor.xacml/src/test/resources/xacml.configure.test-policy.json
new file mode 100644
index 000000000..214a447da
--- /dev/null
+++ b/models-interactions/model-actors/actor.xacml/src/test/resources/xacml.configure.test-policy.json
@@ -0,0 +1,22 @@
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_1_0",
+ "topology_template": {
+ "policies": [
+ {
+ "test-policy": {
+ "type": "onap.policies.monitoring.test",
+ "type_version": "1.0.0",
+ "version": "1.0.0",
+ "name": "test-policy",
+ "metadata": {
+ "policy-id": "test-policy",
+ "policy-version": 1
+ },
+ "properties": {
+ "test": "test"
+ }
+ }
+ }
+ ]
+ }
+}