/** * 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.common.producer; 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 javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session; import javax.jms.Topic; 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.Alarm; import org.onap.holmes.common.api.entity.CorrelationResult; import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.common.config.MQConfig; import org.powermock.api.easymock.PowerMock; import org.powermock.modules.junit4.rule.PowerMockRule; import org.powermock.reflect.Whitebox; public class MQProducerTest { @Rule public PowerMockRule powerMockRule = new PowerMockRule(); @Rule public ExpectedException thrown = ExpectedException.none(); private IterableProvider mqConfigProvider; private ConnectionFactory connectionFactory; private MQProducer mqProducer; @Before public void before() throws Exception { mqProducer = new MQProducer(); mqConfigProvider = PowerMock.createMock(IterableProvider.class); connectionFactory = PowerMock.createMock(ConnectionFactory.class); Whitebox.setInternalState(mqProducer, "mqConfigProvider", mqConfigProvider); Whitebox.setInternalState(mqProducer, "connectionFactory", connectionFactory); PowerMock.resetAll(); } @Test public void init() { MQConfig mqConfig = new MQConfig(); mqConfig.setBrokerIp("127.0.0.1"); mqConfig.setBrokerPort(61616); mqConfig.setBrokerPassword("admin"); mqConfig.setBrokerUsername("admin"); expect(mqConfigProvider.get()).andReturn(mqConfig).anyTimes(); PowerMock.replayAll(); mqProducer.init(); PowerMock.verifyAll(); } @Test public void sendAlarmMQTopicMsg() throws Exception { VesAlarm alarm = new VesAlarm(); Connection connection = PowerMock.createMock(Connection.class); Session session = PowerMock.createMock(Session.class); Destination destination = PowerMock.createMock(Topic.class); MessageProducer messageProducer = PowerMock.createMock(MessageProducer.class); ObjectMessage objMessage = PowerMock.createMock(ObjectMessage.class); 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.createProducer(anyObject(Destination.class))).andReturn(messageProducer); expect(session.createObjectMessage(anyObject(Alarm.class))).andReturn(objMessage); messageProducer.send(objMessage); session.commit(); connection.close(); PowerMock.replayAll(); mqProducer.sendAlarmMQTopicMsg(alarm); PowerMock.verifyAll(); } @Test public void sendAlarmMQTopicMsg_exception() throws Exception { thrown.expect(JMSException.class); VesAlarm alarm = new VesAlarm(); expect(connectionFactory.createConnection()).andThrow(new JMSException("")); PowerMock.replayAll(); mqProducer.sendAlarmMQTopicMsg(alarm); PowerMock.verifyAll(); } @Test public void sendCorrelationMQTopicMsg() throws Exception { Connection connection = PowerMock.createMock(Connection.class); Session session = PowerMock.createMock(Session.class); Destination destination = PowerMock.createMock(Topic.class); MessageProducer messageProducer = PowerMock.createMock(MessageProducer.class); ObjectMessage objMessage = PowerMock.createMock(ObjectMessage.class); 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.createProducer(anyObject(Destination.class))).andReturn(messageProducer); expect(session.createObjectMessage(anyObject(CorrelationResult.class))) .andReturn(objMessage); messageProducer.send(objMessage); session.commit(); connection.close(); PowerMock.replayAll(); Alarm parentAlarm = new Alarm(); Alarm childAlarm = new Alarm(); mqProducer.sendCorrelationMQTopicMsg("ruleId", 123L, parentAlarm, childAlarm); PowerMock.verifyAll(); } @Test public void sendCorrelationMQTopicMsg_exception() throws Exception { thrown.expect(JMSException.class); expect(connectionFactory.createConnection()).andThrow(new JMSException("")); PowerMock.replayAll(); Alarm parentAlarm = new Alarm(); Alarm childAlarm = new Alarm(); mqProducer.sendCorrelationMQTopicMsg("ruleId", 123L, parentAlarm, childAlarm); PowerMock.verifyAll(); } }