diff options
Diffstat (limited to 'controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java')
-rw-r--r-- | controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java | 194 |
1 files changed, 86 insertions, 108 deletions
diff --git a/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java b/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java index 00e00cc24..641b56f13 100644 --- a/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java +++ b/controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java @@ -20,7 +20,7 @@ package org.onap.policy.template.demo; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -38,24 +38,25 @@ import org.kie.api.runtime.KieSession; import org.kie.api.runtime.rule.FactHandle; import org.onap.policy.controlloop.ControlLoopEventStatus; import org.onap.policy.controlloop.ControlLoopNotificationType; -import org.onap.policy.controlloop.ControlLoopTargetType; import org.onap.policy.controlloop.VirtualControlLoopEvent; import org.onap.policy.controlloop.VirtualControlLoopNotification; import org.onap.policy.controlloop.policy.ControlLoopPolicy; -import org.onap.policy.controlloop.policy.TargetType; +import org.onap.policy.drools.PolicyEngineListener; import org.onap.policy.drools.http.server.HttpServletServer; import org.onap.policy.drools.impl.PolicyEngineJUnitImpl; -import org.onap.policy.guard.PolicyGuard; + +import org.onap.policy.so.SORequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class VDNSControlLoopTest { +public class VDNSControlLoopTest implements PolicyEngineListener { private static final Logger logger = LoggerFactory.getLogger(VDNSControlLoopTest.class); private KieSession kieSession; private Util.Pair<ControlLoopPolicy, String> pair; private PolicyEngineJUnitImpl engine; + private UUID requestID; static { /* Set environment properties */ @@ -100,89 +101,30 @@ public class VDNSControlLoopTest { } /* - * Create a thread to continuously fire rules - * until main thread calls halt - */ - new Thread( new Runnable() { - @Override - public void run() { - kieSession.fireUntilHalt(); - } - } ).start(); - - /* - * Create a unique requestId and a unique trigger source + * Allows the PolicyEngine to callback to this object to + * notify that there is an event ready to be pulled + * from the queue */ - UUID requestID = UUID.randomUUID(); - String triggerSourceName = "foobartriggersource36"; + engine.addListener(this); /* - * This will be the object returned from the PolicyEngine + * Create a unique requestId */ - Object obj = null; + requestID = UUID.randomUUID(); /* * Simulate an onset event the policy engine will * receive from DCAE to kick off processing through * the rules */ - try { - sendOnset(pair.a, requestID, triggerSourceName); - } catch (InterruptedException e) { - e.printStackTrace(); - logger.debug("Unable to send onset event"); - fail("Unable to send onset event"); - } + sendEvent(pair.a, requestID, ControlLoopEventStatus.ONSET); - /* - * Pull the object that was sent out and make - * sure it is a ControlLoopNoticiation of type active - */ - obj = engine.subscribe("UEB", "POLICY-CL-MGT"); - assertNotNull(obj); - assertTrue(obj instanceof VirtualControlLoopNotification); - assertTrue(((VirtualControlLoopNotification)obj).notification.equals(ControlLoopNotificationType.ACTIVE)); - - - /* - * Give the control loop time to acquire a lock - */ - try { - Thread.sleep(4000); - } catch (InterruptedException e) { - e.printStackTrace(); - logger.debug("An interrupt Exception was thrown"); - fail("An interrupt Exception was thrown"); - } - - /* - * Give time to finish processing - */ - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); - logger.debug("An interrupt Exception was thrown"); - fail("An interrupt Exception was thrown"); - } - - /* - * One final check to make sure the lock is released - */ - assertFalse(PolicyGuard.isLocked(TargetType.VNF, triggerSourceName, requestID)); - - /* - * This will stop the thread that is firing the rules - */ - kieSession.halt(); + kieSession.fireUntilHalt(); /* * The only fact in memory should be Params */ - // assertEquals(1, kieSession.getFactCount()); - if (kieSession.getFactCount() != 1L) { - logger.error("FACT count mismatch: 1 expected but there are {}", kieSession.getFactCount()); - } + assertEquals(1, kieSession.getFactCount()); /* * Print what's left in memory @@ -249,55 +191,91 @@ public class VDNSControlLoopTest { return kieSession; } - - /** - * This method is used to simulate event messages from DCAE - * that start the control loop (onset message). - * - * @param policy the controlLoopName comes from the policy - * @param requestID the requestId for this event - * @param triggerSourceName - * @throws InterruptedException + + /* + * (non-Javadoc) + * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String) */ - protected void sendOnset(ControlLoopPolicy policy, UUID requestID, String triggerSourceName) throws InterruptedException { - VirtualControlLoopEvent event = new VirtualControlLoopEvent(); - event.closedLoopControlName = policy.getControlLoop().getControlLoopName(); - event.requestID = requestID; - event.target = "VNF_NAME"; - event.target_type = ControlLoopTargetType.VNF; - event.closedLoopAlarmStart = Instant.now(); - event.AAI = new HashMap<>(); - event.AAI.put("cloud-region.identity-url", "foo"); - event.AAI.put("vserver.selflink", "bar"); - event.AAI.put("vserver.is-closed-loop-disabled", "false"); - event.AAI.put("vserver.vserver-name", "vserver-name-16102016-aai3255-data-11-1"); - event.closedLoopEventStatus = ControlLoopEventStatus.ONSET; - kieSession.insert(event); - Thread.sleep(2000); + public void newEventNotification(String topic) { + /* + * Pull the object that was sent out to DMAAP and make + * sure it is a ControlLoopNoticiation of type active + */ + Object obj = engine.subscribe("UEB", topic); + assertNotNull(obj); + if (obj instanceof VirtualControlLoopNotification) { + VirtualControlLoopNotification notification = (VirtualControlLoopNotification) obj; + String policyName = notification.policyName; + if (policyName.endsWith("EVENT")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.ACTIVE.equals(notification.notification)); + } + else if (policyName.endsWith("GUARD_NOT_YET_QUERIED")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification)); + assertNotNull(notification.message); + assertTrue(notification.message.startsWith("Sending guard query")); + } + else if (policyName.endsWith("GUARD.RESPONSE")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification)); + assertNotNull(notification.message); + assertTrue(notification.message.endsWith("PERMIT")); + } + else if (policyName.endsWith("GUARD_PERMITTED")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification)); + assertNotNull(notification.message); + assertTrue(notification.message.startsWith("actor=SO")); + } + else if (policyName.endsWith("OPERATION.TIMEOUT")) { + logger.debug("Rule Fired: " + notification.policyName); + kieSession.halt(); + logger.debug("The operation timed out"); + fail("Operation Timed Out"); + } + else if (policyName.endsWith("SO.RESPONSE")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.OPERATION_SUCCESS.equals(notification.notification)); + assertNotNull(notification.message); + assertTrue(notification.message.startsWith("actor=SO")); + } + else if (policyName.endsWith("EVENT.MANAGER")) { + logger.debug("Rule Fired: " + notification.policyName); + assertTrue(ControlLoopNotificationType.FINAL_SUCCESS.equals(notification.notification)); + kieSession.halt(); + } + else if (policyName.endsWith("EVENT.MANAGER.TIMEOUT")) { + logger.debug("Rule Fired: " + notification.policyName); + kieSession.halt(); + logger.debug("The control loop timed out"); + fail("Control Loop Timed Out"); + } + } + else if (obj instanceof SORequest) { + logger.debug("\n============ SO received the request!!! ===========\n"); + } } /** * This method is used to simulate event messages from DCAE - * that end the control loop (abatement message). + * that start the control loop (onset message) or end the + * control loop (abatement message). * * @param policy the controlLoopName comes from the policy * @param requestID the requestId for this event - * @param triggerSourceName - * @throws InterruptedException + * @param status could be onset or abated */ - protected void sendAbatement(ControlLoopPolicy policy, UUID requestID, String triggerSourceName) throws InterruptedException { + protected void sendEvent(ControlLoopPolicy policy, UUID requestID, ControlLoopEventStatus status) { VirtualControlLoopEvent event = new VirtualControlLoopEvent(); event.closedLoopControlName = policy.getControlLoop().getControlLoopName(); event.requestID = requestID; - event.target = "generic-vnf.vnf-id"; - event.closedLoopAlarmStart = Instant.now().minusSeconds(5); - event.closedLoopAlarmEnd = Instant.now(); + event.target = "vserver.vserver-name"; + event.closedLoopAlarmStart = Instant.now(); event.AAI = new HashMap<>(); - event.AAI.put("cloud-region.identity-url", "foo"); - event.AAI.put("vserver.selflink", "bar"); + event.AAI.put("vserver.vserver-name", "dfw1lb01lb01"); event.AAI.put("vserver.is-closed-loop-disabled", "false"); - event.AAI.put("generic-vnf.vnf-id", "testGenericVnfID"); - event.closedLoopEventStatus = ControlLoopEventStatus.ABATED; + event.closedLoopEventStatus = status; kieSession.insert(event); } |