package org.marketcetera.client.jms;
import javax.jms.ConnectionFactory;
import org.junit.Test;
import org.marketcetera.client.MockServer;
import org.marketcetera.client.brokers.BrokerStatus;
import org.marketcetera.trade.TradeMessage;
import org.marketcetera.util.test.TestCaseBase;
import org.springframework.jms.core.JmsTemplate;
import quickfix.Message;
import static org.junit.Assert.*;
/**
* @author tlerios@marketcetera.com
* @since 1.0.0
* @version $Id: JmsManagerTest.java 16841 2014-02-20 19:59:04Z colin $
*/
/* $License$ */
public class JmsManagerTest
extends TestCaseBase
{
private static final String TEST_SEND_DEST=
"sender";
private static final String TEST_REPLY_DEST=
"reply";
private static final String TEST_REPLY_IGNORED=
"replyIgnored";
private static final String TEST_Q_EXT=
"-q";
private static final String TEST_TMX_EXT=
"-tmx";
private static final String TEST_OEX_EXT=
"-oex";
private static final String TEST_BSX_EXT=
"-bsx";
static final int TEST_COUNT=
10;
private static <T> void single
(JmsTemplate sender,
SampleReplyHandler<T> replies[],
SampleReceiveOnlyHandler<T> receivers[])
throws Exception
{
// Send messages.
SampleReplyHandler<T> firstReply=replies[0];
for (int i=0;i<TEST_COUNT;i++) {
sender.convertAndSend(firstReply.create(i));
}
// Wait until delivery is complete.
Thread.sleep(5000);
// Confirm transferred data matches expected values.
for (SampleReplyHandler<T> reply:replies) {
assertEquals(TEST_COUNT,reply.getReceived().size());
assertEquals(TEST_COUNT,reply.getReplies().size());
}
for (SampleReceiveOnlyHandler<T> receiver:receivers) {
assertEquals(TEST_COUNT,receiver.getReceived().size());
}
for (int i=0;i<TEST_COUNT;i++) {
for (SampleReplyHandler<T> reply:replies) {
assertTrue(firstReply.isEqual(i,reply.getReceived().get(i)));
assertTrue(firstReply.isEqual(i+1,reply.getReplies().get(i)));
}
for (SampleReceiveOnlyHandler<T> receiver:receivers) {
assertTrue(firstReply.isEqual
(i+1,receiver.getReceived().get(i)));
}
i++;
}
}
@SuppressWarnings("unchecked")
private static <T> void single
(JmsTemplate sender,
SampleReplyHandler<T> reply,
SampleReceiveOnlyHandler<T> receiver)
throws Exception
{
single(sender,
new SampleReplyHandler[]{reply},
new SampleReceiveOnlyHandler[]{receiver});
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void simpleMessages()
throws Exception
{
MockServer server=new MockServer();
JmsManager mgr=new JmsManager
((ConnectionFactory)
(server.getContext().getBean("metc_connection_factory_in")),
(ConnectionFactory)
(server.getContext().getBean("metc_connection_factory_out")));
// STANDARD CONVERTER.
String senderName=TEST_SEND_DEST;
String replyName=TEST_REPLY_DEST;
// Queues.
SampleIntegerReplyHandler reply=
new SampleIntegerReplyHandler();
SampleReceiveOnlyHandler<Integer> receiveOnly=
new SampleReceiveOnlyHandler<Integer>();
mgr.getIncomingJmsFactory().registerHandler
(reply,senderName,false,replyName,false);
mgr.getIncomingJmsFactory().registerHandler
(receiveOnly,replyName,false);
single(mgr.getOutgoingJmsFactory().createJmsTemplate
(senderName,false),reply,receiveOnly);
// Topics.
SampleIntegerReplyHandler[] replies=new SampleIntegerReplyHandler[] {
new SampleIntegerReplyHandler(),
new SampleIntegerReplyHandler()};
SampleReceiveOnlyHandler[] receivers=new SampleReceiveOnlyHandler[] {
new SampleReceiveOnlyHandler<Integer>(),
new SampleReceiveOnlyHandler<Integer>()};
mgr.getIncomingJmsFactory().registerHandler
(replies[0],senderName,true,replyName,true);
mgr.getIncomingJmsFactory().registerHandler
(replies[1],senderName,true,TEST_REPLY_IGNORED,true);
mgr.getIncomingJmsFactory().registerHandler
(receivers[0],replyName,true);
mgr.getIncomingJmsFactory().registerHandler
(receivers[1],replyName,true);
single(mgr.getOutgoingJmsFactory().createJmsTemplate
(senderName,true),replies,receivers);
// QUICKFIX/J CONVERTER.
senderName=TEST_SEND_DEST+TEST_Q_EXT;
replyName=TEST_REPLY_DEST+TEST_Q_EXT;
// Queues.
SampleQMessageReplyHandler replyQ=
new SampleQMessageReplyHandler();
SampleReceiveOnlyHandler<Message> receiveOnlyQ=
new SampleReceiveOnlyHandler<Message>();
mgr.getIncomingJmsFactory().registerHandlerQ
(replyQ,senderName,false,replyName,false);
mgr.getIncomingJmsFactory().registerHandlerQ
(receiveOnlyQ,replyName,false);
single(mgr.getOutgoingJmsFactory().createJmsTemplateQ
(senderName,false),replyQ,receiveOnlyQ);
// Topics.
SampleQMessageReplyHandler[] repliesQ=new SampleQMessageReplyHandler[] {
new SampleQMessageReplyHandler(),
new SampleQMessageReplyHandler()};
SampleReceiveOnlyHandler[] receiversQ=new SampleReceiveOnlyHandler[] {
new SampleReceiveOnlyHandler<Message>(),
new SampleReceiveOnlyHandler<Message>()};
mgr.getIncomingJmsFactory().registerHandlerQ
(repliesQ[0],senderName,true,replyName,true);
mgr.getIncomingJmsFactory().registerHandlerQ
(repliesQ[1],senderName,true,TEST_REPLY_IGNORED,true);
mgr.getIncomingJmsFactory().registerHandlerQ
(receiversQ[0],replyName,true);
mgr.getIncomingJmsFactory().registerHandlerQ
(receiversQ[1],replyName,true);
single(mgr.getOutgoingJmsFactory().createJmsTemplateQ
(senderName,true),repliesQ,receiversQ);
// FIX AGNOSTIC XML CONVERTER: TRADE MESSAGES.
senderName=TEST_SEND_DEST+TEST_TMX_EXT;
replyName=TEST_REPLY_DEST+TEST_TMX_EXT;
// Queues.
SampleOrderReplyHandler replyTMX=
new SampleOrderReplyHandler();
SampleReceiveOnlyHandler<TradeMessage> receiveOnlyTMX=
new SampleReceiveOnlyHandler<TradeMessage>();
mgr.getIncomingJmsFactory().registerHandlerTMX
(replyTMX,senderName,false,replyName,false);
mgr.getIncomingJmsFactory().registerHandlerTMX
(receiveOnlyTMX,replyName,false);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,false),replyTMX,receiveOnlyTMX);
// Topics.
SampleOrderReplyHandler[] repliesTMX=new SampleOrderReplyHandler[] {
new SampleOrderReplyHandler(),
new SampleOrderReplyHandler()};
SampleReceiveOnlyHandler[] receiversTMX=new SampleReceiveOnlyHandler[] {
new SampleReceiveOnlyHandler<TradeMessage>(),
new SampleReceiveOnlyHandler<TradeMessage>()};
mgr.getIncomingJmsFactory().registerHandlerTMX
(repliesTMX[0],senderName,true,replyName,true);
mgr.getIncomingJmsFactory().registerHandlerTMX
(repliesTMX[1],senderName,true,TEST_REPLY_IGNORED,true);
mgr.getIncomingJmsFactory().registerHandlerTMX
(receiversTMX[0],replyName,true);
mgr.getIncomingJmsFactory().registerHandlerTMX
(receiversTMX[1],replyName,true);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,true),repliesTMX,receiversTMX);
// FIX AGNOSTIC XML CONVERTER: ORDER ENVELOPES.
senderName=TEST_SEND_DEST+TEST_OEX_EXT;
replyName=TEST_REPLY_DEST+TEST_OEX_EXT;
// Queues.
SampleEnvelopeReplyHandler replyOEX=
new SampleEnvelopeReplyHandler();
SampleReceiveOnlyHandler<OrderEnvelope> receiveOnlyOEX=
new SampleReceiveOnlyHandler<OrderEnvelope>();
mgr.getIncomingJmsFactory().registerHandlerOEX
(replyOEX,senderName,false,replyName,false);
mgr.getIncomingJmsFactory().registerHandlerOEX
(receiveOnlyOEX,replyName,false);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,false),replyOEX,receiveOnlyOEX);
// Topics.
SampleEnvelopeReplyHandler[] repliesOEX=
new SampleEnvelopeReplyHandler[] {
new SampleEnvelopeReplyHandler(),
new SampleEnvelopeReplyHandler()};
SampleReceiveOnlyHandler[] receiversOEX=new SampleReceiveOnlyHandler[] {
new SampleReceiveOnlyHandler<OrderEnvelope>(),
new SampleReceiveOnlyHandler<OrderEnvelope>()};
mgr.getIncomingJmsFactory().registerHandlerOEX
(repliesOEX[0],senderName,true,replyName,true);
mgr.getIncomingJmsFactory().registerHandlerOEX
(repliesOEX[1],senderName,true,TEST_REPLY_IGNORED,true);
mgr.getIncomingJmsFactory().registerHandlerOEX
(receiversOEX[0],replyName,true);
mgr.getIncomingJmsFactory().registerHandlerOEX
(receiversOEX[1],replyName,true);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,true),repliesOEX,receiversOEX);
// FIX AGNOSTIC XML CONVERTER: BROKER STATUS MESSAGES.
senderName=TEST_SEND_DEST+TEST_BSX_EXT;
replyName=TEST_REPLY_DEST+TEST_BSX_EXT;
// Queues.
SampleBrokerStatusHandler replyBSX=
new SampleBrokerStatusHandler();
SampleReceiveOnlyHandler<BrokerStatus> receiveOnlyBSX=
new SampleReceiveOnlyHandler<BrokerStatus>();
mgr.getIncomingJmsFactory().registerHandlerBSX
(replyBSX,senderName,false,replyName,false);
mgr.getIncomingJmsFactory().registerHandlerBSX
(receiveOnlyBSX,replyName,false);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,false),replyBSX,receiveOnlyBSX);
// Topics.
SampleBrokerStatusHandler[] repliesBSX=
new SampleBrokerStatusHandler[] {
new SampleBrokerStatusHandler(),
new SampleBrokerStatusHandler()};
SampleReceiveOnlyHandler[] receiversBSX=new SampleReceiveOnlyHandler[] {
new SampleReceiveOnlyHandler<BrokerStatus>(),
new SampleReceiveOnlyHandler<BrokerStatus>()};
mgr.getIncomingJmsFactory().registerHandlerBSX
(repliesBSX[0],senderName,true,replyName,true);
mgr.getIncomingJmsFactory().registerHandlerBSX
(repliesBSX[1],senderName,true,TEST_REPLY_IGNORED,true);
mgr.getIncomingJmsFactory().registerHandlerBSX
(receiversBSX[0],replyName,true);
mgr.getIncomingJmsFactory().registerHandlerBSX
(receiversBSX[1],replyName,true);
single(mgr.getOutgoingJmsFactory().createJmsTemplateX
(senderName,true),repliesBSX,receiversBSX);
}
}