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