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.onap.holmes.common.api.entity.CorrelationRule;
26 import org.onap.holmes.common.exception.CorrelationException;
27 import org.onap.holmes.rulemgt.bean.request.*;
28 import org.onap.holmes.rulemgt.bean.response.RuleAddAndUpdateResponse;
29 import org.onap.holmes.rulemgt.bean.response.RuleQueryListResponse;
30 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
31 import org.onap.holmes.rulemgt.db.CorrelationRuleQueryService;
32 import org.onap.holmes.rulemgt.db.CorrelationRuleService;
33 import org.onap.holmes.rulemgt.tools.EngineTools;
34 import org.powermock.api.easymock.PowerMock;
35 import org.powermock.reflect.Whitebox;
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.Date;
40 import java.util.List;
42 import static org.hamcrest.MatcherAssert.assertThat;
43 import static org.hamcrest.Matchers.equalTo;
44 import static org.hamcrest.Matchers.is;
46 public class RuleMgtWrapperTest {
49 public ExpectedException thrown = ExpectedException.none();
51 private RuleMgtWrapper ruleMgtWrapper;
53 private EngineWrapper engineWrapperMock;
55 private CorrelationRuleQueryService correlationRuleQueryDaoMock;
57 private CorrelationRuleService correlationRuleServiceMock;
59 private EngineTools engineToolsMock;
61 private static final String USER_NAME = "admin";
66 ruleMgtWrapper = new RuleMgtWrapper();
68 engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
69 correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryService.class);
70 correlationRuleServiceMock = PowerMock.createMock(CorrelationRuleService.class);
71 engineToolsMock = PowerMock.createMock(EngineTools.class);
73 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleService", correlationRuleServiceMock);
74 Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);
75 Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);
76 Whitebox.setInternalState(ruleMgtWrapper,"engineTools", engineToolsMock);
82 public void addCorrelationRule_name_is_null() throws Exception {
83 thrown.expect(CorrelationException.class);
84 thrown.expectMessage("The name of the rule can not be empty.");
86 ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",
87 "Mocked contents.", 0));
91 public void addCorrelationRule_request_null() throws Exception {
92 thrown.expect(CorrelationException.class);
93 thrown.expectMessage("The request object can not be empty!");
95 ruleMgtWrapper.addCorrelationRule(USER_NAME, null);
99 public void addCorrelationRule_name_is_empty() throws Exception {
100 thrown.expect(CorrelationException.class);
101 thrown.expectMessage("The name of the rule can not be empty.");
103 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",
104 "Mocked contents.", 0));
108 public void addCorrelationRule_content_is_empty() throws Exception {
109 thrown.expect(CorrelationException.class);
110 thrown.expectMessage("The contents of the rule can not be empty!");
112 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
117 public void addCorrelationRule_enabled_is_off_limit() throws Exception {
118 thrown.expect(CorrelationException.class);
119 thrown.expectMessage("Invalid rule status. Only 0 (disabled) and 1 (enabled) are allowed.");
121 ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
122 "Mocked contents.", 3));
126 public void addCorrelationRule_duplicated_rule() throws Exception {
128 final String ruleName = "Rule-001";
130 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
131 "Mocked contents.", 0);
132 CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);
134 thrown.expect(CorrelationException.class);
135 thrown.expectMessage("A rule with the same name already exists.");
137 EasyMock.expect(correlationRuleServiceMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);
138 PowerMock.replayAll();
140 ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
142 PowerMock.verifyAll();
146 public void addCorrelationRule_normal() throws Exception {
147 final String ruleName = "Rule-001";
149 RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
150 "Mocked contents.", 1);
151 ruleCreateRequest.setLoopControlName("loopName");
153 CorrelationRule correlationRuleRet = new CorrelationRule();
154 correlationRuleRet.setRid("rule_" + System.currentTimeMillis());
156 EasyMock.expect(correlationRuleServiceMock.queryRuleByRuleName(ruleName)).andReturn(null);
157 EasyMock.expect(engineToolsMock.getEngineWithLeastRules()).andReturn("127.0.0.1");
158 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
159 , EasyMock.anyObject(String.class)))
161 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
162 , EasyMock.anyObject(String.class)))
163 .andReturn("package-001");
164 EasyMock.expect(correlationRuleServiceMock.saveRule(EasyMock.anyObject(CorrelationRule.class)))
165 .andReturn(correlationRuleRet);
167 PowerMock.replayAll();
169 RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
171 PowerMock.verifyAll();
173 assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));
177 public void updateCorrelationRule_param_null() throws Exception {
178 thrown.expect(CorrelationException.class);
179 thrown.expectMessage("The request object can not be empty!");
181 ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);
185 public void updateCorrelationRule_normal() throws Exception {
186 CorrelationRule oldCorrelationRule = new CorrelationRule();
187 oldCorrelationRule.setRid("rule_1");
188 oldCorrelationRule.setName("name");
189 oldCorrelationRule.setDescription("des1");
190 oldCorrelationRule.setContent("content");
191 oldCorrelationRule.setPackageName("testName");
192 oldCorrelationRule.setEnabled(1);
193 oldCorrelationRule.setClosedControlLoopName("cl-name");
194 oldCorrelationRule.setEngineInstance("127.0.0.1");
195 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des2", "contetnt2", 1);
197 EasyMock.expect(correlationRuleServiceMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
198 EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2")).times(2);
199 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine("testName", "127.0.0.1")).andReturn(true);
200 correlationRuleServiceMock.updateRule(EasyMock.anyObject(CorrelationRule.class));
201 EasyMock.expectLastCall();
202 EasyMock.expect(engineWrapperMock.checkRuleFromEngine(EasyMock.anyObject(CorrelationCheckRule4Engine.class)
203 , EasyMock.anyObject(String.class)))
205 EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
206 , EasyMock.anyObject(String.class)))
207 .andReturn("packageName1");
208 PowerMock.replayAll();
210 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
212 PowerMock.verifyAll();
214 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
218 public void updateCorrelationRule_param_no_change() throws Exception {
219 CorrelationRule oldCorrelationRule = new CorrelationRule();
220 oldCorrelationRule.setRid("rule_1");
221 oldCorrelationRule.setName("name");
222 oldCorrelationRule.setDescription("des1");
223 oldCorrelationRule.setContent("content");
224 oldCorrelationRule.setPackageName("testName");
225 oldCorrelationRule.setEnabled(1);
226 oldCorrelationRule.setClosedControlLoopName("cl-name");
227 oldCorrelationRule.setEngineInstance("127.0.0.1");
228 RuleUpdateRequest ruleUpdateRequest = createRuleUpdateRequest("rule_1", "cl-name", "des1", "content", 1);
230 EasyMock.expect(correlationRuleServiceMock.queryRuleByRid("rule_1")).andReturn(oldCorrelationRule);
231 EasyMock.expect(engineToolsMock.getInstanceList()).andReturn(Arrays.asList("127.0.0.1", "127.0.0.2"));
233 PowerMock.replayAll();
235 ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
237 PowerMock.verifyAll();
239 assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
243 public void updateCorrelationRule_rule_not_exist() throws Exception {
244 thrown.expect(CorrelationException.class);
245 thrown.expectMessage("You're trying to update a rule which does not exist in the system.");
247 EasyMock.expect(correlationRuleServiceMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);
249 PowerMock.replayAll();
251 ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());
253 PowerMock.verifyAll();
257 public void deleteCorrelationRule_request_null() throws Exception {
258 thrown.expect(CorrelationException.class);
259 thrown.expectMessage("The request object can not be empty!");
261 ruleMgtWrapper.deleteCorrelationRule(null);
265 public void deleteCorrelationRule_rule_not_exit() throws Exception {
266 thrown.expect(CorrelationException.class);
267 thrown.expectMessage("You're trying to delete a rule which does not exist in the system.");
269 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
271 EasyMock.expect(correlationRuleServiceMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
274 PowerMock.replayAll();
276 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
278 PowerMock.verifyAll();
282 public void deleteCorrelationRule_normal() throws Exception {
283 RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
284 CorrelationRule correlationRule = new CorrelationRule();
285 correlationRule.setEnabled(1);
286 EasyMock.expect(correlationRuleServiceMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
287 .andReturn(correlationRule);
288 EasyMock.expect(engineWrapperMock.deleteRuleFromEngine(EasyMock.anyObject(String.class)
289 , EasyMock.anyObject(String.class))).andReturn(true);
290 correlationRuleServiceMock.deleteRule(EasyMock.anyObject(CorrelationRule.class));
291 EasyMock.expectLastCall();
292 PowerMock.replayAll();
294 ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
296 PowerMock.verifyAll();
300 public void getCorrelationRuleByCondition_data_format_exception() throws Exception {
301 thrown.expect(CorrelationException.class);
302 thrown.expectMessage("An error occurred while building the query SQL.");
304 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
305 RuleQueryCondition.class)))
306 .andThrow(new CorrelationException("An error occurred while building the query SQL."));
308 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
310 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
312 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
316 public void getCorrelationRuleByCondition_db_exception() throws Exception {
317 thrown.expect(CorrelationException.class);
318 thrown.expectMessage("Failed to query the rule.");
320 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
321 RuleQueryCondition.class)))
322 .andThrow(new CorrelationException("Failed to query the rule."));
324 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
326 ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
328 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
332 public void getCorrelationRuleByCondition_normal() throws Exception {
333 List<CorrelationRule> correlationRuleList = new ArrayList<CorrelationRule>(10);
334 for (int i = 0; i < 10; ++i) {
335 CorrelationRule correlationRule = new CorrelationRule();
336 correlationRule.setContent("content" + i);
337 correlationRule.setName("name" + i);
338 correlationRule.setRid("rule_" + i);
339 correlationRule.setEngineType("engineType" + (i % 2 + 1));
340 correlationRule.setEngineID("engineId" + i);
341 correlationRule.setCreateTime(new Date());
342 correlationRule.setCreator(USER_NAME);
343 correlationRule.setDescription("description" + i);
344 correlationRule.setPackageName("package" + i);
345 correlationRuleList.add(correlationRule);
348 EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
349 RuleQueryCondition.class))).andReturn(correlationRuleList);
351 PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
353 RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
355 PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
357 assertThat(response.getTotalCount(), is(10));
359 for (int i = 0; i < 10; ++i) {
360 assertThat(response.getCorrelationRules().get(i).getRuleId(),
361 equalTo(correlationRuleList.get(i).getRid()));
365 private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,
367 RuleCreateRequest rcr;
368 rcr = new RuleCreateRequest();
369 rcr.setRuleName(ruleName);
370 rcr.setDescription(description);
371 rcr.setContent(content);
372 rcr.setEnabled(enabled);
376 private RuleUpdateRequest createRuleUpdateRequest(String ruleId, String clName, String description,
377 String content, int enabled) {
378 RuleUpdateRequest ruleUpdateRequest = new RuleUpdateRequest();
379 ruleUpdateRequest.setRuleId(ruleId);
380 ruleUpdateRequest.setDescription(description);
381 ruleUpdateRequest.setContent(content);
382 ruleUpdateRequest.setEnabled(enabled);
383 ruleUpdateRequest.setLoopControlName(clName);
384 return ruleUpdateRequest;
387 private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {
388 RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();
389 ruleDeleteRequest.setRuleId(ruleId);
390 return ruleDeleteRequest;
393 private CorrelationRule convertCreateRequest2CorrelationRule(RuleCreateRequest ruleCreateRequest) {
394 CorrelationRule correlationRule = new CorrelationRule();
395 correlationRule.setContent(ruleCreateRequest.getContent());
396 correlationRule.setDescription(ruleCreateRequest.getDescription());
397 correlationRule.setName(ruleCreateRequest.getRuleName());
398 correlationRule.setCreator(USER_NAME);
399 correlationRule.setModifier(USER_NAME);
400 correlationRule.setEnabled(ruleCreateRequest.getEnabled());
401 return correlationRule;
404 private CorrelationRule convertUpdateRequest2CorrelationRule(RuleUpdateRequest ruleUpdateRequest) {
405 CorrelationRule correlationRule = new CorrelationRule();
406 correlationRule.setRid(ruleUpdateRequest.getRuleId());
407 correlationRule.setContent(ruleUpdateRequest.getContent());
408 correlationRule.setDescription(ruleUpdateRequest.getDescription());
409 correlationRule.setEnabled(ruleUpdateRequest.getEnabled());
410 correlationRule.setUpdateTime(new Date());
411 correlationRule.setModifier(USER_NAME);
412 return correlationRule;