
org.fix4j.test.integration.quickfix.QuickFixTestSessionFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fix4j-assert-quickfix Show documentation
Show all versions of fix4j-assert-quickfix Show documentation
fix4j-assert is a library to assist in testing of applications using FIX protocol
The newest version!
package org.fix4j.test.integration.quickfix;
import org.fix4j.test.integration.FixEngineSession;
import org.fix4j.test.integration.FixEngineSessionFactory;
import org.fix4j.test.fixmodel.FixMessage;
import org.fix4j.test.fixspec.FixSpecification;
import org.fix4j.test.plumbing.Consumer;
import org.fix4j.test.properties.ApplicationProperties;
import org.fix4j.test.session.FixConnectionMode;
import org.fix4j.test.session.FixSessionId;
import quickfix.Connector;
import quickfix.DefaultMessageFactory;
import quickfix.MemoryStoreFactory;
import quickfix.ScreenLogFactory;
import quickfix.SessionID;
import quickfix.SessionSettings;
import quickfix.SocketAcceptor;
import quickfix.SocketInitiator;
/**
* User: ben
* Date: 20/08/2014
* Time: 5:44 PM
*/
public class QuickFixTestSessionFactory implements FixEngineSessionFactory {
private final FixSpecification fixSpecification;
public QuickFixTestSessionFactory(final FixSpecification fixSpecification) {
this.fixSpecification = fixSpecification;
}
@Override
public FixEngineSession createSession(final FixSessionId sessionId, final FixConnectionMode fixConnectionMode, final Consumer toTestClient) {
final QuickFixApplication app = new QuickFixApplication();
final SessionID quickfixSessionId = (new QuickFixSessionIdConverter()).fromFixSessionId(sessionId);
final Connector connector = create(quickfixSessionId, app, fixConnectionMode);
return new QuickFixTestSession(toTestClient, quickfixSessionId, app, fixSpecification, connector);
}
private Connector create(final SessionID quickfixSessionId, final QuickFixApplication app, final FixConnectionMode fixConnectionMode){
try {
final ApplicationProperties properties = ApplicationProperties.Singleton.instance();
final SessionSettings settings = new SessionSettings();
settings.setString("ConnectionType", (fixConnectionMode == FixConnectionMode.INITIATOR ? "initiator": "acceptor"));
settings.setString("SenderCompID", quickfixSessionId.getSenderCompID());
settings.setString("TargetCompID", quickfixSessionId.getTargetCompID());
settings.setString("SocketConnectHost", properties.getAsString(QuickFixProperties.SOCKET_CONNECT_HOST, "localhost"));
settings.setString("StartTime", properties.getAsString(QuickFixProperties.START_TIME, "00:00:00"));
settings.setString("EndTime", properties.getAsString(QuickFixProperties.END_TIME, "00:00:00"));
settings.setString("HeartBtInt", properties.getAsString(QuickFixProperties.HEART_BEAT_INTERVAL, "10"));
settings.setString("BeginString", quickfixSessionId.getBeginString());
settings.setString("ReconnectInterval", properties.getAsString(QuickFixProperties.RECONNECT_INTERVAL, "5"));
settings.setString("UseDataDictionary", properties.getAsString(QuickFixProperties.USE_DATA_DICTIONARY, "Y"));
settings.setString("AllowUnknownMsgFields", properties.getAsString(QuickFixProperties.ALLOW_UNKNOWN_MSG_FIELDS, "Y"));
settings.setString("ValidateFieldsOutOfOrder", properties.getAsString(QuickFixProperties.VALIDATE_FIELDS_OUT_OF_ORDER, "N"));
settings.setString("ValidateFieldsHaveValues", properties.getAsString(QuickFixProperties.VALIDATE_FIELDS_HAVE_VALUES, "N"));
settings.setString("ValidateUserDefinedFields", properties.getAsString(QuickFixProperties.VALIDATE_USER_DEFINED_FIELDS, "N"));
if(fixConnectionMode == FixConnectionMode.INITIATOR) {
settings.setString(quickfixSessionId, "SocketConnectPort", properties.getAsString(QuickFixProperties.SOCKET_CONNECT_PORT, "9880"));
} else if(fixConnectionMode == FixConnectionMode.ACCEPTOR){
settings.setString(quickfixSessionId, "SocketAcceptPort", properties.getAsString(QuickFixProperties.SOCKET_ACCEPT_PORT, "9880"));
} else {
throw new IllegalArgumentException("Unknown mode:" + fixConnectionMode);
}
final boolean logHeartbeats = properties.getAsBoolean(QuickFixProperties.LOG_HEARTBEATS, true);
final MemoryStoreFactory messageStoreFactory = new MemoryStoreFactory();
final ScreenLogFactory logFactory = new ScreenLogFactory(true, true, true, logHeartbeats);
final DefaultMessageFactory messageFactory = new DefaultMessageFactory();
final Connector socket;
if(fixConnectionMode == FixConnectionMode.INITIATOR) {
socket = new SocketInitiator(app, messageStoreFactory, settings, logFactory, messageFactory);
} else if(fixConnectionMode == FixConnectionMode.ACCEPTOR){
socket = new SocketAcceptor(app, messageStoreFactory, settings, logFactory, messageFactory);
} else {
throw new IllegalArgumentException("Unknown mode:" + fixConnectionMode);
}
return socket;
} catch (final Exception e) {
throw new RuntimeException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy