f6d05449a15e45a6af174d800d3f532b52be438a
[holmes/rule-management.git] / rulemgt / src / test / java / org / openo / 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.openo.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.openo.holmes.common.api.entity.CorrelationRule;\r
33 import org.openo.holmes.common.exception.CorrelationException;\r
34 import org.openo.holmes.common.utils.DbDaoUtil;\r
35 import org.openo.holmes.common.utils.I18nProxy;\r
36 import org.openo.holmes.rulemgt.bean.request.CorrelationCheckRule4Engine;\r
37 import org.openo.holmes.rulemgt.bean.request.CorrelationDeployRule4Engine;\r
38 import org.openo.holmes.rulemgt.bean.request.RuleCreateRequest;\r
39 import org.openo.holmes.rulemgt.bean.request.RuleDeleteRequest;\r
40 import org.openo.holmes.rulemgt.bean.request.RuleQueryCondition;\r
41 import org.openo.holmes.rulemgt.bean.request.RuleUpdateRequest;\r
42 import org.openo.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;\r
43 import org.openo.holmes.rulemgt.bean.response.RuleQueryListResponse;\r
44 import org.openo.holmes.rulemgt.bolt.enginebolt.EngineWrapper;\r
45 import org.openo.holmes.rulemgt.db.CorrelationRuleDao;\r
46 import org.openo.holmes.rulemgt.db.CorrelationRuleQueryDao;\r
47 import org.powermock.api.easymock.PowerMock;\r
48 import org.powermock.modules.junit4.rule.PowerMockRule;\r
49 import org.powermock.reflect.Whitebox;\r
50 \r
51 public class RuleMgtWrapperTest {\r
52 \r
53     @Rule\r
54     public ExpectedException thrown = ExpectedException.none();\r
55     @Rule\r
56     public PowerMockRule powerMockRule = new PowerMockRule();\r
57 \r
58     private RuleMgtWrapper ruleMgtWrapper;\r
59 \r
60     private EngineWrapper engineWrapperMock;\r
61 \r
62     private DbDaoUtil dbDaoUtilMock;\r
63 \r
64     private CorrelationRuleQueryDao correlationRuleQueryDaoMock;\r
65 \r
66     private CorrelationRuleDao correlationRuleDaoMock;\r
67 \r
68     private static final String USER_NAME = "admin";\r
69 \r
70     @Before\r
71     public void setUp() throws Exception {\r
72 \r
73         ruleMgtWrapper = new RuleMgtWrapper();\r
74 \r
75         engineWrapperMock = PowerMock.createMock(EngineWrapper.class);\r
76         correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);\r
77         dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
78         correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);\r
79 \r
80         Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);\r
81         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);\r
82         Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);\r
83         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);\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(I18nProxy.RULE_MANAGEMENT_RULE_NAME_CANNOT_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((I18nProxy.RULE_MANAGEMENT_REQUEST_OBJECT_IS_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(I18nProxy.RULE_MANAGEMENT_RULE_NAME_CANNOT_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(I18nProxy.RULE_MANAGEMENT_CONTENT_CANNOT_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(I18nProxy.RULE_MANAGEMENT_PARAMETER_ENABLED_ERROR);\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(I18nProxy.RULE_MANAGEMENT_REPEAT_RULE_NAME);\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 \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         assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));\r
179 \r
180         PowerMock.verifyAll();\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(I18nProxy.RULE_MANAGEMENT_REQUEST_OBJECT_IS_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         RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "des2", "contetnt2", 1);\r
201 \r
202         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
203         EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName")).andReturn(true);\r
204         correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));\r
205         EasyMock.expectLastCall();\r
206         EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)))\r
207                 .andReturn(true);\r
208         EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)))\r
209                 .andReturn("packageName1");\r
210         PowerMock.replayAll();\r
211 \r
212         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
213 \r
214         PowerMock.verifyAll();\r
215 \r
216         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
217     }\r
218 \r
219     @Test\r
220     public void updateCorrelationRule_param_no_change() throws Exception {\r
221         CorrelationRule oldCorrelationRule = new CorrelationRule();\r
222         oldCorrelationRule.setRid("rule_1");\r
223         oldCorrelationRule.setName("name");\r
224         oldCorrelationRule.setDescription("des1");\r
225         oldCorrelationRule.setContent("content");\r
226         oldCorrelationRule.setPackageName("testName");\r
227         oldCorrelationRule.setEnabled(1);\r
228         RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "des1", "content", 1);\r
229 \r
230         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);\r
231 \r
232         PowerMock.replayAll();\r
233 \r
234         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);\r
235 \r
236         PowerMock.verifyAll();\r
237 \r
238         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));\r
239     }\r
240 \r
241     @Test\r
242     public void updateCorrelationRule_rule_not_exist() throws Exception {\r
243         thrown.expect(CorrelationException.class);\r
244         thrown.expectMessage(I18nProxy.RULE_MANAGEMENT_RULE_NOT_EXIST_DATABASE);\r
245 \r
246         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);\r
247 \r
248         PowerMock.replayAll();\r
249 \r
250         ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());\r
251 \r
252         PowerMock.verifyAll();\r
253     }\r
254 \r
255     @Test\r
256     public void deleteCorrelationRule_request_null() throws Exception {\r
257         thrown.expect(CorrelationException.class);\r
258         thrown.expectMessage((I18nProxy.RULE_MANAGEMENT_REQUEST_OBJECT_IS_EMPTY));\r
259 \r
260         ruleMgtWrapper.deleteCorrelationRule(null);\r
261     }\r
262 \r
263     @Test\r
264     public void deleteCorrelationRule_rule_not_exit() throws Exception {\r
265         thrown.expect(CorrelationException.class);\r
266         thrown.expectMessage((I18nProxy.RULE_MANAGEMENT_RULE_NOT_EXIST_DATABASE));\r
267 \r
268         RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
269 \r
270         EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(\r
271                 correlationRuleDaoMock).anyTimes();\r
272         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
273                 .andReturn(null);\r
274 \r
275         PowerMock.replayAll();\r
276 \r
277         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
278 \r
279         PowerMock.verifyAll();\r
280     }\r
281 \r
282     @Test\r
283     public void deleteCorrelationRule_normal() throws Exception {\r
284         RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());\r
285         CorrelationRule correlationRule = new CorrelationRule();\r
286         correlationRule.setEnabled(1);\r
287         EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))\r
288                 .andReturn(correlationRule);\r
289         EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class))).andReturn(true);\r
290         correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));\r
291         EasyMock.expectLastCall();\r
292         PowerMock.replayAll();\r
293 \r
294         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);\r
295 \r
296         PowerMock.verifyAll();\r
297     }\r
298 \r
299     @Test\r
300     public void getCorrelationRuleByCondition_data_format_exception() throws Exception {\r
301         thrown.expect(CorrelationException.class);\r
302         thrown.expectMessage((I18nProxy.RULE_MANAGEMENT_CREATE_QUERY_SQL_FAILED));\r
303 \r
304         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
305                 RuleQueryCondition.class)))\r
306                 .andThrow(new CorrelationException(I18nProxy.RULE_MANAGEMENT_CREATE_QUERY_SQL_FAILED));\r
307 \r
308         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
309 \r
310         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
311 \r
312         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
313     }\r
314 \r
315     @Test\r
316     public void getCorrelationRuleByCondition_db_exception() throws Exception {\r
317         thrown.expect(CorrelationException.class);\r
318         thrown.expectMessage((I18nProxy.RULE_MANAGEMENT_QUERY_RULE_FAILED));\r
319 \r
320         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
321                 RuleQueryCondition.class)))\r
322                 .andThrow(new CorrelationException(I18nProxy.RULE_MANAGEMENT_QUERY_RULE_FAILED));\r
323 \r
324         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
325 \r
326         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
327 \r
328         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
329     }\r
330 \r
331     @Test\r
332     public void getCorrelationRuleByCondition_normal() throws Exception {\r
333         List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);\r
334         for (int i = 0; i < 10; ++i) {\r
335             CorrelationRule correlationRule = new CorrelationRule();\r
336             correlationRule.setContent("content" + i);\r
337             correlationRule.setName("name" + i);\r
338             correlationRule.setRid("rule_" + i);\r
339             correlationRule.setEngineType("engineType" + (i % 2 + 1));\r
340             correlationRule.setEngineID("engineId" + i);\r
341             correlationRule.setCreateTime(new Date());\r
342             correlationRule.setCreator(USER_NAME);\r
343             correlationRule.setDescription("description" + i);\r
344             correlationRule.setPackageName("package" + i);\r
345             correlationRuleList.add(correlationRule);\r
346         }\r
347 \r
348         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(\r
349                 RuleQueryCondition.class))).andReturn(correlationRuleList);\r
350 \r
351         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
352 \r
353         RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());\r
354 \r
355         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);\r
356 \r
357         assertThat(response.getTotalCount(), is(10));\r
358 \r
359         for (int i = 0; i < 10; ++i) {\r
360             assertThat(response.getCorrelationRules().get(i).getRuleId(),\r
361                     equalTo(correlationRuleList.get(i).getRid()));\r
362         }\r
363     }\r
364 \r
365     private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,\r
366             int enabled) {\r
367         RuleCreateRequest rcr;\r
368         rcr = new RuleCreateRequest();\r
369         rcr.setRuleName(ruleName);\r
370         rcr.setDescription(description);\r
371         rcr.setContent(content);\r
372         rcr.setEnabled(enabled);\r
373         return rcr;\r
374     }\r
375 \r
376     private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String description, String content, int enabled) {\r
377         RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();\r
378         ruleUpdateRequest.setRuleId(ruleId);\r
379         ruleUpdateRequest.setDescription(description);\r
380         ruleUpdateRequest.setContent(content);\r
381         ruleUpdateRequest.setEnabled(enabled);\r
382         return ruleUpdateRequest;\r
383     }\r
384 \r
385     private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {\r
386         RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();\r
387         ruleDeleteRequest.setRuleId(ruleId);\r
388         return ruleDeleteRequest;\r
389     }\r
390 \r
391     private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {\r
392         CorrelationRule correlationRule = new CorrelationRule();\r
393         correlationRule.setContent(ruleCreateRequest.getContent());\r
394         correlationRule.setDescription(ruleCreateRequest.getDescription());\r
395         correlationRule.setName(ruleCreateRequest.getRuleName());\r
396         correlationRule.setCreator(USER_NAME);\r
397         correlationRule.setModifier(USER_NAME);\r
398         correlationRule.setEnabled(ruleCreateRequest.getEnabled());\r
399         return correlationRule;\r
400     }\r
401 \r
402     private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {\r
403         CorrelationRule correlationRule = new CorrelationRule();\r
404         correlationRule.setRid(ruleUpdateRequest.getRuleId());\r
405         correlationRule.setContent(ruleUpdateRequest.getContent());\r
406         correlationRule.setDescription(ruleUpdateRequest.getDescription());\r
407         correlationRule.setEnabled(ruleUpdateRequest.getEnabled());\r
408         correlationRule.setUpdateTime(new Date());\r
409         correlationRule.setModifier(USER_NAME);\r
410         return correlationRule;\r
411     }\r
412 }