$params : ControlLoopParams( $clName : getClosedLoopControlName() )
$event : CanonicalOnset( closedLoopControlName == $clName )
not ( ControlLoopEventManager2( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() ) )
+ getContext().getEvent() == $event ) )
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
when
$event : VirtualControlLoopEvent( )
$manager : ControlLoopEventManager2( closedLoopControlName == $event.getClosedLoopControlName(),
- requestId == $event.getRequestId() )
+ getContext().getEvent() == $event )
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
//
// TODO: handle the abatement. Currently, it's just discarded.
//
+ logger.info("{}: {}.{}: abatement",
+ $manager.getClosedLoopControlName(), $manager.getPolicyName(), drools.getRule().getName());
break;
case FIRST_ONSET:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.stream.Collectors;
private static final Set<String> TRUE_VALUES = Set.of("true", "t", "yes", "y");
+ /**
+ * Counts the number of these objects that have been created. This is used by junit
+ * tests.
+ */
+ private static final AtomicLong createCount = new AtomicLong(0);
+
public enum NewEventStatus {
FIRST_ONSET, SUBSEQUENT_ONSET, FIRST_ABATEMENT, SUBSEQUENT_ABATEMENT, SYNTAX_ERROR
}
@Getter
@ToString.Include
private final UUID requestId;
+ @Getter
private final ControlLoopEventContext context;
@ToString.Include
private int numOnsets = 1;
public ControlLoopEventManager2(ControlLoopParams params, VirtualControlLoopEvent event, WorkingMemory workMem)
throws ControlLoopException {
+ createCount.incrementAndGet();
+
checkEventSyntax(event);
if (isClosedLoopDisabled(event)) {
this.endTimeMs = System.currentTimeMillis() + detmControlLoopTimeoutMs();
}
+ /**
+ * Gets the number of managers objects that have been created.
+ * @return the number of managers objects that have been created
+ */
+ public static long getCreateCount() {
+ return createCount.get();
+ }
+
/**
* Starts the manager.
*
import java.util.stream.Collectors;
import lombok.AccessLevel;
import lombok.Getter;
-
-import org.junit.Ignore;
import org.junit.Test;
import org.onap.policy.appc.Request;
import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
import org.onap.policy.common.utils.coder.StandardCoderInstantAsMillis;
import org.onap.policy.controlloop.ControlLoopNotificationType;
import org.onap.policy.controlloop.VirtualControlLoopNotification;
+import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager2;
import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.sdnr.PciMessage;
* to obtain a lock since it is a different target. After processing of all events
* there should only be the policy and params objects left in memory.
*/
- // Ignoring test due to TimeoutException (for some reason this test fails only on docker build)
- // https://jenkins.onap.org/job/policy-drools-applications-maven-docker-stage-master/294/
- @Ignore
@Test
public void testDuplicatesEvents() {
policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
policy = rules.setupPolicyFromFile(DUPLICATES_TOSCA_COMPLIANT_POLICY);
assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ final long initCount = getCreateCount();
+
/*
* Inject ONSET events over the DCAE topic. First and last have the same target
* entity, but different request IDs - only one should succeed. The middle one is
topics.inject(DCAE_TOPIC, DUPLICATES_ONSET_2);
topics.inject(DCAE_TOPIC, DUPLICATES_ONSET_1, UUID.randomUUID().toString());
- // one should immediately generate a FINAL failure
- waitForFinal(policy, policyClMgt, ControlLoopNotificationType.FINAL_FAILURE);
-
// should see two restarts
for (int count = 0; count < 2; ++count) {
AppcLcmDmaapWrapper appcreq = appcLcmRead.await(req -> APPC_RESTART_OP.equals(req.getRpcName()));
.sorted().collect(Collectors.toList());
assertEquals(List.of("duplicate-VNF", "vCPE_Infrastructure_vGMUX_demo_app").toString(), actual.toString());
+
+ long added = getCreateCount() - initCount;
+ assertEquals(2, added);
}
// VCPE
waitForFinalSuccess(policy, policyClMgt);
}
+ protected long getCreateCount() {
+ return ControlLoopEventManager2.getCreateCount();
+ }
+
/**
* Waits for a OPERATION SUCCESS transaction notification.
*/
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
+import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
@Test
public void testTestDuplicatesEvents() {
+ // the test expects the count to be incremented by 2 between calls
+ AtomicLong count = new AtomicLong(5);
+ base = spy(base);
+ when(base.getCreateCount()).thenAnswer(args -> count.getAndAdd(2));
+
enqueueAppcLcm("restart", "restart");
- enqueueClMgt(ControlLoopNotificationType.FINAL_FAILURE);
enqueueClMgt(ControlLoopNotificationType.FINAL_SUCCESS);
enqueueClMgt(ControlLoopNotificationType.FINAL_SUCCESS);
- clMgtQueue.get(1).setAai(Map.of("generic-vnf.vnf-id", "duplicate-VNF"));
- clMgtQueue.get(2).setAai(Map.of("generic-vnf.vnf-id", "vCPE_Infrastructure_vGMUX_demo_app"));
+ clMgtQueue.get(0).setAai(Map.of("generic-vnf.vnf-id", "duplicate-VNF"));
+ clMgtQueue.get(1).setAai(Map.of("generic-vnf.vnf-id", "vCPE_Infrastructure_vGMUX_demo_app"));
base.testDuplicatesEvents();
assertEquals(0, permitCount);
- assertEquals(3, finalCount);
+ assertEquals(2, finalCount);
assertTrue(appcLcmQueue.isEmpty());
assertTrue(clMgtQueue.isEmpty());
*/
@Test
@Ignore
- @SuppressWarnings("java:S1607")
- public void testIgnore() {
+ public void testIgnore() { // NOSONAR
fail("should not run");
}