2 * Copyright 2017-2021 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;
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;
32 import java.util.ArrayList;
33 import java.util.Calendar;
34 import java.util.List;
35 import java.util.stream.Collectors;
37 import static org.easymock.EasyMock.*;
38 import static org.onap.holmes.rulemgt.RuleAllocator.ENABLE;
40 @PrepareForTest({RuleMgtWrapper.class, RuleQueryWrapper.class, EngineWrapper.class,
42 public class RuleAllocatorTest {
44 private RuleMgtWrapper ruleMgtWrapperMock;
45 private RuleQueryWrapper ruleQueryWrapperMock;
46 private EngineWrapper engineWrapperMock;
47 private EngineTools engineToolsMock;
48 private CorrelationRuleService correlationRuleServiceMock;
50 private List<CorrelationRule> rules;
51 private List<String> existingIps;
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);
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);
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));
78 existingIps = new ArrayList<>();
79 for (int i = 0; i < 10; ++i) {
80 existingIps.add("10.15.3." + i);
90 public void allocateRuleTest_engine_scaled_out() throws Exception {
92 List<String> newEngineInstances = new ArrayList();
93 newEngineInstances.add("127.0.0.1");
94 newEngineInstances.add("10.23.0.72");
96 List<String> ipListFromMsb = new ArrayList();
97 ipListFromMsb.addAll(newEngineInstances);
98 ipListFromMsb.addAll(existingIps);
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()));
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);
114 expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class),
115 anyObject(String.class))).andReturn("").anyTimes();
116 correlationRuleServiceMock.updateRule(anyObject(CorrelationRule.class));
117 expectLastCall().anyTimes();
119 PowerMock.replayAll();
121 RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
122 engineWrapperMock, engineToolsMock, correlationRuleServiceMock);
123 ruleAllocator.allocateRules();
125 PowerMock.verifyAll();
130 public void allocateRuleTest_engine_scaled_in() throws Exception {
132 List<String> ipListFromMsb = new ArrayList<>();
133 ipListFromMsb.addAll(existingIps);
134 ipListFromMsb.remove(0);
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()));
143 expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class), anyString())).andReturn("anyId").times(2);
144 correlationRuleServiceMock.updateRule(anyObject(CorrelationRule.class));
145 expectLastCall().times(2);
147 PowerMock.replayAll();
149 RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
150 engineWrapperMock, engineToolsMock, correlationRuleServiceMock);
152 ruleAllocator.allocateRules();
154 PowerMock.verifyAll();