Skip preprocessor step in Actors 85/110885/2
authorJim Hahn <jrh3@att.com>
Tue, 4 Aug 2020 13:09:14 +0000 (09:09 -0400)
committerJim Hahn <jrh3@att.com>
Tue, 4 Aug 2020 13:34:39 +0000 (09:34 -0400)
Modified Actors to skip the preprocessor step if the "preprocessed" flag
is set to true in the parameters.  Did not add any error checking code
to ensure the data was actually available to the operation - will add
that once the properties are being set by the application code.
Extracted common code in GrpcOperationTest into the setup method.

Issue-ID: POLICY-2746
Change-Id: Id70c31a2c96a7aaa9d73cc70cdf4f55f8a4e087f
Signed-off-by: Jim Hahn <jrh3@att.com>
13 files changed:
models-interactions/model-actors/actor.aai/src/main/java/org/onap/policy/controlloop/actor/aai/AaiCustomQueryOperation.java
models-interactions/model-actors/actor.aai/src/test/java/org/onap/policy/controlloop/actor/aai/AaiCustomQueryOperationTest.java
models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java
models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java
models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/GrpcOperation.java
models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/GrpcOperationTest.java
models-interactions/model-actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/VfModuleCreate.java
models-interactions/model-actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/VfModuleDelete.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/VfModuleCreateTest.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/VfModuleDeleteTest.java
models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/impl/OperationPartial.java
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/impl/OperationPartialTest.java

index caa8b9e..151f7a2 100644 (file)
@@ -87,6 +87,10 @@ public class AaiCustomQueryOperation extends HttpOperation<String> {
      */
     @Override
     protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
+        if (params.isPreprocessed()) {
+            return null;
+        }
+
         ControlLoopOperationParams tenantParams =
                         params.toBuilder().actor(AaiConstants.ACTOR_NAME).operation(AaiGetTenantOperation.NAME)
                                         .targetEntity(vserver).payload(null).retry(null).timeoutSec(null).build();
index 4000965..476e643 100644 (file)
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatCode;
 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 static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -151,6 +152,15 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
         assertEquals("3", oper.getSubRequestId());
     }
 
+    /**
+     * Tests startPreprocessorAsync(), when preprocessing is disabled.
+     */
+    @Test
+    public void testStartPreprocessorAsyncDisabled() {
+        params = params.toBuilder().preprocessed(true).build();
+        assertNull(new AaiCustomQueryOperation(params, config).startPreprocessorAsync());
+    }
+
     @Test
     @SuppressWarnings("unchecked")
     public void testStartOperationAsync_testStartPreprocessorAsync_testMakeRequest_testPostProcess() throws Exception {
index d1f27b5..680bd9c 100644 (file)
@@ -56,6 +56,10 @@ public class ModifyConfigOperation extends AppcOperation {
     @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();
 
index e544d46..4bbb057 100644 (file)
@@ -23,6 +23,7 @@ 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;
@@ -85,6 +86,15 @@ public class AppcOperationTest extends BasicAppcOperation {
         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);
index d000038..9c602f5 100644 (file)
@@ -25,6 +25,7 @@ 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.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;
@@ -156,6 +157,15 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
         assertEquals(PolicyResult.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 {
         AaiCqResponse cq = new AaiCqResponse("{}");
index 2417812..ec8f2ac 100644 (file)
@@ -138,6 +138,10 @@ public class GrpcOperation extends OperationPartial {
     @Override
     @SuppressWarnings("unchecked")
     protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
+        if (params.isPreprocessed()) {
+            return null;
+        }
+
         // run A&AI Query and Guard, in parallel
         return allOf(aaiRequestor, this::startGuardAsync);
     }
index cbc88a3..06f239b 100644 (file)
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 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.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -93,10 +94,15 @@ public class GrpcOperationTest {
 
     @Mock
     private CdsProcessorGrpcClient cdsClient;
+    @Mock
+    private ControlLoopEventContext context;
     private CdsServerProperties cdsProps;
     private VirtualControlLoopEvent onset;
     private PseudoExecutor executor;
     private Target target;
+    private ControlLoopOperationParams params;
+    private GrpcConfig config;
+    private CompletableFuture<OperationOutcome> cqFuture;
     private GrpcOperation operation;
 
     @BeforeClass
@@ -137,6 +143,14 @@ public class GrpcOperationTest {
         target = new Target();
         target.setType(TargetType.VM);
         target.setResourceID(RESOURCE_ID);
+
+        cqFuture = new CompletableFuture<>();
+        when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(cqFuture);
+        when(context.getEvent()).thenReturn(onset);
+
+        params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
+                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
+                        .targetEntity(TARGET_ENTITY).target(target).build();
     }
 
     /**
@@ -149,7 +163,7 @@ public class GrpcOperationTest {
 
         Map<String, Object> payload = Map.of("artifact_name", "my_artifact", "artifact_version", "1.0");
 
-        final ControlLoopOperationParams params = ControlLoopOperationParams.builder()
+        params = ControlLoopOperationParams.builder()
                         .actor(CdsActorConstants.CDS_ACTOR).operation("subscribe").context(context)
                         .actorService(new ActorService()).targetEntity(TARGET_ENTITY).target(target).retry(0)
                         .timeoutSec(5).executor(blockingExecutor).payload(payload).build();
@@ -175,13 +189,6 @@ public class GrpcOperationTest {
 
     @Test
     public void testGetPropertyNames() {
-        ControlLoopEventContext context = mock(ControlLoopEventContext.class);
-        when(context.getEvent()).thenReturn(onset);
-
-        ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                        .targetEntity(TARGET_ENTITY).target(target).build();
-        GrpcConfig config = new GrpcConfig(executor, cdsProps);
 
         /*
          * check VNF case
@@ -212,24 +219,13 @@ public class GrpcOperationTest {
 
     @Test
     public void testStartPreprocessorAsync() throws InterruptedException, ExecutionException, TimeoutException {
-
-        CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
-        ControlLoopEventContext context = mock(ControlLoopEventContext.class);
-        when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(future2);
-        when(context.getEvent()).thenReturn(onset);
-
         AtomicBoolean guardStarted = new AtomicBoolean();
 
-        ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                        .targetEntity(TARGET_ENTITY).target(target).build();
-        GrpcConfig config = new GrpcConfig(executor, cdsProps);
-
         operation = new GrpcOperation(params, config) {
             @Override
             protected CompletableFuture<OperationOutcome> startGuardAsync() {
                 guardStarted.set(true);
-                return future2;
+                return cqFuture;
             }
         };
 
@@ -238,7 +234,7 @@ public class GrpcOperationTest {
         assertTrue(guardStarted.get());
         verify(context).obtain(eq(AaiCqResponse.CONTEXT_KEY), any());
 
-        future2.complete(params.makeOutcome());
+        cqFuture.complete(params.makeOutcome());
         assertTrue(executor.runAll(100));
         assertEquals(PolicyResult.SUCCESS, future3.get(2, TimeUnit.SECONDS).getResult());
         assertTrue(future3.isDone());
@@ -249,26 +245,15 @@ public class GrpcOperationTest {
      */
     @Test
     public void testStartPreprocessorAsyncPnf() throws InterruptedException, ExecutionException, TimeoutException {
-
-        CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
-        ControlLoopEventContext context = mock(ControlLoopEventContext.class);
-        when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(future2);
-        when(context.getEvent()).thenReturn(onset);
-
         AtomicBoolean guardStarted = new AtomicBoolean();
 
         target.setType(TargetType.PNF);
 
-        ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                        .targetEntity(TARGET_ENTITY).target(target).build();
-        GrpcConfig config = new GrpcConfig(executor, cdsProps);
-
         operation = new GrpcOperation(params, config) {
             @Override
             protected CompletableFuture<OperationOutcome> startGuardAsync() {
                 guardStarted.set(true);
-                return future2;
+                return cqFuture;
             }
         };
 
@@ -277,12 +262,21 @@ public class GrpcOperationTest {
         assertTrue(guardStarted.get());
         verify(context).obtain(eq(AaiGetPnfOperation.getKey(TARGET_ENTITY)), any());
 
-        future2.complete(params.makeOutcome());
+        cqFuture.complete(params.makeOutcome());
         assertTrue(executor.runAll(100));
         assertEquals(PolicyResult.SUCCESS, future3.get(2, TimeUnit.SECONDS).getResult());
         assertTrue(future3.isDone());
     }
 
+    /**
+     * Tests startPreprocessorAsync(), when preprocessing is disabled.
+     */
+    @Test
+    public void testStartPreprocessorAsyncDisabled() {
+        params = params.toBuilder().preprocessed(true).build();
+        assertNull(new GrpcOperation(params, config).startPreprocessorAsync());
+    }
+
     @Test
     public void testStartOperationAsync() throws Exception {
 
@@ -319,13 +313,6 @@ public class GrpcOperationTest {
 
     @Test
     public void testStartOperationAsyncError() throws Exception {
-
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                        .targetEntity(TARGET_ENTITY).target(target).build();
-
-        GrpcConfig config = new GrpcConfig(executor, cdsProps);
         operation = new GrpcOperation(params, config);
         assertThatIllegalArgumentException().isThrownBy(() -> operation.startOperationAsync(1, params.makeOutcome()));
     }
index fcd48b1..4bae1e8 100644 (file)
@@ -87,6 +87,9 @@ public class VfModuleCreate extends SoOperation {
     @Override
     @SuppressWarnings("unchecked")
     protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
+        if (params.isPreprocessed()) {
+            return null;
+        }
 
         // need the VF count
         ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
index b7afb69..7db76d2 100644 (file)
@@ -96,6 +96,9 @@ public class VfModuleDelete extends SoOperation {
     @Override
     @SuppressWarnings("unchecked")
     protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
+        if (params.isPreprocessed()) {
+            return null;
+        }
 
         // need the VF count
         ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
index 0db209d..012f8de 100644 (file)
@@ -25,6 +25,7 @@ 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.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
@@ -151,6 +152,15 @@ public class VfModuleCreateTest extends BasicSoOperation {
         assertTrue(guardStarted.get());
     }
 
+    /**
+     * Tests startPreprocessorAsync(), when preprocessing is disabled.
+     */
+    @Test
+    public void testStartPreprocessorAsyncDisabled() {
+        params = params.toBuilder().preprocessed(true).build();
+        assertNull(new VfModuleCreate(params, config).startPreprocessorAsync());
+    }
+
     @Test
     public void testStartGuardAsync() throws Exception {
         // remove CQ data so it's forced to query
index 7c37dc9..cc2aafa 100644 (file)
@@ -25,6 +25,7 @@ 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.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -180,6 +181,15 @@ public class VfModuleDeleteTest extends BasicSoOperation {
         assertTrue(guardStarted.get());
     }
 
+    /**
+     * Tests startPreprocessorAsync(), when preprocessing is disabled.
+     */
+    @Test
+    public void testStartPreprocessorAsyncDisabled() {
+        params = params.toBuilder().preprocessed(true).build();
+        assertNull(new MyOperation(params, config).startPreprocessorAsync());
+    }
+
     @Test
     public void testStartGuardAsync() throws Exception {
         // remove CQ data so it's forced to query
index 060f7a6..9ce53aa 100644 (file)
@@ -268,6 +268,10 @@ public abstract class OperationPartial implements Operation {
      *         {@code null} if this operation has no guard
      */
     protected CompletableFuture<OperationOutcome> startGuardAsync() {
+        if (params.isPreprocessed()) {
+            return null;
+        }
+
         // get the guard payload
         Map<String, Object> payload = makeGuardPayload();
 
@@ -285,6 +289,7 @@ public abstract class OperationPartial implements Operation {
      * @return a new guard payload
      */
     protected Map<String, Object> makeGuardPayload() {
+        // TODO delete this once preprocessing is done by the application
         Map<String, Object> guard = new LinkedHashMap<>();
         guard.put("actor", params.getActor());
         guard.put("operation", params.getOperation());
index 9bbc528..6d54358 100644 (file)
@@ -346,6 +346,15 @@ public class OperationPartialTest {
         assertEquals(oper.makeGuardPayload(), payload);
     }
 
+    /**
+     * Tests startGuardAsync() when preprocessing is disabled.
+     */
+    @Test
+    public void testStartGuardAsyncDisabled() {
+        params = params.toBuilder().preprocessed(true).build();
+        assertNull(new MyOper().startGuardAsync());
+    }
+
     @Test
     public void testMakeGuardPayload() {
         Map<String, Object> payload = oper.makeGuardPayload();