logging:\r
\r
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.\r
- level: INFO\r
+ level: ALL\r
\r
# Logger-specific levels.\r
loggers:\r
\r
# Sets the level for 'com.example.app' to DEBUG.\r
- com.example: DEBUG\r
+ org.onap.holmes.engine: ALL\r
\r
appenders:\r
- type: console\r
- threshold: INFO\r
+ threshold: ALL\r
timeZone: UTC\r
- logFormat: "%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%c][%t] - %m%n"\r
+ logFormat: "%nopexception%logger\n|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}\n|%level\n|%message\n|[%mdc]\n|%rootException\n|%marker\n|%thread\n|%n \r\n"\r
- type: file\r
- threshold: INFO\r
- logFormat: "%d{yyyy-MM-dd HH:mm:ss SSS} %-5p [%c][%t] - %m%n"\r
- currentLogFilename: ../logs/holmes-engine-d.log\r
- archivedLogFilenamePattern: ../logs/zip/holmes-engine-d-%d{yyyy-MM-dd}.log.gz\r
+ threshold: ERROR\r
+ logFormat: "%nopexception%logger\n|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}\n|%level\n|%message\n|%X{InvocationID}\n|%rootException\n|%marker\n|%thread\n|%n \r\n"\r
+ currentLogFilename: /var/log/ONAP/holmes/engine-d-error.log\r
+ archivedLogFilenamePattern: /var/log/ONAP/holmes/zip/engine-d-error-%d{yyyy-MM-dd}.log.gz\r
+ archivedFileCount: 7\r
+ - type: file\r
+ threshold: DEBUG\r
+ logFormat: "%nopexception%logger\n|%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX,UTC}\n|%level\n|%message\n|%X{InvocationID}\n|%rootException\n|%marker\n|%thread\n|%n \r\n"\r
+ currentLogFilename: /var/log/ONAP/holmes/engine-d-debug.log\r
+ archivedLogFilenamePattern: /var/log/ONAP/holmes/zip/engine-d-debug-%d{yyyy-MM-dd}.log.gz\r
archivedFileCount: 7\r
\r
\r
<packaging>jar</packaging>
<properties>
- <drools.version>5.4.0.Final</drools.version>
+ <drools.version>6.5.0.Final</drools.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
- <version>2.6.2</version>
+ <version>2.7.0</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2.2</version>
</dependency>
-
<dependency>
<groupId>org.onap.msb.java-sdk</groupId>
<artifactId>msb-java-sdk</artifactId>
<groupId>ch.qos.logback</groupId>
<artifactId>logback</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ </exclusion>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>1.2.3</version>
+ </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>1.6.5</version>
<scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
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;
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() {
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
* 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;
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());
}
* limitations under the License.\r
*/\r
package org.onap.holmes.engine.manager;\r
-\r
-\r
import java.io.StringReader;\r
+import java.util.ArrayList;\r
import java.util.HashSet;\r
import java.util.List;\r
import java.util.Locale;\r
import java.util.Set;\r
import javax.annotation.PostConstruct;\r
+import javax.annotation.PreDestroy;\r
import javax.inject.Inject;\r
import lombok.extern.slf4j.Slf4j;\r
-import org.drools.KnowledgeBase;\r
-import org.drools.KnowledgeBaseConfiguration;\r
-import org.drools.KnowledgeBaseFactory;\r
-import org.drools.builder.KnowledgeBuilder;\r
-import org.drools.builder.KnowledgeBuilderFactory;\r
-import org.drools.builder.ResourceType;\r
-import org.drools.conf.EventProcessingOption;\r
-import org.drools.definition.KnowledgePackage;\r
-import org.drools.io.Resource;\r
-import org.drools.io.ResourceFactory;\r
-import org.drools.runtime.StatefulKnowledgeSession;\r
-import org.drools.runtime.rule.FactHandle;\r
+import org.drools.compiler.kie.builder.impl.InternalKieModule;\r
import org.jvnet.hk2.annotations.Service;\r
+import org.kie.api.KieBase;\r
+import org.kie.api.KieServices;\r
+import org.kie.api.builder.KieBuilder;\r
+import org.kie.api.builder.KieFileSystem;\r
+import org.kie.api.builder.KieRepository;\r
+import org.kie.api.builder.Message;\r
+import org.kie.api.builder.Message.Level;\r
+import org.kie.api.builder.model.KieBaseModel;\r
+import org.kie.api.builder.model.KieModuleModel;\r
+import org.kie.api.builder.model.KieSessionModel;\r
+import org.kie.api.conf.EqualityBehaviorOption;\r
+import org.kie.api.conf.EventProcessingOption;\r
+import org.kie.api.definition.KiePackage;\r
+import org.kie.api.io.KieResources;\r
+import org.kie.api.io.ResourceType;\r
+import org.kie.api.runtime.KieContainer;\r
+import org.kie.api.runtime.KieSession;\r
+import org.kie.api.runtime.conf.ClockTypeOption;\r
+import org.kie.api.runtime.rule.FactHandle;\r
import org.onap.holmes.common.api.stat.VesAlarm;\r
import org.onap.holmes.common.dmaap.DmaapService;\r
import org.onap.holmes.engine.request.DeployRuleRequest;\r
private final Set<String> packageNames = new HashSet<String>();\r
@Inject\r
private RuleMgtWrapper ruleMgtWrapper;\r
- private KnowledgeBase kbase;\r
- private KnowledgeBaseConfiguration kconf;\r
- private StatefulKnowledgeSession ksession;\r
+\r
+ private KieBase kieBase;\r
+ private KieSession kieSession;\r
+ private KieContainer kieContainer;\r
+ private KieFileSystem kfs;\r
+ private KieServices ks;\r
+ private KieBuilder kieBuilder;\r
+ private KieResources resources;\r
+ private KieRepository kieRepository;\r
\r
@PostConstruct\r
private void init() {\r
}\r
\r
public void stop() {\r
- this.ksession.dispose();\r
+ this.kieSession.dispose();\r
}\r
\r
- private void initEngineParameter() {\r
- this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();\r
-\r
- this.kconf.setOption(EventProcessingOption.STREAM);\r
+ public void initEngineParameter() {\r
+ this.ks = KieServices.Factory.get();\r
+ this.resources = ks.getResources();\r
+ this.kieRepository = ks.getRepository();\r
+ this.kfs = createKieFileSystemWithKProject(ks);\r
\r
- this.kconf.setProperty("drools.assertBehaviour", "equality");\r
+ this.kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
+ this.kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());\r
\r
- this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);\r
-\r
- this.ksession = kbase.newStatefulKnowledgeSession();\r
+ this.kieBase = kieContainer.getKieBase();\r
+ this.kieSession = kieContainer.newKieSession();\r
}\r
\r
private void initDeployRule() throws CorrelationException {\r
}\r
\r
private void deployRuleFromDB(String ruleContent) throws CorrelationException {\r
+ avoidDeployBug();\r
StringReader reader = new StringReader(ruleContent);\r
- Resource res = ResourceFactory.newReaderResource(reader);\r
-\r
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();\r
-\r
- kbuilder.add(res, ResourceType.DRL);\r
-\r
+ kfs.write("src/main/resources/rules/rule.drl",\r
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));\r
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
try {\r
-\r
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());\r
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();\r
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());\r
} catch (Exception e) {\r
throw new CorrelationException(e.getMessage(), e);\r
}\r
- ksession.fireAllRules();\r
+ kieSession.fireAllRules();\r
}\r
\r
public synchronized String deployRule(DeployRuleRequest rule, Locale locale)\r
throws CorrelationException {\r
+ avoidDeployBug();\r
StringReader reader = new StringReader(rule.getContent());\r
- Resource res = ResourceFactory.newReaderResource(reader);\r
-\r
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();\r
-\r
- kbuilder.add(res, ResourceType.DRL);\r
+ kfs.write("src/main/resources/rules/rule.drl",\r
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));\r
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
\r
- judgeRuleContent(locale, kbuilder, true);\r
+ judgeRuleContent(locale, kieBuilder, true);\r
\r
- String packageName = kbuilder.getKnowledgePackages().iterator().next().getName();\r
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();;\r
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();\r
try {\r
- packageNames.add(packageName);\r
- kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());\r
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());\r
} catch (Exception e) {\r
throw new CorrelationException("Failed to deploy the rule.", e);\r
}\r
-\r
- ksession.fireAllRules();\r
+ packageNames.add(packageName);\r
+ kieSession.fireAllRules();\r
return packageName;\r
}\r
\r
public synchronized void undeployRule(String packageName, Locale locale)\r
throws CorrelationException {\r
-\r
- KnowledgePackage pkg = kbase.getKnowledgePackage(packageName);\r
-\r
- if (null == pkg) {\r
+ KiePackage kiePackage = kieBase.getKiePackage(packageName);\r
+ if (null == kiePackage) {\r
throw new CorrelationException("The rule " + packageName + " does not exist!");\r
}\r
-\r
try {\r
- kbase.removeKnowledgePackage(pkg.getName());\r
+ kieBase.removeKiePackage(kiePackage.getName());\r
} catch (Exception e) {\r
throw new CorrelationException("Failed to delete the rule: " + packageName, e);\r
}\r
- packageNames.remove(pkg.getName());\r
+ packageNames.remove(kiePackage.getName());\r
}\r
\r
public void compileRule(String content, Locale locale)\r
throws CorrelationException {\r
StringReader reader = new StringReader(content);\r
- Resource res = ResourceFactory.newReaderResource(reader);\r
\r
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();\r
+ kfs.write("src/main/resources/rules/rule.drl",\r
+ this.resources.newReaderResource(reader,"UTF-8").setResourceType(ResourceType.DRL));\r
\r
- kbuilder.add(res, ResourceType.DRL);\r
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
\r
- judgeRuleContent(locale, kbuilder, false);\r
+ judgeRuleContent(locale, kieBuilder, false);\r
}\r
\r
- private void judgeRuleContent(Locale locale, KnowledgeBuilder kbuilder, boolean judgePackageName)\r
+ private void judgeRuleContent(Locale locale, KieBuilder kbuilder, boolean judgePackageName)\r
throws CorrelationException {\r
- if (kbuilder.hasErrors()) {\r
- String errorMsg = "There are errors in the rule: " + kbuilder.getErrors().toString();\r
+ if (kbuilder.getResults().hasMessages(Message.Level.ERROR)) {\r
+ String errorMsg = "There are errors in the rule: " + kbuilder.getResults()\r
+ .getMessages(Level.ERROR).toString();\r
log.error(errorMsg);\r
throw new CorrelationException(errorMsg);\r
}\r
+ InternalKieModule internalKieModule = null;\r
+ try {\r
+ internalKieModule = (InternalKieModule) kbuilder.getKieModule();\r
+ } catch (Exception e) {\r
+ throw new CorrelationException("There are errors in the rule!" + e.getMessage(), e);\r
+ }\r
+ if (internalKieModule == null) {\r
+ throw new CorrelationException("There are errors in the rule!");\r
+ }\r
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();\r
\r
- String packageName = kbuilder.getKnowledgePackages().iterator().next().getName();\r
-\r
- if (packageNames.contains(packageName) && judgePackageName) {\r
+ if (queryAllPackage().contains(packageName) && judgePackageName) {\r
throw new CorrelationException("The rule " + packageName + " already exists in the drools engine.");\r
}\r
}\r
\r
public void putRaisedIntoStream(VesAlarm raiseAlarm) {\r
- FactHandle factHandle = this.ksession.getFactHandle(raiseAlarm);\r
+ FactHandle factHandle = this.kieSession.getFactHandle(raiseAlarm);\r
if (factHandle != null) {\r
- Object obj = this.ksession.getObject(factHandle);\r
+ Object obj = this.kieSession.getObject(factHandle);\r
if (obj != null && obj instanceof VesAlarm) {\r
raiseAlarm.setRootFlag(((VesAlarm) obj).getRootFlag());\r
}\r
- this.ksession.retract(factHandle);\r
+ this.kieSession.delete(factHandle);\r
}\r
- this.ksession.insert(raiseAlarm);\r
- this.ksession.fireAllRules();\r
+ this.kieSession.insert(raiseAlarm);\r
+ this.kieSession.fireAllRules();\r
+ }\r
+\r
+ public List<String> queryAllPackage() {\r
+ List<KiePackage> kiePackages = (List<KiePackage>)kieBase.getKiePackages();\r
+ List<String> list = new ArrayList<>();\r
+ for(KiePackage kiePackage : kiePackages) {\r
+ list.add(kiePackage.getName());\r
+ }\r
+ return list;\r
+ }\r
+\r
+ private KieFileSystem createKieFileSystemWithKProject(KieServices ks) {\r
+ KieModuleModel kieModuleModel = ks.newKieModuleModel();\r
+ KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("KBase")\r
+ .addPackage("rules")\r
+ .setDefault(true)\r
+ .setEqualsBehavior(EqualityBehaviorOption.EQUALITY)\r
+ .setEventProcessingMode(EventProcessingOption.STREAM);\r
+ KieSessionModel kieSessionModel = kieBaseModel.newKieSessionModel("KSession")\r
+ .setDefault( true )\r
+ .setType( KieSessionModel.KieSessionType.STATEFUL )\r
+ .setClockType( ClockTypeOption.get("realtime") );\r
+ KieFileSystem kfs = ks.newKieFileSystem();\r
+ kfs.writeKModuleXML(kieModuleModel.toXML());\r
+ return kfs;\r
+ }\r
+\r
+ private void avoidDeployBug() {\r
+ String tmp = Math.random() + "";\r
+ String rule = "package justInOrderToAvoidDeployBug" + tmp.substring(2);\r
+ kfs.write("src/main/resources/rules/rule.drl", rule);\r
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
+ InternalKieModule internalKieModule = (InternalKieModule)kieBuilder.getKieModule();\r
+ String packageName = internalKieModule.getKnowledgePackagesForKieBase("KBase").iterator().next().getName();\r
+ kieRepository.addKieModule(internalKieModule);\r
+ kieContainer.updateToVersion(internalKieModule.getReleaseId());\r
+\r
+ KiePackage kiePackage = kieBase.getKiePackage(packageName);\r
+ kieBase.removeKiePackage(kiePackage.getName());\r
}\r
\r
}\r
--- /dev/null
+/**
+ * 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
--- /dev/null
+/*
+ * 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
import java.util.ArrayList;\r
import java.util.List;\r
import java.util.Locale;\r
-import org.drools.KnowledgeBase;\r
-import org.drools.KnowledgeBaseConfiguration;\r
-import org.drools.KnowledgeBaseFactory;\r
-import org.drools.conf.EventProcessingOption;\r
-import org.drools.runtime.StatefulKnowledgeSession;\r
import org.junit.Before;\r
import org.junit.Rule;\r
import org.junit.Test;\r
import org.junit.rules.ExpectedException;\r
+import org.kie.api.KieBase;\r
+import org.kie.api.KieServices;\r
+import org.kie.api.builder.KieBuilder;\r
+import org.kie.api.builder.KieFileSystem;\r
+import org.kie.api.builder.KieRepository;\r
+import org.kie.api.io.KieResources;\r
+import org.kie.api.runtime.KieContainer;\r
+import org.kie.api.runtime.KieSession;\r
import org.onap.holmes.common.api.stat.VesAlarm;\r
import org.onap.holmes.engine.request.DeployRuleRequest;\r
import org.onap.holmes.common.api.entity.CorrelationRule;\r
import org.onap.holmes.common.exception.CorrelationException;\r
import org.onap.holmes.engine.wrapper.RuleMgtWrapper;\r
import org.powermock.api.easymock.PowerMock;\r
-import org.powermock.modules.junit4.rule.PowerMockRule;\r
import org.powermock.reflect.Whitebox;\r
\r
public class DroolsEngineTest {\r
@Rule\r
public ExpectedException thrown = ExpectedException.none();\r
\r
- @Rule\r
- public PowerMockRule powerMockRule = new PowerMockRule();\r
-\r
private RuleMgtWrapper ruleMgtWrapper;\r
\r
- private KnowledgeBase kbase;\r
-\r
- private KnowledgeBaseConfiguration kconf;\r
-\r
- private StatefulKnowledgeSession ksession;\r
+ private KieBase kieBase;\r
+ private KieSession kieSession;\r
+ private KieContainer kieContainer;\r
+ private KieFileSystem kfs;\r
+ private KieServices ks;\r
+ private KieBuilder kieBuilder;\r
+ private KieResources resources;\r
+ private KieRepository kieRepository;\r
\r
\r
private DroolsEngine droolsEngine;\r
\r
@Before\r
- public void setUp() {\r
+ public void setUp() throws Exception {\r
droolsEngine = new DroolsEngine();\r
\r
- this.kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();\r
- this.kconf.setOption(EventProcessingOption.STREAM);\r
- this.kconf.setProperty("drools.assertBehaviour", "equality");\r
- this.kbase = KnowledgeBaseFactory.newKnowledgeBase("D-ENGINE", this.kconf);\r
- this.ksession = kbase.newStatefulKnowledgeSession();\r
+ ks = KieServices.Factory.get();\r
+ resources = ks.getResources();\r
+ kieRepository = ks.getRepository();\r
+ kfs = Whitebox.invokeMethod(droolsEngine, "createKieFileSystemWithKProject", ks);\r
+ kieBuilder = ks.newKieBuilder(kfs).buildAll();\r
+ kieContainer = ks.newKieContainer(kieRepository.getDefaultReleaseId());\r
+ kieBase = kieContainer.getKieBase();\r
+ kieSession = kieContainer.newKieSession();\r
\r
ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);\r
\r
Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);\r
\r
- Whitebox.setInternalState(droolsEngine, "kconf", kconf);\r
- Whitebox.setInternalState(droolsEngine, "kbase", kbase);\r
- Whitebox.setInternalState(droolsEngine, "ksession", ksession);\r
+ Whitebox.setInternalState(droolsEngine, "kieBase", kieBase);\r
+ Whitebox.setInternalState(droolsEngine, "kieSession", kieSession);\r
+ Whitebox.setInternalState(droolsEngine, "kieContainer", kieContainer);\r
+ Whitebox.setInternalState(droolsEngine, "kfs", kfs);\r
+ Whitebox.setInternalState(droolsEngine, "ks", ks);\r
+ Whitebox.setInternalState(droolsEngine, "kieBuilder", kieBuilder);\r
+ Whitebox.setInternalState(droolsEngine, "resources", resources);\r
+ Whitebox.setInternalState(droolsEngine, "kieRepository", kieRepository);\r
\r
PowerMock.resetAll();\r
}\r
\r
List<CorrelationRule> rules = new ArrayList<CorrelationRule>();\r
CorrelationRule rule = new CorrelationRule();\r
- rule.setContent("content");\r
+ rule.setContent("package content");\r
rule.setClosedControlLoopName("test");\r
rule.setPackageName("org.onap.holmes");\r
rules.add(rule);\r
<groupId>org.onap.msb.java-sdk</groupId>
<artifactId>msb-java-sdk</artifactId>
<version>1.1.0-SNAPSHOT</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.eclipsesource.jaxrs</groupId>
+ <artifactId>jersey-all</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.eclipsesource.jaxrs</groupId>
+ <artifactId>jersey-all</artifactId>
+ <version>2.8</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>1.7.1</version>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>