2 * Copyright 2017 ZTE Corporation.
\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
8 * http://www.apache.org/licenses/LICENSE-2.0
\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
17 package org.onap.holmes.rulemgt.wrapper;
\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
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.onap.holmes.rulemgt.bean.request.CorrelationCheckRule4Engine;
\r
32 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;
\r
33 import org.onap.holmes.common.api.entity.CorrelationRule;
\r
34 import org.onap.holmes.common.exception.CorrelationException;
\r
35 import org.onap.holmes.common.utils.DbDaoUtil;
\r
36 import org.onap.holmes.rulemgt.bean.request.CorrelationDeployRule4Engine;
\r
37 import org.onap.holmes.rulemgt.bean.request.RuleCreateRequest;
\r
38 import org.onap.holmes.rulemgt.bean.request.RuleDeleteRequest;
\r
39 import org.onap.holmes.rulemgt.bean.request.RuleQueryCondition;
\r
40 import org.onap.holmes.rulemgt.bean.request.RuleUpdateRequest;
\r
41 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;
\r
42 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
\r
43 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
\r
44 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryDao;
\r
45 import org.onap.holmes.rulemgt.send.Ip4AddingRule;
\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
50 public class RuleMgtWrapperTest {
\r
53 public ExpectedException thrown = ExpectedException.none();
\r
55 public PowerMockRule powerMockRule = new PowerMockRule();
\r
57 private RuleMgtWrapper ruleMgtWrapper;
\r
59 private EngineWrapper engineWrapperMock;
\r
61 private DbDaoUtil dbDaoUtilMock;
\r
63 private CorrelationRuleQueryDao correlationRuleQueryDaoMock;
\r
65 private CorrelationRuleDao correlationRuleDaoMock;
\r
67 private Ip4AddingRule ip4AddingRuleMock;
\r
69 private static final String USER_NAME = "admin";
\r
72 public void setUp() throws Exception {
\r
74 ruleMgtWrapper = new RuleMgtWrapper();
\r
76 engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
\r
77 correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryDao.class);
\r
78 dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);
\r
79 correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);
\r
80 ip4AddingRuleMock = PowerMock.createMock(Ip4AddingRule.class);
\r
82 Whitebox.setInternalState(ruleMgtWrapper, "daoUtil", dbDaoUtilMock);
\r
83 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);
\r
84 Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);
\r
85 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleDao", correlationRuleDaoMock);
\r
86 Whitebox.setInternalState(ruleMgtWrapper,"ip4AddingRule", ip4AddingRuleMock);
\r
88 PowerMock.resetAll();
\r
92 public void initDaoUtil_normal() {
\r
93 ruleMgtWrapper.initDaoUtil();
\r
97 public void addCorrelationRule_name_is_null() throws Exception {
\r
98 thrown.expect(CorrelationException.class);
\r
99 thrown.expectMessage("The name of the rule can not be empty.");
\r
101 ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",
\r
102 "Mocked contents.", 0));
\r
106 public void addCorrelationRule_request_null() throws Exception {
\r
107 thrown.expect(CorrelationException.class);
\r
108 thrown.expectMessage("The request object can not be empty!");
\r
110 ruleMgtWrapper.addCorrelationRule(USER_NAME, null);
\r
114 public void addCorrelationRule_name_is_empty() throws Exception {
\r
115 thrown.expect(CorrelationException.class);
\r
116 thrown.expectMessage("The name of the rule can not be empty.");
\r
118 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",
\r
119 "Mocked contents.", 0));
\r
123 public void addCorrelationRule_content_is_empty() throws Exception {
\r
124 thrown.expect(CorrelationException.class);
\r
125 thrown.expectMessage("The contents of the rule can not be empty!");
\r
127 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
\r
132 public void addCorrelationRule_enabled_is_off_limit() throws Exception {
\r
133 thrown.expect(CorrelationException.class);
\r
134 thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");
\r
136 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
\r
137 "Mocked contents.", 3));
\r
141 public void addCorrelationRule_duplicated_rule() throws Exception {
\r
143 final String ruleName = "Rule-001";
\r
145 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
\r
146 "Mocked contents.", 0);
\r
147 CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);
\r
149 thrown.expect(CorrelationException.class);
\r
150 thrown.expectMessage("A rule with the same name already exists.");
\r
152 EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);
\r
153 PowerMock.replayAll();
\r
155 ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
\r
157 PowerMock.verifyAll();
\r
161 public void addCorrelationRule_normal() throws Exception {
\r
162 final String ruleName = "Rule-001";
\r
164 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
\r
165 "Mocked contents.", 1);
\r
166 ruleCreateRequest.setLoopControlName("loopName");
\r
168 CorrelationRule correlationRuleRet = new CorrelationRule();
\r
169 correlationRuleRet.setRid("rule_" + System.currentTimeMillis());
\r
171 EasyMock.expect(correlationRuleDaoMock.queryRuleByRuleName(ruleName)).andReturn(null);
\r
172 EasyMock.expect(ip4AddingRuleMock.getEngineIp4AddRule()).andReturn("10.96.33.34");
\r
173 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
\r
174 , EasyMock.anyObject(String.class)))
\r
176 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
\r
177 , EasyMock.anyObject(String.class)))
\r
178 .andReturn("package-001");
\r
179 EasyMock.expect(correlationRuleDaoMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))
\r
180 .andReturn(correlationRuleRet);
\r
182 PowerMock.replayAll();
\r
184 RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
\r
185 PowerMock.verifyAll();
\r
187 assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));
\r
191 public void updateCorrelationRule_param_null() throws Exception {
\r
192 thrown.expect(CorrelationException.class);
\r
193 thrown.expectMessage("The request object can not be empty!");
\r
195 ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);
\r
199 public void updateCorrelationRule_normal() throws Exception {
\r
200 CorrelationRule oldCorrelationRule = new CorrelationRule();
\r
201 oldCorrelationRule.setRid("rule_1");
\r
202 oldCorrelationRule.setName("name");
\r
203 oldCorrelationRule.setDescription("des1");
\r
204 oldCorrelationRule.setContent("content");
\r
205 oldCorrelationRule.setPackageName("testName");
\r
206 oldCorrelationRule.setEnabled(1);
\r
207 oldCorrelationRule.setClosedControlLoopName("cl-name");
\r
208 oldCorrelationRule.setEngineInstance("10.96.33.34");
\r
209 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);
\r
211 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
\r
212 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "10.96.33.34")).andReturn(true);
\r
213 correlationRuleDaoMock.updateRule(EasyMock.anyObject(CorrelationRule.class));
\r
214 EasyMock.expectLastCall();
\r
215 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
\r
216 , EasyMock.anyObject(String.class)))
\r
218 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
\r
219 , EasyMock.anyObject(String.class)))
\r
220 .andReturn("packageName1");
\r
221 PowerMock.replayAll();
\r
223 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
\r
225 PowerMock.verifyAll();
\r
227 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
\r
231 public void updateCorrelationRule_param_no_change() throws Exception {
\r
232 CorrelationRule oldCorrelationRule = new CorrelationRule();
\r
233 oldCorrelationRule.setRid("rule_1");
\r
234 oldCorrelationRule.setName("name");
\r
235 oldCorrelationRule.setDescription("des1");
\r
236 oldCorrelationRule.setContent("content");
\r
237 oldCorrelationRule.setPackageName("testName");
\r
238 oldCorrelationRule.setEnabled(1);
\r
239 oldCorrelationRule.setClosedControlLoopName("cl-name");
\r
240 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);
\r
242 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
\r
244 PowerMock.replayAll();
\r
246 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
\r
248 PowerMock.verifyAll();
\r
250 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
\r
254 public void updateCorrelationRule_rule_not_exist() throws Exception {
\r
255 thrown.expect(CorrelationException.class);
\r
256 thrown.expectMessage("You're trying to update a rule which does not exist in the system.");
\r
258 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);
\r
260 PowerMock.replayAll();
\r
262 ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());
\r
264 PowerMock.verifyAll();
\r
268 public void deleteCorrelationRule_request_null() throws Exception {
\r
269 thrown.expect(CorrelationException.class);
\r
270 thrown.expectMessage("The request object can not be empty!");
\r
272 ruleMgtWrapper.deleteCorrelationRule(null);
\r
276 public void deleteCorrelationRule_rule_not_exit() throws Exception {
\r
277 thrown.expect(CorrelationException.class);
\r
278 thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");
\r
280 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
\r
282 EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(
\r
283 correlationRuleDaoMock).anyTimes();
\r
284 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
\r
287 PowerMock.replayAll();
\r
289 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
\r
291 PowerMock.verifyAll();
\r
295 public void deleteCorrelationRule_normal() throws Exception {
\r
296 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
\r
297 CorrelationRule correlationRule = new CorrelationRule();
\r
298 correlationRule.setEnabled(1);
\r
299 EasyMock.expect(correlationRuleDaoMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
\r
300 .andReturn(correlationRule);
\r
301 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)
\r
302 , EasyMock.anyObject(String.class))).andReturn(true);
\r
303 correlationRuleDaoMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));
\r
304 EasyMock.expectLastCall();
\r
305 PowerMock.replayAll();
\r
307 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
\r
309 PowerMock.verifyAll();
\r
313 public void getCorrelationRuleByCondition_data_format_exception() throws Exception {
\r
314 thrown.expect(CorrelationException.class);
\r
315 thrown.expectMessage("An error occurred while building the query SQL.");
\r
317 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
\r
318 RuleQueryCondition.class)))
\r
319 .andThrow(new CorrelationException("An error occurred while building the query SQL."));
\r
321 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
323 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
\r
325 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
329 public void getCorrelationRuleByCondition_db_exception() throws Exception {
\r
330 thrown.expect(CorrelationException.class);
\r
331 thrown.expectMessage("Failed to query the rule.");
\r
333 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
\r
334 RuleQueryCondition.class)))
\r
335 .andThrow(new CorrelationException("Failed to query the rule."));
\r
337 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
339 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
\r
341 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
345 public void getCorrelationRuleByCondition_normal() throws Exception {
\r
346 List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);
\r
347 for (int i = 0; i < 10; ++i) {
\r
348 CorrelationRule correlationRule = new CorrelationRule();
\r
349 correlationRule.setContent("content" + i);
\r
350 correlationRule.setName("name" + i);
\r
351 correlationRule.setRid("rule_" + i);
\r
352 correlationRule.setEngineType("engineType" + (i % 2 + 1));
\r
353 correlationRule.setEngineID("engineId" + i);
\r
354 correlationRule.setCreateTime(new Date());
\r
355 correlationRule.setCreator(USER_NAME);
\r
356 correlationRule.setDescription("description" + i);
\r
357 correlationRule.setPackageName("package" + i);
\r
358 correlationRuleList.add(correlationRule);
\r
361 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
\r
362 RuleQueryCondition.class))).andReturn(correlationRuleList);
\r
364 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
366 RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
\r
368 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryDao.class);
\r
370 assertThat(response.getTotalCount(), is(10));
\r
372 for (int i = 0; i < 10; ++i) {
\r
373 assertThat(response.getCorrelationRules().get(i).getRuleId(),
\r
374 equalTo(correlationRuleList.get(i).getRid()));
\r
378 private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,
\r
380 RuleCreateRequest rcr;
\r
381 rcr = new RuleCreateRequest();
\r
382 rcr.setRuleName(ruleName);
\r
383 rcr.setDescription(description);
\r
384 rcr.setContent(content);
\r
385 rcr.setEnabled(enabled);
\r
389 private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,
\r
390 String content, int enabled) {
\r
391 RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();
\r
392 ruleUpdateRequest.setRuleId(ruleId);
\r
393 ruleUpdateRequest.setDescription(description);
\r
394 ruleUpdateRequest.setContent(content);
\r
395 ruleUpdateRequest.setEnabled(enabled);
\r
396 ruleUpdateRequest.setLoopControlName(clName);
\r
397 return ruleUpdateRequest;
\r
400 private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {
\r
401 RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();
\r
402 ruleDeleteRequest.setRuleId(ruleId);
\r
403 return ruleDeleteRequest;
\r
406 private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {
\r
407 CorrelationRule correlationRule = new CorrelationRule();
\r
408 correlationRule.setContent(ruleCreateRequest.getContent());
\r
409 correlationRule.setDescription(ruleCreateRequest.getDescription());
\r
410 correlationRule.setName(ruleCreateRequest.getRuleName());
\r
411 correlationRule.setCreator(USER_NAME);
\r
412 correlationRule.setModifier(USER_NAME);
\r
413 correlationRule.setEnabled(ruleCreateRequest.getEnabled());
\r
414 return correlationRule;
\r
417 private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {
\r
418 CorrelationRule correlationRule = new CorrelationRule();
\r
419 correlationRule.setRid(ruleUpdateRequest.getRuleId());
\r
420 correlationRule.setContent(ruleUpdateRequest.getContent());
\r
421 correlationRule.setDescription(ruleUpdateRequest.getDescription());
\r
422 correlationRule.setEnabled(ruleUpdateRequest.getEnabled());
\r
423 correlationRule.setUpdateTime(new Date());
\r
424 correlationRule.setModifier(USER_NAME);
\r
425 return correlationRule;
\r