diff options
Diffstat (limited to 'engine-d/src')
8 files changed, 283 insertions, 103 deletions
diff --git a/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java b/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java index 0e7acac..a0f46ce 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java @@ -16,16 +16,19 @@ package org.onap.holmes.engine; import io.dropwizard.setup.Environment; +import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import javax.servlet.DispatcherType; import lombok.extern.slf4j.Slf4j; import org.onap.holmes.common.config.MicroServiceConfig; import org.onap.holmes.common.dropwizard.ioc.bundle.IOCApplication; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.MSBRegisterUtil; +import org.onap.holmes.common.utils.transactionid.TransactionIdFilter; import org.onap.holmes.engine.dcae.DcaeConfigurationPolling; import org.onap.holmes.engine.resources.EngineResources; import org.onap.msb.sdk.discovery.entity.MicroServiceInfo; @@ -52,6 +55,8 @@ public class EngineDActiveApp extends IOCApplication<EngineDAppConfig> { service.scheduleAtFixedRate( new DcaeConfigurationPolling(MicroServiceConfig.getEnv(MicroServiceConfig.HOSTNAME)), 0, DcaeConfigurationPolling.POLLING_PERIOD, TimeUnit.MILLISECONDS); + environment.servlets().addFilter("logFilter",new TransactionIdFilter()).addMappingForUrlPatterns(EnumSet + .allOf(DispatcherType.class),true,"/*"); } private MicroServiceInfo createMicroServiceInfo() { diff --git a/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java b/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java index c42e9d9..c748f85 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java @@ -20,17 +20,14 @@ import io.dropwizard.Configuration; import io.dropwizard.db.DataSourceFactory; import javax.validation.Valid; import javax.validation.constraints.NotNull; -import org.hibernate.validator.constraints.NotEmpty; import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.config.MQConfig; @Service public class EngineDAppConfig extends Configuration { - @NotEmpty private String defaultName = "Correlation-Rule"; - @NotEmpty private String apidescription = "Holmes rule management rest API"; @JsonProperty diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java index 862895b..935d2c8 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java @@ -14,9 +14,6 @@ * limitations under the License. */ package org.onap.holmes.engine.dmaap; - -import static jdk.nashorn.internal.runtime.regexp.joni.Config.log; - import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java index 12edc99..c2fa5b8 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java @@ -35,19 +35,21 @@ public class SubscriberAction { private HashMap<String, DMaaPAlarmPolling> pollingTasks = new HashMap<>(); public synchronized void addSubscriber(Subscriber subscriber) { - if (!pollingTasks.containsKey(subscriber.getTopic())) { + String topic = subscriber.getTopic(); + if (topic != null && !pollingTasks.containsKey(topic)) { DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine); Thread thread = new Thread(pollingTask); thread.start(); - pollingTasks.put(subscriber.getTopic(), pollingTask); + pollingTasks.put(topic, pollingTask); log.info("Subscribe to topic: " + subscriber.getUrl()); } } public synchronized void removeSubscriber(Subscriber subscriber) { - if (pollingTasks.containsKey(subscriber.getTopic())) { - pollingTasks.get(subscriber.getTopic()).stopTask(); - pollingTasks.remove(subscriber.getTopic()); + String topic = subscriber.getTopic(); + if (topic != null && pollingTasks.containsKey(topic)) { + pollingTasks.get(topic).stopTask(); + pollingTasks.remove(topic); } log.info("Topic unsubscribed: " + subscriber.getUrl()); } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java index 2ecea5e..d790ee7 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java @@ -14,29 +14,37 @@ * limitations under the License.
*/
package org.onap.holmes.engine.manager;
-
-
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
import javax.inject.Inject;
import lombok.extern.slf4j.Slf4j;
-import org.drools.KnowledgeBase;
-import org.drools.KnowledgeBaseConfiguration;
-import org.drools.KnowledgeBaseFactory;
-import org.drools.builder.KnowledgeBuilder;
-import org.drools.builder.KnowledgeBuilderFactory;
-import org.drools.builder.ResourceType;
-import org.drools.conf.EventProcessingOption;
-import org.drools.definition.KnowledgePackage;
-import org.drools.io.Resource;
-import org.drools.io.ResourceFactory;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
+import org.drools.compiler.kie.builder.impl.InternalKieModule;
import org.jvnet.hk2.annotations.Service;
+import org.kie.api.KieBase;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.KieRepository;
+import org.kie.api.builder.Message;
+import org.kie.api.builder.Message.Level;
+import org.kie.api.builder.model.KieBaseModel;
+import org.kie.api.builder.model.KieModuleModel;
+import org.kie.api.builder.model.KieSessionModel;
+import org.kie.api.conf.EqualityBehaviorOption;
+import org.kie.api.conf.EventProcessingOption;
+import org.kie.api.definition.KiePackage;
+import org.kie.api.io.KieResources;
+import org.kie.api.io.ResourceType;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
+import org.kie.api.runtime.conf.ClockTypeOption;
+import org.kie.api.runtime.rule.FactHandle;
import org.onap.holmes.common.api.stat.VesAlarm;
import org.onap.holmes.common.dmaap.DmaapService;
import org.onap.holmes.engine.request.DeployRuleRequest;
@@ -53,9 +61,15 @@ public class DroolsEngine { private final Set<String> packageNames = new HashSet<String>();
@Inject
private RuleMgtWrapper ruleMgtWrapper;
- private KnowledgeBase kbase;
- private KnowledgeBaseConfiguration kconf;
- private StatefulKnowledgeSession ksession;
+
+ private KieBase kieBase;
+ private KieSession kieSession;
+ private KieContainer kieContainer;
+ private KieFileSystem kfs;
+ private KieServices ks;
+ private KieBuilder kieBuilder;
+ private KieResources resources;
+ private KieRepository kieRepository;
@PostConstruct
private void init() {
@@ -78,19 +92,20 @@ public class DroolsEngine { }
public void stop() {
- this.ksession.dispose();
+ this.kieSession.dispose();
}
- private void initEngineParameter() {
- this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
-
- this.kconf.setOption(EventProcessingOption.STREAM);
+ public void initEngineParameter() {
+ this.ks = KieServices.Factory.get();
+ this.resources = ks.getResources();
+ this.kieRepository = ks.getRepository();
+ this.kfs = createKieFileSystemWithKProject(ks);
- this.kconf.setProperty("drools.assertBehaviour", "equality");
+ this.kieBuilder = ks.newKieBuilder(kfs).buildAll();
+ this.kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());
- this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);
-
- this.ksession = kbase.newStatefulKnowledgeSession();
+ this.kieBase = kieContainer.getKieBase();
+ this.kieSession = kieContainer.newKieSession();
}
private void initDeployRule() throws CorrelationException {
@@ -108,100 +123,142 @@ public class DroolsEngine { }
private void deployRuleFromDB(String ruleContent) throws CorrelationException {
+ avoidDeployBug();
StringReader reader = new StringReader(ruleContent);
- Resource res = ResourceFactory.newReaderResource(reader);
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-
- kbuilder.add(res, ResourceType.DRL);
-
+ kfs.write("src/main/resources/rules/rule.drl",
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();
try {
-
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());
} catch (Exception e) {
throw new CorrelationException(e.getMessage(), e);
}
- ksession.fireAllRules();
+ kieSession.fireAllRules();
}
public synchronized String deployRule(DeployRuleRequest rule, Locale locale)
throws CorrelationException {
+ avoidDeployBug();
StringReader reader = new StringReader(rule.getContent());
- Resource res = ResourceFactory.newReaderResource(reader);
-
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-
- kbuilder.add(res, ResourceType.DRL);
+ kfs.write("src/main/resources/rules/rule.drl",
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();
- judgeRuleContent(locale, kbuilder, true);
+ judgeRuleContent(locale, kieBuilder, true);
- String packageName = kbuilder.getKnowledgePackages().iterator().next().getName();
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();;
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();
try {
- packageNames.add(packageName);
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());
} catch (Exception e) {
throw new CorrelationException("Failed to deploy the rule.", e);
}
-
- ksession.fireAllRules();
+ packageNames.add(packageName);
+ kieSession.fireAllRules();
return packageName;
}
public synchronized void undeployRule(String packageName, Locale locale)
throws CorrelationException {
-
- KnowledgePackage pkg = kbase.getKnowledgePackage(packageName);
-
- if (null == pkg) {
+ KiePackage kiePackage = kieBase.getKiePackage(packageName);
+ if (null == kiePackage) {
throw new CorrelationException("The rule " + packageName + " does not exist!");
}
-
try {
- kbase.removeKnowledgePackage(pkg.getName());
+ kieBase.removeKiePackage(kiePackage.getName());
} catch (Exception e) {
throw new CorrelationException("Failed to delete the rule: " + packageName, e);
}
- packageNames.remove(pkg.getName());
+ packageNames.remove(kiePackage.getName());
}
public void compileRule(String content, Locale locale)
throws CorrelationException {
StringReader reader = new StringReader(content);
- Resource res = ResourceFactory.newReaderResource(reader);
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kfs.write("src/main/resources/rules/rule.drl",
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));
- kbuilder.add(res, ResourceType.DRL);
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();
- judgeRuleContent(locale, kbuilder, false);
+ judgeRuleContent(locale, kieBuilder, false);
}
- private void judgeRuleContent(Locale locale, KnowledgeBuilder kbuilder, boolean judgePackageName)
+ private void judgeRuleContent(Locale locale, KieBuilder kbuilder, boolean judgePackageName)
throws CorrelationException {
- if (kbuilder.hasErrors()) {
- String errorMsg = "There are errors in the rule: " + kbuilder.getErrors().toString();
+ if (kbuilder.getResults().hasMessages(Message.Level.ERROR)) {
+ String errorMsg = "There are errors in the rule: " + kbuilder.getResults()
+ .getMessages(Level.ERROR).toString();
log.error(errorMsg);
throw new CorrelationException(errorMsg);
}
+ InternalKieModule internalKieModule = null;
+ try {
+ internalKieModule = (InternalKieModule) kbuilder.getKieModule();
+ } catch (Exception e) {
+ throw new CorrelationException("There are errors in the rule!" + e.getMessage(), e);
+ }
+ if (internalKieModule == null) {
+ throw new CorrelationException("There are errors in the rule!");
+ }
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();
- String packageName = kbuilder.getKnowledgePackages().iterator().next().getName();
-
- if (packageNames.contains(packageName) && judgePackageName) {
+ if (queryAllPackage().contains(packageName) && judgePackageName) {
throw new CorrelationException("The rule " + packageName + " already exists in the drools engine.");
}
}
public void putRaisedIntoStream(VesAlarm raiseAlarm) {
- FactHandle factHandle = this.ksession.getFactHandle(raiseAlarm);
+ FactHandle factHandle = this.kieSession.getFactHandle(raiseAlarm);
if (factHandle != null) {
- Object obj = this.ksession.getObject(factHandle);
+ Object obj = this.kieSession.getObject(factHandle);
if (obj != null && obj instanceof VesAlarm) {
raiseAlarm.setRootFlag(((VesAlarm) obj).getRootFlag());
}
- this.ksession.retract(factHandle);
+ this.kieSession.delete(factHandle);
}
- this.ksession.insert(raiseAlarm);
- this.ksession.fireAllRules();
+ this.kieSession.insert(raiseAlarm);
+ this.kieSession.fireAllRules();
+ }
+
+ public List<String> queryAllPackage() {
+ List<KiePackage> kiePackages = (List<KiePackage>)kieBase.getKiePackages();
+ List<String> list = new ArrayList<>();
+ for(KiePackage kiePackage : kiePackages) {
+ list.add(kiePackage.getName());
+ }
+ return list;
+ }
+
+ private KieFileSystem createKieFileSystemWithKProject(KieServices ks) {
+ KieModuleModel kieModuleModel = ks.newKieModuleModel();
+ KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("KBase")
+ .addPackage("rules")
+ .setDefault(true)
+ .setEqualsBehavior(EqualityBehaviorOption.EQUALITY)
+ .setEventProcessingMode(EventProcessingOption.STREAM);
+ KieSessionModel kieSessionModel = kieBaseModel.newKieSessionModel("KSession")
+ .setDefault( true )
+ .setType( KieSessionModel.KieSessionType.STATEFUL )
+ .setClockType( ClockTypeOption.get("realtime") );
+ KieFileSystem kfs = ks.newKieFileSystem();
+ kfs.writeKModuleXML(kieModuleModel.toXML());
+ return kfs;
+ }
+
+ private void avoidDeployBug() {
+ String tmp = Math.random() + "";
+ String rule = "package justInOrderToAvoidDeployBug" + tmp.substring(2);
+ kfs.write("src/main/resources/rules/rule.drl", rule);
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();
+ kieRepository.addKieModule(internalKieModule);
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());
+
+ KiePackage kiePackage = kieBase.getKiePackage(packageName);
+ kieBase.removeKiePackage(kiePackage.getName());
}
}
diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java new file mode 100644 index 0000000..f4804f3 --- /dev/null +++ b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java @@ -0,0 +1,55 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.holmes.engine.dmaap; + +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.Assert.*; + +import java.lang.reflect.Field; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.holmes.dsa.dmaappolling.Subscriber; +import org.onap.holmes.engine.manager.DroolsEngine; +import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@PrepareForTest({Subscriber.class, DroolsEngine.class}) +@RunWith(PowerMockRunner.class) +public class DMaaPAlarmPollingTest { + + private DMaaPAlarmPolling dMaaPAlarmPolling; + private Subscriber subscriber; + private DroolsEngine droolsEngine; + + @Before + public void setUp() { + subscriber = PowerMock.createMock(Subscriber.class); + droolsEngine = PowerMock.createMock(DroolsEngine.class); + dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine); + PowerMock.replayAll(); + } + + @Test + public void test_stop_task_ok() throws Exception { + dMaaPAlarmPolling.stopTask(); + Field field = DMaaPAlarmPolling.class.getDeclaredField("isAlive"); + field.setAccessible(true); + assertThat(field.get(dMaaPAlarmPolling), equalTo(false)); + } + +}
\ No newline at end of file diff --git a/engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java new file mode 100644 index 0000000..7f5d56e --- /dev/null +++ b/engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.holmes.engine.dmaap; + +import java.util.HashMap; +import org.junit.Before; +import org.junit.Test; +import org.onap.holmes.dsa.dmaappolling.Subscriber; +import org.powermock.api.easymock.PowerMock; +import org.powermock.reflect.Whitebox; + +public class SubscriberActionTest { + + private SubscriberAction subscriberAction; + + @Before + public void setUp() { + subscriberAction = new SubscriberAction(); + HashMap<String, DMaaPAlarmPolling> dMaaPAlarmPollingHashMap = new HashMap<>(); + DMaaPAlarmPolling dMaaPAlarmPolling = new DMaaPAlarmPolling(null, null); + dMaaPAlarmPollingHashMap.put("test", dMaaPAlarmPolling); + DMaaPAlarmPolling dMaaPAlarmPolling1 = new DMaaPAlarmPolling(null, null); + dMaaPAlarmPollingHashMap.put("testTopic", dMaaPAlarmPolling1); + Whitebox.setInternalState(subscriberAction, "pollingTasks", dMaaPAlarmPollingHashMap); + PowerMock.replayAll(); + } + + @Test + public void removeSubscriber() throws Exception { + Subscriber subscriber = PowerMock.createMock(Subscriber.class); + PowerMock.expectPrivate(subscriber, "getTopic").andReturn("testTopic"); + PowerMock.expectPrivate(subscriber, "getUrl").andReturn("https"); + PowerMock.replayAll(); + subscriberAction.removeSubscriber(subscriber); + PowerMock.verifyAll(); + } + + @Test + public void stopPollingTasks() throws Exception { + subscriberAction.stopPollingTasks(); + PowerMock.verifyAll(); + } + +}
\ No newline at end of file diff --git a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java index dd0b55d..3325efa 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java @@ -23,15 +23,18 @@ import java.lang.reflect.Method; import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
-import org.drools.KnowledgeBase;
-import org.drools.KnowledgeBaseConfiguration;
-import org.drools.KnowledgeBaseFactory;
-import org.drools.conf.EventProcessingOption;
-import org.drools.runtime.StatefulKnowledgeSession;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.kie.api.KieBase;
+import org.kie.api.KieServices;
+import org.kie.api.builder.KieBuilder;
+import org.kie.api.builder.KieFileSystem;
+import org.kie.api.builder.KieRepository;
+import org.kie.api.io.KieResources;
+import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.KieSession;
import org.onap.holmes.common.api.stat.VesAlarm;
import org.onap.holmes.engine.request.DeployRuleRequest;
import org.onap.holmes.common.api.entity.CorrelationRule;
@@ -39,7 +42,6 @@ import org.onap.holmes.common.constant.AlarmConst; import org.onap.holmes.common.exception.CorrelationException;
import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
import org.powermock.api.easymock.PowerMock;
-import org.powermock.modules.junit4.rule.PowerMockRule;
import org.powermock.reflect.Whitebox;
public class DroolsEngineTest {
@@ -47,37 +49,45 @@ public class DroolsEngineTest { @Rule
public ExpectedException thrown = ExpectedException.none();
- @Rule
- public PowerMockRule powerMockRule = new PowerMockRule();
-
private RuleMgtWrapper ruleMgtWrapper;
- private KnowledgeBase kbase;
-
- private KnowledgeBaseConfiguration kconf;
-
- private StatefulKnowledgeSession ksession;
+ private KieBase kieBase;
+ private KieSession kieSession;
+ private KieContainer kieContainer;
+ private KieFileSystem kfs;
+ private KieServices ks;
+ private KieBuilder kieBuilder;
+ private KieResources resources;
+ private KieRepository kieRepository;
private DroolsEngine droolsEngine;
@Before
- public void setUp() {
+ public void setUp() throws Exception {
droolsEngine = new DroolsEngine();
- this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
- this.kconf.setOption(EventProcessingOption.STREAM);
- this.kconf.setProperty("drools.assertBehaviour", "equality");
- this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);
- this.ksession = kbase.newStatefulKnowledgeSession();
+ ks = KieServices.Factory.get();
+ resources = ks.getResources();
+ kieRepository = ks.getRepository();
+ kfs = Whitebox.invokeMethod(droolsEngine, "createKieFileSystemWithKProject", ks);
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();
+ kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());
+ kieBase = kieContainer.getKieBase();
+ kieSession = kieContainer.newKieSession();
ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);
Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);
- Whitebox.setInternalState(droolsEngine, "kconf", kconf);
- Whitebox.setInternalState(droolsEngine, "kbase", kbase);
- Whitebox.setInternalState(droolsEngine, "ksession", ksession);
+ Whitebox.setInternalState(droolsEngine, "kieBase", kieBase);
+ Whitebox.setInternalState(droolsEngine, "kieSession", kieSession);
+ Whitebox.setInternalState(droolsEngine, "kieContainer", kieContainer);
+ Whitebox.setInternalState(droolsEngine, "kfs", kfs);
+ Whitebox.setInternalState(droolsEngine, "ks", ks);
+ Whitebox.setInternalState(droolsEngine, "kieBuilder", kieBuilder);
+ Whitebox.setInternalState(droolsEngine, "resources", resources);
+ Whitebox.setInternalState(droolsEngine, "kieRepository", kieRepository);
PowerMock.resetAll();
}
@@ -87,7 +97,7 @@ public class DroolsEngineTest { List<CorrelationRule> rules = new ArrayList<CorrelationRule>();
CorrelationRule rule = new CorrelationRule();
- rule.setContent("content");
+ rule.setContent("package content");
rule.setClosedControlLoopName("test");
rule.setPackageName("org.onap.holmes");
rules.add(rule);
|