Merge "Degrade oparent to Ver. 0.1.1"
authortang peng <tang.peng5@zte.com.cn>
Mon, 19 Mar 2018 02:27:42 +0000 (02:27 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 19 Mar 2018 02:27:42 +0000 (02:27 +0000)
engine-d-standalone/src/main/assembly/conf/engine-d.yml
engine-d/pom.xml
engine-d/src/main/java/org/onap/holmes/engine/EngineDActiveApp.java
engine-d/src/main/java/org/onap/holmes/engine/EngineDAppConfig.java
engine-d/src/main/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPolling.java
engine-d/src/main/java/org/onap/holmes/engine/dmaap/SubscriberAction.java
engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java
engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java [new file with mode: 0644]
engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java [new file with mode: 0644]
engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java
pom.xml

index c5a750a..7ed3c8e 100644 (file)
@@ -31,24 +31,30 @@ server:
 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
index c0cb28e..d1abda4 100644 (file)
@@ -30,7 +30,7 @@
     <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>
index 0e7acac..a0f46ce 100644 (file)
 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() {
index c42e9d9..c748f85 100644 (file)
@@ -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
index 862895b..935d2c8 100644 (file)
@@ -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;
index 12edc99..c2fa5b8 100644 (file)
@@ -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());
     }
index 2ecea5e..d790ee7 100644 (file)
  * 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
@@ -53,9 +61,15 @@ public class DroolsEngine {
     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
@@ -78,19 +92,20 @@ public class DroolsEngine {
     }\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
@@ -108,100 +123,142 @@ public class DroolsEngine {
     }\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
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 (file)
index 0000000..f4804f3
--- /dev/null
@@ -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 (file)
index 0000000..7f5d56e
--- /dev/null
@@ -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
index dd0b55d..3325efa 100644 (file)
@@ -23,15 +23,18 @@ import java.lang.reflect.Method;
 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
@@ -39,7 +42,6 @@ import org.onap.holmes.common.constant.AlarmConst;
 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
@@ -47,37 +49,45 @@ public class DroolsEngineTest {
     @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
@@ -87,7 +97,7 @@ public class DroolsEngineTest {
 \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
diff --git a/pom.xml b/pom.xml
index 68f7a01..560e17e 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                 <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>