2 * Copyright 2017 ZTE Corporation.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.holmes.rulemgt.wrapper;
20 import org.easymock.EasyMock;
21 import org.junit.Before;
22 import org.junit.Rule;
23 import org.junit.Test;
24 import org.junit.rules.ExpectedException;
25 import org.junit.runner.RunWith;
26 import org.onap.holmes.common.api.entity.CorrelationRule;
27 import org.onap.holmes.common.exception.CorrelationException;
28 import org.onap.holmes.common.utils.DbDaoUtil;
29 import org.onap.holmes.rulemgt.bean.request.*;
30 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;
31 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
32 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
33 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;
34 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;
35 import org.onap.holmes.rulemgt.tools.EngineTools;
36 import org.powermock.api.easymock.PowerMock;
37 import org.powermock.modules.junit4.PowerMockRunner;
38 import org.powermock.reflect.Whitebox;
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.Date;
43 import java.util.List;
45 import static org.hamcrest.MatcherAssert.assertThat;
46 import static org.hamcrest.Matchers.equalTo;
47 import static org.hamcrest.Matchers.is;
49 @RunWith(PowerMockRunner.class)
50 public class RuleMgtWrapperTest {
53 public ExpectedException thrown = ExpectedException.none();
55 private RuleMgtWrapper ruleMgtWrapper;
57 private EngineWrapper engineWrapperMock;
59 private DbDaoUtil dbDaoUtilMock;
61 private CorrelationRuleQueryDao correlationRuleQueryDaoMock;
63 private CorrelationRuleDao correlationRuleDaoMock;
65 private EngineTools engineToolsMock;
67 private static final String USER_NAME = "admin";
70 public void setUp() throws Exception {
72 ruleMgtWrapper = new RuleMgtWrapper();
74 engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
75 correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);
76 dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);
77 correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);
78 engineToolsMock = PowerMock.createMock(EngineTools.class);
80 Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);
81 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);
82 Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);
83 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);
84 Whitebox.setInternalState(ruleMgtWrapper,"engineTools", engineToolsMock);
90 public void initDaoUtil_normal() {
91 ruleMgtWrapper.initDaoUtil();
95 public void addCorrelationRule_name_is_null() throws Exception {
96 thrown.expect(CorrelationException.class);
97 thrown.expectMessage("The name of the rule can not be empty.");
99 ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",
100 "Mocked contents.", 0));
104 public void addCorrelationRule_request_null() throws Exception {
105 thrown.expect(CorrelationException.class);
106 thrown.expectMessage("The request object can not be empty!");
108 ruleMgtWrapper.addCorrelationRule(USER_NAME, null);
112 public void addCorrelationRule_name_is_empty() throws Exception {
113 thrown.expect(CorrelationException.class);
114 thrown.expectMessage("The name of the rule can not be empty.");
116 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",
117 "Mocked contents.", 0));
121 public void addCorrelationRule_content_is_empty() throws Exception {
122 thrown.expect(CorrelationException.class);
123 thrown.expectMessage("The contents of the rule can not be empty!");
125 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
130 public void addCorrelationRule_enabled_is_off_limit() throws Exception {
131 thrown.expect(CorrelationException.class);
132 thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");
134 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
135 "Mocked contents.", 3));
139 public void addCorrelationRule_duplicated_rule() throws Exception {
141 final String ruleName = "Rule-001";
143 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
144 "Mocked contents.", 0);
145 CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);
147 thrown.expect(CorrelationException.class);
148 thrown.expectMessage("A rule with the same name already exists.");
150 EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);
151 PowerMock.replayAll();
153 ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
155 PowerMock.verifyAll();
159 public void addCorrelationRule_normal() throws Exception {
160 final String ruleName = "Rule-001";
162 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
163 "Mocked contents.", 1);
164 ruleCreateRequest.setLoopControlName("loopName");
166 CorrelationRule correlationRuleRet = new CorrelationRule();
167 correlationRuleRet.setRid("rule_" + System.currentTimeMillis());
169 EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(null);
170 EasyMock.expect(engineToolsMock.getEngineWithLeastRules()).andReturn("127.0.0.1");
171 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
172 , EasyMock.anyObject(String.class)))
174 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
175 , EasyMock.anyObject(String.class)))
176 .andReturn("package-001");
177 EasyMock.expect(correlationRuleDaoMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))
178 .andReturn(correlationRuleRet);
180 PowerMock.replayAll();
182 RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
183 PowerMock.verifyAll();
185 assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));
189 public void updateCorrelationRule_param_null() throws Exception {
190 thrown.expect(CorrelationException.class);
191 thrown.expectMessage("The request object can not be empty!");
193 ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);
197 public void updateCorrelationRule_normal() throws Exception {
198 CorrelationRule oldCorrelationRule = new CorrelationRule();
199 oldCorrelationRule.setRid("rule_1");
200 oldCorrelationRule.setName("name");
201 oldCorrelationRule.setDescription("des1");
202 oldCorrelationRule.setContent("content");
203 oldCorrelationRule.setPackageName("testName");
204 oldCorrelationRule.setEnabled(1);
205 oldCorrelationRule.setClosedControlLoopName("cl-name");
206 oldCorrelationRule.setEngineInstance("127.0.0.1");
207 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);
209 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
210 EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2")).times(2);
211 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "127.0.0.1")).andReturn(true);
212 correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));
213 EasyMock.expectLastCall();
214 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
215 , EasyMock.anyObject(String.class)))
217 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
218 , EasyMock.anyObject(String.class)))
219 .andReturn("packageName1");
220 PowerMock.replayAll();
222 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
224 PowerMock.verifyAll();
226 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
230 public void updateCorrelationRule_param_no_change() throws Exception {
231 CorrelationRule oldCorrelationRule = new CorrelationRule();
232 oldCorrelationRule.setRid("rule_1");
233 oldCorrelationRule.setName("name");
234 oldCorrelationRule.setDescription("des1");
235 oldCorrelationRule.setContent("content");
236 oldCorrelationRule.setPackageName("testName");
237 oldCorrelationRule.setEnabled(1);
238 oldCorrelationRule.setClosedControlLoopName("cl-name");
239 oldCorrelationRule.setEngineInstance("127.0.0.1");
240 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);
242 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
243 EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2"));
245 PowerMock.replayAll();
247 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
249 PowerMock.verifyAll();
251 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
255 public void updateCorrelationRule_rule_not_exist() throws Exception {
256 thrown.expect(CorrelationException.class);
257 thrown.expectMessage("You're trying to update a rule which does not exist in the system.");
259 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);
261 PowerMock.replayAll();
263 ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());
265 PowerMock.verifyAll();
269 public void deleteCorrelationRule_request_null() throws Exception {
270 thrown.expect(CorrelationException.class);
271 thrown.expectMessage("The request object can not be empty!");
273 ruleMgtWrapper.deleteCorrelationRule(null);
277 public void deleteCorrelationRule_rule_not_exit() throws Exception {
278 thrown.expect(CorrelationException.class);
279 thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");
281 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
283 EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(
284 correlationRuleDaoMock).anyTimes();
285 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
288 PowerMock.replayAll();
290 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
292 PowerMock.verifyAll();
296 public void deleteCorrelationRule_normal() throws Exception {
297 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
298 CorrelationRule correlationRule = new CorrelationRule();
299 correlationRule.setEnabled(1);
300 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
301 .andReturn(correlationRule);
302 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)
303 , EasyMock.anyObject(String.class))).andReturn(true);
304 correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));
305 EasyMock.expectLastCall();
306 PowerMock.replayAll();
308 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
310 PowerMock.verifyAll();
314 public void getCorrelationRuleByCondition_data_format_exception() throws Exception {
315 thrown.expect(CorrelationException.class);
316 thrown.expectMessage("An error occurred while building the query SQL.");
318 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
319 RuleQueryCondition.class)))
320 .andThrow(new CorrelationException("An error occurred while building the query SQL."));
322 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
324 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
326 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
330 public void getCorrelationRuleByCondition_db_exception() throws Exception {
331 thrown.expect(CorrelationException.class);
332 thrown.expectMessage("Failed to query the rule.");
334 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
335 RuleQueryCondition.class)))
336 .andThrow(new CorrelationException("Failed to query the rule."));
338 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
340 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
342 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
346 public void getCorrelationRuleByCondition_normal() throws Exception {
347 List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);
348 for (int i = 0; i < 10; ++i) {
349 CorrelationRule correlationRule = new CorrelationRule();
350 correlationRule.setContent("content" + i);
351 correlationRule.setName("name" + i);
352 correlationRule.setRid("rule_" + i);
353 correlationRule.setEngineType("engineType" + (i % 2 + 1));
354 correlationRule.setEngineID("engineId" + i);
355 correlationRule.setCreateTime(new Date());
356 correlationRule.setCreator(USER_NAME);
357 correlationRule.setDescription("description" + i);
358 correlationRule.setPackageName("package" + i);
359 correlationRuleList.add(correlationRule);
362 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
363 RuleQueryCondition.class))).andReturn(correlationRuleList);
365 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
367 RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
369 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
371 assertThat(response.getTotalCount(), is(10));
373 for (int i = 0; i < 10; ++i) {
374 assertThat(response.getCorrelationRules().get(i).getRuleId(),
375 equalTo(correlationRuleList.get(i).getRid()));
379 private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,
381 RuleCreateRequest rcr;
382 rcr = new RuleCreateRequest();
383 rcr.setRuleName(ruleName);
384 rcr.setDescription(description);
385 rcr.setContent(content);
386 rcr.setEnabled(enabled);
390 private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,
391 String content, int enabled) {
392 RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();
393 ruleUpdateRequest.setRuleId(ruleId);
394 ruleUpdateRequest.setDescription(description);
395 ruleUpdateRequest.setContent(content);
396 ruleUpdateRequest.setEnabled(enabled);
397 ruleUpdateRequest.setLoopControlName(clName);
398 return ruleUpdateRequest;
401 private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {
402 RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();
403 ruleDeleteRequest.setRuleId(ruleId);
404 return ruleDeleteRequest;
407 private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {
408 CorrelationRule correlationRule = new CorrelationRule();
409 correlationRule.setContent(ruleCreateRequest.getContent());
410 correlationRule.setDescription(ruleCreateRequest.getDescription());
411 correlationRule.setName(ruleCreateRequest.getRuleName());
412 correlationRule.setCreator(USER_NAME);
413 correlationRule.setModifier(USER_NAME);
414 correlationRule.setEnabled(ruleCreateRequest.getEnabled());
415 return correlationRule;
418 private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {
419 CorrelationRule correlationRule = new CorrelationRule();
420 correlationRule.setRid(ruleUpdateRequest.getRuleId());
421 correlationRule.setContent(ruleUpdateRequest.getContent());
422 correlationRule.setDescription(ruleUpdateRequest.getDescription());
423 correlationRule.setEnabled(ruleUpdateRequest.getEnabled());
424 correlationRule.setUpdateTime(new Date());
425 correlationRule.setModifier(USER_NAME);
426 return correlationRule;