diff options
author | Jim Hahn <jrh3@att.com> | 2020-05-22 16:05:16 -0400 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2020-05-22 16:17:14 -0400 |
commit | 18486d18e1a684cd4df27b335f565c1d985d4f06 (patch) | |
tree | 54fa608487ee43aa88a06ab0fd51ddad38b7bbdd | |
parent | 7e6f32d775b8455e5c8f0c244ef0fb8324ce2b7a (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>
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()); |