7033aff5f6d3f60cc1a25465d76f6223b24b71ac
[holmes/rule-management.git] / rulemgt / src / test / java / org / onap / holmes / rulemgt / wrapper / RuleMgtWrapperTest.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.rulemgt.wrapper;\r
18 \r
19 \r
20 import org.easymock.EasyMock;\r
21 import org.junit.Before;\r
22 import org.junit.Rule;\r
23 import org.junit.Test;\r
24 import org.junit.rules.ExpectedException;\r
25 import org.junit.runner.RunWith;\r
26 import org.onap.holmes.common.api.entity.CorrelationRule;\r
27 import org.onap.holmes.common.exception.CorrelationException;\r
28 import org.onap.holmes.common.utils.DbDaoUtil;\r
29 import org.onap.holmes.rulemgt.bean.request.*;\r
30 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
31 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
32 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;\r
33 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;\r
34 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;\r
35 import org.onap.holmes.rulemgt.send.Ip4AddingRule;\r
36 import org.powermock.api.easymock.PowerMock;\r
37 import org.powermock.modules.junit4.PowerMockRunner;\r
38 import org.powermock.reflect.Whitebox;\r
39 \r
40 import java.util.ArrayList;\r
41 import java.util.Date;\r
42 import java.util.List;\r
43 \r
44 import static org.hamcrest.MatcherAssert.assertThat;\r
45 import static org.hamcrest.Matchers.equalTo;\r
46 import static org.hamcrest.Matchers.is;\r
47 \r
48 @RunWith(PowerMockRunner.class)\r
49 public class RuleMgtWrapperTest {\r
50 \r
51     @Rule\r
52     public ExpectedException thrown = ExpectedException.none();\r
53 \r
54     private RuleMgtWrapper ruleMgtWrapper;\r
55 \r
56     private EngineWrapper engineWrapperMock;\r
57 \r
58     private DbDaoUtil dbDaoUtilMock;\r
59 \r
60     private CorrelationRuleQueryDao correlationRuleQueryDaoMock;\r
61 \r
62     private CorrelationRuleDao correlationRuleDaoMock;\r
63 \r
64     private Ip4AddingRule ip4AddingRuleMock;\r
65 \r
66     private static final String USER_NAME = "admin";\r
67 \r
68     @Before\r
69     public void setUp() throws Exception {\r
70 \r
71         ruleMgtWrapper = new RuleMgtWrapper();\r
72 \r
73         engineWrapperMock = PowerMock.createMock(EngineWrapper.class);\r
74         correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);\r
75         dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
76         correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);\r
77         ip4AddingRuleMock = PowerMock.createMock(Ip4AddingRule.class);\r
78 \r
79         Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);\r
80         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);\r
81         Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);\r
82         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);\r
83         Whitebox.setInternalState(ruleMgtWrapper,"ip4AddingRule", ip4AddingRuleMock);\r
84 \r
85         PowerMock.resetAll();\r
86     }\r
87 \r
88     @Test\r
89     public void initDaoUtil_normal() {\r
90         ruleMgtWrapper.initDaoUtil();\r
91     }\r
92 \r
93     @Test\r
94     public void addCorrelationRule_name_is_null() throws Exception {\r
95         thrown.expect(CorrelationException.class);\r
96         thrown.expectMessage("The name of the rule can not be empty.");\r
97 \r
98         ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",\r
99                 "Mocked contents.", 0));\r
100     }\r
101 \r
102     @Test\r
103     public void addCorrelationRule_request_null() throws Exception {\r
104         thrown.expect(CorrelationException.class);\r
105         thrown.expectMessage("The request object can not be empty!");\r
106 \r
107         ruleMgtWrapper.addCorrelationRule(USER_NAME, null);\r
108     }\r
109 \r
110     @Test\r
111     public void addCorrelationRule_name_is_empty() throws Exception {\r
112         thrown.expect(CorrelationException.class);\r
113         thrown.expectMessage("The name of the rule can not be empty.");\r
114 \r
115         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",\r
116                 "Mocked contents.", 0));\r
117     }\r
118 \r
119     @Test\r
120     public void addCorrelationRule_content_is_empty() throws Exception {\r
121         thrown.expect(CorrelationException.class);\r
122         thrown.expectMessage("The contents of the rule can not be empty!");\r
123 \r
124         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",\r
125                 "", 0));\r
126     }\r
127 \r
128     @Test\r
129     public void addCorrelationRule_enabled_is_off_limit() throws Exception {\r
130         thrown.expect(CorrelationException.class);\r
131         thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");\r
132 \r
133         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",\r
134                 "Mocked contents.", 3));\r
135     }\r
136 \r
137     @Test\r
138     public void addCorrelationRule_duplicated_rule() throws Exception {\r
139 \r
140         final String ruleName = "Rule-001";\r
141 \r
142         RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",\r
143                 "Mocked contents.", 0);\r
144         CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);\r
145 \r
146         thrown.expect(CorrelationException.class);\r
147         thrown.expectMessage("A rule with the same name already exists.");\r
148 \r
149         EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);\r
150         PowerMock.replayAll();\r
151 \r
152         ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);\r
153 \r
154         PowerMock.verifyAll();\r
155     }\r
156 \r
157     @Test\r
158     public void addCorrelationRule_normal() throws Exception {\r
159         final String ruleName = "Rule-001";\r
160 \r
161         RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",\r
162                 "Mocked contents.", 1);\r
163         ruleCreateRequest.setLoopControlName("loopName");\r
164 \r
165         CorrelationRule correlationRuleRet = new CorrelationRule();\r
166         correlationRuleRet.setRid("rule_" + System.currentTimeMillis());\r
167 \r
168         EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(null);\r
169         EasyMock.expect(ip4AddingRuleMock.getEngineIp4AddRule()).andReturn("10.96.33.34");\r
170         EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)\r
171                 , EasyMock.anyObject(String.class)))\r
172                 .andReturn(true);\r
173         EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)\r
174                 , EasyMock.anyObject(String.class)))\r
175                 .andReturn("package-001");\r
176         EasyMock.expect(correlationRuleDaoMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))\r
177                 .andReturn(correlationRuleRet);\r
178 \r
179         PowerMock.replayAll();\r
180 \r
181         RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);\r
182         PowerMock.verifyAll();\r
183 \r
184         assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));\r
185     }\r
186 \r
187     @Test\r
188     public void updateCorrelationRule_param_null() throws Exception {\r
189         thrown.expect(CorrelationException.class);\r
190         thrown.expectMessage("The request object can not be empty!");\r
191 \r
192         ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);\r
193     }\r
194 \r
195     @Test\r
196     public void updateCorrelationRule_normal() throws Exception {\r
197         CorrelationRule oldCorrelationRule = new CorrelationRule();\r
198         oldCorrelationRule.setRid("rule_1");\r
199         oldCorrelationRule.setName("name");\r
200         oldCorrelationRule.setDescription("des1");\r
201         oldCorrelationRule.setContent("content");\r
202         oldCorrelationRule.setPackageName("testName");\r
203         oldCorrelationRule.setEnabled(1);\r
204         oldCorrelationRule.setClosedControlLoopName("cl-name");\r
205         oldCorrelationRule.setEngineInstance("10.96.33.34");\r
206         RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);\r
207 \r
208         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
209         EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "10.96.33.34")).andReturn(true);\r
210         correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));\r
211         EasyMock.expectLastCall();\r
212         EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)\r
213                 , EasyMock.anyObject(String.class)))\r
214                 .andReturn(true);\r
215         EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)\r
216                 , EasyMock.anyObject(String.class)))\r
217                 .andReturn("packageName1");\r
218         PowerMock.replayAll();\r
219 \r
220         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
221 \r
222         PowerMock.verifyAll();\r
223 \r
224         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
225     }\r
226 \r
227     @Test\r
228     public void updateCorrelationRule_param_no_change() throws Exception {\r
229         CorrelationRule oldCorrelationRule = new CorrelationRule();\r
230         oldCorrelationRule.setRid("rule_1");\r
231         oldCorrelationRule.setName("name");\r
232         oldCorrelationRule.setDescription("des1");\r
233         oldCorrelationRule.setContent("content");\r
234         oldCorrelationRule.setPackageName("testName");\r
235         oldCorrelationRule.setEnabled(1);\r
236         oldCorrelationRule.setClosedControlLoopName("cl-name");\r
237         RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);\r
238 \r
239         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
240 \r
241         PowerMock.replayAll();\r
242 \r
243         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
244 \r
245         PowerMock.verifyAll();\r
246 \r
247         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
248     }\r
249 \r
250     @Test\r
251     public void updateCorrelationRule_rule_not_exist() throws Exception {\r
252         thrown.expect(CorrelationException.class);\r
253         thrown.expectMessage("You're trying to update a rule which does not exist in the system.");\r
254 \r
255         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);\r
256 \r
257         PowerMock.replayAll();\r
258 \r
259         ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());\r
260 \r
261         PowerMock.verifyAll();\r
262     }\r
263 \r
264     @Test\r
265     public void deleteCorrelationRule_request_null() throws Exception {\r
266         thrown.expect(CorrelationException.class);\r
267         thrown.expectMessage("The request object can not be empty!");\r
268 \r
269         ruleMgtWrapper.deleteCorrelationRule(null);\r
270     }\r
271 \r
272     @Test\r
273     public void deleteCorrelationRule_rule_not_exit() throws Exception {\r
274         thrown.expect(CorrelationException.class);\r
275         thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");\r
276 \r
277         RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
278 \r
279         EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(\r
280                 correlationRuleDaoMock).anyTimes();\r
281         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
282                 .andReturn(null);\r
283 \r
284         PowerMock.replayAll();\r
285 \r
286         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
287 \r
288         PowerMock.verifyAll();\r
289     }\r
290 \r
291     @Test\r
292     public void deleteCorrelationRule_normal() throws Exception {\r
293         RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
294         CorrelationRule correlationRule = new CorrelationRule();\r
295         correlationRule.setEnabled(1);\r
296         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
297                 .andReturn(correlationRule);\r
298         EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)\r
299                 , EasyMock.anyObject(String.class))).andReturn(true);\r
300         correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));\r
301         EasyMock.expectLastCall();\r
302         PowerMock.replayAll();\r
303 \r
304         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
305 \r
306         PowerMock.verifyAll();\r
307     }\r
308 \r
309     @Test\r
310     public void getCorrelationRuleByCondition_data_format_exception() throws Exception {\r
311         thrown.expect(CorrelationException.class);\r
312         thrown.expectMessage("An error occurred while building the query SQL.");\r
313 \r
314         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
315                 RuleQueryCondition.class)))\r
316                 .andThrow(new CorrelationException("An error occurred while building the query SQL."));\r
317 \r
318         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
319 \r
320         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
321 \r
322         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
323     }\r
324 \r
325     @Test\r
326     public void getCorrelationRuleByCondition_db_exception() throws Exception {\r
327         thrown.expect(CorrelationException.class);\r
328         thrown.expectMessage("Failed to query the rule.");\r
329 \r
330         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
331                 RuleQueryCondition.class)))\r
332                 .andThrow(new CorrelationException("Failed to query the rule."));\r
333 \r
334         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
335 \r
336         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
337 \r
338         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
339     }\r
340 \r
341     @Test\r
342     public void getCorrelationRuleByCondition_normal() throws Exception {\r
343         List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);\r
344         for (int i = 0; i < 10; ++i) {\r
345             CorrelationRule correlationRule = new CorrelationRule();\r
346             correlationRule.setContent("content" + i);\r
347             correlationRule.setName("name" + i);\r
348             correlationRule.setRid("rule_" + i);\r
349             correlationRule.setEngineType("engineType" + (i % 2 + 1));\r
350             correlationRule.setEngineID("engineId" + i);\r
351             correlationRule.setCreateTime(new Date());\r
352             correlationRule.setCreator(USER_NAME);\r
353             correlationRule.setDescription("description" + i);\r
354             correlationRule.setPackageName("package" + i);\r
355             correlationRuleList.add(correlationRule);\r
356         }\r
357 \r
358         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
359                 RuleQueryCondition.class))).andReturn(correlationRuleList);\r
360 \r
361         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
362 \r
363         RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
364 \r
365         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
366 \r
367         assertThat(response.getTotalCount(), is(10));\r
368 \r
369         for (int i = 0; i < 10; ++i) {\r
370             assertThat(response.getCorrelationRules().get(i).getRuleId(),\r
371                     equalTo(correlationRuleList.get(i).getRid()));\r
372         }\r
373     }\r
374 \r
375     private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,\r
376             int enabled) {\r
377         RuleCreateRequest rcr;\r
378         rcr = new RuleCreateRequest();\r
379         rcr.setRuleName(ruleName);\r
380         rcr.setDescription(description);\r
381         rcr.setContent(content);\r
382         rcr.setEnabled(enabled);\r
383         return rcr;\r
384     }\r
385 \r
386     private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,\r
387             String content, int enabled) {\r
388         RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();\r
389         ruleUpdateRequest.setRuleId(ruleId);\r
390         ruleUpdateRequest.setDescription(description);\r
391         ruleUpdateRequest.setContent(content);\r
392         ruleUpdateRequest.setEnabled(enabled);\r
393         ruleUpdateRequest.setLoopControlName(clName);\r
394         return ruleUpdateRequest;\r
395     }\r
396 \r
397     private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {\r
398         RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();\r
399         ruleDeleteRequest.setRuleId(ruleId);\r
400         return ruleDeleteRequest;\r
401     }\r
402 \r
403     private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {\r
404         CorrelationRule correlationRule = new CorrelationRule();\r
405         correlationRule.setContent(ruleCreateRequest.getContent());\r
406         correlationRule.setDescription(ruleCreateRequest.getDescription());\r
407         correlationRule.setName(ruleCreateRequest.getRuleName());\r
408         correlationRule.setCreator(USER_NAME);\r
409         correlationRule.setModifier(USER_NAME);\r
410         correlationRule.setEnabled(ruleCreateRequest.getEnabled());\r
411         return correlationRule;\r
412     }\r
413 \r
414     private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {\r
415         CorrelationRule correlationRule = new CorrelationRule();\r
416         correlationRule.setRid(ruleUpdateRequest.getRuleId());\r
417         correlationRule.setContent(ruleUpdateRequest.getContent());\r
418         correlationRule.setDescription(ruleUpdateRequest.getDescription());\r
419         correlationRule.setEnabled(ruleUpdateRequest.getEnabled());\r
420         correlationRule.setUpdateTime(new Date());\r
421         correlationRule.setModifier(USER_NAME);\r
422         return correlationRule;\r
423     }\r
424 }