Make targetEntity a property
[policy/models.git] / models-interactions / model-actors / actor.test / src / main / java / org / onap / policy / controlloop / actor / test / BasicOperation.java
index dbdd553..a0bb58e 100644 (file)
 package org.onap.policy.controlloop.actor.test;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
 
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
 import javax.ws.rs.core.Response;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.onap.policy.aai.AaiConstants;
+import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
@@ -36,26 +41,57 @@ import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.common.utils.time.PseudoExecutor;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
+import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
+import org.onap.policy.controlloop.actorserviceprovider.Operator;
 import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
+import org.onap.policy.controlloop.actorserviceprovider.impl.OperationPartial;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
+import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
+import org.onap.policy.controlloop.policy.PolicyResult;
 
 /**
  * Superclass for various Operation tests.
  */
 public class BasicOperation {
-    protected static final Coder coder = new StandardCoder();
     protected static final UUID REQ_ID = UUID.randomUUID();
-    protected static final String DEFAULT_ACTOR = "default-actor";
-    protected static final String DEFAULT_OPERATION = "default-operation";
+    protected static final String SUB_REQ_ID = "my-sub-request-id";
+    protected static final String DEFAULT_ACTOR = "default-Actor";
+    protected static final String DEFAULT_OPERATION = "default-Operation";
     protected static final String TARGET_ENTITY = "my-target";
+    protected static final String CL_NAME = "my-closed-loop";
+    protected static final String EVENT_POLICY_NAME = "my-event-policy-name";
+    protected static final String EVENT_POLICY_VERSION = "my-event-policy-version";
+    protected static final String EVENT_VERSION = "my-event-version";
+
+    protected static final Executor blockingExecutor = command -> {
+        Thread thread = new Thread(command);
+        thread.setDaemon(true);
+        thread.start();
+    };
 
     protected final String actorName;
     protected final String operationName;
+    protected Coder coder = new StandardCoder();
 
     @Mock
     protected ActorService service;
+    @Mock
+    protected Actor guardActor;
+    @Mock
+    protected Operator guardOperator;
+    @Mock
+    protected Operation guardOperation;
+    @Mock
+    protected Actor cqActor;
+    @Mock
+    protected Operator cqOperator;
+    @Mock
+    protected Operation cqOperation;
+    @Mock
+    protected AaiCqResponse cqResponse;
 
+    protected CompletableFuture<OperationOutcome> cqFuture;
     protected CompletableFuture<Response> future;
     protected ControlLoopOperationParams params;
     protected Map<String, String> enrichment;
@@ -86,16 +122,32 @@ public class BasicOperation {
     /**
      * Initializes mocks and sets up.
      */
-    public void setUp() throws Exception {
+    public void setUpBasic() {
         MockitoAnnotations.initMocks(this);
 
+        cqFuture = new CompletableFuture<>();
         future = new CompletableFuture<>();
 
         executor = new PseudoExecutor();
 
         makeContext();
 
-        outcome = params.makeOutcome();
+        when(service.getActor(OperationPartial.GUARD_ACTOR_NAME)).thenReturn(guardActor);
+        when(guardActor.getOperator(OperationPartial.GUARD_OPERATION_NAME)).thenReturn(guardOperator);
+        when(guardOperator.buildOperation(any())).thenReturn(guardOperation);
+
+        outcome = params.makeOutcome(TARGET_ENTITY);
+        outcome.setResult(PolicyResult.SUCCESS);
+        when(guardOperation.start()).thenReturn(CompletableFuture.completedFuture(outcome));
+
+        when(service.getActor(AaiConstants.ACTOR_NAME)).thenReturn(cqActor);
+        when(cqActor.getOperator("CustomQuery")).thenReturn(cqOperator);
+        when(cqOperator.buildOperation(any())).thenReturn(cqOperation);
+
+        when(cqOperation.start()).thenReturn(cqFuture);
+
+        // get a fresh outcome
+        outcome = params.makeOutcome(TARGET_ENTITY);
     }
 
     /**
@@ -110,6 +162,10 @@ public class BasicOperation {
         event = new VirtualControlLoopEvent();
         event.setRequestId(REQ_ID);
         event.setAai(enrichment);
+        event.setClosedLoopControlName(CL_NAME);
+        event.setPolicyName(EVENT_POLICY_NAME);
+        event.setPolicyVersion(EVENT_POLICY_VERSION);
+        event.setVersion(EVENT_VERSION);
 
         context = new ControlLoopEventContext(event);
 
@@ -133,7 +189,7 @@ public class BasicOperation {
      *
      * @return payload data
      */
-    protected Map<String, String> makePayload() {
+    protected Map<String, Object> makePayload() {
         return null;
     }
 
@@ -162,4 +218,16 @@ public class BasicOperation {
 
         assertEquals(expected, json);
     }
+
+    /**
+     * Provides a response to a custom query.
+     *
+     * @param cq response to provide
+     */
+    protected void provideCqResponse(AaiCqResponse cq) {
+        context.setProperty(AaiCqResponse.CONTEXT_KEY, cq);
+        OperationOutcome outcome2 = params.makeOutcome(TARGET_ENTITY);
+        outcome2.setResult(PolicyResult.SUCCESS);
+        cqFuture.complete(outcome2);
+    }
 }