2 * Copyright 2017-2020 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.glassfish.hk2.api.ServiceLocator;
21 import org.junit.After;
22 import org.junit.Before;
23 import org.junit.Ignore;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.onap.holmes.common.api.entity.CorrelationRule;
27 import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
28 import org.onap.holmes.common.utils.DbDaoUtil;
29 import org.onap.holmes.rulemgt.bolt.enginebolt.EngineWrapper;
30 import org.onap.holmes.rulemgt.db.CorrelationRuleDao;
31 import org.onap.holmes.rulemgt.tools.EngineTools;
32 import org.onap.holmes.rulemgt.wrapper.RuleMgtWrapper;
33 import org.onap.holmes.rulemgt.wrapper.RuleQueryWrapper;
34 import org.powermock.api.easymock.PowerMock;
35 import org.powermock.core.classloader.annotations.PrepareForTest;
36 import org.powermock.modules.junit4.PowerMockRunner;
37 import org.powermock.reflect.Whitebox;
39 import java.util.ArrayList;
40 import java.util.Calendar;
41 import java.util.List;
42 import java.util.stream.Collectors;
44 import static org.easymock.EasyMock.*;
45 import static org.onap.holmes.rulemgt.RuleAllocator.ENABLE;
47 @RunWith(PowerMockRunner.class)
48 @PrepareForTest({ServiceLocator.class, RuleMgtWrapper.class, RuleQueryWrapper.class, EngineWrapper.class,
49 EngineTools.class, DbDaoUtil.class, ServiceLocatorHolder.class})
50 public class RuleAllocatorTest {
52 private RuleMgtWrapper ruleMgtWrapperMock;
53 private RuleQueryWrapper ruleQueryWrapperMock;
54 private EngineWrapper engineWrapperMock;
55 private EngineTools engineToolsMock;
56 private DbDaoUtil dbDaoUtilMock;
57 private CorrelationRuleDao correlationRuleDaoMock;
59 private List<CorrelationRule> rules;
60 private List<String> existingIps;
63 public void before() {
64 ruleMgtWrapperMock = PowerMock.createMock(RuleMgtWrapper.class);
65 ruleQueryWrapperMock = PowerMock.createMock(RuleQueryWrapper.class);
66 engineWrapperMock = PowerMock.createMock(EngineWrapper.class);
67 engineToolsMock = PowerMock.createMock(EngineTools.class);
68 dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);
69 correlationRuleDaoMock = PowerMock.createMock(CorrelationRuleDao.class);
71 rules = new ArrayList<>();
72 for (int i = 0; i < 20; ++i) {
73 CorrelationRule rule = new CorrelationRule();
74 rule.setRid("rid-" + i);
75 rule.setName("rule-" + i);
76 rule.setDescription("desc-" + i);
78 rule.setTemplateID((long) i);
79 rule.setEngineID("engine-" + i);
80 rule.setCreateTime(Calendar.getInstance().getTime());
81 rule.setUpdateTime(Calendar.getInstance().getTime());
82 rule.setPackageName("package-" + i);
83 rule.setClosedControlLoopName("CL-" + i);
84 rule.setEngineInstance("10.15.3." + (i % 10));
88 existingIps = new ArrayList<>();
89 for (int i = 0; i < 10; ++i) {
90 existingIps.add("10.15.3." + i);
100 public void allocateRuleTest_engine_scaled_out() throws Exception {
102 List<String> newEngineInstances = new ArrayList();
103 newEngineInstances.add("127.0.0.1");
104 newEngineInstances.add("10.23.0.72");
106 List<String> ipListFromMsb = new ArrayList();
107 ipListFromMsb.addAll(newEngineInstances);
108 ipListFromMsb.addAll(existingIps);
110 expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(correlationRuleDaoMock);
111 expect(engineToolsMock.getInstanceList()).andReturn(ipListFromMsb);
112 expect(engineToolsMock.getLegacyEngineInstances()).andReturn(existingIps);
113 expect(ruleQueryWrapperMock.queryRuleByEnable(ENABLE)).andReturn(rules.stream()
114 .filter(r -> r.getEnabled() == ENABLE).collect(Collectors.toList()));
115 for (String ip : existingIps) {
116 expect(ruleQueryWrapperMock.queryRuleByEngineInstance(ip))
117 .andReturn(rules.stream().filter(r -> r.getEngineInstance().equals(ip)).collect(Collectors.toList()));
120 expect(engineWrapperMock.deleteRuleFromEngine(anyObject(String.class),
121 anyObject(String.class))).andReturn(true).anyTimes();
122 expect(ruleQueryWrapperMock.queryRuleByEngineInstance(anyObject(String.class)))
123 .andReturn(new ArrayList<>()).times(2);
125 expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class),
126 anyObject(String.class))).andReturn("").anyTimes();
127 correlationRuleDaoMock.updateRule(anyObject(CorrelationRule.class));
128 expectLastCall().anyTimes();
130 PowerMock.replayAll();
132 RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
133 engineWrapperMock, engineToolsMock, dbDaoUtilMock);
134 ruleAllocator.allocateRules();
136 PowerMock.verifyAll();
141 public void allocateRuleTest_engine_scaled_in() throws Exception {
143 List<String> ipListFromMsb = new ArrayList<>();
144 ipListFromMsb.addAll(existingIps);
145 ipListFromMsb.remove(0);
147 expect(dbDaoUtilMock.getJdbiDaoByOnDemand(CorrelationRuleDao.class)).andReturn(correlationRuleDaoMock);
148 expect(engineToolsMock.getInstanceList()).andReturn(ipListFromMsb);
149 expect(engineToolsMock.getLegacyEngineInstances()).andReturn(existingIps);
150 for (String ip : existingIps) {
151 expect(ruleQueryWrapperMock.queryRuleByEngineInstance(anyObject(String.class)))
152 .andReturn(rules.stream().filter(r -> r.getEngineInstance().equals(ip)).collect(Collectors.toList()));
155 expect(ruleMgtWrapperMock.deployRule2Engine(anyObject(CorrelationRule.class), anyString())).andReturn("anyId").times(2);
156 correlationRuleDaoMock.updateRule(anyObject(CorrelationRule.class));
157 expectLastCall().times(2);
159 PowerMock.replayAll();
161 RuleAllocator ruleAllocator = new RuleAllocator(ruleMgtWrapperMock, ruleQueryWrapperMock,
162 engineWrapperMock, engineToolsMock, dbDaoUtilMock);
164 ruleAllocator.allocateRules();
166 PowerMock.verifyAll();