add alarm synchronization related operation
[holmes/engine-management.git] / engine-d / src / test / java / org / onap / holmes / engine / manager / DroolsEngineTest.java
1 /**\r
2  * Copyright 2017 ZTE Corporation.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package org.onap.holmes.engine.manager;\r
18 \r
19 import org.easymock.EasyMock;\r
20 import org.junit.Before;\r
21 import org.junit.Rule;\r
22 import org.junit.Test;\r
23 import org.junit.rules.ExpectedException;\r
24 import org.kie.api.KieBase;\r
25 import org.kie.api.KieServices;\r
26 import org.kie.api.builder.KieBuilder;\r
27 import org.kie.api.builder.KieFileSystem;\r
28 import org.kie.api.builder.KieRepository;\r
29 import org.kie.api.io.KieResources;\r
30 import org.kie.api.runtime.KieContainer;\r
31 import org.kie.api.runtime.KieSession;\r
32 import org.onap.holmes.common.api.entity.AlarmInfo;\r
33 import org.onap.holmes.common.api.entity.CorrelationRule;\r
34 import org.onap.holmes.common.api.stat.VesAlarm;\r
35 import org.onap.holmes.common.constant.AlarmConst;\r
36 import org.onap.holmes.common.exception.CorrelationException;\r
37 import org.onap.holmes.common.utils.DbDaoUtil;\r
38 import org.onap.holmes.engine.db.AlarmInfoDao;\r
39 import org.onap.holmes.engine.request.DeployRuleRequest;\r
40 import org.onap.holmes.engine.wrapper.RuleMgtWrapper;\r
41 import org.powermock.api.easymock.PowerMock;\r
42 import org.powermock.reflect.Whitebox;\r
43 \r
44 import java.util.ArrayList;\r
45 import java.util.List;\r
46 import java.util.Locale;\r
47 \r
48 import static org.hamcrest.CoreMatchers.is;\r
49 import static org.hamcrest.core.IsEqual.equalTo;\r
50 import static org.junit.Assert.assertThat;\r
51 \r
52 public class DroolsEngineTest {\r
53 \r
54     @Rule\r
55     public ExpectedException thrown = ExpectedException.none();\r
56 \r
57     private RuleMgtWrapper ruleMgtWrapper;\r
58 \r
59     private KieBase kieBase;\r
60     private KieSession kieSession;\r
61     private KieContainer kieContainer;\r
62     private KieFileSystem kfs;\r
63     private KieServices ks;\r
64     private KieBuilder kieBuilder;\r
65     private KieResources resources;\r
66     private KieRepository kieRepository;\r
67 \r
68     private AlarmInfoDao alarmInfoDaoMock;\r
69 \r
70     private DroolsEngine droolsEngine;\r
71 \r
72     private DbDaoUtil dbDaoUtilMock;\r
73 \r
74     @Before\r
75     public void setUp() throws Exception {\r
76         droolsEngine = new DroolsEngine();\r
77 \r
78         ks = KieServices.Factory.get();\r
79         resources = ks.getResources();\r
80         kieRepository = ks.getRepository();\r
81         kfs = Whitebox.invokeMethod(droolsEngine, "createKieFileSystemWithKProject", ks);\r
82         kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
83         kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());\r
84         kieBase = kieContainer.getKieBase();\r
85         kieSession = kieContainer.newKieSession();\r
86 \r
87         alarmInfoDaoMock = PowerMock.createMock(AlarmInfoDao.class);\r
88         dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
89 \r
90 \r
91         Whitebox.setInternalState(droolsEngine, "kieBase", kieBase);\r
92         Whitebox.setInternalState(droolsEngine, "kieSession", kieSession);\r
93         Whitebox.setInternalState(droolsEngine, "kieContainer", kieContainer);\r
94         Whitebox.setInternalState(droolsEngine, "kfs", kfs);\r
95         Whitebox.setInternalState(droolsEngine, "ks", ks);\r
96         Whitebox.setInternalState(droolsEngine, "kieBuilder", kieBuilder);\r
97         Whitebox.setInternalState(droolsEngine, "resources", resources);\r
98         Whitebox.setInternalState(droolsEngine, "kieRepository", kieRepository);\r
99 \r
100         Whitebox.setInternalState(droolsEngine, "daoUtil", dbDaoUtilMock);\r
101         Whitebox.setInternalState(droolsEngine, "alarmInfoDao", alarmInfoDaoMock);\r
102 \r
103         PowerMock.resetAll();\r
104     }\r
105 \r
106     @Test\r
107     public void init() throws Exception {\r
108 \r
109         List<CorrelationRule> rules = new ArrayList<CorrelationRule>();\r
110         CorrelationRule rule = new CorrelationRule();\r
111         rule.setContent("package content");\r
112         rule.setClosedControlLoopName("test");\r
113         rule.setPackageName("org.onap.holmes");\r
114         rules.add(rule);\r
115 \r
116 //        expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
117         List<AlarmInfo> alarmInfoList = new ArrayList<AlarmInfo>();\r
118         EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(AlarmInfoDao.class)).andReturn(alarmInfoDaoMock).anyTimes();\r
119         EasyMock.expect(alarmInfoDaoMock.queryAllAlarm()).andReturn(alarmInfoList).anyTimes();\r
120         PowerMock.replayAll();\r
121 \r
122         PowerMock.verifyAll();\r
123     }\r
124 \r
125     @Test\r
126     public void deployRule_rule_is_null() throws CorrelationException {\r
127         Locale locale = PowerMock.createMock(Locale.class);\r
128 \r
129         thrown.expect(NullPointerException.class);\r
130 \r
131         droolsEngine.deployRule(null, locale);\r
132     }\r
133 \r
134     @Test\r
135     public void deployRule_kbuilder_has_errors() throws CorrelationException {\r
136         DeployRuleRequest rule = new DeployRuleRequest();\r
137         rule.setContent("rule123");\r
138         Locale locale = new Locale(AlarmConst.I18N_EN);\r
139 \r
140         thrown.expect(CorrelationException.class);\r
141 \r
142         droolsEngine.deployRule(rule, locale);\r
143     }\r
144 \r
145     @Test\r
146     public void deployRule_package_name_repeat() throws CorrelationException {\r
147         DeployRuleRequest rule = new DeployRuleRequest();\r
148         rule.setContent("package rule123");\r
149         Locale locale = new Locale(AlarmConst.I18N_EN);\r
150 \r
151         thrown.expect(CorrelationException.class);\r
152 \r
153         droolsEngine.deployRule(rule, locale);\r
154         droolsEngine.deployRule(rule, locale);\r
155     }\r
156 \r
157     @Test\r
158     public void undeployRule_package_name_is_null() throws CorrelationException {\r
159         String packageName = null;\r
160         Locale locale = new Locale(AlarmConst.I18N_EN);\r
161 \r
162         thrown.expect(CorrelationException.class);\r
163 \r
164         droolsEngine.undeployRule(packageName, locale);\r
165     }\r
166 \r
167     @Test\r
168     public void undeployRule_normal() throws CorrelationException {\r
169         Locale locale = new Locale(AlarmConst.I18N_EN);\r
170 \r
171         DeployRuleRequest rule = new DeployRuleRequest();\r
172         rule.setContent("package rule123");\r
173         droolsEngine.deployRule(rule, locale);\r
174 \r
175         String packageName = "rule123";\r
176 \r
177         droolsEngine.undeployRule(packageName, locale);\r
178     }\r
179 \r
180     @Test\r
181     public void compileRule_kbuilder_has_errors() throws CorrelationException {\r
182         String content = "have error content";\r
183         Locale locale = new Locale(AlarmConst.I18N_EN);\r
184 \r
185         thrown.expect(CorrelationException.class);\r
186 \r
187         droolsEngine.compileRule(content, locale);\r
188     }\r
189 \r
190     @Test\r
191     public void putRaisedIntoStream_facthandle_is_not_null() {\r
192         VesAlarm raiseAlarm = new VesAlarm();\r
193         raiseAlarm.setSourceId("11111");\r
194         raiseAlarm.setEventName("alarm");\r
195         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
196         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
197     }\r
198 \r
199     @Test\r
200     public void putRaisedIntoStream_factHandle_is_null() {\r
201         VesAlarm raiseAlarm = new VesAlarm();\r
202         raiseAlarm.setSourceId("11111");\r
203         raiseAlarm.setEventName("alarm");\r
204         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
205     }\r
206 \r
207     @Test\r
208     public void stop() throws Exception {\r
209         droolsEngine.stop();\r
210     }\r
211 \r
212     @Test\r
213     public void testConvertAlarmInfo2VesAlarm() throws Exception {\r
214         AlarmInfo alarmInfo = new AlarmInfo();\r
215         alarmInfo.setEventId("eventId");\r
216         alarmInfo.setEventName("eventName");\r
217         alarmInfo.setStartEpochMicroSec(1L);\r
218         alarmInfo.setLastEpochMicroSec(1L);\r
219         alarmInfo.setSourceId("sourceId");\r
220         alarmInfo.setSourceName("sourceName");\r
221         alarmInfo.setRootFlag(0);\r
222         alarmInfo.setAlarmIsCleared(1);\r
223 \r
224         PowerMock.replayAll();\r
225         VesAlarm vesAlarm = Whitebox.invokeMethod(droolsEngine,"convertAlarmInfo2VesAlarm",alarmInfo);\r
226         PowerMock.verifyAll();\r
227 \r
228         assertThat(vesAlarm.getAlarmIsCleared(), is(1));\r
229         assertThat(vesAlarm.getSourceName(), equalTo("sourceName"));\r
230         assertThat(vesAlarm.getSourceId(), equalTo("sourceId"));\r
231         assertThat(vesAlarm.getStartEpochMicrosec(), is(1L));\r
232         assertThat(vesAlarm.getLastEpochMicrosec(), is(1L));\r
233         assertThat(vesAlarm.getEventName(), equalTo("eventName"));\r
234         assertThat(vesAlarm.getEventId(), equalTo("eventId"));\r
235         assertThat(vesAlarm.getRootFlag(), is(0));\r
236     }\r
237 }\r