Add "disabled" property to Guard Actor 26/102326/2
authorJim Hahn <jrh3@att.com>
Tue, 25 Feb 2020 15:49:32 +0000 (10:49 -0500)
committerJim Hahn <jrh3@att.com>
Tue, 25 Feb 2020 16:16:23 +0000 (11:16 -0500)
Issue-ID: POLICY-2350
Signed-off-by: Jim Hahn <jrh3@att.com>
Change-Id: I3e9c9aae474d4b288a162243bc492b301d1044c0

models-interactions/model-actors/actor.guard/src/main/java/org/onap/policy/controlloop/actor/guard/GuardActorParams.java
models-interactions/model-actors/actor.guard/src/main/java/org/onap/policy/controlloop/actor/guard/GuardConfig.java
models-interactions/model-actors/actor.guard/src/main/java/org/onap/policy/controlloop/actor/guard/GuardOperation.java
models-interactions/model-actors/actor.guard/src/main/java/org/onap/policy/controlloop/actor/guard/GuardParams.java
models-interactions/model-actors/actor.guard/src/test/java/org/onap/policy/controlloop/actor/guard/GuardActorParamsTest.java
models-interactions/model-actors/actor.guard/src/test/java/org/onap/policy/controlloop/actor/guard/GuardConfigTest.java
models-interactions/model-actors/actor.guard/src/test/java/org/onap/policy/controlloop/actor/guard/GuardOperationTest.java
models-interactions/model-actors/actor.guard/src/test/java/org/onap/policy/controlloop/actor/guard/GuardParamsTest.java

index b8eb85c..aa6d727 100644 (file)
@@ -40,4 +40,9 @@ public class GuardActorParams extends HttpActorParams {
     private String onapComponent;
     private String onapInstance;
     private String action = DEFAULT_ACTION;
+
+    /**
+     * {@code True} if guard operations are disabled.
+     */
+    private boolean disabled = false;
 }
index c6bf326..0e711d1 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.policy.controlloop.actor.guard;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.concurrent.Executor;
+import lombok.Getter;
 import org.onap.policy.common.endpoints.http.client.HttpClient;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactory;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
@@ -33,6 +34,12 @@ import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 public class GuardConfig extends HttpConfig {
     private final Map<String, Object> defaultRequest = new LinkedHashMap<>();
 
+    /**
+     * {@code True} if the associated guard operation is disabled.
+     */
+    @Getter
+    private boolean disabled;
+
     /**
      * Constructs the object.
      *
@@ -47,6 +54,8 @@ public class GuardConfig extends HttpConfig {
         addProperty("ONAPInstance", params.getOnapInstance());
         addProperty("ONAPName", params.getOnapName());
         addProperty("action", params.getAction());
+
+        this.disabled = params.isDisabled();
     }
 
     /**
index a5459f6..e35caa0 100644 (file)
@@ -84,6 +84,10 @@ public class GuardOperation extends HttpOperation<DecisionResponse> {
 
     @Override
     protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
+        if (config.isDisabled()) {
+            // guard is disabled, thus it is always treated as a success
+            return CompletableFuture.completedFuture(params.makeOutcome());
+        }
 
         DecisionRequest request = Util.translate(getName(), makeRequest(), DecisionRequest.class);
 
index 2514825..5f83603 100644 (file)
@@ -41,4 +41,9 @@ public class GuardParams extends HttpParams {
     private String onapComponent;
     private String onapInstance;
     private String action;
+
+    /**
+     * {@code True} if the associated guard operation is disabled.
+     */
+    private boolean disabled;
 }
index 1c25609..0fef3bd 100644 (file)
@@ -64,6 +64,12 @@ public class GuardActorParamsTest {
         params = makeGuardActorParams();
     }
 
+    @Test
+    public void testIsDisabled() {
+        // disabled by default
+        assertFalse(params.isDisabled());
+    }
+
     @Test
     public void testValidate() {
         assertTrue(params.validate(CONTAINER).isValid());
index f94d122..49c1c91 100644 (file)
@@ -21,7 +21,9 @@
 package org.onap.policy.controlloop.actor.guard;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
 
 import java.util.concurrent.Executor;
@@ -85,8 +87,14 @@ public class GuardConfigTest {
         // repeat, with minimal parameters
         params = GuardParams.builder().clientName(MY_CLIENT).path(PATH).timeoutSec(TIMEOUT).build();
         config = new GuardConfig(executor, params, factory);
+        assertFalse(config.isDisabled());
 
         actual = Util.translate("", config.makeRequest(), DecisionRequest.class);
         assertEquals(new DecisionRequest(), actual);
+
+        // try with disabled=true
+        params = params.toBuilder().disabled(true).build();
+        config = new GuardConfig(executor, params, factory);
+        assertTrue(config.isDisabled());
     }
 }
index bd23a81..a43292a 100644 (file)
@@ -26,14 +26,17 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Map;
 import java.util.TreeMap;
 import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mock;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.controlloop.actor.test.BasicHttpOperation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
@@ -44,6 +47,12 @@ import org.onap.policy.models.decisions.concepts.DecisionResponse;
 
 public class GuardOperationTest extends BasicHttpOperation<DecisionRequest> {
 
+    @Mock
+    private Consumer<OperationOutcome> started;
+    @Mock
+    private Consumer<OperationOutcome> completed;
+
+    private GuardConfig guardConfig;
     private GuardOperation oper;
 
     /**
@@ -53,12 +62,14 @@ public class GuardOperationTest extends BasicHttpOperation<DecisionRequest> {
     public void setUp() throws Exception {
         super.setUpBasic();
 
-        GuardConfig cguard = mock(GuardConfig.class);
-        when(cguard.makeRequest()).thenAnswer(args -> new TreeMap<>(Map.of("action", "guard")));
+        guardConfig = mock(GuardConfig.class);
+        when(guardConfig.makeRequest()).thenAnswer(args -> new TreeMap<>(Map.of("action", "guard")));
 
-        config = cguard;
+        config = guardConfig;
         initConfig();
 
+        params = params.toBuilder().startCallback(started).completeCallback(completed).build();
+
         oper = new GuardOperation(params, config);
     }
 
@@ -87,6 +98,29 @@ public class GuardOperationTest extends BasicHttpOperation<DecisionRequest> {
         assertEquals(PolicyResult.SUCCESS, future2.get().getResult());
     }
 
+    /**
+     * Tests startOperationAsync() when the guard is disabled.
+     */
+    @Test
+    public void testStartOperationAsyncDisabled() throws Exception {
+        // indicate that it's disabled
+        when(guardConfig.isDisabled()).thenReturn(true);
+
+        CompletableFuture<OperationOutcome> future2 = oper.start();
+        executor.runAll(100);
+
+        verify(client, never()).post(any(), any(), any(), any());
+
+        // should already be done
+        assertTrue(future2.isDone());
+
+        assertEquals(PolicyResult.SUCCESS, future2.get().getResult());
+
+        // ensure callbacks were invoked
+        verify(started).accept(any());
+        verify(completed).accept(any());
+    }
+
     @Test
     public void testMakeRequest() throws CoderException {
         verifyPayload("makeReqStd.json", makePayload());
index b414885..1723683 100644 (file)
@@ -50,6 +50,12 @@ public class GuardParamsTest {
                         .action(MY_ACTION).clientName(CLIENT).path(PATH).timeoutSec(TIMEOUT).build();
     }
 
+    @Test
+    public void testIsDisabled() {
+        // disabled by default
+        assertFalse(params.isDisabled());
+    }
+
     @Test
     public void testValidate() {
         assertTrue(params.validate(CONTAINER).isValid());