Skip to content

Commit

Permalink
Merge branch 'master' into defaultapplverid-range
Browse files Browse the repository at this point in the history
  • Loading branch information
chrjohn authored Feb 9, 2024
2 parents 3e76eef + 25bbd8a commit 0276061
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 33 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Configure pagefile
uses: al-cheb/configure-pagefile-action@v1.3
uses: al-cheb/configure-pagefile-action@v1.4
with:
minimum-size: 8GB
maximum-size: 16GB
Expand Down
10 changes: 5 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jdkLevel>1.8</jdkLevel>
<slf4j.version>2.0.10</slf4j.version>
<slf4j.version>2.0.12</slf4j.version>
<mockito-core.version>4.11.0</mockito-core.version>
<hamcrest.version>2.2</hamcrest.version>
<junit.jupiter.version>5.10.1</junit.jupiter.version>
<junit.jupiter.version>5.10.2</junit.jupiter.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<mainClass/>
Expand All @@ -81,7 +81,7 @@
<maven-resources-plugin-version>3.3.1</maven-resources-plugin-version>
<maven-compiler-plugin-version>3.12.1</maven-compiler-plugin-version>
<maven-jar-plugin-version>3.3.0</maven-jar-plugin-version>
<maven-surefire-plugin-version>3.2.3</maven-surefire-plugin-version>
<maven-surefire-plugin-version>3.2.5</maven-surefire-plugin-version>
<maven-pmd-plugin-version>3.21.2</maven-pmd-plugin-version>
<maven-source-plugin-version>3.3.0</maven-source-plugin-version>
<maven-javadoc-plugin-version>3.6.3</maven-javadoc-plugin-version>
Expand All @@ -94,7 +94,7 @@
<build-helper-maven-plugin-version>3.5.0</build-helper-maven-plugin-version>
<maven-shared-utils.version>3.4.2</maven-shared-utils.version>
<file-management.version>3.0.0</file-management.version>
<maven-plugin-annotations.version>3.10.2</maven-plugin-annotations.version>
<maven-plugin-annotations.version>3.11.0</maven-plugin-annotations.version>
<maven-plugin-testing-harness.version>3.3.0</maven-plugin-testing-harness.version>
<plantuml-maven-plugin-version>1.2</plantuml-maven-plugin-version>
<plantuml-version>8059</plantuml-version>
Expand Down Expand Up @@ -467,7 +467,7 @@
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.10.2</version>
<version>3.11.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
Expand Down
5 changes: 4 additions & 1 deletion quickfixj-codegenerator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.10.2</version>
<version>3.11.0</version>
<configuration>
<goalPrefix>quickfixj-codegenerator</goalPrefix>
</configuration>
</plugin>
</plugins>
</build>
Expand Down
1 change: 0 additions & 1 deletion quickfixj-core/src/test/java/quickfix/JdbcLogTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ private void setUpJdbcLog(boolean filterHeartbeats, DataSource dataSource) throw
if (filterHeartbeats) {
settings.setBool(JdbcSetting.SETTING_JDBC_LOG_HEARTBEATS, false);
}
settings.setString(sessionID, JdbcSetting.SETTING_JDBC_CONNECTION_TEST_QUERY, "SELECT COUNT(1) FROM INFORMATION_SCHEMA.SYSTEM_USERS WHERE 1 = 0;");
JdbcTestSupport.setHypersonicSettings(settings);
initializeTableDefinitions(connection);
logFactory = new JdbcLogFactory(settings);
Expand Down
2 changes: 2 additions & 0 deletions quickfixj-core/src/test/java/quickfix/JdbcTestSupport.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public static void setHypersonicSettings(SessionSettings settings) {
settings.setString(JdbcSetting.SETTING_JDBC_CONNECTION_URL, HSQL_CONNECTION_URL);
settings.setString(JdbcSetting.SETTING_JDBC_USER, HSQL_USER);
settings.setString(JdbcSetting.SETTING_JDBC_PASSWORD, "");
// HSQL doesn't support JDBC4 which means that test query has to be supplied to HikariCP
settings.setString(JdbcSetting.SETTING_JDBC_CONNECTION_TEST_QUERY, "SELECT COUNT(1) FROM INFORMATION_SCHEMA.SYSTEM_USERS WHERE 1 = 0;");
}

public static Connection getConnection() throws ClassNotFoundException, SQLException {
Expand Down
146 changes: 121 additions & 25 deletions quickfixj-core/src/test/java/quickfix/mina/ssl/SSLCertificateTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,21 @@
import org.apache.mina.core.filterchain.IoFilterChain;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.ssl.SslFilter;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import quickfix.Acceptor;
import quickfix.ApplicationAdapter;
import quickfix.ConfigError;
import quickfix.DefaultMessageFactory;
import quickfix.FixVersions;
import quickfix.Initiator;
import quickfix.MemoryStoreFactory;
import quickfix.MessageFactory;
import quickfix.MessageStoreFactory;
import quickfix.RuntimeError;
import quickfix.Session;
import quickfix.SessionFactory;
import quickfix.SessionID;
import quickfix.SessionSettings;
import quickfix.ThreadedSocketAcceptor;
Expand Down Expand Up @@ -552,6 +554,51 @@ public void shouldFailWhenUsingBadServerCertificate() throws Exception {
}
}

@Test
public void shouldConnectDifferentTypesOfSessions() throws Exception {
int sslPort = AvailablePortFinder.getNextAvailable();
int nonSslPort = AvailablePortFinder.getNextAvailable();
TestAcceptor acceptor = new TestAcceptor(createMixedSessionAcceptorSettings(sslPort, nonSslPort, "single-session/server.keystore"));

try {
acceptor.start();

TestInitiator sslInitiator = new TestInitiator(
createInitiatorSettings("single-session/client.keystore", "single-session/client.truststore",
CIPHER_SUITES_TLS, "TLSv1.2", "ZULU_SSL", "ALFA_SSL", Integer.toString(sslPort), "JKS", "JKS"));

TestInitiator nonSslInitiator = new TestInitiator(createInitiatorSettings("ZULU_NON_SSL", "ALFA_NON_SSL", nonSslPort));

try {
sslInitiator.start();
nonSslInitiator.start();

sslInitiator.assertNoSslExceptionThrown();
sslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"));
sslInitiator.assertAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"),
new BigInteger("1448538842"));

acceptor.assertNoSslExceptionThrown();
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));

nonSslInitiator.assertNoSslExceptionThrown();
nonSslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));
nonSslInitiator.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));

acceptor.assertNoSslExceptionThrown();
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));

} finally {
sslInitiator.stop();
nonSslInitiator.stop();
}
} finally {
acceptor.stop();
}
}

static abstract class TestConnector {
private static final Logger LOGGER = LoggerFactory.getLogger(TestConnector.class);
private static final int TIMEOUT_SECONDS = 5;
Expand Down Expand Up @@ -744,24 +791,53 @@ public SessionConnector createConnector(SessionSettings sessionSettings) throws
return new ThreadedSocketInitiator(new ApplicationAdapter(),
messageStoreFactory, sessionSettings, messageFactory);
}
}

/**
* Creates acceptor settings that contains two sessions. One with SSL support, one without.
*/
private SessionSettings createMixedSessionAcceptorSettings(int sslPort, int nonSslPort, String keyStoreName) {
HashMap<Object, Object> defaults = new HashMap<>();
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
defaults.put(Session.SETTING_START_TIME, "00:00:00");
defaults.put(Session.SETTING_END_TIME, "00:00:00");
defaults.put(Session.SETTING_HEARTBTINT, "30");

SessionSettings sessionSettings = new SessionSettings();
sessionSettings.set(defaults);

SessionID sslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL");
sessionSettings.setString(sslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
sessionSettings.setString(sslSession, "DataDictionary", "FIX44.xml");
sessionSettings.setString(sslSession, "TargetCompID", "ZULU_SSL");
sessionSettings.setString(sslSession, "SenderCompID", "ALFA_SSL");
sessionSettings.setString(sslSession, SSLSupport.SETTING_USE_SSL, "Y");
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_PWD, "password");
sessionSettings.setString(sslSession, SSLSupport.SETTING_NEED_CLIENT_AUTH, "N");
sessionSettings.setString(sslSession, "SocketAcceptPort", Integer.toString(sslPort));

SessionID nonSslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL");
sessionSettings.setString(nonSslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
sessionSettings.setString(nonSslSession, "DataDictionary", "FIX44.xml");
sessionSettings.setString(nonSslSession, "TargetCompID", "ZULU_NON_SSL");
sessionSettings.setString(nonSslSession, "SenderCompID", "ALFA_NON_SSL");
sessionSettings.setString(nonSslSession, "SocketAcceptPort", Integer.toString(nonSslPort));

return sessionSettings;
}

private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName, boolean needClientAuth,
String[] trustStoreNames, String cipherSuites, String protocols) {
HashMap<Object, Object> defaults = new HashMap<>();
defaults.put("ConnectionType", "acceptor");
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");

defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
defaults.put("SocketAcceptHost", "localhost");
defaults.put("StartTime", "00:00:00");
defaults.put("EndTime", "00:00:00");
defaults.put("HeartBtInt", "30");
defaults.put("ReconnectInterval", "2");
defaults.put(Session.SETTING_START_TIME, "00:00:00");
defaults.put(Session.SETTING_END_TIME, "00:00:00");
defaults.put(Session.SETTING_HEARTBTINT, "30");

if (cipherSuites != null) {
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
Expand Down Expand Up @@ -791,8 +867,7 @@ private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName,
private SessionSettings createAcceptorSettings(String keyStoreName, boolean needClientAuth, String trustStoreName,
String cipherSuites, String protocols, String keyStoreType, String trustStoreType, int port) {
HashMap<Object, Object> defaults = new HashMap<>();
defaults.put("ConnectionType", "acceptor");
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
Expand All @@ -811,12 +886,10 @@ private SessionSettings createAcceptorSettings(String keyStoreName, boolean need
}

defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
defaults.put("SocketAcceptHost", "localhost");
defaults.put("SocketAcceptPort", Integer.toString(port));
defaults.put("StartTime", "00:00:00");
defaults.put("EndTime", "00:00:00");
defaults.put("HeartBtInt", "30");
defaults.put("ReconnectInterval", "2");
defaults.put(Acceptor.SETTING_SOCKET_ACCEPT_PORT, Integer.toString(port));
defaults.put(Session.SETTING_START_TIME, "00:00:00");
defaults.put(Session.SETTING_END_TIME, "00:00:00");
defaults.put(Session.SETTING_HEARTBTINT, "30");

if (cipherSuites != null) {
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
Expand Down Expand Up @@ -848,8 +921,8 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
String protocols, String senderId, String targetId, String port, String keyStoreType,
String trustStoreType, String endpointIdentificationAlgorithm) {
HashMap<Object, Object> defaults = new HashMap<>();
defaults.put("ConnectionType", "initiator");
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
Expand All @@ -867,12 +940,12 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
}
}

defaults.put("SocketConnectHost", "localhost");
defaults.put("SocketConnectPort", port);
defaults.put("StartTime", "00:00:00");
defaults.put("EndTime", "00:00:00");
defaults.put("HeartBtInt", "30");
defaults.put("ReconnectInterval", "2");
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, port);
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
defaults.put(Session.SETTING_START_TIME, "00:00:00");
defaults.put(Session.SETTING_END_TIME, "00:00:00");
defaults.put(Session.SETTING_HEARTBTINT, "30");

if (cipherSuites != null) {
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
Expand All @@ -897,4 +970,27 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus

return sessionSettings;
}

private SessionSettings createInitiatorSettings(String senderId, String targetId, int port) {
HashMap<Object, Object> defaults = new HashMap<>();
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, Integer.toString(port));
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
defaults.put(Session.SETTING_START_TIME, "00:00:00");
defaults.put(Session.SETTING_END_TIME, "00:00:00");
defaults.put(Session.SETTING_HEARTBTINT, "30");

SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX44, senderId, targetId);

SessionSettings sessionSettings = new SessionSettings();
sessionSettings.set(defaults);
sessionSettings.setString(sessionID, "BeginString", FixVersions.BEGINSTRING_FIX44);
sessionSettings.setString(sessionID, "DataDictionary", "FIX44.xml");
sessionSettings.setString(sessionID, "SenderCompID", senderId);
sessionSettings.setString(sessionID, "TargetCompID", targetId);

return sessionSettings;
}
}

0 comments on commit 0276061

Please sign in to comment.