add alarm synchronization related operation 27/39327/1
authorFei Tang <tang.fei4@zte.com.cn>
Wed, 28 Mar 2018 00:25:04 +0000 (08:25 +0800)
committerFei Tang <tang.fei4@zte.com.cn>
Wed, 28 Mar 2018 00:25:04 +0000 (08:25 +0800)
Issue-ID: HOLMES-106

Change-Id: Idb47aa0726c0c8fc179c085381092e01d7a26fb3
Signed-off-by: Fei Tang <tang.fei4@zte.com.cn>
engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java [new file with mode: 0644]
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/EngineDActiveAppTest.java
engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java [new file with mode: 0644]
engine-d/src/test/java/org/onap/holmes/engine/dmaap/DMaaPAlarmPollingTest.java
engine-d/src/test/java/org/onap/holmes/engine/dmaap/SubscriberActionTest.java
engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java

diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java b/engine-d/src/main/java/org/onap/holmes/engine/db/AlarmInfoDao.java
new file mode 100644 (file)
index 0000000..c7094c3
--- /dev/null
@@ -0,0 +1,62 @@
+/**\r
+ * Copyright 2017 ZTE Corporation.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.onap.holmes.engine.db;\r
+\r
+import org.onap.holmes.common.api.entity.AlarmInfo;\r
+import org.onap.holmes.common.exception.AlarmInfoException;\r
+import org.onap.holmes.common.utils.AlarmInfoMapper;\r
+import org.skife.jdbi.v2.sqlobject.*;\r
+import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;\r
+\r
+import java.util.List;\r
+\r
+@RegisterMapper(AlarmInfoMapper.class)\r
+public abstract class AlarmInfoDao {\r
+\r
+    @GetGeneratedKeys\r
+    @SqlUpdate("INSERT INTO ALARM_INFO  (EVENTID,EVENTNAME,STARTEPOCHMICROSEC,SOURCEID,SOURCENAME,ALARMISCLEARED,ROOTFLAG,LASTEPOCHMICROSEC) VALUES (:eventId,:eventName,:startEpochMicroSec,:sourceId,:sourceName,:alarmIsCleared,:rootFlag,:lastEpochMicroSec)")\r
+    protected abstract String addAlarm(@BindBean AlarmInfo alarmInfo);\r
+\r
+    @SqlQuery("SELECT * FROM ALARM_INFO")\r
+    protected abstract List<AlarmInfo> queryAlarm();\r
+\r
+    @SqlUpdate("DELETE FROM ALARM_INFO WHERE ALARMISCLEARED=:alarmiscleared")\r
+    protected abstract int deleteAlarmByAlarmIsCleared(@Bind("alarmiscleared") int alarmIsCleared);\r
+\r
+    public AlarmInfo saveAlarm(AlarmInfo alarmInfo) throws AlarmInfoException {\r
+        try {\r
+            addAlarm(alarmInfo);\r
+            return alarmInfo;\r
+        } catch(Exception e) {\r
+            throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e);\r
+        }\r
+    }\r
+\r
+    public List<AlarmInfo> queryAllAlarm() throws AlarmInfoException {\r
+        try {\r
+            return queryAlarm();\r
+        } catch(Exception e) {\r
+            throw new AlarmInfoException("Can not access the database. Please contact the administrator for help.", e);\r
+        }\r
+    }\r
+\r
+    public void deleteClearedAlarm(AlarmInfo alarmInfo) {\r
+       int alarmIsCleared = alarmInfo.getAlarmIsCleared();\r
+        if(alarmIsCleared == 1) {\r
+           deleteAlarmByAlarmIsCleared(alarmIsCleared);\r
+       }\r
+    }\r
+}\r
index 935d2c8..1446b14 100644 (file)
  * limitations under the License.
  */
 package org.onap.holmes.engine.dmaap;
-import java.util.ArrayList;
-import java.util.List;
+
 import lombok.extern.slf4j.Slf4j;
+import org.onap.holmes.common.api.entity.AlarmInfo;
 import org.onap.holmes.common.api.stat.VesAlarm;
+import org.onap.holmes.common.exception.AlarmInfoException;
 import org.onap.holmes.common.exception.CorrelationException;
 import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.onap.holmes.engine.db.AlarmInfoDao;
 import org.onap.holmes.engine.manager.DroolsEngine;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 public class DMaaPAlarmPolling implements Runnable {
 
     private Subscriber subscriber;
     private DroolsEngine droolsEngine;
     private volatile boolean isAlive = true;
+    private AlarmInfoDao alarmInfoDao;
 
-    public DMaaPAlarmPolling(Subscriber subscriber, DroolsEngine droolsEngine) {
+
+    public DMaaPAlarmPolling(Subscriber subscriber, DroolsEngine droolsEngine, AlarmInfoDao alarmInfoDao) {
         this.subscriber = subscriber;
         this.droolsEngine = droolsEngine;
+        this.alarmInfoDao = alarmInfoDao;
     }
 
     public void run() {
@@ -39,7 +47,14 @@ public class DMaaPAlarmPolling implements Runnable {
             List<VesAlarm> vesAlarmList = new ArrayList<>();
             try {
                 vesAlarmList = subscriber.subscribe();
-                vesAlarmList.forEach(vesAlarm -> droolsEngine.putRaisedIntoStream(vesAlarm));
+                vesAlarmList.forEach(vesAlarm -> {
+                    try {
+                        alarmInfoDao.saveAlarm(getAlarmInfo(vesAlarm));
+                        droolsEngine.putRaisedIntoStream(vesAlarm);
+                    } catch(AlarmInfoException e) {
+                        log.error("Failed to save alarm to database", e);
+                    }
+                });
             } catch (CorrelationException e) {
                 log.error("Failed to process alarms. Sleep for 60 seconds to restart.", e);
                 try {
@@ -59,6 +74,18 @@ public class DMaaPAlarmPolling implements Runnable {
             }
         }
     }
+    private AlarmInfo getAlarmInfo(VesAlarm vesAlarm) {
+        AlarmInfo alarmInfo = new AlarmInfo();
+        alarmInfo.setAlarmIsCleared(vesAlarm.getAlarmIsCleared());
+        alarmInfo.setSourceName(vesAlarm.getSourceName());
+        alarmInfo.setSourceId(vesAlarm.getSourceId());
+        alarmInfo.setStartEpochMicroSec(vesAlarm.getStartEpochMicrosec());
+        alarmInfo.setLastEpochMicroSec(vesAlarm.getLastEpochMicrosec());
+        alarmInfo.setEventId(vesAlarm.getEventId());
+        alarmInfo.setEventName(vesAlarm.getEventName());
+        alarmInfo.setRootFlag(vesAlarm.getRootFlag());
+        return alarmInfo;
+    }
 
     public void stopTask() {
         isAlive = false;
index c2fa5b8..b02cbe4 100644 (file)
@@ -23,7 +23,9 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import lombok.extern.slf4j.Slf4j;
 import org.jvnet.hk2.annotations.Service;
+import org.onap.holmes.common.utils.DbDaoUtil;
 import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.onap.holmes.engine.db.AlarmInfoDao;
 import org.onap.holmes.engine.manager.DroolsEngine;
 
 @Service
@@ -32,12 +34,15 @@ public class SubscriberAction {
 
     @Inject
     private DroolsEngine droolsEngine;
+    @Inject
+    private DbDaoUtil daoUtil;
     private HashMap<String, DMaaPAlarmPolling> pollingTasks = new HashMap<>();
 
     public synchronized void addSubscriber(Subscriber subscriber) {
         String topic = subscriber.getTopic();
         if (topic != null && !pollingTasks.containsKey(topic)) {
-            DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine);
+            AlarmInfoDao alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class);
+            DMaaPAlarmPolling pollingTask = new DMaaPAlarmPolling(subscriber, droolsEngine, alarmInfoDao);
             Thread thread = new Thread(pollingTask);
             thread.start();
             pollingTasks.put(topic, pollingTask);
index d790ee7..3740f18 100644 (file)
@@ -21,11 +21,11 @@ import java.util.List;
 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.compiler.kie.builder.impl.InternalKieModule;\r
 import org.jvnet.hk2.annotations.Service;\r
+\r
 import org.kie.api.KieBase;\r
 import org.kie.api.KieServices;\r
 import org.kie.api.builder.KieBuilder;\r
@@ -45,8 +45,14 @@ import org.kie.api.runtime.KieContainer;
 import org.kie.api.runtime.KieSession;\r
 import org.kie.api.runtime.conf.ClockTypeOption;\r
 import org.kie.api.runtime.rule.FactHandle;\r
+\r
+import org.onap.holmes.common.api.entity.AlarmInfo;\r
+\r
 import org.onap.holmes.common.api.stat.VesAlarm;\r
 import org.onap.holmes.common.dmaap.DmaapService;\r
+import org.onap.holmes.common.exception.AlarmInfoException;\r
+import org.onap.holmes.common.utils.DbDaoUtil;\r
+import org.onap.holmes.engine.db.AlarmInfoDao;\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
@@ -62,6 +68,7 @@ public class DroolsEngine {
     @Inject\r
     private RuleMgtWrapper ruleMgtWrapper;\r
 \r
+\r
     private KieBase kieBase;\r
     private KieSession kieSession;\r
     private KieContainer kieContainer;\r
@@ -71,8 +78,14 @@ public class DroolsEngine {
     private KieResources resources;\r
     private KieRepository kieRepository;\r
 \r
+    private AlarmInfoDao alarmInfoDao;\r
+    @Inject\r
+    private DbDaoUtil daoUtil;\r
+\r
+\r
     @PostConstruct\r
     private void init() {\r
+        alarmInfoDao = daoUtil.getJdbiDaoByOnDemand(AlarmInfoDao.class);\r
         try {\r
             // start engine\r
             start();\r
@@ -82,13 +95,14 @@ public class DroolsEngine {
         }\r
     }\r
 \r
-    private void start() throws CorrelationException {\r
+    private void start() throws AlarmInfoException {\r
         log.info("Drools Engine Initialize Beginning...");\r
 \r
         initEngineParameter();\r
-        initDeployRule();\r
+        alarmSynchronization();\r
+//        initDeployRule();\r
 \r
-        log.info("Business Rule Engine Initialize Successfully.");\r
+        log.info("Alarm synchronization Successfully.");\r
     }\r
 \r
     public void stop() {\r
@@ -220,6 +234,7 @@ public class DroolsEngine {
         }\r
         this.kieSession.insert(raiseAlarm);\r
         this.kieSession.fireAllRules();\r
+\r
     }\r
 \r
     public List<String> queryAllPackage() {\r
@@ -261,4 +276,22 @@ public class DroolsEngine {
         kieBase.removeKiePackage(kiePackage.getName());\r
     }\r
 \r
+    public void alarmSynchronization() throws AlarmInfoException {\r
+        alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> alarmInfoDao.deleteClearedAlarm(alarmInfo));\r
+        alarmInfoDao.queryAllAlarm().forEach(alarmInfo -> putRaisedIntoStream(convertAlarmInfo2VesAlarm(alarmInfo)));\r
+    }\r
+\r
+    private VesAlarm convertAlarmInfo2VesAlarm(AlarmInfo alarmInfo) {\r
+        VesAlarm vesAlarm = new VesAlarm();\r
+        vesAlarm.setEventId(alarmInfo.getEventId());\r
+        vesAlarm.setEventName(alarmInfo.getEventName());\r
+        vesAlarm.setStartEpochMicrosec(alarmInfo.getStartEpochMicroSec());\r
+        vesAlarm.setSourceId(alarmInfo.getSourceId());\r
+        vesAlarm.setSourceName(alarmInfo.getSourceName());\r
+        vesAlarm.setRootFlag(alarmInfo.getRootFlag());\r
+        vesAlarm.setAlarmIsCleared(alarmInfo.getAlarmIsCleared());\r
+        vesAlarm.setLastEpochMicrosec(alarmInfo.getLastEpochMicroSec());\r
+        return vesAlarm;\r
+    }\r
+\r
 }\r
index 2c6cdb7..4f8aa2b 100644 (file)
  */\r
 package org.onap.holmes.engine;\r
 \r
+import org.easymock.EasyMock;\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.onap.holmes.common.config.MicroServiceConfig;\r
+import org.onap.msb.sdk.discovery.entity.MicroServiceInfo;\r
+import org.onap.msb.sdk.discovery.entity.Node;\r
+import org.powermock.api.easymock.PowerMock;\r
+import org.powermock.core.classloader.annotations.PrepareForTest;\r
+import org.powermock.modules.junit4.PowerMockRunner;\r
+import org.powermock.reflect.Whitebox;\r
+\r
+import static org.hamcrest.CoreMatchers.equalTo;\r
+import static org.hamcrest.CoreMatchers.is;\r
+import static org.junit.Assert.assertThat;\r
+\r
+@PrepareForTest(MicroServiceConfig.class)\r
+@RunWith(PowerMockRunner.class)\r
 public class EngineDActiveAppTest {\r
+\r
     public static void main(String[] args) throws Exception {\r
         String filePath = "C:\\engine-d.yml";\r
         new EngineDActiveApp().run(new String[]{"server", filePath});\r
     }\r
+\r
+    @Test\r
+    public void testCreateMicroServiceInfo() throws Exception {\r
+        EngineDActiveApp engineDActiveApp = new EngineDActiveApp();\r
+        PowerMock.mockStatic(MicroServiceConfig.class);\r
+        String[] serviceAddrInfo = new String[2];\r
+        serviceAddrInfo[0] = "10.74.216.82";\r
+        serviceAddrInfo[1] = "80";\r
+        EasyMock.expect(MicroServiceConfig.getMicroServiceIpAndPort()).andReturn(serviceAddrInfo);\r
+        EasyMock.expectLastCall();\r
+        PowerMock.replayAll();\r
+\r
+        MicroServiceInfo msinfo = Whitebox.invokeMethod(engineDActiveApp,"createMicroServiceInfo");\r
+\r
+        PowerMock.verifyAll();\r
+\r
+        assertThat(msinfo.getServiceName(), equalTo("holmes-engine-mgmt"));\r
+        assertThat(msinfo.getVersion(), equalTo("v1"));\r
+        assertThat(msinfo.getUrl(), equalTo("/api/holmes-engine-mgmt/v1"));\r
+        assertThat(msinfo.getProtocol(), equalTo("REST"));\r
+        assertThat(msinfo.getVisualRange(), equalTo("0|1"));\r
+        assertThat(msinfo.isEnable_ssl(), is(true));\r
+        assertThat(msinfo.getNodes().toArray(new Node[0])[0].getIp(), equalTo(serviceAddrInfo[0]));\r
+        assertThat(msinfo.getNodes().toArray(new Node[0])[0].getPort(), equalTo(serviceAddrInfo[1]));\r
+    }\r
 }\r
diff --git a/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java b/engine-d/src/test/java/org/onap/holmes/engine/db/AlarmInfoDaoTest.java
new file mode 100644 (file)
index 0000000..9945322
--- /dev/null
@@ -0,0 +1,54 @@
+/**\r
+ * Copyright 2017 ZTE Corporation.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *     http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package org.onap.holmes.engine.db;\r
+\r
+import org.easymock.EasyMock;\r
+import org.hamcrest.core.IsNot;\r
+import org.hamcrest.core.IsNull;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Rule;\r
+import org.junit.Test;\r
+import org.junit.rules.ExpectedException;\r
+import org.onap.holmes.common.api.entity.AlarmInfo;\r
+import org.onap.holmes.common.exception.AlarmInfoException;\r
+import org.powermock.api.easymock.PowerMock;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+public class AlarmInfoDaoTest {\r
+\r
+\r
+    private AlarmInfoDao alarmInfoDao;\r
+\r
+    @Before\r
+    public void setUp() {\r
+        alarmInfoDao  = PowerMock.createMock(AlarmInfoDao.class);\r
+    }\r
+\r
+    @Test\r
+    public void queryAllAlarm() throws Exception {\r
+\r
+        EasyMock.expect(alarmInfoDao.queryAllAlarm()).andReturn(new ArrayList<AlarmInfo>());\r
+        PowerMock.replayAll();\r
+\r
+        List<AlarmInfo> alarmInfoList = alarmInfoDao.queryAllAlarm();\r
+        PowerMock.verifyAll();\r
+        Assert.assertThat(alarmInfoList, IsNull.<List<AlarmInfo>>notNullValue());\r
+    }\r
+}\r
index f4804f3..896a384 100644 (file)
@@ -15,6 +15,7 @@
  */
 package org.onap.holmes.engine.dmaap;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.*;
 
@@ -22,25 +23,31 @@ import java.lang.reflect.Field;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.onap.holmes.common.api.entity.AlarmInfo;
+import org.onap.holmes.common.api.stat.VesAlarm;
 import org.onap.holmes.dsa.dmaappolling.Subscriber;
+import org.onap.holmes.engine.db.AlarmInfoDao;
 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;
+import org.powermock.reflect.Whitebox;
 
-@PrepareForTest({Subscriber.class, DroolsEngine.class})
+@PrepareForTest({Subscriber.class, DroolsEngine.class,DMaaPAlarmPolling.class})
 @RunWith(PowerMockRunner.class)
 public class DMaaPAlarmPollingTest {
 
     private DMaaPAlarmPolling dMaaPAlarmPolling;
     private Subscriber subscriber;
     private DroolsEngine droolsEngine;
+    private AlarmInfoDao alarmInfoDao;
 
     @Before
     public void setUp() {
         subscriber = PowerMock.createMock(Subscriber.class);
         droolsEngine = PowerMock.createMock(DroolsEngine.class);
-        dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine);
+        alarmInfoDao = PowerMock.createMock(AlarmInfoDao.class);
+        dMaaPAlarmPolling = new DMaaPAlarmPolling(subscriber, droolsEngine,alarmInfoDao);
         PowerMock.replayAll();
     }
 
@@ -52,4 +59,30 @@ public class DMaaPAlarmPollingTest {
         assertThat(field.get(dMaaPAlarmPolling), equalTo(false));
     }
 
+    @Test
+    public void testGetAlarmInfo() throws Exception {
+        VesAlarm vesAlarm = new VesAlarm();
+        vesAlarm.setAlarmIsCleared(1);
+        vesAlarm.setSourceName("sourceName");
+        vesAlarm.setSourceId("sourceId");
+        vesAlarm.setStartEpochMicrosec(1L);
+        vesAlarm.setLastEpochMicrosec(1L);
+        vesAlarm.setEventName("eventName");
+        vesAlarm.setEventId("eventId");
+        vesAlarm.setRootFlag(0);
+
+        PowerMock.replayAll();
+        AlarmInfo alarmInfo = Whitebox.invokeMethod(dMaaPAlarmPolling,"getAlarmInfo",vesAlarm);
+        PowerMock.verifyAll();
+
+        assertThat(alarmInfo.getAlarmIsCleared(), is(1));
+        assertThat(alarmInfo.getSourceName(), equalTo("sourceName"));
+        assertThat(alarmInfo.getSourceId(), equalTo("sourceId"));
+        assertThat(alarmInfo.getStartEpochMicroSec(), is(1L));
+        assertThat(alarmInfo.getLastEpochMicroSec(), is(1L));
+        assertThat(alarmInfo.getEventName(), equalTo("eventName"));
+        assertThat(alarmInfo.getEventId(), equalTo("eventId"));
+        assertThat(alarmInfo.getRootFlag(), is(0));
+    }
+
 }
\ No newline at end of file
index 7f5d56e..247962f 100644 (file)
@@ -30,9 +30,9 @@ public class SubscriberActionTest {
     public void setUp() {
         subscriberAction = new SubscriberAction();
         HashMap<String, DMaaPAlarmPolling> dMaaPAlarmPollingHashMap = new HashMap<>();
-        DMaaPAlarmPolling dMaaPAlarmPolling = new DMaaPAlarmPolling(null, null);
+        DMaaPAlarmPolling dMaaPAlarmPolling = new DMaaPAlarmPolling(null, null,null);
         dMaaPAlarmPollingHashMap.put("test", dMaaPAlarmPolling);
-        DMaaPAlarmPolling dMaaPAlarmPolling1 = new DMaaPAlarmPolling(null, null);
+        DMaaPAlarmPolling dMaaPAlarmPolling1 = new DMaaPAlarmPolling(null, null,null);
         dMaaPAlarmPollingHashMap.put("testTopic", dMaaPAlarmPolling1);
         Whitebox.setInternalState(subscriberAction, "pollingTasks", dMaaPAlarmPollingHashMap);
         PowerMock.replayAll();
index 3325efa..71ef172 100644 (file)
 \r
 package org.onap.holmes.engine.manager;\r
 \r
-import static org.easymock.EasyMock.anyInt;\r
-import static org.easymock.EasyMock.expect;\r
-\r
-import java.lang.reflect.Method;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Locale;\r
+import org.easymock.EasyMock;\r
 import org.junit.Before;\r
 import org.junit.Rule;\r
 import org.junit.Test;\r
@@ -35,15 +29,26 @@ import org.kie.api.builder.KieRepository;
 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.AlarmInfo;\r
 import org.onap.holmes.common.api.entity.CorrelationRule;\r
+import org.onap.holmes.common.api.stat.VesAlarm;\r
 import org.onap.holmes.common.constant.AlarmConst;\r
 import org.onap.holmes.common.exception.CorrelationException;\r
+import org.onap.holmes.common.utils.DbDaoUtil;\r
+import org.onap.holmes.engine.db.AlarmInfoDao;\r
+import org.onap.holmes.engine.request.DeployRuleRequest;\r
 import org.onap.holmes.engine.wrapper.RuleMgtWrapper;\r
 import org.powermock.api.easymock.PowerMock;\r
 import org.powermock.reflect.Whitebox;\r
 \r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Locale;\r
+\r
+import static org.hamcrest.CoreMatchers.is;\r
+import static org.hamcrest.core.IsEqual.equalTo;\r
+import static org.junit.Assert.assertThat;\r
+\r
 public class DroolsEngineTest {\r
 \r
     @Rule\r
@@ -60,9 +65,12 @@ public class DroolsEngineTest {
     private KieResources resources;\r
     private KieRepository kieRepository;\r
 \r
+    private AlarmInfoDao alarmInfoDaoMock;\r
 \r
     private DroolsEngine droolsEngine;\r
 \r
+    private DbDaoUtil dbDaoUtilMock;\r
+\r
     @Before\r
     public void setUp() throws Exception {\r
         droolsEngine = new DroolsEngine();\r
@@ -76,9 +84,9 @@ public class DroolsEngineTest {
         kieBase = kieContainer.getKieBase();\r
         kieSession = kieContainer.newKieSession();\r
 \r
-        ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);\r
+        alarmInfoDaoMock = PowerMock.createMock(AlarmInfoDao.class);\r
+        dbDaoUtilMock = PowerMock.createMock(DbDaoUtil.class);\r
 \r
-        Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);\r
 \r
         Whitebox.setInternalState(droolsEngine, "kieBase", kieBase);\r
         Whitebox.setInternalState(droolsEngine, "kieSession", kieSession);\r
@@ -89,6 +97,9 @@ public class DroolsEngineTest {
         Whitebox.setInternalState(droolsEngine, "resources", resources);\r
         Whitebox.setInternalState(droolsEngine, "kieRepository", kieRepository);\r
 \r
+        Whitebox.setInternalState(droolsEngine, "daoUtil", dbDaoUtilMock);\r
+        Whitebox.setInternalState(droolsEngine, "alarmInfoDao", alarmInfoDaoMock);\r
+\r
         PowerMock.resetAll();\r
     }\r
 \r
@@ -102,13 +113,12 @@ public class DroolsEngineTest {
         rule.setPackageName("org.onap.holmes");\r
         rules.add(rule);\r
 \r
-        expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
+//        expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);\r
+        List<AlarmInfo> alarmInfoList = new ArrayList<AlarmInfo>();\r
+        EasyMock.expect(dbDaoUtilMock.getJdbiDaoByOnDemand(AlarmInfoDao.class)).andReturn(alarmInfoDaoMock).anyTimes();\r
+        EasyMock.expect(alarmInfoDaoMock.queryAllAlarm()).andReturn(alarmInfoList).anyTimes();\r
         PowerMock.replayAll();\r
 \r
-        Method method = DroolsEngine.class.getDeclaredMethod("init");\r
-        method.setAccessible(true);\r
-        method.invoke(droolsEngine);\r
-\r
         PowerMock.verifyAll();\r
     }\r
 \r
@@ -198,4 +208,30 @@ public class DroolsEngineTest {
     public void stop() throws Exception {\r
         droolsEngine.stop();\r
     }\r
+\r
+    @Test\r
+    public void testConvertAlarmInfo2VesAlarm() throws Exception {\r
+        AlarmInfo alarmInfo = new AlarmInfo();\r
+        alarmInfo.setEventId("eventId");\r
+        alarmInfo.setEventName("eventName");\r
+        alarmInfo.setStartEpochMicroSec(1L);\r
+        alarmInfo.setLastEpochMicroSec(1L);\r
+        alarmInfo.setSourceId("sourceId");\r
+        alarmInfo.setSourceName("sourceName");\r
+        alarmInfo.setRootFlag(0);\r
+        alarmInfo.setAlarmIsCleared(1);\r
+\r
+        PowerMock.replayAll();\r
+        VesAlarm vesAlarm = Whitebox.invokeMethod(droolsEngine,"convertAlarmInfo2VesAlarm",alarmInfo);\r
+        PowerMock.verifyAll();\r
+\r
+        assertThat(vesAlarm.getAlarmIsCleared(), is(1));\r
+        assertThat(vesAlarm.getSourceName(), equalTo("sourceName"));\r
+        assertThat(vesAlarm.getSourceId(), equalTo("sourceId"));\r
+        assertThat(vesAlarm.getStartEpochMicrosec(), is(1L));\r
+        assertThat(vesAlarm.getLastEpochMicrosec(), is(1L));\r
+        assertThat(vesAlarm.getEventName(), equalTo("eventName"));\r
+        assertThat(vesAlarm.getEventId(), equalTo("eventId"));\r
+        assertThat(vesAlarm.getRootFlag(), is(0));\r
+    }\r
 }\r