package org.marketcetera.trade;
import org.marketcetera.util.misc.ClassVersion;
import org.marketcetera.util.test.EqualityAssert;
import org.marketcetera.util.test.SerializableAssert;
import org.marketcetera.util.test.ComparableAssert;
import org.marketcetera.module.ExpectedFailure;
import org.marketcetera.core.IDFactory;
import org.marketcetera.core.NoMoreIDsException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.util.concurrent.atomic.AtomicLong;
/* $License$ */
/**
* Tests all the ID classes in this package. Tested classes
* include {@link OrderID}, {@link UserID} & {@link BrokerID}.
* <p>
* Also tests
* {@link Factory#setOrderIDFactory(org.marketcetera.core.IDFactory)}
*
* @author anshul@marketcetera.com
* @version $Id: IDTest.java 16154 2012-07-14 16:34:05Z colin $
* @since 1.0.0
*/
@ClassVersion("$Id: IDTest.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$
public class IDTest {
/**
* Verify {@link OrderID}
*
* @throws Exception if there were errors
*/
@Test
public void orderID() throws Exception {
new ExpectedFailure<NullPointerException>(){
protected void run() throws Exception {
new OrderID(null);
}
};
EqualityAssert.assertEquality(new OrderID("ord-132"),
new OrderID("ord-132"),
new OrderID(""), new OrderID("ora-132"),
new OrderID("ord-133"), new OrderID("xyzkji3948992"));
OrderID id = new OrderID("yes");
assertEquals("yes", id.getValue());
assertEquals("yes", id.toString());
SerializableAssert.assertSerializable(id);
}
/**
* Verify {@link BrokerID}
*
* @throws Exception if there were errors.
*/
@Test
public void brokerID() throws Exception {
new ExpectedFailure<NullPointerException>(){
protected void run() throws Exception {
new BrokerID(null);
}
};
EqualityAssert.assertEquality(new BrokerID("broke-132"),
new BrokerID("broke-132"),
new BrokerID(""), new BrokerID("brokr-132"),
new BrokerID("broke-133"),
new BrokerID("xyzkji3948992"));
BrokerID id = new BrokerID("yes");
assertEquals("yes", id.getValue());
assertEquals("yes", id.toString());
SerializableAssert.assertSerializable(id);
}
/**
* Verify {@link UserID}
*
* @throws Exception if there were errors.
*/
@Test
public void userID() throws Exception {
EqualityAssert.assertEquality(new UserID(1),
new UserID(1),
new UserID(0));
UserID id = new UserID(2);
assertEquals(2, id.getValue());
assertEquals("2", id.toString());
SerializableAssert.assertSerializable(id);
}
/**
* Verify {@link ReportID}
*
* @throws Exception if there were errors
*/
@Test
public void reportID() throws Exception {
EqualityAssert.assertEquality(new ReportID(23l),new ReportID(23),
new ReportID(1), new ReportID(Integer.MAX_VALUE),
new ReportID(Long.MAX_VALUE));
ReportID id = new ReportID(2343l);
assertEquals("2343", id.toString());
assertEquals(2343l, id.longValue());
SerializableAssert.assertSerializable(id);
ComparableAssert.assertComparable(new ReportID(12), new ReportID(12),
new ReportID(13));
}
@Test
public void orderIDFactory() throws Exception {
final Factory factory = Factory.getInstance();
final String prefix = "cetera";
//verify that the current factory IDs do not have this prefix
assertFalse(factory.createOrderSingle().getOrderID().toString().startsWith(prefix));
assertFalse(factory.createOrderCancel(null).getOrderID().toString().startsWith(prefix));
assertFalse(factory.createOrderReplace(null).getOrderID().toString().startsWith(prefix));
//now set the factory to the one that uses prefix
factory.setOrderIDFactory(new TestIDFactory(10101, prefix));
//Verify all IDs have the prefix.
assertTrue(factory.createOrderSingle().getOrderID().toString().startsWith(prefix));
assertTrue(factory.createOrderCancel(null).getOrderID().toString().startsWith(prefix));
assertTrue(factory.createOrderReplace(null).getOrderID().toString().startsWith(prefix));
//Verify that the factory cannot be set to null
new ExpectedFailure<NullPointerException>(){
protected void run() throws Exception {
factory.setOrderIDFactory(null);
}
};
//set an ID factory that fails to generate IDs
factory.setOrderIDFactory(new TestIDFactory(1, "wha"){
@Override
public String getNext() throws NoMoreIDsException {
throw new NoMoreIDsException(new IllegalArgumentException("test"));
}
});
new ExpectedFailure<IllegalArgumentException>(
Messages.UNABLE_TO_GENERATE_IDS.getText()){
protected void run() throws Exception {
factory.createOrderSingle();
}
};
}
private ReportID getNextReportID() throws MessageCreationException {
return Factory.getInstance().createExecutionReport(
TypesTestBase.createEmptyExecReport(),
new BrokerID("bro"), Originator.Server, null, null).
getReportID();
}
/**
* TestIDFactory that generates IDs based on an initial value
* and a prefix.
*
*/
@ClassVersion("$Id: IDTest.java 16154 2012-07-14 16:34:05Z colin $")
public static class TestIDFactory implements IDFactory {
public TestIDFactory(long initValue, String inPrefix) {
mPrefix = inPrefix;
mGenerator.set(initValue);
}
@Override
public String getNext() throws NoMoreIDsException {
return mPrefix + mGenerator.incrementAndGet();
}
@Override
public void init() {
//Do nothing.
}
private final AtomicLong mGenerator = new AtomicLong();
private final String mPrefix;
}
}