summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-05-22 16:05:16 -0400
committerJim Hahn <jrh3@att.com>2020-05-22 16:17:14 -0400
commit18486d18e1a684cd4df27b335f565c1d985d4f06 (patch)
tree54fa608487ee43aa88a06ab0fd51ddad38b7bbdd
parent7e6f32d775b8455e5c8f0c244ef0fb8324ce2b7a (diff)
Generate SDNR notification even on timeout
If a request to SDNR times out, the actor class does not generate a notification for the DCAE_CL_RSP topic. Rather than modifying the actor, decided to modify models to handle that case. Seems like that's where it belongs anyway, as notifications are more of an application- level behavior. Issue-ID: POLICY-2580 Change-Id: Id9426c223b719efce337a604316f19335dae8a94 Signed-off-by: Jim Hahn <jrh3@att.com>
-rw-r--r--controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2.java33
-rw-r--r--controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2Test.java27
2 files changed, 59 insertions, 1 deletions
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2.java
index 9ef892e14..3f7aca6e0 100644
--- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2.java
+++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2.java
@@ -42,6 +42,7 @@ import org.onap.policy.aai.AaiConstants;
import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.controlloop.ControlLoopOperation;
import org.onap.policy.controlloop.ControlLoopResponse;
+import org.onap.policy.controlloop.VirtualControlLoopEvent;
import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
@@ -514,7 +515,7 @@ public class ControlLoopOperationManager2 implements Serializable {
*/
state = (outcome.getResult() == PolicyResult.SUCCESS ? State.OPERATION_SUCCESS
: State.OPERATION_FAILURE);
- controlLoopResponse = outcome.getControlLoopResponse();
+ controlLoopResponse = makeControlLoopResponse(outcome.getControlLoopResponse());
if (!operationHistory.isEmpty() && operationHistory.peekLast().getClOperation().getEnd() == null) {
operationHistory.removeLast();
}
@@ -530,6 +531,36 @@ public class ControlLoopOperationManager2 implements Serializable {
}
/**
+ * Makes a control loop response.
+ *
+ * @param source original control loop response or {@code null}
+ * @return a new control loop response, or {@code null} none is required
+ */
+ protected ControlLoopResponse makeControlLoopResponse(ControlLoopResponse source) {
+ if (source != null) {
+ return source;
+ }
+
+ // only generate response for certain actors.
+ if (!actor.equals("SDNR")) {
+ return null;
+ }
+
+ VirtualControlLoopEvent event = eventContext.getEvent();
+
+ ControlLoopResponse clRsp = new ControlLoopResponse();
+ clRsp.setFrom(actor);
+ clRsp.setTarget("DCAE");
+ clRsp.setClosedLoopControlName(event.getClosedLoopControlName());
+ clRsp.setPolicyName(event.getPolicyName());
+ clRsp.setPolicyVersion(event.getPolicyVersion());
+ clRsp.setRequestId(event.getRequestId());
+ clRsp.setVersion(event.getVersion());
+
+ return clRsp;
+ }
+
+ /**
* Get the operation, as a message.
*
* @return the operation, as a message
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2Test.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2Test.java
index 3214add1c..be8b70b13 100644
--- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2Test.java
+++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager2Test.java
@@ -54,6 +54,7 @@ import org.onap.aai.domain.yang.GenericVnf;
import org.onap.policy.aai.AaiCqResponse;
import org.onap.policy.common.utils.time.PseudoExecutor;
import org.onap.policy.controlloop.ControlLoopOperation;
+import org.onap.policy.controlloop.ControlLoopResponse;
import org.onap.policy.controlloop.VirtualControlLoopEvent;
import org.onap.policy.controlloop.actor.guard.GuardActorServiceProvider;
import org.onap.policy.controlloop.actor.guard.GuardOperation;
@@ -343,6 +344,32 @@ public class ControlLoopOperationManager2Test {
}
@Test
+ public void testMakeControlLoopResponse() {
+ // should always return its input, if non-null
+ ControlLoopResponse resp = new ControlLoopResponse();
+ assertSame(resp, mgr.makeControlLoopResponse(resp));
+
+ // not an SDNR action - should return null
+ assertNull(mgr.makeControlLoopResponse(null));
+
+ /*
+ * now work with SDNR actor
+ */
+ policy.setActor("SDNR");
+ mgr = new ControlLoopOperationManager2(mgrctx, context, policy, executor);
+
+ // should still return its input, if non-null
+ resp = new ControlLoopResponse();
+ assertSame(resp, mgr.makeControlLoopResponse(resp));
+
+ // should generate a response
+ resp = mgr.makeControlLoopResponse(null);
+ assertNotNull(resp);
+ assertEquals(REQ_ID, resp.getRequestId());
+ assertNull(resp.getPayload());
+ }
+
+ @Test
public void testGetOperationMessage() {
// no history yet
assertNull(mgr.getOperationMessage());