Migrate from DW to Springboot
[holmes/rule-management.git] / rulemgt / src / test / java / org / onap / holmes / rulemgt / RuleAllocatorTest.java
1 /**
2  * Copyright 2017-2021 ZTE Corporation.
3  * <p>
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  * <p>
8  * http://www.apache.org/licenses/LICENSE-2.0
9  * <p>
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;
18
19
20 import org.junit.After;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.onap.holmes.common.api.entity.CorrelationRule;
24 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
25 import org.onap.holmes.rulemgt.db.CorrelationRuleService;
26 import org.onap.holmes.rulemgt.tools.EngineTools;
27 import org.onap.holmes.rulemgt.wrapper.RuleMgtWrapper;
28 import org.onap.holmes.rulemgt.wrapper.RuleQueryWrapper;
29 import org.powermock.api.easymock.PowerMock;
30 import org.powermock.core.classloader.annotations.PrepareForTest;
31
32 import java.util.ArrayList;
33 import java.util.Calendar;
34 import java.util.List;
35 import java.util.stream.Collectors;
36
37 import static org.easymock.EasyMock.*;
38 import static org.onap.holmes.rulemgt.RuleAllocator.ENABLE;
39
40 @PrepareForTest({RuleMgtWrapper.class, RuleQueryWrapper.class, EngineWrapper.class,
41         EngineTools.class})
42 public class RuleAllocatorTest {
43
44     private RuleMgtWrapper ruleMgtWrapperMock;
45     private RuleQueryWrapper ruleQueryWrapperMock;
46     private EngineWrapper engineWrapperMock;
47     private EngineTools engineToolsMock;
48     private CorrelationRuleService correlationRuleServiceMock;
49
50     private List<CorrelationRule> rules;
51     private List<String> existingIps;
52
53     @Before
54     public void before() {
55         ruleMgtWrapperMock = PowerMock.createMock(RuleMgtWrapper.class);
56         ruleQueryWrapperMock = PowerMock.createMock(RuleQueryWrapper.class);
57         engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
58         engineToolsMock = PowerMock.createMock(EngineTools.class);
59         correlationRuleServiceMock = PowerMock.createMock(CorrelationRuleService.class);
60
61         rules = new ArrayList<>();
62         for (int i = 0; i < 20; ++i) {
63             CorrelationRule rule = new CorrelationRule();
64             rule.setRid("rid-" + i);
65             rule.setName("rule-" + i);
66             rule.setDescription("desc-" + i);
67             rule.setEnabled(1);
68             rule.setTemplateID((long) i);
69             rule.setEngineID("engine-" + i);
70             rule.setCreateTime(Calendar.getInstance().getTime());
71             rule.setUpdateTime(Calendar.getInstance().getTime());
72             rule.setPackageName("package-" + i);
73             rule.setClosedControlLoopName("CL-" + i);
74             rule.setEngineInstance("10.15.3." + (i % 10));
75             rules.add(rule);
76         }
77
78         existingIps = new ArrayList<>();
79         for (int i = 0; i < 10; ++i) {
80             existingIps.add("10.15.3." + i);
81         }
82     }
83
84     @After
85     public void after() {
86         PowerMock.resetAll();
87     }
88
89     @Test
90     public void allocateRuleTest_engine_scaled_out() throws Exception {
91
92         List<String> newEngineInstances = new ArrayList();
93         newEngineInstances.add("127.0.0.1");
94         newEngineInstances.add("10.23.0.72");
95
96         List<String> ipListFromMsb = new ArrayList();
97         ipListFromMsb.addAll(newEngineInstances);
98         ipListFromMsb.addAll(existingIps);
99
100         expect(engineToolsMock.getInstanceList()).andReturn(ipListFromMsb);
101         expect(engineToolsMock.getLegacyEngineInstances()).andReturn(existingIps);
102         expect(ruleQueryWrapperMock.queryRuleByEnable(ENABLE)).andReturn(rules.stream()
103                 .filter(r -> r.getEnabled() == ENABLE).collect(Collectors.toList()));
104         for (String ip : existingIps) {
105             expect(ruleQueryWrapperMock.queryRuleByEngineInstance(ip))
106                     .andReturn(rules.stream().filter(r -> r.getEngineInstance().equals(ip)).collect(Collectors.toList()));
107
108         }
109         expect(engineWrapperMock.deleteRuleFromEngine(anyObject(String.class),
110                 anyObject(String.class))).andReturn(true).anyTimes();
111         expect(ruleQueryWrapperMock.queryRuleByEngineInstance(anyObject(String.class)))
112                 .andReturn(new ArrayList<>()).times(2);
113
114         expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class),
115                 anyObject(String.class))).andReturn("").anyTimes();
116         correlationRuleServiceMock.updateRule(anyObject(CorrelationRule.class));
117         expectLastCall().anyTimes();
118
119         PowerMock.replayAll();
120
121         RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
122                 engineWrapperMock, engineToolsMock, correlationRuleServiceMock);
123         ruleAllocator.allocateRules();
124
125         PowerMock.verifyAll();
126
127     }
128
129     @Test
130     public void allocateRuleTest_engine_scaled_in() throws Exception {
131
132         List<String> ipListFromMsb = new ArrayList<>();
133         ipListFromMsb.addAll(existingIps);
134         ipListFromMsb.remove(0);
135
136         expect(engineToolsMock.getInstanceList()).andReturn(ipListFromMsb);
137         expect(engineToolsMock.getLegacyEngineInstances()).andReturn(existingIps);
138         for (String ip : existingIps) {
139             expect(ruleQueryWrapperMock.queryRuleByEngineInstance(anyObject(String.class)))
140                     .andReturn(rules.stream().filter(r -> r.getEngineInstance().equals(ip)).collect(Collectors.toList()));
141
142         }
143         expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class), anyString())).andReturn("anyId").times(2);
144         correlationRuleServiceMock.updateRule(anyObject(CorrelationRule.class));
145         expectLastCall().times(2);
146
147         PowerMock.replayAll();
148
149         RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
150                 engineWrapperMock, engineToolsMock, correlationRuleServiceMock);
151
152         ruleAllocator.allocateRules();
153
154         PowerMock.verifyAll();
155
156     }
157 }