package org.marketcetera.client.jms;
import org.marketcetera.util.misc.ClassVersion;
import org.marketcetera.util.log.SLF4JLoggerProxy;
import org.marketcetera.util.ws.tags.SessionId;
import org.marketcetera.trade.*;
import org.marketcetera.client.ClientTest;
import org.marketcetera.core.LoggerConfiguration;
import org.marketcetera.module.ExpectedFailure;
import org.marketcetera.client.brokers.BrokerStatus;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import javax.xml.bind.JAXBException;
import javax.xml.bind.UnmarshalException;
import java.util.Map;
import java.util.HashMap;
import java.math.BigDecimal;
/* $License$ */
/**
* Tests {@link JMSXMLMessageConverter}
*
* @author anshul@marketcetera.com
* @version $Id: JMSXMLConverterTest.java 16395 2012-12-10 16:29:14Z colin $
* @since 1.5.0
*/
@ClassVersion("$Id: JMSXMLConverterTest.java 16395 2012-12-10 16:29:14Z colin $")
public class JMSXMLConverterTest {
@BeforeClass
public static void setup() throws Exception {
sConverter = new JMSXMLMessageConverter();
LoggerConfiguration.logSetup();
}
@Test
public void verifyOrderSingle() throws Exception {
for (Instrument instrument: sInstruments) {
OrderSingle i = ClientTest.createOrderSingle();
i.setInstrument(instrument);
i.setCustomFields(generateCustomFields());
OrderEnvelope o=(OrderEnvelope)roundTrip
(new OrderEnvelope(i,SESSION_ID));
assertEquals(SESSION_ID,o.getSessionId());
TypesTestBase.assertOrderSingleEquals
(i,(OrderSingle)o.getOrder());
}
}
@Test
public void verifyOrderCancel() throws Exception {
for (Instrument instrument: sInstruments) {
OrderCancel i = ClientTest.createOrderCancel();
i.setInstrument(instrument);
i.setCustomFields(generateCustomFields());
OrderEnvelope o=(OrderEnvelope)roundTrip
(new OrderEnvelope(i,SESSION_ID));
assertEquals(SESSION_ID,o.getSessionId());
TypesTestBase.assertOrderCancelEquals
(i,(OrderCancel)o.getOrder());
}
}
@Test
public void verifyOrderReplace() throws Exception {
for (Instrument instrument: sInstruments) {
OrderReplace i = ClientTest.createOrderReplace();
i.setInstrument(instrument);
i.setCustomFields(generateCustomFields());
OrderEnvelope o=(OrderEnvelope)roundTrip
(new OrderEnvelope(i,SESSION_ID));
assertEquals(SESSION_ID,o.getSessionId());
TypesTestBase.assertOrderReplaceEquals
(i,(OrderReplace)o.getOrder());
}
}
@Test
public void verifyFIXOrder() throws Exception {
FIXOrder i = ClientTest.createOrderFIX();
OrderEnvelope o=(OrderEnvelope)roundTrip
(new OrderEnvelope(i,SESSION_ID));
assertEquals(SESSION_ID,o.getSessionId());
TypesTestBase.assertOrderFIXEquals
(i,(FIXOrder)o.getOrder());
}
@Test
public void verifyExecReport() throws Exception {
ExecutionReport executionReport = ClientTest.createExecutionReport();
TypesTestBase.assertExecReportEquals(executionReport,
(ExecutionReport) roundTrip(executionReport));
}
@Test
public void verifyCancelReject() throws Exception {
OrderCancelReject cancelReject = ClientTest.createCancelReject();
TypesTestBase.assertCancelRejectEquals(cancelReject,
(OrderCancelReject) roundTrip(cancelReject));
}
@Test
public void verifyFIXResponse() throws Exception {
FIXResponse fixResponse = ClientTest.createFIXResponse();
TypesTestBase.assertFIXResponseEquals(fixResponse,
(FIXResponse) roundTrip(fixResponse));
}
@Test
public void verifyBrokerStatus() throws Exception {
BrokerStatus i = new BrokerStatus("me", new BrokerID("broke"), false);
BrokerStatus o = (BrokerStatus) roundTrip(i);
assertEquals(i.getName(), o.getName());
assertEquals(i.getId(), o.getId());
assertEquals(i.getLoggedOn(), o.getLoggedOn());
}
@Test
public void marshallFailure() throws Exception {
new ExpectedFailure<JAXBException>(NotMarshallable.class.getName(), false){
protected void run() throws Exception {
roundTrip(new NotMarshallable());
}
};
}
@Test
public void unmarshallFailure() throws Exception {
new ExpectedFailure<UnmarshalException>(){
protected void run() throws Exception {
sConverter.fromXML("This is not XML");
}
};
}
static Object roundTrip(Object inObject) throws Exception {
String xml = sConverter.toXML(inObject);
SLF4JLoggerProxy.debug("XML", xml);
return sConverter.fromXML(xml);
}
private Map<String, String> generateCustomFields() {
Map<String, String> value = new HashMap<String, String>();
value.put("key1", "value1");
value.put("key2", "value2");
return value;
}
private static class NotMarshallable {
}
private static Instrument[] sInstruments = new Instrument[]{
new Equity("sym"),
new Option("sym", "20101010", BigDecimal.TEN, OptionType.Call),
new Future("rama", FutureExpirationMonth.AUGUST,2010),
new Currency("USD","GBP","","")
};
private static JMSXMLMessageConverter sConverter;
private static final SessionId SESSION_ID=SessionId.generate();
}