Change the groupid from openo to onap
[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 static org.easymock.EasyMock.anyBoolean;\r
20 import static org.easymock.EasyMock.anyInt;\r
21 import static org.easymock.EasyMock.anyObject;\r
22 import static org.easymock.EasyMock.expect;\r
23 \r
24 import java.lang.reflect.Method;\r
25 import java.util.ArrayList;\r
26 import java.util.List;\r
27 import java.util.Locale;\r
28 import javax.jms.Connection;\r
29 import javax.jms.ConnectionFactory;\r
30 import javax.jms.Destination;\r
31 import javax.jms.JMSException;\r
32 import javax.jms.MessageConsumer;\r
33 import javax.jms.Session;\r
34 import javax.jms.Topic;\r
35 import org.apache.activemq.command.ActiveMQObjectMessage;\r
36 import org.drools.KnowledgeBase;\r
37 import org.drools.KnowledgeBaseConfiguration;\r
38 import org.drools.KnowledgeBaseFactory;\r
39 import org.drools.conf.EventProcessingOption;\r
40 import org.drools.runtime.StatefulKnowledgeSession;\r
41 import org.easymock.EasyMock;\r
42 import org.glassfish.hk2.api.IterableProvider;\r
43 import org.junit.Before;\r
44 import org.junit.Rule;\r
45 import org.junit.Test;\r
46 import org.junit.rules.ExpectedException;\r
47 import org.onap.holmes.engine.request.DeployRuleRequest;\r
48 import org.onap.holmes.common.api.entity.CorrelationRule;\r
49 import org.onap.holmes.common.api.stat.Alarm;\r
50 import org.onap.holmes.common.config.MQConfig;\r
51 import org.onap.holmes.common.constant.AlarmConst;\r
52 import org.onap.holmes.common.exception.CorrelationException;\r
53 import org.onap.holmes.engine.wrapper.RuleMgtWrapper;\r
54 import org.powermock.api.easymock.PowerMock;\r
55 import org.powermock.modules.junit4.rule.PowerMockRule;\r
56 import org.powermock.reflect.Whitebox;\r
57 \r
58 public class DroolsEngineTest {\r
59 \r
60     @Rule\r
61     public ExpectedException thrown = ExpectedException.none();\r
62 \r
63     @Rule\r
64     public PowerMockRule powerMockRule = new PowerMockRule();\r
65 \r
66     private RuleMgtWrapper ruleMgtWrapper;\r
67 \r
68     private KnowledgeBase kbase;\r
69 \r
70     private KnowledgeBaseConfiguration kconf;\r
71 \r
72     private StatefulKnowledgeSession ksession;\r
73 \r
74     private IterableProvider<MQConfig> mqConfigProvider;\r
75 \r
76     private ConnectionFactory connectionFactory;\r
77 \r
78     private DroolsEngine droolsEngine;\r
79 \r
80     @Before\r
81     public void setUp() {\r
82         droolsEngine = new DroolsEngine();\r
83 \r
84         this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();\r
85         this.kconf.setOption(EventProcessingOption.STREAM);\r
86         this.kconf.setProperty("drools.assertBehaviour", "equality");\r
87         this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);\r
88         this.ksession = kbase.newStatefulKnowledgeSession();\r
89 \r
90         ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);\r
91         mqConfigProvider = PowerMock.createMock(IterableProvider.class);\r
92         connectionFactory = PowerMock.createMock(ConnectionFactory.class);\r
93 \r
94         Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);\r
95         Whitebox.setInternalState(droolsEngine, "mqConfigProvider", mqConfigProvider);\r
96         Whitebox.setInternalState(droolsEngine, "kconf", kconf);\r
97         Whitebox.setInternalState(droolsEngine, "kbase", kbase);\r
98         Whitebox.setInternalState(droolsEngine, "ksession", ksession);\r
99         Whitebox.setInternalState(droolsEngine, "connectionFactory", connectionFactory);\r
100 \r
101         PowerMock.resetAll();\r
102     }\r
103 \r
104     @Test\r
105     public void init() throws Exception {\r
106         MQConfig mqConfig = new MQConfig();\r
107         mqConfig.brokerIp = "127.0.0.1";\r
108         mqConfig.brokerPort = 4567;\r
109         mqConfig.brokerUsername = "admin";\r
110         mqConfig.brokerPassword = "admin";\r
111         List<CorrelationRule> rules = new ArrayList<CorrelationRule>();\r
112         CorrelationRule rule = new CorrelationRule();\r
113         rule.setContent("content");\r
114         rules.add(rule);\r
115 \r
116         expect(mqConfigProvider.get()).andReturn(mqConfig).anyTimes();\r
117         expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
118         PowerMock.replayAll();\r
119 \r
120         Method method = DroolsEngine.class.getDeclaredMethod("init");\r
121         method.setAccessible(true);\r
122         method.invoke(droolsEngine);\r
123 \r
124         PowerMock.verifyAll();\r
125     }\r
126 \r
127     @Test\r
128     public void deployRule_rule_is_null() throws CorrelationException {\r
129         Locale locale = PowerMock.createMock(Locale.class);\r
130 \r
131         thrown.expect(NullPointerException.class);\r
132 \r
133         droolsEngine.deployRule(null, locale);\r
134     }\r
135 \r
136     @Test\r
137     public void deployRule_kbuilder_has_errors() throws CorrelationException {\r
138         DeployRuleRequest rule = new DeployRuleRequest();\r
139         rule.setContent("rule123");\r
140         Locale locale = new Locale(AlarmConst.I18N_EN);\r
141 \r
142         thrown.expect(CorrelationException.class);\r
143 \r
144         droolsEngine.deployRule(rule, locale);\r
145     }\r
146 \r
147     @Test\r
148     public void deployRule_package_name_repeat() throws CorrelationException {\r
149         DeployRuleRequest rule = new DeployRuleRequest();\r
150         rule.setContent("package rule123");\r
151         Locale locale = new Locale(AlarmConst.I18N_EN);\r
152 \r
153         thrown.expect(CorrelationException.class);\r
154 \r
155         droolsEngine.deployRule(rule, locale);\r
156         droolsEngine.deployRule(rule, locale);\r
157     }\r
158 \r
159     @Test\r
160     public void undeployRule_package_name_is_null() throws CorrelationException {\r
161         String packageName = null;\r
162         Locale locale = new Locale(AlarmConst.I18N_EN);\r
163 \r
164         thrown.expect(CorrelationException.class);\r
165 \r
166         droolsEngine.undeployRule(packageName, locale);\r
167     }\r
168 \r
169     @Test\r
170     public void undeployRule_normal() throws CorrelationException {\r
171         Locale locale = new Locale(AlarmConst.I18N_EN);\r
172 \r
173         DeployRuleRequest rule = new DeployRuleRequest();\r
174         rule.setContent("package rule123");\r
175         droolsEngine.deployRule(rule, locale);\r
176 \r
177         String packageName = "rule123";\r
178 \r
179         droolsEngine.undeployRule(packageName, locale);\r
180     }\r
181 \r
182     @Test\r
183     public void compileRule_kbuilder_has_errors() throws CorrelationException {\r
184         String content = "have error content";\r
185         Locale locale = new Locale(AlarmConst.I18N_EN);\r
186 \r
187         thrown.expect(CorrelationException.class);\r
188 \r
189         droolsEngine.compileRule(content, locale);\r
190     }\r
191 \r
192 \r
193     @Test\r
194     public void putRaisedIntoStream_facthandle_is_null() {\r
195         Alarm raiseAlarm = new Alarm();\r
196         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
197         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
198     }\r
199 \r
200     @Test\r
201     public void putRaisedIntoStream_factHandle_is_not_null() {\r
202         droolsEngine.putRaisedIntoStream(new Alarm());\r
203     }\r
204 \r
205 \r
206     @Test\r
207     public void listener_receive() throws JMSException {\r
208         DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();\r
209 \r
210         Connection connection = PowerMock.createMock(Connection.class);\r
211         Session session = PowerMock.createMock(Session.class);\r
212         Destination destination = PowerMock.createMock(Topic.class);\r
213         MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);\r
214 \r
215         Whitebox.setInternalState(listener, "connection", connection);\r
216         Whitebox.setInternalState(listener, "session", session);\r
217         Whitebox.setInternalState(listener, "destination", destination);\r
218         Whitebox.setInternalState(listener, "consumer", consumer);\r
219 \r
220         PowerMock.reset();\r
221 \r
222         expect(connectionFactory.createConnection()).andReturn(connection);\r
223         connection.start();\r
224         expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);\r
225         expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);\r
226         expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);\r
227         consumer.setMessageListener(listener);\r
228 \r
229         PowerMock.replayAll();\r
230 \r
231         listener.receive();\r
232 \r
233         PowerMock.verifyAll();\r
234     }\r
235 \r
236     @Test\r
237     public void listener_exception() throws JMSException {\r
238         DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();\r
239 \r
240         Connection connection = PowerMock.createMock(Connection.class);\r
241         Session session = PowerMock.createMock(Session.class);\r
242         Destination destination = PowerMock.createMock(Topic.class);\r
243         MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);\r
244 \r
245         Whitebox.setInternalState(listener, "connection", connection);\r
246         Whitebox.setInternalState(listener, "session", session);\r
247         Whitebox.setInternalState(listener, "destination", destination);\r
248         Whitebox.setInternalState(listener, "consumer", consumer);\r
249 \r
250         PowerMock.reset();\r
251 \r
252         expect(connectionFactory.createConnection()).andReturn(connection);\r
253         connection.start();\r
254         expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);\r
255         expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);\r
256         expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);\r
257         consumer.setMessageListener(listener);\r
258         EasyMock.expectLastCall().andThrow(new JMSException(""));\r
259 \r
260         consumer.close();\r
261         session.close();\r
262         connection.close();\r
263 \r
264         PowerMock.replayAll();\r
265 \r
266         listener.receive();\r
267 \r
268         PowerMock.verifyAll();\r
269     }\r
270 \r
271     @Test\r
272     public void listener_close_exception() throws JMSException {\r
273         DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();\r
274 \r
275         Connection connection = PowerMock.createMock(Connection.class);\r
276         Session session = PowerMock.createMock(Session.class);\r
277         Destination destination = PowerMock.createMock(Topic.class);\r
278         MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);\r
279 \r
280         Whitebox.setInternalState(listener, "connection", connection);\r
281         Whitebox.setInternalState(listener, "session", session);\r
282         Whitebox.setInternalState(listener, "destination", destination);\r
283         Whitebox.setInternalState(listener, "consumer", consumer);\r
284 \r
285         PowerMock.reset();\r
286 \r
287         expect(connectionFactory.createConnection()).andReturn(connection);\r
288         connection.start();\r
289         expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);\r
290         expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);\r
291         expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);\r
292         consumer.setMessageListener(listener);\r
293         EasyMock.expectLastCall().andThrow(new JMSException(""));\r
294 \r
295         consumer.close();\r
296         EasyMock.expectLastCall().andThrow(new JMSException(""));\r
297 \r
298         PowerMock.replayAll();\r
299 \r
300         listener.receive();\r
301 \r
302         PowerMock.verifyAll();\r
303     }\r
304 \r
305     @Test\r
306     public void listener_on_message() throws JMSException {\r
307         DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();\r
308         Alarm alarm = new Alarm();\r
309         alarm.setAlarmKey("alarmKey");\r
310         ActiveMQObjectMessage objectMessage = new ActiveMQObjectMessage();\r
311         objectMessage.setObject(alarm);\r
312 \r
313         listener.onMessage(objectMessage);\r
314     }\r
315 \r
316     @Test\r
317     public void stop() throws Exception {\r
318         droolsEngine.stop();\r
319     }\r
320 }\r