aboutsummaryrefslogtreecommitdiffstats
path: root/models-interactions/model-actors/actor.appc
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-08-21 13:43:08 -0400
committerJim Hahn <jrh3@att.com>2020-10-27 14:55:15 -0400
commit19ef8b24a98c09a349e6ae7309f535a0135463f6 (patch)
treed988e5a58865ae6f3a38dcb31e4f195f18e59946 /models-interactions/model-actors/actor.appc
parent6b29d2c19e288148171db0c0e446e18dcd46effd (diff)
Make Actors event-agnostic
Removed event and event-context code from the Actor code. Also removed the preprocessing steps from the Actor code, giving the application complete control over any preprocessing. Also fixed a bug wherein the APPC actor was treating the AAI_RESOURCE_VNF property as a String instead of as a GenericVnf. Issue-ID: POLICY-2746-actor Change-Id: Ibc05fe39ffedc0bc461abf10e6a960861ac70119 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'models-interactions/model-actors/actor.appc')
-rw-r--r--models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java14
-rw-r--r--models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java49
-rw-r--r--models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java33
-rw-r--r--models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java28
-rw-r--r--models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java100
5 files changed, 19 insertions, 205 deletions
diff --git a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
index 70c70823c..89d5c4f2f 100644
--- a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
+++ b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
@@ -23,7 +23,7 @@ package org.onap.policy.controlloop.actor.appc;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.concurrent.CompletableFuture;
+import org.onap.aai.domain.yang.GenericVnf;
import org.onap.policy.appc.CommonHeader;
import org.onap.policy.appc.Request;
import org.onap.policy.appc.Response;
@@ -71,14 +71,6 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
}
/**
- * Starts the GUARD.
- */
- @Override
- protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
- return startGuardAsync();
- }
-
- /**
* Makes a request, given the target VNF. This is a support function for
* {@link #makeRequest(int)}.
*
@@ -86,7 +78,7 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
* @param targetVnf target VNF
* @return a new request
*/
- protected Request makeRequest(int attempt, String targetVnf) {
+ protected Request makeRequest(int attempt, GenericVnf targetVnf) {
Request request = new Request();
request.setCommonHeader(new CommonHeader());
request.getCommonHeader().setRequestId(params.getRequestId());
@@ -102,7 +94,7 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
}
// add/replace specific values
- request.getPayload().put(VNF_ID_KEY, targetVnf);
+ request.getPayload().put(VNF_ID_KEY, targetVnf.getVnfId());
return request;
}
diff --git a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java
index 1f5b9fd10..524c797b6 100644
--- a/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java
+++ b/models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java
@@ -21,21 +21,12 @@
package org.onap.policy.controlloop.actor.appc;
import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.appc.Request;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class ModifyConfigOperation extends AppcOperation {
- private static final Logger logger = LoggerFactory.getLogger(ModifyConfigOperation.class);
-
public static final String NAME = "ModifyConfig";
private static final List<String> PROPERTY_NAMES = List.of(OperationProperties.AAI_RESOURCE_VNF);
@@ -50,46 +41,8 @@ public class ModifyConfigOperation extends AppcOperation {
super(params, config, PROPERTY_NAMES);
}
- /**
- * Ensures that A&AI customer query has been performed, and then runs the guard query.
- */
- @Override
- @SuppressWarnings("unchecked")
- protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
- if (params.isPreprocessed()) {
- return null;
- }
-
- ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
- .operation(AaiCqResponse.OPERATION).payload(null).retry(null).timeoutSec(null).build();
-
- // run Custom Query and Guard, in parallel
- return allOf(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams), this::startGuardAsync);
- }
-
@Override
protected Request makeRequest(int attempt) {
- return makeRequest(attempt, getVnfId());
- }
-
- protected String getVnfId() {
- GenericVnf vnf = this.getProperty(OperationProperties.AAI_RESOURCE_VNF);
- if (vnf != null) {
- return vnf.getVnfId();
- }
-
- AaiCqResponse cq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
- if (cq == null) {
- throw new IllegalStateException("target vnf-id could not be determined");
- }
-
- GenericVnf genvnf = cq.getGenericVnfByModelInvariantId(params.getTargetEntityIds()
- .get(ControlLoopOperationParams.PARAMS_ENTITY_RESOURCEID));
- if (genvnf == null) {
- logger.info("{}: target entity could not be found for {}", getFullName(), params.getRequestId());
- throw new IllegalArgumentException("target vnf-id could not be found");
- }
-
- return genvnf.getVnfId();
+ return makeRequest(attempt, getRequiredProperty(OperationProperties.AAI_RESOURCE_VNF, "resource VNF"));
}
}
diff --git a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
index db104b6bb..72e9065fc 100644
--- a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
+++ b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
@@ -23,7 +23,6 @@ package org.onap.policy.controlloop.actor.appc;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.util.Arrays;
@@ -82,26 +81,12 @@ public class AppcOperationTest extends BasicAppcOperation {
}
@Test
- public void testStartPreprocessorAsync() {
- assertNotNull(oper.startPreprocessorAsync());
- }
-
- /**
- * Tests startPreprocessorAsync(), when preprocessing is disabled.
- */
- @Test
- public void testStartPreprocessorAsyncDisabled() {
- params = params.toBuilder().preprocessed(true).build();
- assertNull(new MyOper(params, config).startPreprocessorAsync());
- }
-
- @Test
public void testMakeRequest() {
oper.generateSubRequestId(2);
String subreq = oper.getSubRequestId();
assertNotNull(subreq);
- Request request = oper.makeRequest(2, MY_VNF);
+ Request request = oper.makeRequest(2, genvnf);
assertEquals(DEFAULT_OPERATION, request.getAction());
assertNotNull(request.getPayload());
@@ -112,18 +97,18 @@ public class AppcOperationTest extends BasicAppcOperation {
assertEquals(subreq, header.getSubRequestId());
- request = oper.makeRequest(2, MY_VNF);
+ request = oper.makeRequest(2, genvnf);
assertEquals(subreq, request.getCommonHeader().getSubRequestId());
// repeat using a null payload
params = params.toBuilder().payload(null).build();
oper = new MyOper(params, config);
- assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, MY_VNF).getPayload());
+ assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, genvnf).getPayload());
}
@Test
public void testConvertPayload() {
- Request request = oper.makeRequest(2, MY_VNF);
+ Request request = oper.makeRequest(2, genvnf);
// @formatter:off
assertEquals(
@@ -143,7 +128,7 @@ public class AppcOperationTest extends BasicAppcOperation {
params = params.toBuilder().payload(payload).build();
oper = new MyOper(params, config);
- request = oper.makeRequest(2, MY_VNF);
+ request = oper.makeRequest(2, genvnf);
// @formatter:off
assertEquals(
@@ -164,7 +149,7 @@ public class AppcOperationTest extends BasicAppcOperation {
params = params.toBuilder().payload(payload).build();
oper = new MyOper(params, config);
- request = oper.makeRequest(2, MY_VNF);
+ request = oper.makeRequest(2, genvnf);
payload.put(AppcOperation.VNF_ID_KEY, MY_VNF);
payload.put(KEY1, "abc");
@@ -177,7 +162,7 @@ public class AppcOperationTest extends BasicAppcOperation {
@Test
public void testGetExpectedKeyValues() {
oper.generateSubRequestId(2);
- Request request = oper.makeRequest(2, MY_VNF);
+ Request request = oper.makeRequest(2, genvnf);
assertEquals(Arrays.asList(request.getCommonHeader().getSubRequestId()),
oper.getExpectedKeyValues(50, request));
}
@@ -242,7 +227,7 @@ public class AppcOperationTest extends BasicAppcOperation {
}
}
- private static class MyOper extends AppcOperation {
+ private class MyOper extends AppcOperation {
public MyOper(ControlLoopOperationParams params, BidirectionalTopicConfig config) {
super(params, config, Collections.emptyList());
@@ -250,7 +235,7 @@ public class AppcOperationTest extends BasicAppcOperation {
@Override
protected Request makeRequest(int attempt) {
- return makeRequest(attempt, MY_VNF);
+ return makeRequest(attempt, genvnf);
}
}
}
diff --git a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java
index 9d434cebf..aed2431e6 100644
--- a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java
+++ b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java
@@ -20,7 +20,6 @@
package org.onap.policy.controlloop.actor.appc;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -32,6 +31,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.function.BiConsumer;
+import org.onap.aai.domain.yang.GenericVnf;
import org.onap.policy.appc.Request;
import org.onap.policy.appc.Response;
import org.onap.policy.appc.ResponseCode;
@@ -44,12 +44,9 @@ import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationMaker;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
import org.onap.policy.simulators.AppcLegacyTopicServer;
import org.onap.policy.simulators.TopicServer;
-import org.powermock.reflect.Whitebox;
/**
* Superclass for various operator tests.
@@ -66,6 +63,7 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
protected static final String RESOURCE_ID = "my-resource";
protected Response response;
+ protected GenericVnf genvnf;
/**
* Constructs the object using a default actor and operation name.
@@ -97,6 +95,9 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
response.setStatus(status);
status.setCode(ResponseCode.SUCCESS.getValue());
status.setDescription(MY_DESCRIPTION);
+
+ genvnf = new GenericVnf();
+ genvnf.setVnfId(MY_VNF);
}
public void tearDown() {
@@ -131,25 +132,6 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
assertEquals(MY_DESCRIPTION, outcome.getMessage());
}
- /**
- * Verifies that an exception is thrown if a field is missing from the enrichment
- * data.
- *
- * @param fieldName name of the field to be removed from the enrichment data
- * @param expectedText text expected in the exception message
- */
- protected void verifyMissing(String fieldName, String expectedText,
- OperationMaker<BidirectionalTopicConfig, AppcOperation> maker) {
-
- makeContext();
- enrichment.remove(fieldName);
-
- AppcOperation oper = maker.apply(params, config);
-
- assertThatIllegalArgumentException().isThrownBy(() -> Whitebox.invokeMethod(oper, "makeRequest", 1))
- .withMessageContaining("missing").withMessageContaining(expectedText);
- }
-
@Override
protected void makeContext() {
super.makeContext();
diff --git a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java
index 749b6c86c..ee3ac0242 100644
--- a/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java
+++ b/models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java
@@ -21,48 +21,26 @@
package org.onap.policy.controlloop.actor.appc;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.mockito.Mock;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.appc.Request;
import org.onap.policy.appc.Response;
import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicParams;
public class ModifyConfigOperationTest extends BasicAppcOperation {
- @Mock
- private GenericVnf genvnf;
- @Mock
- private AaiCqResponse cq;
-
private ModifyConfigOperation oper;
@@ -85,8 +63,6 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
@Override
public void setUp() throws Exception {
super.setUp();
- when(genvnf.getVnfId()).thenReturn(MY_VNF);
- when(cq.getGenericVnfByModelInvariantId(any())).thenReturn(genvnf);
oper = new ModifyConfigOperation(params, config);
}
@@ -106,16 +82,9 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
BidirectionalTopicParams.builder().sinkTopic(MY_SINK).sourceTopic(MY_SINK).build();
config = new BidirectionalTopicConfig(blockingExecutor, opParams, topicMgr, AppcOperation.SELECTOR_KEYS);
- params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-
params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
- oper = new ModifyConfigOperation(params, config) {
- @Override
- protected CompletableFuture<OperationOutcome> startGuardAsync() {
- return null;
- }
- };
+ oper = new ModifyConfigOperation(params, config);
oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
@@ -136,45 +105,6 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
}
@Test
- public void testStartPreprocessorAsync() throws Exception {
- CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
- context = mock(ControlLoopEventContext.class);
- when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(future2);
- when(context.getEvent()).thenReturn(event);
- params = params.toBuilder().context(context).build();
-
- AtomicBoolean guardStarted = new AtomicBoolean();
-
- oper = new ModifyConfigOperation(params, config) {
- @Override
- protected CompletableFuture<OperationOutcome> startGuardAsync() {
- guardStarted.set(true);
- return super.startGuardAsync();
- }
- };
-
- CompletableFuture<OperationOutcome> future3 = oper.startPreprocessorAsync();
- assertNotNull(future3);
- assertFalse(future.isDone());
- assertTrue(guardStarted.get());
- verify(context).obtain(eq(AaiCqResponse.CONTEXT_KEY), any());
-
- future2.complete(params.makeOutcome(null));
- assertTrue(executor.runAll(100));
- assertTrue(future3.isDone());
- assertEquals(OperationResult.SUCCESS, future3.get().getResult());
- }
-
- /**
- * Tests startPreprocessorAsync(), when preprocessing is disabled.
- */
- @Test
- public void testStartPreprocessorAsyncDisabled() {
- params = params.toBuilder().preprocessed(true).build();
- assertNull(new ModifyConfigOperation(params, config).startPreprocessorAsync());
- }
-
- @Test
public void testMakeRequest() throws CoderException {
oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
@@ -185,32 +115,4 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
verifyRequest("modifyConfig.json", request, IGNORE_FIELDS);
}
-
- @Test
- public void testGetVnfIdViaProperty() throws CoderException {
- oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
- assertEquals(MY_VNF, oper.getVnfId());
- }
-
- @Test
- public void testGetVnfId() throws CoderException {
- // no CQ data
- assertThatIllegalStateException().isThrownBy(() -> oper.getVnfId())
- .withMessage("target vnf-id could not be determined");
-
- cq = new AaiCqResponse("{}");
-
- // missing vnf-id
- params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
- assertThatIllegalArgumentException().isThrownBy(() -> oper.getVnfId())
- .withMessage("target vnf-id could not be found");
-
- // populate the CQ data with a vnf-id
- genvnf = new GenericVnf();
- genvnf.setVnfId(MY_VNF);
- genvnf.setModelInvariantId(RESOURCE_ID);
- cq.setInventoryResponseItems(Arrays.asList(genvnf));
-
- assertEquals(MY_VNF, oper.getVnfId());
- }
}