summaryrefslogtreecommitdiffstats
path: root/rulemgt/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'rulemgt/src/test')
-rw-r--r--rulemgt/src/test/java/org/onap/holmes/rulemgt/dcae/ConfigFileScanningTaskTest.java241
-rw-r--r--rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl91
-rw-r--r--rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-spaces.drl88
-rw-r--r--rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl90
-rw-r--r--rulemgt/src/test/resources/index-add.json6
-rw-r--r--rulemgt/src/test/resources/index-empty.json1
-rw-r--r--rulemgt/src/test/resources/index-rule-changed.json6
-rw-r--r--rulemgt/src/test/resources/index-rule-spaces-test.json6
8 files changed, 529 insertions, 0 deletions
diff --git a/rulemgt/src/test/java/org/onap/holmes/rulemgt/dcae/ConfigFileScanningTaskTest.java b/rulemgt/src/test/java/org/onap/holmes/rulemgt/dcae/ConfigFileScanningTaskTest.java
new file mode 100644
index 0000000..053612b
--- /dev/null
+++ b/rulemgt/src/test/java/org/onap/holmes/rulemgt/dcae/ConfigFileScanningTaskTest.java
@@ -0,0 +1,241 @@
+/**
+ * Copyright 2021 ZTE Corporation.
+ * <p>
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.onap.holmes.rulemgt.dcae;
+
+import org.easymock.EasyMock;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.holmes.common.ConfigFileScanner;
+import org.onap.holmes.common.utils.FileUtils;
+import org.onap.holmes.common.utils.JerseyClient;
+import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
+import org.onap.holmes.rulemgt.bean.response.RuleResult4API;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({JerseyClient.class})
+@SuppressStaticInitializationFor({"org.onap.holmes.common.utils.JerseyClient"})
+public class ConfigFileScanningTaskTest {
+
+ @Test
+ public void run_add_rules() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String indexPath = getFilePath("index-add.json");
+ String contents = FileUtils.readTextFile(indexPath);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(null);
+ Whitebox.setInternalState(cfst, "configFile", indexPath);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API(clName, contents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ // mock for deployRule
+ EasyMock.expect(jcMock.header(EasyMock.anyString(), EasyMock.anyObject())).andReturn(jcMock);
+ EasyMock.expect(jcMock.put(EasyMock.anyString(), EasyMock.anyObject())).andReturn("");
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(1));
+ }
+
+ @Test
+ public void run_remove_rules_normal() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String indexPath = getFilePath("index-add.json");
+ String contents = FileUtils.readTextFile(indexPath);
+ Map<String, String> configInEffect = new HashMap<>();
+ configInEffect.put(clName, contents);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(new ConfigFileScanner());
+ Whitebox.setInternalState(cfst, "configFile", getFilePath("index-empty.json"));
+ Whitebox.setInternalState(cfst, "configInEffect", configInEffect);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API(clName, contents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ // mock for deleteRule
+ EasyMock.expect(jcMock.delete(EasyMock.anyString())).andReturn("");
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(0));
+ }
+
+ @Test
+ public void run_remove_rules_delete_null_pointer() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String indexPath = getFilePath("index-add.json");
+ String contents = FileUtils.readTextFile(indexPath);
+ Map<String, String> configInEffect = new HashMap<>();
+ configInEffect.put(clName, contents);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(new ConfigFileScanner());
+ Whitebox.setInternalState(cfst, "configFile", indexPath);
+ Whitebox.setInternalState(cfst, "configInEffect", configInEffect);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API("a-non-existing-rule", contents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(1));
+ }
+
+ @Test
+ public void run_remove_rules_api_calling_returning_null() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String indexPath = getFilePath("index-add.json");
+ String contents = FileUtils.readTextFile(indexPath);
+ Map<String, String> configInEffect = new HashMap<>();
+ configInEffect.put(clName, contents);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(new ConfigFileScanner());
+ Whitebox.setInternalState(cfst, "configFile", indexPath);
+ Whitebox.setInternalState(cfst, "configInEffect", configInEffect);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API(clName, contents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ // mock for deleteRule
+ EasyMock.expect(jcMock.delete(EasyMock.anyString())).andReturn(null);
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(1));
+ }
+
+ @Test
+ public void run_change_rules_normal() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String oldDrlPath = getFilePath("ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl");
+ String oldDrlContents = FileUtils.readTextFile(oldDrlPath);
+ Map<String, String> configInEffect = new HashMap<>();
+ configInEffect.put(clName, oldDrlContents);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(new ConfigFileScanner());
+ Whitebox.setInternalState(cfst, "configFile", getFilePath("index-rule-changed.json"));
+ Whitebox.setInternalState(cfst, "configInEffect", configInEffect);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API(clName, oldDrlContents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ // mock for deleteRule
+ EasyMock.expect(jcMock.delete(EasyMock.anyString())).andReturn("");
+
+ // mock for deployRule
+ EasyMock.expect(jcMock.header(EasyMock.anyString(), EasyMock.anyObject())).andReturn(jcMock);
+ EasyMock.expect(jcMock.put(EasyMock.anyString(), EasyMock.anyObject())).andReturn("");
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(1));
+ assertThat(config.get(clName),
+ equalTo(FileUtils.readTextFile(
+ getFilePath("ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl"))));
+ }
+
+ @Test
+ public void run_change_rules_no_change_except_for_spaces() throws Exception {
+ String clName = "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b";
+ String oldDrlPath = getFilePath("ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl");
+ String oldDrlContents = FileUtils.readTextFile(oldDrlPath);
+ Map<String, String> configInEffect = new HashMap<>();
+ configInEffect.put(clName, oldDrlContents);
+
+ ConfigFileScanningTask cfst = new ConfigFileScanningTask(new ConfigFileScanner());
+ Whitebox.setInternalState(cfst, "configFile", getFilePath("index-rule-spaces-test.json"));
+ Whitebox.setInternalState(cfst, "configInEffect", configInEffect);
+
+ // mock for getExistingRules
+ JerseyClient jcMock = PowerMock.createMock(JerseyClient.class);
+ PowerMock.expectNew(JerseyClient.class).andReturn(jcMock).anyTimes();
+ RuleQueryListResponse rqlr = new RuleQueryListResponse();
+ rqlr.getCorrelationRules().add(getRuleResult4API(clName, oldDrlContents));
+ EasyMock.expect(jcMock.get(EasyMock.anyString(), EasyMock.anyObject())).andReturn(rqlr);
+
+ PowerMock.replayAll();
+ cfst.run();
+ PowerMock.verifyAll();
+
+ Map<String, String> config = Whitebox.getInternalState(cfst, "configInEffect");
+ assertThat(config.size(), is(1));
+ assertThat(config.get(clName),
+ equalTo(FileUtils.readTextFile(
+ getFilePath("ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl"))));
+ }
+
+ private String getFilePath(String fileName) {
+ return ConfigFileScanningTaskTest.class.getResource("/" + fileName).getFile();
+ }
+
+ private RuleResult4API getRuleResult4API(String clName, String contents) {
+ RuleResult4API ruleResult4API = new RuleResult4API();
+ ruleResult4API.setRuleId(clName);
+ ruleResult4API.setRuleName(clName);
+ ruleResult4API.setLoopControlName(clName);
+ ruleResult4API.setContent(contents);
+ ruleResult4API.setDescription("");
+ ruleResult4API.setEnabled(1);
+ return ruleResult4API;
+ }
+} \ No newline at end of file
diff --git a/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl
new file mode 100644
index 0000000..039bf68
--- /dev/null
+++ b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl
@@ -0,0 +1,91 @@
+package org.onap.holmes.droolsRule;
+
+import org.onap.holmes.common.dmaap.DmaapService;
+import org.onap.holmes.common.api.stat.VesAlarm;
+import org.onap.holmes.common.aai.CorrelationUtil;
+import org.onap.holmes.common.dmaap.entity.PolicyMsg;
+import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
+import org.onap.holmes.common.utils.DroolsLog;
+
+
+rule "Relation_analysis_Rule"
+salience 200
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0,
+ $sourceId: sourceId, sourceId != null && !sourceId.equals(""),
+ $sourceName: sourceName, sourceName != null && !sourceName.equals(""),
+ $startEpochMicrosec: startEpochMicrosec,
+ eventName in ("Fault_MultiCloud_VMFailure"),
+ $eventId: eventId)
+ $child : VesAlarm( eventId != $eventId, parentId == null,
+ CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId, $sourceName),
+ eventName in ("Fault_MME_eNodeB out of service alarm"),
+ startEpochMicrosec < $startEpochMicrosec + 60000 && startEpochMicrosec > $startEpochMicrosec - 60000 )
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("Relation_analysis_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ $child.setParentId($root.getEventId());
+ update($child);
+
+end
+
+rule "root_has_child_handle_Rule"
+salience 150
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0, $eventId: eventId)
+ $child : VesAlarm(eventId != $eventId, parentId == $eventId)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_has_child_handle_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, $child, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_no_child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0,
+ sourceId != null && !sourceId.equals(""),
+ sourceName != null && !sourceName.equals(""),
+ eventName in ("Fault_MultiCloud_VMFailure"))
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_no_child_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_cleared_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 1, rootFlag == 1)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_cleared_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ retract($root);
+end
+
+rule "child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $child : VesAlarm(alarmIsCleared == 1, rootFlag == 0)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("child_handle_Rule: childId=" + $child.getEventId());
+ retract($child);
+ DroolsLog.printInfo("done");
+end
diff --git a/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-spaces.drl b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-spaces.drl
new file mode 100644
index 0000000..a75f202
--- /dev/null
+++ b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-spaces.drl
@@ -0,0 +1,88 @@
+package org.onap.holmes.droolsRule;
+
+import org.onap.holmes.common.dmaap.DmaapService;
+import org.onap.holmes.common.api.stat.VesAlarm;
+import org.onap.holmes.common.aai.CorrelationUtil;
+import org.onap.holmes.common.dmaap.entity.PolicyMsg;
+import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
+import org.onap.holmes.common.utils.DroolsLog;
+
+rule "Relation_analysis_Rule"
+salience 200
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0,
+ $sourceId: sourceId, sourceId != null && !sourceId.equals(""),
+ $sourceName: sourceName, sourceName != null && !sourceName.equals(""),
+ $startEpochMicrosec: startEpochMicrosec,
+ eventName in ("Fault_MultiCloud_VMFailure"),
+ $eventId: eventId)
+ $child : VesAlarm( eventId != $eventId, parentId == null,
+ CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId, $sourceName),
+ eventName in ("Fault_MME_eNodeB out of service alarm"),
+ startEpochMicrosec < $startEpochMicrosec + 60000 && startEpochMicrosec > $startEpochMicrosec - 60000 )
+ then
+ DroolsLog.printInfo( "===========================================================" );
+ DroolsLog.printInfo("Relation_analysis_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ $child.setParentId($root.getEventId());
+ update($child);
+end
+
+rule "root_has_child_handle_Rule"
+salience 150
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0, $eventId: eventId)
+ $child : VesAlarm(eventId != $eventId, parentId == $eventId)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_has_child_handle_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, $child, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_no_child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0,
+ sourceId != null && !sourceId.equals(""),
+ sourceName != null && !sourceName.equals(""),
+ eventName in ("Fault_MultiCloud_VMFailure"))
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_no_child_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_cleared_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 1, rootFlag == 1)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_cleared_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ retract($root);
+end
+
+rule "child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $child : VesAlarm(alarmIsCleared == 1, rootFlag == 0)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("child_handle_Rule: childId=" + $child.getEventId());
+ retract($child);
+end
diff --git a/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl
new file mode 100644
index 0000000..5fbaaa5
--- /dev/null
+++ b/rulemgt/src/test/resources/ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl
@@ -0,0 +1,90 @@
+package org.onap.holmes.droolsRule;
+
+import org.onap.holmes.common.dmaap.DmaapService;
+import org.onap.holmes.common.api.stat.VesAlarm;
+import org.onap.holmes.common.aai.CorrelationUtil;
+import org.onap.holmes.common.dmaap.entity.PolicyMsg;
+import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
+import org.onap.holmes.common.utils.DroolsLog;
+
+
+rule "Relation_analysis_Rule"
+salience 200
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0,
+ $sourceId: sourceId, sourceId != null && !sourceId.equals(""),
+ $sourceName: sourceName, sourceName != null && !sourceName.equals(""),
+ $startEpochMicrosec: startEpochMicrosec,
+ eventName in ("Fault_MultiCloud_VMFailure"),
+ $eventId: eventId)
+ $child : VesAlarm( eventId != $eventId, parentId == null,
+ CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId, $sourceName),
+ eventName in ("Fault_MME_eNodeB out of service alarm"),
+ startEpochMicrosec < $startEpochMicrosec + 60000 && startEpochMicrosec > $startEpochMicrosec - 60000 )
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("Relation_analysis_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ $child.setParentId($root.getEventId());
+ update($child);
+
+end
+
+rule "root_has_child_handle_Rule"
+salience 150
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0, $eventId: eventId)
+ $child : VesAlarm(eventId != $eventId, parentId == $eventId)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_has_child_handle_Rule: rootId=" + $root.getEventId() + ", childId=" + $child.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, $child, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_no_child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0,
+ sourceId != null && !sourceId.equals(""),
+ sourceName != null && !sourceName.equals(""),
+ eventName in ("Fault_MultiCloud_VMFailure"))
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_no_child_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ $root.setRootFlag(1);
+ update($root);
+end
+
+rule "root_cleared_handle_Rule"
+salience 100
+no-loop true
+ when
+ $root : VesAlarm(alarmIsCleared == 1, rootFlag == 1)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("root_cleared_handle_Rule: rootId=" + $root.getEventId());
+ DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
+ PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
+ dmaapService.publishPolicyMsg(policyMsg, "dcae_cl_out");
+ retract($root);
+end
+
+rule "child_handle_Rule"
+salience 100
+no-loop true
+ when
+ $child : VesAlarm(alarmIsCleared == 1, rootFlag == 0)
+ then
+ DroolsLog.printInfo("===========================================================");
+ DroolsLog.printInfo("child_handle_Rule: childId=" + $child.getEventId());
+ retract($child);
+end
diff --git a/rulemgt/src/test/resources/index-add.json b/rulemgt/src/test/resources/index-add.json
new file mode 100644
index 0000000..f0ee695
--- /dev/null
+++ b/rulemgt/src/test/resources/index-add.json
@@ -0,0 +1,6 @@
+[
+ {
+ "closedControlLoopName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",
+ "file": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b.drl"
+ }
+] \ No newline at end of file
diff --git a/rulemgt/src/test/resources/index-empty.json b/rulemgt/src/test/resources/index-empty.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/rulemgt/src/test/resources/index-empty.json
@@ -0,0 +1 @@
+[] \ No newline at end of file
diff --git a/rulemgt/src/test/resources/index-rule-changed.json b/rulemgt/src/test/resources/index-rule-changed.json
new file mode 100644
index 0000000..1c7b237
--- /dev/null
+++ b/rulemgt/src/test/resources/index-rule-changed.json
@@ -0,0 +1,6 @@
+[
+ {
+ "closedControlLoopName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",
+ "file": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-changed.drl"
+ }
+] \ No newline at end of file
diff --git a/rulemgt/src/test/resources/index-rule-spaces-test.json b/rulemgt/src/test/resources/index-rule-spaces-test.json
new file mode 100644
index 0000000..f1d82db
--- /dev/null
+++ b/rulemgt/src/test/resources/index-rule-spaces-test.json
@@ -0,0 +1,6 @@
+[
+ {
+ "closedControlLoopName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",
+ "file": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b-spaces.drl"
+ }
+] \ No newline at end of file