summaryrefslogtreecommitdiffstats
path: root/controlloop/common/rules-test
diff options
context:
space:
mode:
Diffstat (limited to 'controlloop/common/rules-test')
-rw-r--r--controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseTest.java (renamed from controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTest.java)130
-rw-r--r--controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTest.java97
-rw-r--r--controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java5
-rw-r--r--controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseTestTest.java (renamed from controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTestTest.java)110
-rw-r--r--controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTestTest.java294
5 files changed, 498 insertions, 138 deletions
diff --git a/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTest.java b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseTest.java
index 7c34fc875..725057661 100644
--- a/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTest.java
+++ b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/BaseTest.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertEquals;
import java.util.List;
import java.util.UUID;
-import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import lombok.AccessLevel;
@@ -33,19 +32,19 @@ import org.junit.Test;
import org.onap.policy.appc.Request;
import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
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;
/**
* Superclass used for rule tests.
*/
-public abstract class BaseRuleTest {
+public abstract class BaseTest {
private static final String APPC_RESTART_OP = "restart";
private static final String APPC_MODIFY_CONFIG_OP = "ModifyConfig";
@@ -114,8 +113,9 @@ public abstract class BaseRuleTest {
/*
* Coders used to decode requests and responses.
*/
- private static final Coder APPC_LEGACY_CODER = new StandardCoderInstantAsMillis();
- private static final Coder APPC_LCM_CODER = new StandardCoder();
+ protected static final Coder APPC_LEGACY_CODER = new StandardCoderInstantAsMillis();
+ protected static final Coder APPC_LCM_CODER = new StandardCoder();
+ protected static final Coder POLICY_CL_MGT_CODER = new PolicyClMgtCoder();
/*
* Coders used to decode requests and responses.
@@ -123,10 +123,9 @@ public abstract class BaseRuleTest {
private static final Coder SDNR_CODER = new StandardCoder();
// these may be overridden by junit tests
- private static Function<String, Rules> ruleMaker = Rules::new;
- private static Supplier<HttpClients> httpClientMaker = HttpClients::new;
- private static Supplier<Simulators> simMaker = Simulators::new;
- private static Supplier<Topics> topicMaker = Topics::new;
+ protected static Supplier<HttpClients> httpClientMaker = HttpClients::new;
+ protected static Supplier<Simulators> simMaker = Simulators::new;
+ protected static Supplier<Topics> topicMaker = Topics::new;
protected static Rules rules;
protected static HttpClients httpClients;
@@ -134,7 +133,7 @@ public abstract class BaseRuleTest {
// used to inject and wait for messages
@Getter(AccessLevel.PROTECTED)
- private Topics topics;
+ protected static Topics topics;
// used to wait for messages on SINK topics
protected Listener<VirtualControlLoopNotification> policyClMgt;
@@ -142,21 +141,15 @@ public abstract class BaseRuleTest {
protected Listener<AppcLcmDmaapWrapper> appcLcmRead;
protected Listener<PciMessage> sdnrClSink;
- protected PolicyController controller;
-
/*
* Tosca Policy that was loaded.
*/
protected ToscaPolicy policy;
-
/**
* Initializes {@link #rules}, {@link #httpClients}, and {@link #simulators}.
- *
- * @param controllerName the rule controller name
*/
- public static void initStatics(String controllerName) {
- rules = ruleMaker.apply(controllerName);
+ public static void initStatics() {
httpClients = httpClientMaker.get();
simulators = simMaker.get();
}
@@ -167,7 +160,6 @@ public abstract class BaseRuleTest {
public static void finishStatics() {
httpClients.destroy();
simulators.destroy();
- rules.destroy();
}
/**
@@ -175,7 +167,6 @@ public abstract class BaseRuleTest {
*/
public void init() {
topics = topicMaker.get();
- controller = rules.getController();
}
/**
@@ -183,7 +174,6 @@ public abstract class BaseRuleTest {
*/
public void finish() {
topics.destroy();
- rules.resetFacts();
}
// Service123 (i.e., Policy with multiple operations)
@@ -193,17 +183,14 @@ public abstract class BaseRuleTest {
*/
@Test
public void testService123Compliant() {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcLcmRead = topics.createListener(APPC_LCM_READ_TOPIC, AppcLcmDmaapWrapper.class, APPC_LCM_CODER);
-
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(SERVICE123_TOSCA_COMPLIANT_POLICY);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(SERVICE123_TOSCA_COMPLIANT_POLICY);
// inject an ONSET event over the DCAE topic
topics.inject(DCAE_TOPIC, SERVICE123_ONSET);
-
/* Wait to acquire a LOCK and a PDP-X PERMIT */
+
waitForLockAndPermit(policy, policyClMgt);
// restart request should be sent and fail four times (i.e., because retry=3)
@@ -213,23 +200,16 @@ public abstract class BaseRuleTest {
topics.inject(APPC_LCM_WRITE_TOPIC, SERVICE123_APPC_RESTART_FAILURE,
appcreq.getBody().getInput().getCommonHeader().getSubRequestId());
}
-
// rebuild request should be sent and fail once
AppcLcmDmaapWrapper appcreq = appcLcmRead.await(req -> "rebuild".equals(req.getRpcName()));
-
topics.inject(APPC_LCM_WRITE_TOPIC, SERVICE123_APPC_REBUILD_FAILURE,
appcreq.getBody().getInput().getCommonHeader().getSubRequestId());
-
// migrate request should be sent and succeed
appcreq = appcLcmRead.await(req -> "migrate".equals(req.getRpcName()));
-
topics.inject(APPC_LCM_WRITE_TOPIC, SERVICE123_APPC_MIGRATE_SUCCESS,
appcreq.getBody().getInput().getCommonHeader().getSubRequestId());
-
/* --- Operation Completed --- */
-
waitForOperationSuccess();
-
/* --- Transaction Completed --- */
waitForFinalSuccess(policy, policyClMgt);
}
@@ -247,12 +227,10 @@ public abstract class BaseRuleTest {
*/
@Test
public void testDuplicatesEvents() {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcLcmRead = topics.createListener(APPC_LCM_READ_TOPIC, AppcLcmDmaapWrapper.class, APPC_LCM_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(DUPLICATES_TOSCA_COMPLIANT_POLICY);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(DUPLICATES_TOSCA_COMPLIANT_POLICY);
final long initCount = getCreateCount();
@@ -439,12 +417,11 @@ public abstract class BaseRuleTest {
* @param operation expected APPC operation request
*/
protected void appcLcmSunnyDay(String policyFile, List<String> onsetFiles, String operation) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcLcmRead = topics.createListener(APPC_LCM_READ_TOPIC, AppcLcmDmaapWrapper.class, APPC_LCM_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
+
// inject several ONSET events over the DCAE topic
for (String onsetFile : onsetFiles) {
@@ -482,12 +459,10 @@ public abstract class BaseRuleTest {
* @param operation expected APPC operation request
*/
protected void appcLegacySunnyDay(String policyFile, String onsetFile, String operation) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcClSink = topics.createListener(APPC_CL_TOPIC, Request.class, APPC_LEGACY_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -523,12 +498,10 @@ public abstract class BaseRuleTest {
* @param checkOperation flag to determine whether or not to wait for operation timeout
*/
protected void appcLegacyRainyDay(String policyFile, String onsetFile, String operation) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcClSink = topics.createListener(APPC_CL_TOPIC, Request.class, APPC_LEGACY_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -563,12 +536,10 @@ public abstract class BaseRuleTest {
* @param operation expected APPC operation request
*/
protected void appcLegacyRainyDayNoResponse(String policyFile, String onsetFile, String operation) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
appcClSink = topics.createListener(APPC_CL_TOPIC, Request.class, APPC_LEGACY_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -597,13 +568,10 @@ public abstract class BaseRuleTest {
* @param operation expected SDNR operation request
*/
protected void sdnrSunnyDay(String policyFile, String onsetFile, String successFile, String operation) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC,
- VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
sdnrClSink = topics.createListener(SDNR_CL_TOPIC, PciMessage.class, SDNR_CODER);
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -637,11 +605,9 @@ public abstract class BaseRuleTest {
* @param operation expected APPC operation request
*/
protected void httpSunnyDay(String policyFile, String onsetFile) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -665,11 +631,9 @@ public abstract class BaseRuleTest {
* @param operation expected APPC operation request
*/
protected void httpRainyDay(String policyFile, String onsetFile) {
- policyClMgt = topics.createListener(POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller);
+ policyClMgt = createNoficationTopicListener();
- assertEquals(0, controller.getDrools().factCount(rules.getControllerName()));
- policy = rules.setupPolicyFromFile(policyFile);
- assertEquals(2, controller.getDrools().factCount(rules.getControllerName()));
+ policy = checkPolicy(policyFile);
/* Inject an ONSET event over the DCAE topic */
topics.inject(DCAE_TOPIC, onsetFile);
@@ -740,4 +704,38 @@ public abstract class BaseRuleTest {
*/
protected abstract VirtualControlLoopNotification waitForFinal(ToscaPolicy policy,
Listener<VirtualControlLoopNotification> policyClMgt, ControlLoopNotificationType finalType);
+
+ /**
+ * Returns ToscaPolicy from File.
+ *
+ * @param fileName a path name
+ * @return ToscaPolicy
+ */
+ protected ToscaPolicy checkPolicy(String fileName) {
+ try {
+ return Rules.getPolicyFromFile(fileName);
+ } catch (CoderException e) {
+ throw new IllegalArgumentException(fileName, e);
+ }
+ }
+
+ /**
+ * Creates a Coder for PolicyClMgt from StandardCoder.
+ *
+ */
+ public static class PolicyClMgtCoder extends StandardCoder {
+ public PolicyClMgtCoder() {
+ super(org.onap.policy.controlloop.util.Serialization.gson,
+ org.onap.policy.controlloop.util.Serialization.gsonPretty);
+ }
+ }
+
+ /**
+ * Returns Listener from createListner based on Coder.
+ * @return the Listener
+ */
+ protected Listener<VirtualControlLoopNotification> createNoficationTopicListener() {
+ return topics.createListener(POLICY_CL_MGT_TOPIC,
+ VirtualControlLoopNotification.class, POLICY_CL_MGT_CODER);
+ }
}
diff --git a/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTest.java b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTest.java
new file mode 100644
index 000000000..a57395cb6
--- /dev/null
+++ b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTest.java
@@ -0,0 +1,97 @@
+/*-
+ * ============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.common.rules.test;
+
+import java.util.function.Function;
+import org.onap.policy.controlloop.ControlLoopNotificationType;
+import org.onap.policy.controlloop.VirtualControlLoopNotification;
+import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+
+/**
+ * Superclass used for rule tests.
+ */
+public abstract class DroolsRuleTest extends BaseTest {
+
+ // these may be overridden by junit tests
+ private static Function<String, Rules> ruleMaker = Rules::new;
+
+ protected static Rules rules;
+
+ protected PolicyController controller;
+
+ /**
+ * Initializes {@link #rules}, {@link #httpClients}, and {@link #simulators}.
+ *
+ * @param controllerName the rule controller name
+ */
+ public static void initStatics(String controllerName) {
+ rules = ruleMaker.apply(controllerName);
+ BaseTest.initStatics();
+ }
+
+ /**
+ * Destroys {@link #httpClients}, {@link #simulators}, and {@link #rules}.
+ */
+ public static void finishStatics() {
+ BaseTest.finishStatics();
+ rules.destroy();
+ }
+
+ /**
+ * Initializes {@link #topics} and {@link #controller}.
+ */
+ @Override
+ public void init() {
+ super.init();
+ controller = rules.getController();
+ }
+
+ /**
+ * Destroys {@link #topics} and resets the rule facts.
+ */
+ @Override
+ public void finish() {
+ super.finish();
+ rules.resetFacts();
+ }
+
+ /**
+ * Returns ToscaPolicy from File.
+ *
+ * @param fileName a path name
+ * @return ToscaPolicy
+ */
+ @Override
+ protected ToscaPolicy checkPolicy(String fileName) {
+ return rules.setupPolicyFromFile(fileName);
+ }
+
+ /**
+ * Returns Listener from createListener based on Coder.
+ * @return the Listener
+ */
+ @Override
+ protected Listener<VirtualControlLoopNotification> createNoficationTopicListener() {
+ return topics.createListener(POLICY_CL_MGT_TOPIC,
+ VirtualControlLoopNotification.class, controller);
+ }
+}
diff --git a/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java
index 62632e9d2..64f088070 100644
--- a/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java
+++ b/controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java
@@ -223,7 +223,10 @@ public class Rules {
}
}
- private ToscaPolicy getPolicyFromFile(String policyPath) throws CoderException {
+ /**
+ * Get policy from file.
+ */
+ public static ToscaPolicy getPolicyFromFile(String policyPath) throws CoderException {
String policyJson = ResourceUtils.getResourceAsString(policyPath);
if (policyJson == null) {
throw new CoderException(new FileNotFoundException(policyPath));
diff --git a/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTestTest.java b/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseTestTest.java
index 9f313ca39..ecff7e0bb 100644
--- a/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseRuleTestTest.java
+++ b/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/BaseTestTest.java
@@ -34,7 +34,6 @@ 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;
import org.junit.AfterClass;
@@ -55,7 +54,6 @@ import org.onap.policy.common.utils.coder.StandardCoderInstantAsMillis;
import org.onap.policy.controlloop.ControlLoopNotificationType;
import org.onap.policy.controlloop.VirtualControlLoopNotification;
import org.onap.policy.drools.controller.DroolsController;
-import org.onap.policy.drools.system.PolicyController;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
import org.onap.policy.sdnr.PciBody;
@@ -64,17 +62,15 @@ import org.onap.policy.sdnr.PciMessage;
import org.onap.policy.sdnr.PciRequest;
import org.powermock.reflect.Whitebox;
-public class BaseRuleTestTest {
- private static final String CONTROLLER_NAME = "my-controller-name";
+public class BaseTestTest {
private static final String POLICY_NAME = "my-policy-name";
// saved values
- private static Function<String, Rules> ruleMaker;
private static Supplier<HttpClients> httpClientMaker;
private static Supplier<Simulators> simMaker;
private static Supplier<Topics> topicMaker;
- private BaseRuleTest base;
+ private BaseTest base;
private LinkedList<VirtualControlLoopNotification> clMgtQueue;
private Queue<AppcLcmDmaapWrapper> appcLcmQueue;
private Queue<Request> appcLegacyQueue;
@@ -83,10 +79,6 @@ public class BaseRuleTestTest {
private int finalCount;
@Mock
- private PolicyController controller;
- @Mock
- private Rules rules;
- @Mock
private HttpClients httpClients;
@Mock
private Simulators simulators;
@@ -113,10 +105,9 @@ public class BaseRuleTestTest {
*/
@BeforeClass
public static void setUpBeforeClass() {
- ruleMaker = Whitebox.getInternalState(BaseRuleTest.class, "ruleMaker");
- httpClientMaker = Whitebox.getInternalState(BaseRuleTest.class, "httpClientMaker");
- simMaker = Whitebox.getInternalState(BaseRuleTest.class, "simMaker");
- topicMaker = Whitebox.getInternalState(BaseRuleTest.class, "topicMaker");
+ httpClientMaker = Whitebox.getInternalState(BaseTest.class, "httpClientMaker");
+ simMaker = Whitebox.getInternalState(BaseTest.class, "simMaker");
+ topicMaker = Whitebox.getInternalState(BaseTest.class, "topicMaker");
}
/**
@@ -124,10 +115,9 @@ public class BaseRuleTestTest {
*/
@AfterClass
public static void tearDownAfterClass() {
- Whitebox.setInternalState(BaseRuleTest.class, "ruleMaker", ruleMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "httpClientMaker", httpClientMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "simMaker", simMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "topicMaker", topicMaker);
+ Whitebox.setInternalState(BaseTest.class, "httpClientMaker", httpClientMaker);
+ Whitebox.setInternalState(BaseTest.class, "simMaker", simMaker);
+ Whitebox.setInternalState(BaseTest.class, "topicMaker", topicMaker);
}
/**
@@ -140,34 +130,22 @@ public class BaseRuleTestTest {
when(policy.getIdentifier()).thenReturn(policyIdent);
when(policyIdent.getName()).thenReturn(POLICY_NAME);
- when(drools.factCount(CONTROLLER_NAME)).thenReturn(0L);
- when(controller.getDrools()).thenReturn(drools);
-
- when(rules.getControllerName()).thenReturn(CONTROLLER_NAME);
- when(rules.getController()).thenReturn(controller);
- when(rules.setupPolicyFromFile(any())).thenAnswer(args -> {
- when(drools.factCount(CONTROLLER_NAME)).thenReturn(2L);
- return policy;
- });
-
- when(topics.createListener(BaseRuleTest.POLICY_CL_MGT_TOPIC, VirtualControlLoopNotification.class, controller))
- .thenReturn(policyClMgt);
- when(topics.createListener(eq(BaseRuleTest.APPC_LCM_READ_TOPIC), eq(AppcLcmDmaapWrapper.class),
+ when(topics.createListener(eq(BaseTest.POLICY_CL_MGT_TOPIC), eq(VirtualControlLoopNotification.class),
+ any(StandardCoder.class))).thenReturn(policyClMgt);
+ when(topics.createListener(eq(BaseTest.APPC_LCM_READ_TOPIC), eq(AppcLcmDmaapWrapper.class),
any(StandardCoder.class))).thenReturn(appcLcmRead);
- when(topics.createListener(eq(BaseRuleTest.APPC_CL_TOPIC), eq(Request.class),
+ when(topics.createListener(eq(BaseTest.APPC_CL_TOPIC), eq(Request.class),
any(StandardCoderInstantAsMillis.class))).thenReturn(appcClSink);
- when(topics.createListener(eq(BaseRuleTest.SDNR_CL_TOPIC), eq(PciMessage.class),
+ when(topics.createListener(eq(BaseTest.SDNR_CL_TOPIC), eq(PciMessage.class),
any(StandardCoder.class))).thenReturn(sdnrClSink);
- Function<String, Rules> ruleMaker = this::makeRules;
Supplier<HttpClients> httpClientMaker = this::makeHttpClients;
Supplier<Simulators> simMaker = this::makeSim;
Supplier<Topics> topicMaker = this::makeTopics;
- Whitebox.setInternalState(BaseRuleTest.class, "ruleMaker", ruleMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "httpClientMaker", httpClientMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "simMaker", simMaker);
- Whitebox.setInternalState(BaseRuleTest.class, "topicMaker", topicMaker);
+ Whitebox.setInternalState(BaseTest.class, "httpClientMaker", httpClientMaker);
+ Whitebox.setInternalState(BaseTest.class, "simMaker", simMaker);
+ Whitebox.setInternalState(BaseTest.class, "topicMaker", topicMaker);
clMgtQueue = new LinkedList<>();
appcLcmQueue = new LinkedList<>();
@@ -207,22 +185,19 @@ public class BaseRuleTestTest {
base = new MyTest();
- BaseRuleTest.initStatics(CONTROLLER_NAME);
+ BaseTest.initStatics();
base.init();
}
@Test
public void testInitStatics() {
- assertSame(rules, BaseRuleTest.rules);
- assertSame(httpClients, BaseRuleTest.httpClients);
- assertSame(simulators, BaseRuleTest.simulators);
+ assertSame(httpClients, BaseTest.httpClients);
+ assertSame(simulators, BaseTest.simulators);
}
@Test
public void testFinishStatics() {
- BaseRuleTest.finishStatics();
-
- verify(rules).destroy();
+ BaseTest.finishStatics();
verify(httpClients).destroy();
verify(simulators).destroy();
}
@@ -230,15 +205,12 @@ public class BaseRuleTestTest {
@Test
public void testInit() {
assertSame(topics, base.getTopics());
- assertSame(controller, base.controller);
}
@Test
public void testFinish() {
base.finish();
-
verify(topics).destroy();
- verify(rules).resetFacts();
}
@Test
@@ -256,10 +228,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// replies to each APPC request
- verify(topics, times(6)).inject(eq(BaseRuleTest.APPC_LCM_WRITE_TOPIC), any(), any());
+ verify(topics, times(6)).inject(eq(BaseTest.APPC_LCM_WRITE_TOPIC), any(), any());
}
@Test
@@ -285,11 +257,11 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial events
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
- verify(topics, times(2)).inject(eq(BaseRuleTest.DCAE_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
+ verify(topics, times(2)).inject(eq(BaseTest.DCAE_TOPIC), any(), any());
// two restarts
- verify(topics, times(2)).inject(eq(BaseRuleTest.APPC_LCM_WRITE_TOPIC), any(), any());
+ verify(topics, times(2)).inject(eq(BaseTest.APPC_LCM_WRITE_TOPIC), any(), any());
}
@Test
@@ -317,10 +289,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial events
- verify(topics, times(3)).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics, times(3)).inject(eq(BaseTest.DCAE_TOPIC), any());
// one restart
- verify(topics).inject(eq(BaseRuleTest.APPC_LCM_WRITE_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.APPC_LCM_WRITE_TOPIC), any(), any());
}
@Test
@@ -397,10 +369,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// reply to each APPC request
- verify(topics).inject(eq(BaseRuleTest.APPC_LCM_WRITE_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.APPC_LCM_WRITE_TOPIC), any(), any());
}
protected void checkAppcLegacyPolicy(String operation, Runnable test) {
@@ -417,10 +389,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// reply to each APPC request
- verify(topics).inject(eq(BaseRuleTest.APPC_CL_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.APPC_CL_TOPIC), any(), any());
}
protected void checkAppcLegacyPolicyOperationFailure(String operation, Runnable test) {
@@ -437,10 +409,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// reply to each APPC request
- verify(topics).inject(eq(BaseRuleTest.APPC_CL_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.APPC_CL_TOPIC), any(), any());
}
protected void checkAppcLegacyPolicyFinalFailure(String operation, Runnable test) {
@@ -456,7 +428,7 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// There were no requests sent
}
@@ -475,10 +447,10 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
// reply to each SDNR request
- verify(topics).inject(eq(BaseRuleTest.SDNR_CL_RSP_TOPIC), any(), any());
+ verify(topics).inject(eq(BaseTest.SDNR_CL_RSP_TOPIC), any(), any());
}
protected void checkHttpPolicy(Runnable test) {
@@ -493,7 +465,7 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
}
protected void checkHttpPolicyCompliantFailure(Runnable test) {
@@ -508,7 +480,7 @@ public class BaseRuleTestTest {
assertTrue(clMgtQueue.isEmpty());
// initial event
- verify(topics).inject(eq(BaseRuleTest.DCAE_TOPIC), any());
+ verify(topics).inject(eq(BaseTest.DCAE_TOPIC), any());
}
private void enqueueClMgt(ControlLoopNotificationType type) {
@@ -570,10 +542,6 @@ public class BaseRuleTestTest {
}
}
- private Rules makeRules(String controllerName) {
- return rules;
- }
-
private HttpClients makeHttpClients() {
return httpClients;
}
@@ -590,7 +558,7 @@ public class BaseRuleTestTest {
* We don't want junit trying to run this, so it's marked "Ignore".
*/
@Ignore
- private class MyTest extends BaseRuleTest {
+ private class MyTest extends BaseTest {
@Override
protected void waitForLockAndPermit(ToscaPolicy policy, Listener<VirtualControlLoopNotification> policyClMgt) {
diff --git a/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTestTest.java b/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTestTest.java
new file mode 100644
index 000000000..a21fa0a93
--- /dev/null
+++ b/controlloop/common/rules-test/src/test/java/org/onap/policy/controlloop/common/rules/test/DroolsRuleTestTest.java
@@ -0,0 +1,294 @@
+/*-
+ * ============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.common.rules.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+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.Queue;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.onap.policy.appc.Request;
+import org.onap.policy.appclcm.AppcLcmBody;
+import org.onap.policy.appclcm.AppcLcmCommonHeader;
+import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
+import org.onap.policy.appclcm.AppcLcmInput;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.StandardCoderInstantAsMillis;
+import org.onap.policy.controlloop.ControlLoopNotificationType;
+import org.onap.policy.controlloop.VirtualControlLoopNotification;
+import org.onap.policy.drools.controller.DroolsController;
+import org.onap.policy.drools.system.PolicyController;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
+import org.onap.policy.sdnr.PciMessage;
+import org.powermock.reflect.Whitebox;
+
+public class DroolsRuleTestTest {
+
+ private static final String CONTROLLER_NAME = "my-controller-name";
+ private static final String POLICY_NAME = "my-policy-name";
+
+ // saved values
+ private static Function<String, Rules> ruleMaker;
+ private static Supplier<HttpClients> httpClientMaker;
+ private static Supplier<Simulators> simMaker;
+ private static Supplier<Topics> topicMaker;
+
+ private DroolsRuleTest base;
+ private LinkedList<VirtualControlLoopNotification> clMgtQueue;
+ private Queue<AppcLcmDmaapWrapper> appcLcmQueue;
+ private int permitCount;
+ private int finalCount;
+
+ @Mock
+ private PolicyController controller;
+ @Mock
+ private Rules rules;
+ @Mock
+ private HttpClients httpClients;
+ @Mock
+ private Simulators simulators;
+ @Mock
+ private Topics topics;
+ @Mock
+ private Listener<VirtualControlLoopNotification> policyClMgt;
+ @Mock
+ private Listener<Request> appcClSink;
+ @Mock
+ private Listener<AppcLcmDmaapWrapper> appcLcmRead;
+ @Mock
+ private Listener<PciMessage> sdnrClSink;
+ @Mock
+ private DroolsController drools;
+ @Mock
+ private ToscaPolicy policy;
+ @Mock
+ private ToscaPolicyIdentifier policyIdent;
+
+
+ /**
+ * Saves static values from the class.
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() {
+ ruleMaker = Whitebox.getInternalState(DroolsRuleTest.class, "ruleMaker");
+ httpClientMaker = Whitebox.getInternalState(DroolsRuleTest.class, "httpClientMaker");
+ simMaker = Whitebox.getInternalState(DroolsRuleTest.class, "simMaker");
+ topicMaker = Whitebox.getInternalState(DroolsRuleTest.class, "topicMaker");
+ }
+
+ /**
+ * Restores static values.
+ */
+ @AfterClass
+ public static void tearDownAfterClass() {
+ Whitebox.setInternalState(DroolsRuleTest.class, "ruleMaker", ruleMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "httpClientMaker", httpClientMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "simMaker", simMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "topicMaker", topicMaker);
+ }
+
+ /**
+ * Sets up.
+ */
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ when(policy.getIdentifier()).thenReturn(policyIdent);
+ when(policyIdent.getName()).thenReturn(POLICY_NAME);
+
+ when(drools.factCount(CONTROLLER_NAME)).thenReturn(0L);
+ when(controller.getDrools()).thenReturn(drools);
+
+ when(rules.getControllerName()).thenReturn(CONTROLLER_NAME);
+ when(rules.getController()).thenReturn(controller);
+ when(rules.setupPolicyFromFile(any())).thenAnswer(args -> {
+ when(drools.factCount(CONTROLLER_NAME)).thenReturn(2L);
+ return policy;
+ });
+
+ when(topics.createListener(DroolsRuleTest.POLICY_CL_MGT_TOPIC,
+ VirtualControlLoopNotification.class, controller)).thenReturn(policyClMgt);
+ when(topics.createListener(eq(DroolsRuleTest.APPC_LCM_READ_TOPIC), eq(AppcLcmDmaapWrapper.class),
+ any(StandardCoder.class))).thenReturn(appcLcmRead);
+ when(topics.createListener(eq(DroolsRuleTest.APPC_CL_TOPIC), eq(Request.class),
+ any(StandardCoderInstantAsMillis.class))).thenReturn(appcClSink);
+ when(topics.createListener(eq(DroolsRuleTest.SDNR_CL_TOPIC), eq(PciMessage.class),
+ any(StandardCoder.class))).thenReturn(sdnrClSink);
+
+ Function<String, Rules> ruleMaker = this::makeRules;
+ Supplier<HttpClients> httpClientMaker = this::makeHttpClients;
+ Supplier<Simulators> simMaker = this::makeSim;
+ Supplier<Topics> topicMaker = this::makeTopics;
+
+ Whitebox.setInternalState(DroolsRuleTest.class, "ruleMaker", ruleMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "httpClientMaker", httpClientMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "simMaker", simMaker);
+ Whitebox.setInternalState(DroolsRuleTest.class, "topicMaker", topicMaker);
+
+ clMgtQueue = new LinkedList<>();
+ appcLcmQueue = new LinkedList<>();
+
+ when(policyClMgt.await(any())).thenAnswer(args -> {
+ VirtualControlLoopNotification notif = clMgtQueue.remove();
+ Predicate<VirtualControlLoopNotification> pred = args.getArgument(0);
+ assertTrue(pred.test(notif));
+ return notif;
+ });
+
+ when(appcLcmRead.await(any())).thenAnswer(args -> {
+ AppcLcmDmaapWrapper req = appcLcmQueue.remove();
+ Predicate<AppcLcmDmaapWrapper> pred = args.getArgument(0);
+ assertTrue(pred.test(req));
+ return req;
+ });
+
+ permitCount = 0;
+ finalCount = 0;
+
+ base = new MyDroolsTest();
+ DroolsRuleTest.initStatics(CONTROLLER_NAME);
+ base.init();
+ }
+
+ @Test
+ public void testInitStatics() {
+ assertSame(rules, DroolsRuleTest.rules);
+ assertSame(httpClients, DroolsRuleTest.httpClients);
+ assertSame(simulators, DroolsRuleTest.simulators);
+ }
+
+ @Test
+ public void testFinishStatics() {
+ DroolsRuleTest.finishStatics();
+
+ verify(rules).destroy();
+ verify(httpClients).destroy();
+ verify(simulators).destroy();
+ }
+
+ @Test
+ public void testInit() {
+ assertSame(topics, base.getTopics());
+ assertSame(controller, base.controller);
+ }
+
+ @Test
+ public void testDroolsTestService123Compliant() {
+ enqueueAppcLcm("restart", "restart", "restart", "restart", "rebuild", "migrate");
+ enqueueClMgt(ControlLoopNotificationType.OPERATION_SUCCESS);
+ enqueueClMgt(ControlLoopNotificationType.FINAL_SUCCESS);
+ System.out.println("Drools TestTest Here");
+ base.testService123Compliant();
+
+ assertEquals(1, permitCount);
+ assertEquals(1, finalCount);
+
+ assertTrue(appcLcmQueue.isEmpty());
+ assertTrue(clMgtQueue.isEmpty());
+
+ // initial event
+ verify(topics).inject(eq(DroolsRuleTest.DCAE_TOPIC), any());
+
+ // replies to each APPC request
+ verify(topics, times(6)).inject(eq(DroolsRuleTest.APPC_LCM_WRITE_TOPIC), any(), any());
+ }
+
+ private void enqueueClMgt(ControlLoopNotificationType type) {
+ VirtualControlLoopNotification notif = new VirtualControlLoopNotification();
+ notif.setNotification(type);
+ notif.setPolicyName(POLICY_NAME + ".EVENT.MANAGER.FINAL");
+
+ clMgtQueue.add(notif);
+ }
+
+ private void enqueueAppcLcm(String... operationNames) {
+ for (String oper : operationNames) {
+ AppcLcmDmaapWrapper req = new AppcLcmDmaapWrapper();
+ req.setRpcName(oper);
+
+ AppcLcmBody body = new AppcLcmBody();
+ req.setBody(body);
+
+ AppcLcmInput input = new AppcLcmInput();
+ body.setInput(input);
+
+ AppcLcmCommonHeader header = new AppcLcmCommonHeader();
+ input.setCommonHeader(header);
+
+ header.setSubRequestId("my-subrequest-id");
+
+ appcLcmQueue.add(req);
+ }
+ }
+
+ private Rules makeRules(String controllerName) {
+ return rules;
+ }
+
+ private HttpClients makeHttpClients() {
+ return httpClients;
+ }
+
+ private Simulators makeSim() {
+ return simulators;
+ }
+
+ private Topics makeTopics() {
+ return topics;
+ }
+ /*
+ * We don't want junit trying to run this, so it's marked "Ignore".
+ */
+
+ @Ignore
+ private class MyDroolsTest extends DroolsRuleTest {
+
+ @Override
+ protected void waitForLockAndPermit(ToscaPolicy policy, Listener<VirtualControlLoopNotification> policyClMgt) {
+ permitCount++;
+ }
+
+ @Override
+ protected VirtualControlLoopNotification waitForFinal(ToscaPolicy policy,
+ Listener<VirtualControlLoopNotification> policyClMgt, ControlLoopNotificationType finalType) {
+ finalCount++;
+ return policyClMgt.await(notif -> notif.getNotification() == finalType);
+ }
+ }
+} \ No newline at end of file