package hk.hku.cecid.ebms.spa.client.jms;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import hk.hku.cecid.ebms.pkg.EbxmlMessage;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author mhanda
*/
public class MessageListenerJMSClientTest {
private MessageListenerJMSClient instance;
private ConnectionFactory cf;
private Session session;
private Connection connection;
private Queue queue;
private MessageConsumer consumer;
public MessageListenerJMSClientTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() throws JMSException {
instance = spy(new MessageListenerJMSClient());
doReturn("vm://mdh?broker.persistent=false").when(instance).getConnectionUrl();
doReturn("testQueue").when(instance).getQueueName();
doReturn(null).when(instance).getUsername();
doReturn(null).when(instance).getPassword();
instance.init();
cf = new ActiveMQConnectionFactory("vm://mdh?broker.persistent=false");
connection = cf.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
queue = session.createQueue("testQueue");
}
@After
public void tearDown() throws JMSException {
consumer.close();
session.close();
connection.close();
}
/**
* Test of messageReceived method, of class JMSClient.
*
* @throws SOAPException
*/
@Test
public void testMessageReceived() throws SOAPException, JMSException {
// instance receive message
// now check the message sent to the queue by the instance
EbxmlMessage requestMessage = spy(new EbxmlMessage());
String messageBody = "This is a test message";
SOAPMessage inMsg = mock(SOAPMessage.class);
AttachmentPart inPart = mock(AttachmentPart.class);
doReturn(new ByteArrayInputStream(messageBody.getBytes())).when(inPart).getRawContent();
List<AttachmentPart> attachments = new ArrayList<AttachmentPart>();
attachments.add(inPart);
doReturn(attachments.iterator()).when(inMsg).getAttachments();
inMsg.addAttachmentPart(inPart);
doReturn(inMsg).when(requestMessage).getSOAPMessage();
//mock the headers here
doReturn("cpaid2").when(requestMessage).getCpaId();
doReturn("http://10.1.1.234:8080/corvus/httpd/ebms/inbound").when(requestMessage).getService();
doReturn("B_Send_to_A").when(requestMessage).getAction();
doReturn("convid").when(requestMessage).getConversationId();
doReturn("serviceType").when(requestMessage).getServiceType();
instance.messageReceived(requestMessage);
consumer = session.createConsumer(queue);
Message message = consumer.receive(100);
assertNotNull(message);
assertTrue(message instanceof TextMessage);
TextMessage textMessage = (TextMessage) message;
assertEquals(messageBody.length(), textMessage.getText().length());
assertEquals(messageBody, textMessage.getText());
assertEquals("cpaid2", textMessage.getStringProperty(MessageListenerJMSClient.MSG_PROPERTY_CPA_ID));
assertEquals("http://10.1.1.234:8080/corvus/httpd/ebms/inbound", textMessage.getStringProperty(MessageListenerJMSClient.MSG_PROPERTY_SERVICE));
assertEquals("B_Send_to_A", textMessage.getStringProperty(MessageListenerJMSClient.MSG_PROPERTY_ACTION));
assertEquals("convid", textMessage.getStringProperty(MessageListenerJMSClient.MSG_PROPERTY_CONV_ID));
assertEquals("serviceType", textMessage.getStringProperty(MessageListenerJMSClient.MSG_PROPERTY_SERVICE_TYPE));
}
}