Migrate from DW to Springboot
[holmes/rule-management.git] / rulemgt / src / test / java / org / onap / holmes / rulemgt / wrapper / RuleMgtWrapperTest.java
1 /**
2  * Copyright 2017 ZTE Corporation.
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.onap.holmes.rulemgt.wrapper;
18
19
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;
36
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.Date;
40 import java.util.List;
41
42 import static org.hamcrest.MatcherAssert.assertThat;
43 import static org.hamcrest.Matchers.equalTo;
44 import static org.hamcrest.Matchers.is;
45
46 public class RuleMgtWrapperTest {
47
48     @Rule
49     public ExpectedException thrown = ExpectedException.none();
50
51     private RuleMgtWrapper ruleMgtWrapper;
52
53     private EngineWrapper engineWrapperMock;
54
55     private CorrelationRuleQueryService correlationRuleQueryDaoMock;
56
57     private CorrelationRuleService correlationRuleServiceMock;
58
59     private EngineTools engineToolsMock;
60
61     private static final String USER_NAME = "admin";
62
63     @Before
64     public void setUp() {
65
66         ruleMgtWrapper = new RuleMgtWrapper();
67
68         engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
69         correlationRuleQueryDaoMock = PowerMock.createMock(CorrelationRuleQueryService.class);
70         correlationRuleServiceMock = PowerMock.createMock(CorrelationRuleService.class);
71         engineToolsMock = PowerMock.createMock(EngineTools.class);
72
73         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleService", correlationRuleServiceMock);
74         Whitebox.setInternalState(ruleMgtWrapper, "correlationRuleQueryDao", correlationRuleQueryDaoMock);
75         Whitebox.setInternalState(ruleMgtWrapper, "engineWarpper", engineWrapperMock);
76         Whitebox.setInternalState(ruleMgtWrapper,"engineTools", engineToolsMock);
77
78         PowerMock.resetAll();
79     }
80
81     @Test
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.");
85
86         ruleMgtWrapper.addCorrelationRule(USER_NAME, createRuleCreateRequest(null, "This is a rule for testing.",
87                 "Mocked contents.", 0));
88     }
89
90     @Test
91     public void addCorrelationRule_request_null() throws Exception {
92         thrown.expect(CorrelationException.class);
93         thrown.expectMessage("The request object can not be empty!");
94
95         ruleMgtWrapper.addCorrelationRule(USER_NAME, null);
96     }
97
98     @Test
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.");
102
103         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("", "This is a rule for testing.",
104                 "Mocked contents.", 0));
105     }
106
107     @Test
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!");
111
112         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
113                 "", 0));
114     }
115
116     @Test
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.");
120
121         ruleMgtWrapper.addCorrelationRule("admin", createRuleCreateRequest("test", "This is a rule for testing.",
122                 "Mocked contents.", 3));
123     }
124
125     @Test
126     public void addCorrelationRule_duplicated_rule() throws Exception {
127
128         final String ruleName = "Rule-001";
129
130         RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
131                 "Mocked contents.", 0);
132         CorrelationRule correlationRule = convertCreateRequest2CorrelationRule(ruleCreateRequest);
133
134         thrown.expect(CorrelationException.class);
135         thrown.expectMessage("A rule with the same name already exists.");
136
137         EasyMock.expect(correlationRuleServiceMock.queryRuleByRuleName(ruleName)).andReturn(correlationRule);
138         PowerMock.replayAll();
139
140         ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
141
142         PowerMock.verifyAll();
143     }
144
145     @Test
146     public void addCorrelationRule_normal() throws Exception {
147         final String ruleName = "Rule-001";
148
149         RuleCreateRequest ruleCreateRequest = createRuleCreateRequest(ruleName, "This is a rule for testing.",
150                 "Mocked contents.", 1);
151         ruleCreateRequest.setLoopControlName("loopName");
152
153         CorrelationRule correlationRuleRet = new CorrelationRule();
154         correlationRuleRet.setRid("rule_" + System.currentTimeMillis());
155
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)))
160                 .andReturn(true);
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);
166
167         PowerMock.replayAll();
168
169         RuleAddAndUpdateResponse response = ruleMgtWrapper.addCorrelationRule("admin", ruleCreateRequest);
170
171         PowerMock.verifyAll();
172
173         assertThat(response.getRuleId(), equalTo(correlationRuleRet.getRid()));
174     }
175
176     @Test
177     public void updateCorrelationRule_param_null() throws Exception {
178         thrown.expect(CorrelationException.class);
179         thrown.expectMessage("The request object can not be empty!");
180
181         ruleMgtWrapper.updateCorrelationRule(USER_NAME, null);
182     }
183
184     @Test
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);
196
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)))
204                 .andReturn(true);
205         EasyMock.expect(engineWrapperMock.deployEngine(EasyMock.anyObject(CorrelationDeployRule4Engine.class)
206                 , EasyMock.anyObject(String.class)))
207                 .andReturn("packageName1");
208         PowerMock.replayAll();
209
210         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
211
212         PowerMock.verifyAll();
213
214         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
215     }
216
217     @Test
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);
229
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"));
232
233         PowerMock.replayAll();
234
235         ruleMgtWrapper.updateCorrelationRule(USER_NAME, ruleUpdateRequest);
236
237         PowerMock.verifyAll();
238
239         assertThat(oldCorrelationRule.getRid(), equalTo(ruleUpdateRequest.getRuleId()));
240     }
241
242     @Test
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.");
246
247         EasyMock.expect(correlationRuleServiceMock.queryRuleByRid(EasyMock.anyObject(String.class))).andReturn(null);
248
249         PowerMock.replayAll();
250
251         ruleMgtWrapper.updateCorrelationRule(USER_NAME, new RuleUpdateRequest());
252
253         PowerMock.verifyAll();
254     }
255
256     @Test
257     public void deleteCorrelationRule_request_null() throws Exception {
258         thrown.expect(CorrelationException.class);
259         thrown.expectMessage("The request object can not be empty!");
260
261         ruleMgtWrapper.deleteCorrelationRule(null);
262     }
263
264     @Test
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.");
268
269         RuleDeleteRequest ruleDeleteRequest = createRuleDeleteRequest("rule_" + System.currentTimeMillis());
270
271         EasyMock.expect(correlationRuleServiceMock.queryRuleByRid(ruleDeleteRequest.getRuleId()))
272                 .andReturn(null);
273
274         PowerMock.replayAll();
275
276         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
277
278         PowerMock.verifyAll();
279     }
280
281     @Test
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();
293
294         ruleMgtWrapper.deleteCorrelationRule(ruleDeleteRequest);
295
296         PowerMock.verifyAll();
297     }
298
299     @Test
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.");
303
304         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
305                 RuleQueryCondition.class)))
306                 .andThrow(new CorrelationException("An error occurred while building the query SQL."));
307
308         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
309
310         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
311
312         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
313     }
314
315     @Test
316     public void getCorrelationRuleByCondition_db_exception() throws Exception {
317         thrown.expect(CorrelationException.class);
318         thrown.expectMessage("Failed to query the rule.");
319
320         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
321                 RuleQueryCondition.class)))
322                 .andThrow(new CorrelationException("Failed to query the rule."));
323
324         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
325
326         ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
327
328         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
329     }
330
331     @Test
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);
346         }
347
348         EasyMock.expect(correlationRuleQueryDaoMock.getCorrelationRulesByCondition(EasyMock.anyObject(
349                 RuleQueryCondition.class))).andReturn(correlationRuleList);
350
351         PowerMock.replay(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
352
353         RuleQueryListResponse response = ruleMgtWrapper.getCorrelationRuleByCondition(new RuleQueryCondition());
354
355         PowerMock.verify(correlationRuleQueryDaoMock, CorrelationRuleQueryService.class);
356
357         assertThat(response.getTotalCount(), is(10));
358
359         for (int i = 0; i < 10; ++i) {
360             assertThat(response.getCorrelationRules().get(i).getRuleId(),
361                     equalTo(correlationRuleList.get(i).getRid()));
362         }
363     }
364
365     private RuleCreateRequest createRuleCreateRequest(String ruleName, String description, String content,
366             int enabled) {
367         RuleCreateRequest rcr;
368         rcr = new RuleCreateRequest();
369         rcr.setRuleName(ruleName);
370         rcr.setDescription(description);
371         rcr.setContent(content);
372         rcr.setEnabled(enabled);
373         return rcr;
374     }
375
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;
385     }
386
387     private RuleDeleteRequest createRuleDeleteRequest(String ruleId) {
388         RuleDeleteRequest ruleDeleteRequest = new RuleDeleteRequest();
389         ruleDeleteRequest.setRuleId(ruleId);
390         return ruleDeleteRequest;
391     }
392
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;
402     }
403
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;
413     }
414 }