diff options
author | Shiwei Tian <tian.shiwei@zte.com.cn> | 2017-09-12 19:05:37 +0800 |
---|---|---|
committer | Shiwei Tian <tian.shiwei@zte.com.cn> | 2017-09-12 19:05:37 +0800 |
commit | 3c2a7c4614ed0b925a7ac9d0c2ff4907c89e6b51 (patch) | |
tree | 9194657e159375a0693fd9d7214c6aa385a89a85 | |
parent | 3d341c75cc7781b18b40efb1c09c393c755bd58e (diff) |
modify drools engine
Issue-ID: HOLMES-47
Change-Id: I30272a90f776edb11c9a4e3d399025440a40c02f
Signed-off-by: Shiwei Tian <tian.shiwei@zte.com.cn>
-rw-r--r-- | engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java | 91 | ||||
-rw-r--r-- | engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java | 149 |
2 files changed, 11 insertions, 229 deletions
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 5d1f442..b23dde0 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 @@ -16,7 +16,6 @@ package org.onap.holmes.engine.manager;
-import java.io.Serializable;
import java.io.StringReader;
import java.util.HashSet;
import java.util.List;
@@ -24,17 +23,7 @@ import java.util.Locale; import java.util.Set;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Session;
import lombok.extern.slf4j.Slf4j;
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.command.ActiveMQObjectMessage;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
@@ -47,13 +36,10 @@ import org.drools.io.Resource; import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
-import org.glassfish.hk2.api.IterableProvider;
import org.jvnet.hk2.annotations.Service;
+import org.onap.holmes.common.api.stat.VesAlarm;
import org.onap.holmes.engine.request.DeployRuleRequest;
import org.onap.holmes.common.api.entity.CorrelationRule;
-import org.onap.holmes.common.api.stat.Alarm;
-import org.onap.holmes.common.config.MQConfig;
-import org.onap.holmes.common.constant.AlarmConst;
import org.onap.holmes.common.exception.CorrelationException;
import org.onap.holmes.common.utils.ExceptionUtil;
import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
@@ -69,34 +55,18 @@ public class DroolsEngine { private KnowledgeBase kbase;
private KnowledgeBaseConfiguration kconf;
private StatefulKnowledgeSession ksession;
- @Inject
- private IterableProvider<MQConfig> mqConfigProvider;
- private ConnectionFactory connectionFactory;
@PostConstruct
private void init() {
try {
- // 1. start engine
+ // start engine
start();
- // 2. start mq listener
- registerAlarmTopicListener();
} catch (Exception e) {
log.error("Failed to start the service: " + e.getMessage(), e);
throw ExceptionUtil.buildExceptionResponse("Failed to start the drools engine!");
}
}
- private void registerAlarmTopicListener() {
- String brokerURL =
- "tcp://" + mqConfigProvider.get().brokerIp + ":" + mqConfigProvider.get().brokerPort;
- connectionFactory = new ActiveMQConnectionFactory(mqConfigProvider.get().brokerUsername,
- mqConfigProvider.get().brokerPassword, brokerURL);
-
- AlarmMqMessageListener listener = new AlarmMqMessageListener();
- listener.receive();
- }
-
-
private void start() throws CorrelationException {
log.info("Drools Engine Initialize Beginning...");
@@ -219,7 +189,7 @@ public class DroolsEngine { }
}
- public void putRaisedIntoStream(Alarm raiseAlarm) {
+ public void putRaisedIntoStream(VesAlarm raiseAlarm) {
FactHandle factHandle = this.ksession.getFactHandle(raiseAlarm);
if (factHandle != null) {
this.ksession.retract(factHandle);
@@ -228,59 +198,4 @@ public class DroolsEngine { this.ksession.fireAllRules();
}
- class AlarmMqMessageListener implements MessageListener {
-
- private Connection connection = null;
- private Session session = null;
- private Destination destination = null;
- private MessageConsumer consumer = null;
-
- private void initialize() throws JMSException {
- connection = connectionFactory.createConnection();
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARM);
- consumer = session.createConsumer(destination);
- connection.start();
- }
-
- public void receive() {
- try {
- initialize();
- consumer.setMessageListener(this);
- } catch (JMSException e) {
- log.error("Failed to connect to the MQ service : " + e.getMessage(), e);
- try {
- close();
- } catch (JMSException e1) {
- log.error("Failed close connection " + e1.getMessage(), e1);
- }
- }
- }
-
- public void onMessage(Message arg0) {
- ActiveMQObjectMessage objectMessage = (ActiveMQObjectMessage) arg0;
- try {
- Serializable object = objectMessage.getObject();
-
- if (object instanceof Alarm) {
- Alarm alarm = (Alarm) object;
- putRaisedIntoStream(alarm);
- }
- } catch (JMSException e) {
- log.error("Failed get object : " + e.getMessage(), e);
- }
- }
-
- private void close() throws JMSException {
- if (consumer != null) {
- consumer.close();
- }
- if (session != null) {
- session.close();
- }
- if (connection != null) {
- connection.close();
- }
- }
- }
}
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 5487177..885b5e4 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 @@ -16,38 +16,25 @@ package org.onap.holmes.engine.manager;
-import static org.easymock.EasyMock.anyBoolean;
import static org.easymock.EasyMock.anyInt;
-import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.expect;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
-import javax.jms.Topic;
-import org.apache.activemq.command.ActiveMQObjectMessage;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.conf.EventProcessingOption;
import org.drools.runtime.StatefulKnowledgeSession;
-import org.easymock.EasyMock;
-import org.glassfish.hk2.api.IterableProvider;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.onap.holmes.common.api.stat.VesAlarm;
import org.onap.holmes.engine.request.DeployRuleRequest;
import org.onap.holmes.common.api.entity.CorrelationRule;
-import org.onap.holmes.common.api.stat.Alarm;
-import org.onap.holmes.common.config.MQConfig;
import org.onap.holmes.common.constant.AlarmConst;
import org.onap.holmes.common.exception.CorrelationException;
import org.onap.holmes.engine.wrapper.RuleMgtWrapper;
@@ -71,9 +58,6 @@ public class DroolsEngineTest { private StatefulKnowledgeSession ksession;
- private IterableProvider<MQConfig> mqConfigProvider;
-
- private ConnectionFactory connectionFactory;
private DroolsEngine droolsEngine;
@@ -88,32 +72,24 @@ public class DroolsEngineTest { this.ksession = kbase.newStatefulKnowledgeSession();
ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class);
- mqConfigProvider = PowerMock.createMock(IterableProvider.class);
- connectionFactory = PowerMock.createMock(ConnectionFactory.class);
Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper);
- Whitebox.setInternalState(droolsEngine, "mqConfigProvider", mqConfigProvider);
+
Whitebox.setInternalState(droolsEngine, "kconf", kconf);
Whitebox.setInternalState(droolsEngine, "kbase", kbase);
Whitebox.setInternalState(droolsEngine, "ksession", ksession);
- Whitebox.setInternalState(droolsEngine, "connectionFactory", connectionFactory);
PowerMock.resetAll();
}
@Test
public void init() throws Exception {
- MQConfig mqConfig = new MQConfig();
- mqConfig.brokerIp = "127.0.0.1";
- mqConfig.brokerPort = 4567;
- mqConfig.brokerUsername = "admin";
- mqConfig.brokerPassword = "admin";
+
List<CorrelationRule> rules = new ArrayList<CorrelationRule>();
CorrelationRule rule = new CorrelationRule();
rule.setContent("content");
rules.add(rule);
- expect(mqConfigProvider.get()).andReturn(mqConfig).anyTimes();
expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules);
PowerMock.replayAll();
@@ -189,128 +165,19 @@ public class DroolsEngineTest { droolsEngine.compileRule(content, locale);
}
-
@Test
public void putRaisedIntoStream_facthandle_is_null() {
- Alarm raiseAlarm = new Alarm();
+ VesAlarm raiseAlarm = new VesAlarm();
+ raiseAlarm.setVersion((long) 245235);
droolsEngine.putRaisedIntoStream(raiseAlarm);
droolsEngine.putRaisedIntoStream(raiseAlarm);
}
@Test
public void putRaisedIntoStream_factHandle_is_not_null() {
- droolsEngine.putRaisedIntoStream(new Alarm());
- }
-
-
- @Test
- public void listener_receive() throws JMSException {
- DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();
-
- Connection connection = PowerMock.createMock(Connection.class);
- Session session = PowerMock.createMock(Session.class);
- Destination destination = PowerMock.createMock(Topic.class);
- MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);
-
- Whitebox.setInternalState(listener, "connection", connection);
- Whitebox.setInternalState(listener, "session", session);
- Whitebox.setInternalState(listener, "destination", destination);
- Whitebox.setInternalState(listener, "consumer", consumer);
-
- PowerMock.reset();
-
- expect(connectionFactory.createConnection()).andReturn(connection);
- connection.start();
- expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);
- expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);
- expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);
- consumer.setMessageListener(listener);
-
- PowerMock.replayAll();
-
- listener.receive();
-
- PowerMock.verifyAll();
- }
-
- @Test
- public void listener_exception() throws JMSException {
- DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();
-
- Connection connection = PowerMock.createMock(Connection.class);
- Session session = PowerMock.createMock(Session.class);
- Destination destination = PowerMock.createMock(Topic.class);
- MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);
-
- Whitebox.setInternalState(listener, "connection", connection);
- Whitebox.setInternalState(listener, "session", session);
- Whitebox.setInternalState(listener, "destination", destination);
- Whitebox.setInternalState(listener, "consumer", consumer);
-
- PowerMock.reset();
-
- expect(connectionFactory.createConnection()).andReturn(connection);
- connection.start();
- expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);
- expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);
- expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);
- consumer.setMessageListener(listener);
- EasyMock.expectLastCall().andThrow(new JMSException(""));
-
- consumer.close();
- session.close();
- connection.close();
-
- PowerMock.replayAll();
-
- listener.receive();
-
- PowerMock.verifyAll();
- }
-
- @Test
- public void listener_close_exception() throws JMSException {
- DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();
-
- Connection connection = PowerMock.createMock(Connection.class);
- Session session = PowerMock.createMock(Session.class);
- Destination destination = PowerMock.createMock(Topic.class);
- MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class);
-
- Whitebox.setInternalState(listener, "connection", connection);
- Whitebox.setInternalState(listener, "session", session);
- Whitebox.setInternalState(listener, "destination", destination);
- Whitebox.setInternalState(listener, "consumer", consumer);
-
- PowerMock.reset();
-
- expect(connectionFactory.createConnection()).andReturn(connection);
- connection.start();
- expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session);
- expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination);
- expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer);
- consumer.setMessageListener(listener);
- EasyMock.expectLastCall().andThrow(new JMSException(""));
-
- consumer.close();
- EasyMock.expectLastCall().andThrow(new JMSException(""));
-
- PowerMock.replayAll();
-
- listener.receive();
-
- PowerMock.verifyAll();
- }
-
- @Test
- public void listener_on_message() throws JMSException {
- DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener();
- Alarm alarm = new Alarm();
- alarm.setAlarmKey("alarmKey");
- ActiveMQObjectMessage objectMessage = new ActiveMQObjectMessage();
- objectMessage.setObject(alarm);
-
- listener.onMessage(objectMessage);
+ VesAlarm raiseAlarm = new VesAlarm();
+ raiseAlarm.setVersion((long) 245235);
+ droolsEngine.putRaisedIntoStream(raiseAlarm);
}
@Test
|