aboutsummaryrefslogtreecommitdiffstats
path: root/controlloop/common/controller-usecases/src/test/java
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2020-03-09 15:15:05 -0400
committerJim Hahn <jrh3@att.com>2020-03-12 12:12:48 -0400
commitaa8225b5211485b3c1150c21e51fd3e93b7f31d3 (patch)
tree922b78d2c8a4c657d4c32604a0b73df40d2fb330 /controlloop/common/controller-usecases/src/test/java
parent0e658768fc0573bf6acf7f849a49c9da98c8e47f (diff)
Retool rules tests
Extracted common code from various XxxBaseTest classes into: - Topics class to manage messages for test topics - HttpClients class to manage HttpClient objects for tests - Simulators class to manage simulators for tests - Rules class to manage start up and shutdown of rules Merged remaining code from XxxBaseTest classes into a single class. Modified the Frankfurt and Usescases tests to subclass from this new class and specify just the relevant tests to be executed. Issue-ID: POLICY-2385 Signed-off-by: Jim Hahn <jrh3@att.com> Change-Id: Iaf83c9d2b205a4c343e0dde23ec86508f5773693
Diffstat (limited to 'controlloop/common/controller-usecases/src/test/java')
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java515
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java120
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VcpeTest.java211
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VfwTest.java185
-rw-r--r--controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VlbTest.java157
5 files changed, 120 insertions, 1068 deletions
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java
deleted file mode 100644
index 66ad32462..000000000
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesBase.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop;
-
-import static org.awaitility.Awaitility.await;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.Properties;
-import java.util.Queue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import lombok.Getter;
-import org.apache.commons.lang3.StringUtils;
-import org.kie.api.event.rule.AfterMatchFiredEvent;
-import org.kie.api.event.rule.BeforeMatchFiredEvent;
-import org.kie.api.event.rule.DefaultAgendaEventListener;
-import org.kie.api.event.rule.DefaultRuleRuntimeEventListener;
-import org.kie.api.event.rule.MatchCancelledEvent;
-import org.kie.api.event.rule.MatchCreatedEvent;
-import org.kie.api.event.rule.ObjectDeletedEvent;
-import org.kie.api.event.rule.ObjectInsertedEvent;
-import org.kie.api.event.rule.ObjectUpdatedEvent;
-import org.kie.api.event.rule.RuleRuntimeEventListener;
-import org.kie.api.runtime.KieSession;
-import org.onap.policy.common.endpoints.event.comm.Topic;
-import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
-import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
-import org.onap.policy.common.endpoints.event.comm.TopicListener;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
-import org.onap.policy.drools.persistence.SystemPersistence;
-import org.onap.policy.drools.persistence.SystemPersistenceConstants;
-import org.onap.policy.drools.protocol.coders.EventProtocolCoderConstants;
-import org.onap.policy.drools.system.PolicyController;
-import org.onap.policy.drools.system.PolicyControllerConstants;
-import org.onap.policy.drools.system.PolicyEngine;
-import org.onap.policy.drools.system.PolicyEngineConstants;
-import org.onap.policy.drools.util.KieUtils;
-import org.onap.policy.drools.utils.PropertyUtil;
-import org.onap.policy.drools.utils.logging.LoggerUtil;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.onap.policy.simulators.Util;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Use Cases Tests Framework.
- */
-public abstract class UsecasesBase {
-
- private static final Logger logger = LoggerFactory.getLogger(UsecasesBase.class);
- private static final StandardCoder coder = new StandardCoder();
-
- /**
- * PDP-D Engine.
- */
- protected static final PolicyEngine pdpD = PolicyEngineConstants.getManager();
-
- /**
- * PDP-D Configuration Repository.
- */
- protected static final SystemPersistence repo = SystemPersistenceConstants.getManager();
-
- /**
- * Usecases controller and session name.
- */
- protected static final String USECASES = "usecases";
-
- /**
- * Usecases controller.
- */
- protected static PolicyController usecases;
-
- /*
- * Canonical Topic Names.
- */
- protected static final String DCAE_TOPIC = "DCAE_TOPIC";
- protected static final String APPC_LCM_WRITE_TOPIC = "APPC-LCM-WRITE";
- protected static final String POLICY_CL_MGT_TOPIC = "POLICY-CL-MGT";
- protected static final String APPC_LCM_READ_TOPIC = "APPC-LCM-READ";
- protected static final String APPC_CL_TOPIC = "APPC-CL";
-
- /**
- * Sets up overall logging.
- */
- protected static void setupLogging() {
- LoggerUtil.setLevel(LoggerUtil.ROOT_LOGGER, "WARN");
- LoggerUtil.setLevel("org.eclipse.jetty", "WARN");
- LoggerUtil.setLevel("org.onap.policy.controlloop", "INFO");
- LoggerUtil.setLevel("network", "INFO");
- }
-
- /**
- * Sets up Drools Logging for events of interest.
- */
- protected static void setupDroolsLogging() {
- KieSession session =
- PolicyControllerConstants.getFactory().get(USECASES)
- .getDrools().getContainer() .getPolicySession(USECASES).getKieSession();
-
- session.addEventListener(new RuleListenerLogger());
- session.addEventListener(new AgendaListenerLogger());
- }
-
- /**
- * Sets up Simulators for use case testing.
- */
- protected static void setupSimulators() throws InterruptedException {
- Util.buildAaiSim();
- Util.buildSoSim();
- Util.buildVfcSim();
- Util.buildGuardSim();
- Util.buildSdncSim();
- }
-
- /**
- * Returns the runtime Control Loop Parameters associated with a Tosca Policy.
- */
- protected ControlLoopParams clParameters(ToscaPolicy policy) {
- return usecases
- .getDrools()
- .facts(USECASES, ControlLoopParams.class).stream()
- .filter((params) -> params.getToscaPolicy() == policy)
- .findFirst()
- .get();
- }
-
- protected ToscaPolicy getPolicyFromResource(String resourcePath, String policyName) throws CoderException {
- String policyJson = ResourceUtils.getResourceAsString(resourcePath);
- ToscaServiceTemplate serviceTemplate = coder.decode(policyJson, ToscaServiceTemplate.class);
- ToscaPolicy policy = serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
- assertNotNull(policy);
-
- /*
- * name and version are used within a drl. api component and drools core will ensure that these
- * are populated.
- */
- if (StringUtils.isBlank(policy.getName())) {
- policy.setName(policyName);
- }
-
- if (StringUtils.isBlank(policy.getVersion())) {
- policy.setVersion(policy.getTypeVersion());
- }
-
- return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
- }
-
- protected ToscaPolicy getPolicyFromFile(String policyPath) throws IOException, CoderException {
- String rawPolicy = new String(Files.readAllBytes(Paths.get(policyPath)));
- return coder.decode(rawPolicy, ToscaPolicy.class);
- }
-
- private ToscaPolicy setupPolicy(ToscaPolicy policy) throws InterruptedException {
- final KieObjectExpectedCallback policyTracker = new KieObjectInsertedExpectedCallback<>(policy);
- final KieObjectExpectedCallback paramsTracker = new KieClassInsertedExpectedCallback<>(ControlLoopParams.class);
-
- usecases.getDrools().offer(policy);
-
- assertTrue(policyTracker.isNotified());
- assertTrue(paramsTracker.isNotified());
-
- assertEquals(1, usecases.getDrools().facts(USECASES, ToscaPolicy.class).stream()
- .filter((anotherPolicy) -> anotherPolicy == policy).count());
-
- assertEquals(1, usecases.getDrools().facts(USECASES, ControlLoopParams.class).stream()
- .filter((params) -> params.getToscaPolicy() == policy).count());
- return policy;
- }
-
- /**
- * Installs a policy from policy/models (examples) repo.
- */
- protected ToscaPolicy setupPolicyFromResource(String resourcePath, String policyName)
- throws CoderException, InterruptedException {
- return setupPolicy(getPolicyFromResource(resourcePath, policyName));
- }
-
-
- /**
- * Installs a given policy.
- */
- protected ToscaPolicy setupPolicyFromFile(String policyPath)
- throws IOException, CoderException, InterruptedException {
- return setupPolicy(getPolicyFromFile(policyPath));
- }
-
- /**
- * Deletes a policy.
- */
- protected void deletePolicy(ToscaPolicy policy) throws InterruptedException {
- ControlLoopParams clParams = clParameters(policy);
- assertNotNull(clParams);
-
- final KieObjectExpectedCallback policyTracker = new KieObjectDeletedExpectedCallback<>(policy);
- final KieObjectExpectedCallback clParamsTracker = new KieObjectDeletedExpectedCallback<>(clParams);
-
- usecases.getDrools().delete(USECASES, policy);
- assertTrue(policyTracker.isNotified());
- assertTrue(clParamsTracker.isNotified());
-
- assertEquals(0,
- usecases
- .getDrools()
- .facts(USECASES, ToscaPolicy.class).stream()
- .filter((anotherPolicy) -> anotherPolicy == policy)
- .count());
-
- assertEquals(0,
- usecases
- .getDrools()
- .facts(USECASES, ControlLoopParams.class).stream()
- .filter((params) -> params.getPolicyName() == policy.getName())
- .count());
- }
-
- /**
- * Prepare a PDP-D to test the Use Cases.
- */
- protected static void preparePdpD() throws IOException {
- KieUtils.installArtifact(
- Paths.get("src/main/resources/META-INF/kmodule.xml").toFile(),
- Paths.get("src/test/resources/usecases.pom").toFile(),
- "src/main/resources/org/onap/policy/controlloop/",
- Collections.singletonList(Paths.get("src/main/resources/usecases.drl").toFile()));
-
- repo.setConfigurationDir("src/test/resources/config");
- PropertyUtil.setSystemProperties(repo.getSystemProperties("controlloop"));
- pdpD.setEnvironment(repo.getEnvironmentProperties("controlloop.properties"));
- pdpD.configure(new Properties());
-
- usecases = pdpD.createPolicyController(USECASES, repo.getControllerProperties(USECASES));
- pdpD.start();
-
- setupDroolsLogging();
- }
-
- /**
- * Stop PDP-D.
- */
- protected static void stopPdpD() {
- PolicyControllerConstants.getFactory().shutdown(USECASES);
- pdpD.stop();
- }
-
- /**
- * Stop Simulators.
- */
- protected static void stopSimulators() {
- HttpServletServerFactoryInstance.getServerFactory().destroy();
- }
-
- /**
- * Creates a Topic Sink Callback tracker.
- */
- protected <T> TopicCallback<T> createTopicSinkCallback(String topicName, Class<T> clazz) {
- return new TopicCallback(TopicEndpointManager.getManager().getNoopTopicSink(topicName), clazz);
- }
-
- /**
- * Creates a Topic Source Callback tracker.
- */
- protected <T> TopicCallback<T> createTopicSourceCallback(String topicName, Class<T> clazz) {
- return new TopicCallback(TopicEndpointManager.getManager().getNoopTopicSource(topicName), clazz);
- }
-
- /**
- * Injects a message on a Topic Source.
- */
- protected void injectOnTopic(String topicName, Path onsetPath) throws IOException {
- TopicEndpointManager
- .getManager()
- .getNoopTopicSource(topicName)
- .offer(new String(Files.readAllBytes(onsetPath)));
- }
-
- /**
- * Waits for LOCK acquisition and getting a Permit from PDP-X to proceed.
- */
- protected void waitForLockAndPermit(ToscaPolicy policy, TopicCallback<VirtualControlLoopNotification> policyClMgt) {
- String policyName = policy.getIdentifier().getName();
-
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.ACTIVE, policyClMgt.getMessages().peek().getNotification());
- assertEquals(policyName + ".EVENT", policyClMgt.getMessages().remove().getPolicyName());
-
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION,
- policyClMgt.getMessages().peek().getNotification());
- assertEquals(policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED",
- policyClMgt.getMessages().remove().getPolicyName());
-
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION,
- policyClMgt.getMessages().peek().getNotification());
- assertEquals(policyName + ".GUARD.RESPONSE",
- policyClMgt.getMessages().remove().getPolicyName());
-
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION,
- policyClMgt.getMessages().peek().getNotification());
- assertEquals(policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED",
- policyClMgt.getMessages().remove().getPolicyName());
- }
-
- /**
- * Waits for a FINAL SUCCESS transaction notification.
- */
- protected void waitForFinalSuccess(ToscaPolicy policy, TopicCallback<VirtualControlLoopNotification> policyClMgt) {
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, policyClMgt.getMessages().peek().getNotification());
- assertEquals(policy.getIdentifier().getName() + ".EVENT.MANAGER",
- policyClMgt.getMessages().remove().getPolicyName());
- }
-
- /**
- * Logs Modifications to Working Memory.
- */
- static class RuleListenerLogger implements RuleRuntimeEventListener {
- @Override
- public void objectInserted(ObjectInsertedEvent event) {
- String ruleName = (event.getRule() != null) ? event.getRule().getName() : "null";
- logger.info("RULE {}: inserted {}", ruleName, event.getObject());
- }
-
- @Override
- public void objectUpdated(ObjectUpdatedEvent event) {
- String ruleName = (event.getRule() != null) ? event.getRule().getName() : "null";
- logger.info("RULE {}: updated {}", ruleName, event.getObject());
-
- }
-
- @Override
- public void objectDeleted(ObjectDeletedEvent event) {
- String ruleName = (event.getRule() != null) ? event.getRule().getName() : "null";
- logger.info("RULE {}: deleted {}", ruleName, event.getOldObject());
- }
- }
-
- /**
- * Logs Rule Matches.
- */
- static class AgendaListenerLogger extends DefaultAgendaEventListener {
- @Override
- public void matchCreated(MatchCreatedEvent event) {
- logger.info("RULE {}: match created", event.getMatch().getRule().getName());
- }
-
- @Override
- public void matchCancelled(MatchCancelledEvent event) {
- logger.info("RULE {}: match cancelled", event.getMatch().getRule().getName());
- }
-
- @Override
- public void beforeMatchFired(BeforeMatchFiredEvent event) {
- logger.info("RULE {}: before match fired", event.getMatch().getRule().getName());
- }
-
- @Override
- public void afterMatchFired(AfterMatchFiredEvent event) {
- logger.info("RULE {}: after match fired", event.getMatch().getRule().getName());
- }
- }
-
- /**
- * Base Class to track Working Memory updates for objects of type T.
- */
- abstract class KieObjectExpectedCallback<T> extends DefaultRuleRuntimeEventListener {
- protected T subject;
-
- protected CountDownLatch countDownLatch = new CountDownLatch(1);
-
- public KieObjectExpectedCallback(T affected) {
- subject = affected;
- register();
- }
-
- public boolean isNotified() throws InterruptedException {
- return countDownLatch.await(9L, TimeUnit.SECONDS);
- }
-
- protected void callbacked() {
- unregister();
- countDownLatch.countDown();
- }
-
- public KieObjectExpectedCallback<T> register() {
- usecases.getDrools()
- .getContainer().getPolicySession(USECASES).getKieSession()
- .addEventListener(this);
- return this;
- }
-
- public KieObjectExpectedCallback<T> unregister() {
- usecases.getDrools()
- .getContainer().getPolicySession(USECASES).getKieSession()
- .removeEventListener(this);
- return this;
- }
- }
-
- /**
- * Tracks inserts in Working Memory for an object of type T.
- */
- class KieObjectInsertedExpectedCallback<T> extends KieObjectExpectedCallback {
- public KieObjectInsertedExpectedCallback(T affected) {
- super(affected);
- }
-
- @Override
- public void objectInserted(ObjectInsertedEvent event) {
- if (subject == event.getObject()) {
- callbacked();
- }
- }
- }
-
- /**
- * Tracks deletes in Working Memory of an object of type T.
- */
- class KieObjectDeletedExpectedCallback<T> extends KieObjectExpectedCallback {
- public KieObjectDeletedExpectedCallback(T affected) {
- super(affected);
- }
-
- @Override
- public void objectDeleted(ObjectDeletedEvent event) {
- if (subject == event.getOldObject()) {
- callbacked();
- }
- }
- }
-
- /**
- * Tracks inserts in Working Memory for any object of class T.
- */
- class KieClassInsertedExpectedCallback<T> extends KieObjectInsertedExpectedCallback {
- public KieClassInsertedExpectedCallback(Class<T> affected) {
- super(affected);
- }
-
- public void objectInserted(ObjectInsertedEvent event) {
- if (subject == event.getObject().getClass()) {
- callbacked();
- }
- }
- }
-
- /**
- * Tracks callbacks from topics.
- */
- class TopicCallback<T> implements TopicListener {
- protected final Topic topic;
- protected final Class<T> expectedClass;
-
- @Getter
- protected Queue<T> messages = new LinkedList<>();
-
- public TopicCallback(Topic topic, Class<T> expectedClass) {
- this.topic = topic;
- this.expectedClass = expectedClass;
- this.topic.register(this);
- }
-
- public TopicCallback register() {
- this.topic.register(this);
- return this;
- }
-
- public TopicCallback unregister() {
- this.topic.unregister(this);
- return this;
- }
-
- @Override
- public void onTopicEvent(CommInfrastructure comm, String topic, String event) {
- try {
- messages.add((T) EventProtocolCoderConstants.getManager().decode(
- usecases.getDrools().getGroupId(), usecases.getDrools().getArtifactId(), topic, event));
- } catch (Exception e) {
- logger.warn("invalid mapping in topic {} for event {}", topic, event, e);
- }
- }
- }
-}
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java
new file mode 100644
index 000000000..53c15a312
--- /dev/null
+++ b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java
@@ -0,0 +1,120 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.controlloop;
+
+import lombok.Getter;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+import org.onap.policy.controlloop.common.rules.test.BaseRuleTest;
+import org.onap.policy.controlloop.common.rules.test.Listener;
+import org.onap.policy.controlloop.common.rules.test.NamedRunner;
+import org.onap.policy.controlloop.common.rules.test.TestNames;
+import org.onap.policy.drools.utils.PropertyUtil;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.simulators.Util;
+
+/**
+ * Tests use case rules. Only a subset of available tests will work with these rules, thus
+ * a "FilterRunner" is used to filter out the other test cases.
+ *
+ * <p/>
+ * Note: this only runs tests whose names start with "testV" (e.g., testVcpe(),
+ * testVdns()).
+ */
+@RunWith(NamedRunner.class)
+@TestNames(prefixes = {"testV"})
+
+public class UsecasesTest extends BaseRuleTest {
+
+ @Getter()
+ protected static final String CONTROLLER_NAME = "usecases";
+
+ /**
+ * Sets up statics.
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() {
+ initStatics(CONTROLLER_NAME);
+
+ rules.configure("src/main/resources");
+ PropertyUtil.setSystemProperties(rules.getPdpdRepo().getSystemProperties("controlloop"));
+ rules.getPdpd().setEnvironment(rules.getPdpdRepo().getEnvironmentProperties("controlloop.properties"));
+
+ rules.start();
+ simulators.start(Util::buildAaiSim, Util::buildSoSim, Util::buildVfcSim, Util::buildGuardSim,
+ Util::buildSdncSim);
+ }
+
+ /**
+ * Cleans up statics.
+ */
+ @AfterClass
+ public static void tearDownAfterClass() {
+ finishStatics();
+ }
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ init();
+ }
+
+ /**
+ * Tears down.
+ */
+ @After
+ public void tearDown() {
+ finish();
+ }
+
+ @Override
+ protected void waitForLockAndPermit(ToscaPolicy policy, Listener<VirtualControlLoopNotification> policyClMgt) {
+ String policyName = policy.getIdentifier().getName();
+
+ policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.ACTIVE
+ && (policyName + ".EVENT").equals(notif.getPolicyName()));
+
+ policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
+ && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED")
+ .equals(notif.getPolicyName()));
+
+ policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
+ && (policyName + ".GUARD.RESPONSE").equals(notif.getPolicyName())
+ && notif.getMessage().startsWith("Guard result") && notif.getMessage().endsWith("Permit"));
+
+ policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
+ && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED")
+ .equals(notif.getPolicyName()));
+ }
+
+ @Override
+ protected VirtualControlLoopNotification waitForFinal(ToscaPolicy policy,
+ Listener<VirtualControlLoopNotification> policyClMgt, ControlLoopNotificationType finalType) {
+
+ return policyClMgt.await(notif -> notif.getNotification() == finalType
+ && (policy.getIdentifier().getName() + ".EVENT.MANAGER").equals(notif.getPolicyName()));
+ }
+}
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VcpeTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VcpeTest.java
deleted file mode 100644
index ec3b50213..000000000
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VcpeTest.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop;
-
-import static org.awaitility.Awaitility.await;
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.nio.file.Paths;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-
-/**
- * VCPE Use Case Tests.
- */
-public class VcpeTest extends UsecasesBase {
-
- /**
- * VCPE Tosca Policy File.
- */
- private static final String TOSCA_LEGACY_POLICY_VCPE = "src/test/resources/vcpe/tosca-legacy-vcpe.json";
- private static final String TOSCA_COMPLIANT_POLICY_VCPE = "src/test/resources/vcpe/tosca-compliant-vcpe.json";
-
- /*
- * VCPE Use case Messages.
- */
- private static final String APPC_SUCCESS = "src/test/resources/vcpe/vcpe.appc.success.json";
- private static final String ONSET_1 = "src/test/resources/vcpe/vcpe.onset.1.json";
- private static final String ONSET_2 = "src/test/resources/vcpe/vcpe.onset.2.json";
- private static final String ONSET_3 = "src/test/resources/vcpe/vcpe.onset.3.json";
-
- /*
- * Topic trackers used by the VCPE use case.
- */
- private TopicCallback<VirtualControlLoopNotification> policyClMgt;
- private TopicCallback<AppcLcmDmaapWrapper> appcLcmRead;
- private TopicCallback<AppcLcmDmaapWrapper> appcLcmWrite;
-
- /*
- * VCPE Tosca Policy.
- */
- private ToscaPolicy policy;
-
- /**
- * Prepare PDP-D Framework for testing.
- */
- @BeforeClass
- public static void prepareResouces() throws InterruptedException, CoderException, IOException {
- setupLogging();
- preparePdpD();
- setupSimulators();
- }
-
- /**
- * Take down the resources used by the test framework.
- */
- @AfterClass
- public static void takeDownResources() {
- stopPdpD();
- stopSimulators();
- }
-
- /**
- * Sunny day scenario for the VCPE use case.
- */
- public void sunnyDay() throws IOException {
-
- /* Inject an ONSET event over the DCAE topic */
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET_1));
-
- /* Wait to acquire a LOCK and a PDP-X PERMIT */
- waitForLockAndPermit(policy, policyClMgt);
-
- /* --- VCPE Operation Execution --- */
-
- /* Ensure that an APPC RESTART request was sent in response to the matching ONSET */
- await().until(() -> !appcLcmRead.getMessages().isEmpty());
- assertEquals("restart", appcLcmRead.getMessages().remove().getRpcName());
-
- /* Inject a 400 APPC Response Return over the APPC topic */
- injectOnTopic(APPC_LCM_WRITE_TOPIC, Paths.get(APPC_SUCCESS));
-
- /* Ensure that RESTART response is received */
- await().until(() -> !appcLcmWrite.getMessages().isEmpty());
- assertEquals("restart", appcLcmWrite.getMessages().peek().getRpcName());
- assertEquals(400, appcLcmWrite.getMessages().remove().getBody().getOutput().getStatus().getCode());
-
- /* --- VCPE Operation Completed --- */
-
- /* Ensure that the VCPE RESTART Operation is successfully completed */
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION_SUCCESS, policyClMgt.getMessages().peek().getNotification());
- assertEquals(policy.getIdentifier().getName() + ".APPC.LCM.RESPONSE",
- policyClMgt.getMessages().remove().getPolicyName());
-
- /* --- VCPE Transaction Completed --- */
- waitForFinalSuccess(policy, policyClMgt);
- }
-
- /**
- * Sunny Day with Legacy Tosca Policy.
- */
- @Test
- public void sunnyDayLegacy() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_LEGACY_POLICY_VCPE);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * Sunny Day with Tosca Compliant Policy.
- */
- @Test
- public void sunnyDayCompliant() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_COMPLIANT_POLICY_VCPE);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * An ONSET flood prevention test that injects a few ONSETs at once.
- * It attempts to simulate the flooding behavior of the DCAE TCA microservice.
- * TCA could blast tenths or hundreds of ONSETs within sub-second intervals.
- */
- @Test
- public void onsetFloodPrevention() throws IOException, InterruptedException, CoderException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_LEGACY_POLICY_VCPE);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET_1));
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET_2));
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET_3));
-
- assertEquals(1, usecases.getDrools().facts(USECASES, VirtualControlLoopEvent.class).stream().count());
- assertEquals(1, usecases.getDrools().facts(USECASES, CanonicalOnset.class).stream().count());
- assertEquals(usecases.getDrools().facts(USECASES, CanonicalOnset.class).get(0),
- usecases.getDrools().facts(USECASES, VirtualControlLoopEvent.class).get(0));
-
- sunnyDay();
- }
-
- /**
- * Observe Topics.
- */
- @Before
- public void topicsRegistration() {
- policyClMgt = createTopicSinkCallback(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class);
- appcLcmRead = createTopicSinkCallback(APPC_LCM_READ_TOPIC, AppcLcmDmaapWrapper.class);
- appcLcmWrite = createTopicSourceCallback(APPC_LCM_WRITE_TOPIC, AppcLcmDmaapWrapper.class);
- }
-
- /**
- * Unregister Topic Callbacks.
- */
- @After
- public void topicsUnregistration() {
- if (policyClMgt != null) {
- policyClMgt.unregister();
- }
-
- if (appcLcmRead != null) {
- appcLcmRead.unregister();
- }
-
- if (appcLcmWrite != null) {
- appcLcmWrite.unregister();
- }
- }
-
- /**
- * Uninstall Policy.
- */
- @After
- public void uninstallPolicy() throws InterruptedException {
- assertEquals(2, usecases.getDrools().factCount(USECASES));
- if (policy != null) {
- deletePolicy(policy);
- }
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- }
-
-}
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VfwTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VfwTest.java
deleted file mode 100644
index 8386b3028..000000000
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VfwTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop;
-
-import static org.awaitility.Awaitility.await;
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.nio.file.Paths;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appc.Response;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-
-/**
- * VFW Use Case Tests.
- */
-public class VfwTest extends UsecasesBase {
-
- /**
- * VFW Tosca Policy File.
- */
- private static final String TOSCA_LEGACY_POLICY_VFW = "src/test/resources/vfw/tosca-vfw.json";
- private static final String TOSCA_COMPLIANT_POLICY_VFW = "src/test/resources/vfw/tosca-compliant-vfw.json";
-
- /*
- * VFW Use case Messages.
- */
- private static final String APPC_SUCCESS = "src/test/resources/vfw/vfw.appc.success.json";
- private static final String ONSET = "src/test/resources/vfw/vfw.onset.json";
-
- /*
- * Topic trackers used by the VFW use case.
- */
- private TopicCallback<VirtualControlLoopNotification> policyClMgt;
- private TopicCallback<Response> appcClSource;
- private TopicCallback<Request> appcClSink;
-
- /*
- * VFW Tosca Policy.
- */
- private ToscaPolicy policy;
-
- /**
- * Prepare PDP-D Framework for testing.
- */
- @BeforeClass
- public static void prepareResouces() throws InterruptedException, IOException {
- setupLogging();
- preparePdpD();
- setupSimulators();
- }
-
- /**
- * Take down the resources used by the test framework.
- */
- @AfterClass
- public static void takeDownResources() {
- stopPdpD();
- stopSimulators();
- }
-
- /**
- * Sunny day scenario for the VFW use case.
- */
- private void sunnyDay() throws IOException {
-
- /* Inject an ONSET event over the DCAE topic */
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET));
-
- /* Wait to acquire a LOCK and a PDP-X PERMIT */
- waitForLockAndPermit(policy, policyClMgt);
-
- /* --- VFW Operation Execution --- */
-
- /* Ensure that an APPC RESTART request was sent in response to the matching ONSET */
- await().until(() -> !appcClSink.getMessages().isEmpty());
- assertEquals("ModifyConfig", appcClSink.getMessages().remove().getAction());
-
- /* Inject a 400 APPC Response Return over the APPC topic */
- injectOnTopic(APPC_CL_TOPIC, Paths.get(APPC_SUCCESS));
-
- /* Ensure that RESTART response is received */
- await().until(() -> !appcClSource.getMessages().isEmpty());
- assertEquals("SUCCESS", appcClSource.getMessages().remove().getStatus().getValue());
-
- /* --- VFW Operation Completed --- */
-
- /* Ensure that the VFW RESTART Operation is successfully completed */
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION_SUCCESS,
- policyClMgt.getMessages().remove().getNotification());
-
- /* --- VFW Transaction Completed --- */
- waitForFinalSuccess(policy, policyClMgt);
- }
-
- /**
- * Sunny Day with Legacy Tosca Policy.
- */
- @Test
- public void sunnyDayLegacy() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_LEGACY_POLICY_VFW);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * Sunny Day with Tosca Compliant Policy.
- */
- @Test
- public void sunnyDayCompliant() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_COMPLIANT_POLICY_VFW);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * Observe Topics.
- */
- @Before
- public void topicsRegistration() {
- policyClMgt = createTopicSinkCallback(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class);
- appcClSink = createTopicSinkCallback(APPC_CL_TOPIC, Request.class);
- appcClSource = createTopicSourceCallback(APPC_CL_TOPIC, Response.class);
- }
-
- /**
- * Unregister Topic Callbacks.
- */
- @After
- public void topicsUnregistration() {
- if (policyClMgt != null) {
- policyClMgt.unregister();
- }
-
- if (appcClSource != null) {
- appcClSource.unregister();
- }
-
- if (appcClSink != null) {
- appcClSink.unregister();
- }
- }
-
- /**
- * Uninstall Policy.
- */
- @After
- public void uninstallPolicy() throws InterruptedException {
- assertEquals(2, usecases.getDrools().factCount(USECASES));
- if (policy != null) {
- deletePolicy(policy);
- }
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- }
-
-}
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VlbTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VlbTest.java
deleted file mode 100644
index 73eeae882..000000000
--- a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/VlbTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop;
-
-import static org.awaitility.Awaitility.await;
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.nio.file.Paths;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-
-/**
- * VLB Use Case Tests.
- */
-public class VlbTest extends UsecasesBase {
-
- /**
- * VLB Tosca Policy File.
- */
- private static final String TOSCA_LEGACY_POLICY_VLB = "src/test/resources/vlb/tosca-vlb.json";
- private static final String TOSCA_COMPLIANT_POLICY_VLB = "src/test/resources/vlb/tosca-compliant-vlb.json";
-
- /*
- * VLB Use case Messages.
- */
- private static final String ONSET = "src/test/resources/vlb/vlb.onset.json";
-
- /*
- * Topic trackers used by the VLB use case.
- */
- private TopicCallback<VirtualControlLoopNotification> policyClMgt;
-
- /*
- * VLB Tosca Policy.
- */
- private ToscaPolicy policy;
-
- /**
- * Prepare PDP-D Framework for testing.
- */
- @BeforeClass
- public static void prepareResouces() throws InterruptedException, IOException {
- setupLogging();
- preparePdpD();
- setupSimulators();
- }
-
- /**
- * Take down the resources used by the test framework.
- */
- @AfterClass
- public static void takeDownResources() {
- stopPdpD();
- stopSimulators();
- }
-
- /**
- * Sunny day scenario for the VCPE use case.
- */
- private void sunnyDay() throws IOException {
-
- /* Inject an ONSET event over the DCAE topic */
- injectOnTopic(DCAE_TOPIC, Paths.get(ONSET));
-
- /* Wait to acquire a LOCK and a PDP-X PERMIT */
- waitForLockAndPermit(policy, policyClMgt);
-
- /* Ensure that the VLB SO Operation was successfully completed */
-
- await().until(() -> !policyClMgt.getMessages().isEmpty());
- assertEquals(ControlLoopNotificationType.OPERATION_SUCCESS, policyClMgt.getMessages().peek().getNotification());
- assertEquals(policy.getIdentifier().getName() + ".SO.RESPONSE",
- policyClMgt.getMessages().remove().getPolicyName());
-
- /* --- VLB Transaction Completed --- */
- waitForFinalSuccess(policy, policyClMgt);
- }
-
- /**
- * Sunny Day with Legacy Tosca Policy.
- */
- @Test
- public void sunnyDayLegacy() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_LEGACY_POLICY_VLB);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * Sunny Day with Tosca Compliant Policy.
- */
- @Test
- public void sunnyDayCompliant() throws InterruptedException, CoderException, IOException {
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- policy = setupPolicyFromFile(TOSCA_COMPLIANT_POLICY_VLB);
- assertEquals(2, usecases.getDrools().factCount(USECASES));
-
- sunnyDay();
- }
-
- /**
- * Observe Topics.
- */
- @Before
- public void topicsRegistration() {
- policyClMgt = createTopicSinkCallback(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class);
- }
-
- /**
- * Unregister Topic Callbacks.
- */
- @After
- public void topicsUnregistration() {
- if (policyClMgt != null) {
- policyClMgt.unregister();
- }
- }
-
- /**
- * Uninstall Policy.
- */
- @After
- public void uninstallPolicy() throws InterruptedException {
- assertEquals(2, usecases.getDrools().factCount(USECASES));
- if (policy != null) {
- deletePolicy(policy);
- }
- assertEquals(0, usecases.getDrools().factCount(USECASES));
- }
-
-}