dd0b55d94a50fb4237e4e7cab76060b8d12ed85f
[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.anyInt;\r
20 import static org.easymock.EasyMock.expect;\r
21 \r
22 import java.lang.reflect.Method;\r
23 import java.util.ArrayList;\r
24 import java.util.List;\r
25 import java.util.Locale;\r
26 import org.drools.KnowledgeBase;\r
27 import org.drools.KnowledgeBaseConfiguration;\r
28 import org.drools.KnowledgeBaseFactory;\r
29 import org.drools.conf.EventProcessingOption;\r
30 import org.drools.runtime.StatefulKnowledgeSession;\r
31 import org.junit.Before;\r
32 import org.junit.Rule;\r
33 import org.junit.Test;\r
34 import org.junit.rules.ExpectedException;\r
35 import org.onap.holmes.common.api.stat.VesAlarm;\r
36 import org.onap.holmes.engine.request.DeployRuleRequest;\r
37 import org.onap.holmes.common.api.entity.CorrelationRule;\r
38 import org.onap.holmes.common.constant.AlarmConst;\r
39 import org.onap.holmes.common.exception.CorrelationException;\r
40 import org.onap.holmes.engine.wrapper.RuleMgtWrapper;\r
41 import org.powermock.api.easymock.PowerMock;\r
42 import org.powermock.modules.junit4.rule.PowerMockRule;\r
43 import org.powermock.reflect.Whitebox;\r
44 \r
45 public class DroolsEngineTest {\r
46 \r
47     @Rule\r
48     public ExpectedException thrown = ExpectedException.none();\r
49 \r
50     @Rule\r
51     public PowerMockRule powerMockRule = new PowerMockRule();\r
52 \r
53     private RuleMgtWrapper ruleMgtWrapper;\r
54 \r
55     private KnowledgeBase kbase;\r
56 \r
57     private KnowledgeBaseConfiguration kconf;\r
58 \r
59     private StatefulKnowledgeSession ksession;\r
60 \r
61 \r
62     private DroolsEngine droolsEngine;\r
63 \r
64     @Before\r
65     public void setUp() {\r
66         droolsEngine = new DroolsEngine();\r
67 \r
68         this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();\r
69         this.kconf.setOption(EventProcessingOption.STREAM);\r
70         this.kconf.setProperty("drools.assertBehaviour", "equality");\r
71         this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);\r
72         this.ksession = kbase.newStatefulKnowledgeSession();\r
73 \r
74         ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);\r
75 \r
76         Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);\r
77 \r
78         Whitebox.setInternalState(droolsEngine, "kconf", kconf);\r
79         Whitebox.setInternalState(droolsEngine, "kbase", kbase);\r
80         Whitebox.setInternalState(droolsEngine, "ksession", ksession);\r
81 \r
82         PowerMock.resetAll();\r
83     }\r
84 \r
85     @Test\r
86     public void init() throws Exception {\r
87 \r
88         List<CorrelationRule> rules = new ArrayList<CorrelationRule>();\r
89         CorrelationRule rule = new CorrelationRule();\r
90         rule.setContent("content");\r
91         rule.setClosedControlLoopName("test");\r
92         rule.setPackageName("org.onap.holmes");\r
93         rules.add(rule);\r
94 \r
95         expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
96         PowerMock.replayAll();\r
97 \r
98         Method method = DroolsEngine.class.getDeclaredMethod("init");\r
99         method.setAccessible(true);\r
100         method.invoke(droolsEngine);\r
101 \r
102         PowerMock.verifyAll();\r
103     }\r
104 \r
105     @Test\r
106     public void deployRule_rule_is_null() throws CorrelationException {\r
107         Locale locale = PowerMock.createMock(Locale.class);\r
108 \r
109         thrown.expect(NullPointerException.class);\r
110 \r
111         droolsEngine.deployRule(null, locale);\r
112     }\r
113 \r
114     @Test\r
115     public void deployRule_kbuilder_has_errors() throws CorrelationException {\r
116         DeployRuleRequest rule = new DeployRuleRequest();\r
117         rule.setContent("rule123");\r
118         Locale locale = new Locale(AlarmConst.I18N_EN);\r
119 \r
120         thrown.expect(CorrelationException.class);\r
121 \r
122         droolsEngine.deployRule(rule, locale);\r
123     }\r
124 \r
125     @Test\r
126     public void deployRule_package_name_repeat() throws CorrelationException {\r
127         DeployRuleRequest rule = new DeployRuleRequest();\r
128         rule.setContent("package rule123");\r
129         Locale locale = new Locale(AlarmConst.I18N_EN);\r
130 \r
131         thrown.expect(CorrelationException.class);\r
132 \r
133         droolsEngine.deployRule(rule, locale);\r
134         droolsEngine.deployRule(rule, locale);\r
135     }\r
136 \r
137     @Test\r
138     public void undeployRule_package_name_is_null() throws CorrelationException {\r
139         String packageName = null;\r
140         Locale locale = new Locale(AlarmConst.I18N_EN);\r
141 \r
142         thrown.expect(CorrelationException.class);\r
143 \r
144         droolsEngine.undeployRule(packageName, locale);\r
145     }\r
146 \r
147     @Test\r
148     public void undeployRule_normal() throws CorrelationException {\r
149         Locale locale = new Locale(AlarmConst.I18N_EN);\r
150 \r
151         DeployRuleRequest rule = new DeployRuleRequest();\r
152         rule.setContent("package rule123");\r
153         droolsEngine.deployRule(rule, locale);\r
154 \r
155         String packageName = "rule123";\r
156 \r
157         droolsEngine.undeployRule(packageName, locale);\r
158     }\r
159 \r
160     @Test\r
161     public void compileRule_kbuilder_has_errors() throws CorrelationException {\r
162         String content = "have error content";\r
163         Locale locale = new Locale(AlarmConst.I18N_EN);\r
164 \r
165         thrown.expect(CorrelationException.class);\r
166 \r
167         droolsEngine.compileRule(content, locale);\r
168     }\r
169 \r
170     @Test\r
171     public void putRaisedIntoStream_facthandle_is_not_null() {\r
172         VesAlarm raiseAlarm = new VesAlarm();\r
173         raiseAlarm.setSourceId("11111");\r
174         raiseAlarm.setEventName("alarm");\r
175         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
176         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
177     }\r
178 \r
179     @Test\r
180     public void putRaisedIntoStream_factHandle_is_null() {\r
181         VesAlarm raiseAlarm = new VesAlarm();\r
182         raiseAlarm.setSourceId("11111");\r
183         raiseAlarm.setEventName("alarm");\r
184         droolsEngine.putRaisedIntoStream(raiseAlarm);\r
185     }\r
186 \r
187     @Test\r
188     public void stop() throws Exception {\r
189         droolsEngine.stop();\r
190     }\r
191 }\r