/**\r
* Copyright 2017 ZTE Corporation.\r
- *\r
+ * <p>\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
* You may obtain a copy of the License at\r
- *\r
+ * <p>\r
* http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
+ * <p>\r
* Unless required by applicable law or agreed to in writing, software\r
* distributed under the License is distributed on an "AS IS" BASIS,\r
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
\r
package org.onap.holmes.engine.manager;\r
\r
-import org.easymock.EasyMock;\r
import org.junit.Before;\r
+import org.junit.BeforeClass;\r
import org.junit.Rule;\r
import org.junit.Test;\r
import org.junit.rules.ExpectedException;\r
-import org.kie.api.KieBase;\r
-import org.kie.api.KieServices;\r
-import org.kie.api.builder.KieBuilder;\r
-import org.kie.api.builder.KieFileSystem;\r
-import org.kie.api.builder.KieRepository;\r
-import org.kie.api.io.KieResources;\r
-import org.kie.api.runtime.KieContainer;\r
-import org.kie.api.runtime.KieSession;\r
import org.onap.holmes.common.api.entity.AlarmInfo;\r
import org.onap.holmes.common.api.entity.CorrelationRule;\r
import org.onap.holmes.common.api.stat.VesAlarm;\r
-import org.onap.holmes.common.constant.AlarmConst;\r
import org.onap.holmes.common.exception.CorrelationException;\r
import org.onap.holmes.common.utils.DbDaoUtil;\r
import org.onap.holmes.engine.db.AlarmInfoDao;\r
import org.powermock.api.easymock.PowerMock;\r
import org.powermock.reflect.Whitebox;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Locale;\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
+import java.util.*;\r
+import java.util.stream.Collectors;\r
\r
+import static org.easymock.EasyMock.anyObject;\r
import static org.hamcrest.CoreMatchers.is;\r
import static org.hamcrest.core.IsEqual.equalTo;\r
import static org.junit.Assert.assertThat;\r
\r
private RuleMgtWrapper ruleMgtWrapper;\r
\r
- private KieBase kieBase;\r
- private KieSession kieSession;\r
- private KieContainer kieContainer;\r
- private KieFileSystem kfs;\r
- private KieServices ks;\r
- private KieBuilder kieBuilder;\r
- private KieResources resources;\r
- private KieRepository kieRepository;\r
-\r
private AlarmInfoDao alarmInfoDaoMock;\r
\r
private DroolsEngine droolsEngine;\r
\r
- private DbDaoUtil dbDaoUtilMock;\r
+ private DbDaoUtil dbDaoUtilStub;\r
\r
- @Before\r
- public void setUp() throws Exception {\r
+ public DroolsEngineTest() throws Exception {\r
droolsEngine = new DroolsEngine();\r
+ ruleMgtWrapper = new RuleMgtWrapperStub();\r
+ dbDaoUtilStub = new DbDaoUtilStub();\r
+ Whitebox.setInternalState(droolsEngine, "daoUtil", dbDaoUtilStub);\r
+ Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);\r
+ Whitebox.invokeMethod(droolsEngine, "init");\r
+ }\r
\r
- ks = KieServices.Factory.get();\r
- resources = ks.getResources();\r
- kieRepository = ks.getRepository();\r
- kfs = Whitebox.invokeMethod(droolsEngine, "createKieFileSystemWithKProject", ks);\r
- kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
- kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());\r
- kieBase = kieContainer.getKieBase();\r
- kieSession = kieContainer.newKieSession();\r
-\r
- alarmInfoDaoMock = PowerMock.createMock(AlarmInfoDao.class);\r
- dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
-\r
-\r
- Whitebox.setInternalState(droolsEngine, "kieBase", kieBase);\r
- Whitebox.setInternalState(droolsEngine, "kieSession", kieSession);\r
- Whitebox.setInternalState(droolsEngine, "kieContainer", kieContainer);\r
- Whitebox.setInternalState(droolsEngine, "kfs", kfs);\r
- Whitebox.setInternalState(droolsEngine, "ks", ks);\r
- Whitebox.setInternalState(droolsEngine, "kieBuilder", kieBuilder);\r
- Whitebox.setInternalState(droolsEngine, "resources", resources);\r
- Whitebox.setInternalState(droolsEngine, "kieRepository", kieRepository);\r
-\r
- Whitebox.setInternalState(droolsEngine, "daoUtil", dbDaoUtilMock);\r
- Whitebox.setInternalState(droolsEngine, "alarmInfoDao", alarmInfoDaoMock);\r
-\r
+ @Before\r
+ public void setUp() throws Exception {\r
PowerMock.resetAll();\r
}\r
\r
@Test\r
- public void init() throws Exception {\r
-\r
- List<CorrelationRule> rules = new ArrayList<CorrelationRule>();\r
- CorrelationRule rule = new CorrelationRule();\r
- rule.setContent("package content");\r
- rule.setClosedControlLoopName("test");\r
- rule.setPackageName("org.onap.holmes");\r
- rules.add(rule);\r
-\r
-// expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
- List<AlarmInfo> alarmInfoList = new ArrayList<AlarmInfo>();\r
- EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(AlarmInfoDao.class)).andReturn(alarmInfoDaoMock).anyTimes();\r
- EasyMock.expect(alarmInfoDaoMock.queryAllAlarm()).andReturn(alarmInfoList).anyTimes();\r
- PowerMock.replayAll();\r
-\r
- PowerMock.verifyAll();\r
+ public void deployRule_rule_is_null() throws CorrelationException {\r
+ thrown.expect(NullPointerException.class);\r
+ droolsEngine.deployRule(null);\r
}\r
\r
@Test\r
- public void deployRule_rule_is_null() throws CorrelationException {\r
- Locale locale = PowerMock.createMock(Locale.class);\r
-\r
- thrown.expect(NullPointerException.class);\r
+ public void deployRule_invalid_rule_no_pkg_name() throws CorrelationException {\r
+ DeployRuleRequest rule = new DeployRuleRequest();\r
+ rule.setContent("rule123;");\r
+ thrown.expect(CorrelationException.class);\r
+ thrown.expectMessage("The package name can not be empty.");\r
\r
- droolsEngine.deployRule(null, locale);\r
+ droolsEngine.deployRule(rule);\r
}\r
\r
@Test\r
- public void deployRule_kbuilder_has_errors() throws CorrelationException {\r
+ public void deployRule_invalid_rule_illegal_contents() throws CorrelationException {\r
DeployRuleRequest rule = new DeployRuleRequest();\r
- rule.setContent("rule123");\r
- Locale locale = new Locale(AlarmConst.I18N_EN);\r
-\r
+ rule.setContent("package rule123; a random string");\r
thrown.expect(CorrelationException.class);\r
\r
- droolsEngine.deployRule(rule, locale);\r
+ droolsEngine.deployRule(rule);\r
}\r
\r
@Test\r
public void deployRule_package_name_repeat() throws CorrelationException {\r
DeployRuleRequest rule = new DeployRuleRequest();\r
rule.setContent("package rule123");\r
- Locale locale = new Locale(AlarmConst.I18N_EN);\r
\r
thrown.expect(CorrelationException.class);\r
-\r
- droolsEngine.deployRule(rule, locale);\r
- droolsEngine.deployRule(rule, locale);\r
+ thrown.expectMessage("A rule with the same package name already exists in the system.");\r
+ droolsEngine.deployRule(rule);\r
+ droolsEngine.deployRule(rule);\r
}\r
\r
@Test\r
public void undeployRule_package_name_is_null() throws CorrelationException {\r
String packageName = null;\r
- Locale locale = new Locale(AlarmConst.I18N_EN);\r
-\r
thrown.expect(CorrelationException.class);\r
+ thrown.expectMessage("The package name should not be null.");\r
\r
- droolsEngine.undeployRule(packageName, locale);\r
+ droolsEngine.undeployRule(packageName);\r
}\r
\r
@Test\r
public void undeployRule_normal() throws CorrelationException {\r
- Locale locale = new Locale(AlarmConst.I18N_EN);\r
-\r
DeployRuleRequest rule = new DeployRuleRequest();\r
rule.setContent("package rule123");\r
- droolsEngine.deployRule(rule, locale);\r
+ droolsEngine.deployRule(rule);\r
+ droolsEngine.undeployRule("rule123");\r
+ }\r
\r
- String packageName = "rule123";\r
+ @Test\r
+ public void compileRule_compilation_failure() throws CorrelationException {\r
+ String content = "invalid contents";\r
\r
- droolsEngine.undeployRule(packageName, locale);\r
+ thrown.expect(CorrelationException.class);\r
+\r
+ droolsEngine.compileRule(content);\r
}\r
\r
@Test\r
- public void compileRule_kbuilder_has_errors() throws CorrelationException {\r
- String content = "have error content";\r
- Locale locale = new Locale(AlarmConst.I18N_EN);\r
-\r
+ public void compileRule_compilation_deployed_rule() throws CorrelationException {\r
+ String content = "package deployed;";\r
+ DeployRuleRequest rule = new DeployRuleRequest();\r
+ rule.setContent(content);\r
+ rule.setLoopControlName(UUID.randomUUID().toString());\r
thrown.expect(CorrelationException.class);\r
\r
- droolsEngine.compileRule(content, locale);\r
+ droolsEngine.deployRule(rule);\r
+ droolsEngine.compileRule(content);\r
+ }\r
+\r
+ @Test\r
+ public void compileRule_compilation_normal() throws CorrelationException {\r
+ String content = "package deployed;";\r
+ DeployRuleRequest rule = new DeployRuleRequest();\r
+ rule.setContent(content);\r
+ rule.setLoopControlName(UUID.randomUUID().toString());\r
+\r
+ droolsEngine.compileRule(content);\r
}\r
\r
@Test\r
alarmInfo.setRootFlag(0);\r
alarmInfo.setAlarmIsCleared(1);\r
\r
- PowerMock.replayAll();\r
- VesAlarm vesAlarm = Whitebox.invokeMethod(droolsEngine,"convertAlarmInfo2VesAlarm",alarmInfo);\r
- PowerMock.verifyAll();\r
+ VesAlarm vesAlarm = Whitebox.invokeMethod(droolsEngine, "convertAlarmInfo2VesAlarm", alarmInfo);\r
\r
assertThat(vesAlarm.getAlarmIsCleared(), is(1));\r
assertThat(vesAlarm.getSourceName(), equalTo("sourceName"));\r
assertThat(vesAlarm.getEventId(), equalTo("eventId"));\r
assertThat(vesAlarm.getRootFlag(), is(0));\r
}\r
+\r
+ @Test\r
+ public void testConvertVesAlarm2AlarmInfo() throws Exception {\r
+ VesAlarm vesAlarm = new VesAlarm();\r
+ vesAlarm.setEventId("eventId");\r
+ vesAlarm.setEventName("eventName");\r
+ vesAlarm.setStartEpochMicrosec(1L);\r
+ vesAlarm.setLastEpochMicrosec(1L);\r
+ vesAlarm.setSourceId("sourceId");\r
+ vesAlarm.setSourceName("sourceName");\r
+ vesAlarm.setRootFlag(0);\r
+ vesAlarm.setAlarmIsCleared(1);\r
+\r
+ AlarmInfo alarmInfo = Whitebox.invokeMethod(droolsEngine, "convertVesAlarm2AlarmInfo", vesAlarm);\r
+\r
+ assertThat(alarmInfo.getAlarmIsCleared(), is(1));\r
+ assertThat(alarmInfo.getSourceName(), equalTo("sourceName"));\r
+ assertThat(alarmInfo.getSourceId(), equalTo("sourceId"));\r
+ assertThat(alarmInfo.getStartEpochMicroSec(), is(1L));\r
+ assertThat(alarmInfo.getLastEpochMicroSec(), is(1L));\r
+ assertThat(alarmInfo.getEventName(), equalTo("eventName"));\r
+ assertThat(alarmInfo.getEventId(), equalTo("eventId"));\r
+ assertThat(alarmInfo.getRootFlag(), is(0));\r
+ }\r
+\r
+ @Test\r
+ public void testQueryPackagesFromEngine() throws CorrelationException {\r
+\r
+ DeployRuleRequest rule = new DeployRuleRequest();\r
+ rule.setContent("package packageCheck; rule \"test\" when eval(1==1) then System.out.println(1); end");\r
+ rule.setLoopControlName(UUID.randomUUID().toString());\r
+\r
+ droolsEngine.deployRule(rule);\r
+\r
+ List<String> packages = droolsEngine.queryPackagesFromEngine();\r
+\r
+ assertThat(packages.contains("packageCheck"), is(true));\r
+ }\r
+}\r
+\r
+class RuleMgtWrapperStub extends RuleMgtWrapper {\r
+ private List<CorrelationRule> rules;\r
+\r
+ public RuleMgtWrapperStub() {\r
+ rules = new ArrayList<>();\r
+ CorrelationRule rule = new CorrelationRule();\r
+ rule.setEnabled(1);\r
+ rule.setContent("package org.onap.holmes;");\r
+ rule.setPackageName("UT");\r
+ rule.setClosedControlLoopName(UUID.randomUUID().toString());\r
+ rules.add(rule);\r
+ }\r
+\r
+ public List<CorrelationRule> getRules() {\r
+ return rules;\r
+ }\r
+\r
+ public void setRules(List<CorrelationRule> rules) {\r
+ this.rules = rules;\r
+ }\r
+\r
+ @Override\r
+ public List<CorrelationRule> queryRuleByEnable(int enabled) throws CorrelationException {\r
+ return rules.stream().filter(rule -> rule.getEnabled() == enabled).collect(Collectors.toList());\r
+ }\r
+}\r
+\r
+class AlarmInfoDaoStub extends AlarmInfoDao {\r
+\r
+ private List<AlarmInfo> alarms;\r
+\r
+ public AlarmInfoDaoStub() {\r
+ alarms = new ArrayList<>();\r
+ AlarmInfo info = new AlarmInfo();\r
+ info.setEventId("eventId");\r
+ info.setEventName("eventName");\r
+ info.setStartEpochMicroSec(1L);\r
+ info.setLastEpochMicroSec(1L);\r
+ info.setSourceId("sourceId");\r
+ info.setSourceName("sourceName");\r
+ info.setRootFlag(0);\r
+ info.setAlarmIsCleared(1);\r
+ alarms.add(info);\r
+ }\r
+\r
+ @Override\r
+ protected String addAlarm(AlarmInfo alarmInfo) {\r
+ alarms.add(alarmInfo);\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ protected List<AlarmInfo> queryAlarm() {\r
+ return alarms;\r
+ }\r
+\r
+ @Override\r
+ protected int deleteAlarmByAlarmIsCleared(int alarmIsCleared) {\r
+ return 1;\r
+ }\r
+}\r
+\r
+class DbDaoUtilStub extends DbDaoUtil {\r
+ private AlarmInfoDao dao = new AlarmInfoDaoStub();\r
+ @Override\r
+ public <T> T getJdbiDaoByOnDemand(Class<T> daoClazz) {\r
+\r
+ return (T)dao;\r
+\r
+ }\r
}\r