Skip to content

Commit 312f054

Browse files
committed
Merge pull request #761 from the-thing/ssl_mixed_sessions
Additional test scenario with acceptor running mixed sessions (cherry picked from commit f470c02)
1 parent 1041d15 commit 312f054

File tree

1 file changed

+120
-25
lines changed

1 file changed

+120
-25
lines changed

quickfixj-core/src/test/java/quickfix/mina/ssl/SSLCertificateTest.java

Lines changed: 120 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
import org.apache.mina.core.filterchain.IoFilterChain;
2424
import org.apache.mina.core.session.IoSession;
2525
import org.apache.mina.filter.ssl.SslFilter;
26-
import org.junit.Assert;
2726
import org.junit.Test;
2827
import org.slf4j.Logger;
2928
import org.slf4j.LoggerFactory;
29+
import quickfix.Acceptor;
3030
import quickfix.ApplicationAdapter;
3131
import quickfix.ConfigError;
3232
import quickfix.DefaultMessageFactory;
@@ -37,6 +37,7 @@
3737
import quickfix.MessageStoreFactory;
3838
import quickfix.RuntimeError;
3939
import quickfix.Session;
40+
import quickfix.SessionFactory;
4041
import quickfix.SessionID;
4142
import quickfix.SessionSettings;
4243
import quickfix.ThreadedSocketAcceptor;
@@ -618,6 +619,51 @@ public void shouldFailWhenUsingBadServerCertificate() throws Exception {
618619
}
619620
}
620621

622+
@Test
623+
public void shouldConnectDifferentTypesOfSessions() throws Exception {
624+
int sslPort = AvailablePortFinder.getNextAvailable();
625+
int nonSslPort = AvailablePortFinder.getNextAvailable();
626+
TestAcceptor acceptor = new TestAcceptor(createMixedSessionAcceptorSettings(sslPort, nonSslPort, "single-session/server.keystore"));
627+
628+
try {
629+
acceptor.start();
630+
631+
TestInitiator sslInitiator = new TestInitiator(
632+
createInitiatorSettings("single-session/client.keystore", "single-session/client.truststore",
633+
CIPHER_SUITES_TLS, "TLSv1.2", "ZULU_SSL", "ALFA_SSL", Integer.toString(sslPort), "JKS", "JKS"));
634+
635+
TestInitiator nonSslInitiator = new TestInitiator(createInitiatorSettings("ZULU_NON_SSL", "ALFA_NON_SSL", nonSslPort));
636+
637+
try {
638+
sslInitiator.start();
639+
nonSslInitiator.start();
640+
641+
sslInitiator.assertNoSslExceptionThrown();
642+
sslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"));
643+
sslInitiator.assertAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"),
644+
new BigInteger("1448538842"));
645+
646+
acceptor.assertNoSslExceptionThrown();
647+
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));
648+
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));
649+
650+
nonSslInitiator.assertNoSslExceptionThrown();
651+
nonSslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));
652+
nonSslInitiator.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));
653+
654+
acceptor.assertNoSslExceptionThrown();
655+
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));
656+
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));
657+
658+
} finally {
659+
sslInitiator.stop();
660+
nonSslInitiator.stop();
661+
}
662+
} finally {
663+
acceptor.stop();
664+
}
665+
}
666+
621667
static abstract class TestConnector {
622668
private static final Logger LOGGER = LoggerFactory.getLogger(TestConnector.class);
623669
private static final int TIMEOUT_SECONDS = 5;
@@ -810,24 +856,53 @@ public SessionConnector createConnector(SessionSettings sessionSettings) throws
810856
return new ThreadedSocketInitiator(new ApplicationAdapter(),
811857
messageStoreFactory, sessionSettings, messageFactory);
812858
}
859+
}
813860

861+
/**
862+
* Creates acceptor settings that contains two sessions. One with SSL support, one without.
863+
*/
864+
private SessionSettings createMixedSessionAcceptorSettings(int sslPort, int nonSslPort, String keyStoreName) {
865+
HashMap<Object, Object> defaults = new HashMap<>();
866+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
867+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
868+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
869+
defaults.put(Session.SETTING_HEARTBTINT, "30");
870+
871+
SessionSettings sessionSettings = new SessionSettings();
872+
sessionSettings.set(defaults);
873+
874+
SessionID sslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL");
875+
sessionSettings.setString(sslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
876+
sessionSettings.setString(sslSession, "DataDictionary", "FIX44.xml");
877+
sessionSettings.setString(sslSession, "TargetCompID", "ZULU_SSL");
878+
sessionSettings.setString(sslSession, "SenderCompID", "ALFA_SSL");
879+
sessionSettings.setString(sslSession, SSLSupport.SETTING_USE_SSL, "Y");
880+
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
881+
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_PWD, "password");
882+
sessionSettings.setString(sslSession, SSLSupport.SETTING_NEED_CLIENT_AUTH, "N");
883+
sessionSettings.setString(sslSession, "SocketAcceptPort", Integer.toString(sslPort));
884+
885+
SessionID nonSslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL");
886+
sessionSettings.setString(nonSslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
887+
sessionSettings.setString(nonSslSession, "DataDictionary", "FIX44.xml");
888+
sessionSettings.setString(nonSslSession, "TargetCompID", "ZULU_NON_SSL");
889+
sessionSettings.setString(nonSslSession, "SenderCompID", "ALFA_NON_SSL");
890+
sessionSettings.setString(nonSslSession, "SocketAcceptPort", Integer.toString(nonSslPort));
891+
892+
return sessionSettings;
814893
}
815894

816895
private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName, boolean needClientAuth,
817896
String[] trustStoreNames, String cipherSuites, String protocols) {
818897
HashMap<Object, Object> defaults = new HashMap<>();
819-
defaults.put("ConnectionType", "acceptor");
820-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
898+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
821899
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
822900
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
823901
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
824-
825902
defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
826-
defaults.put("SocketAcceptHost", "localhost");
827-
defaults.put("StartTime", "00:00:00");
828-
defaults.put("EndTime", "00:00:00");
829-
defaults.put("HeartBtInt", "30");
830-
defaults.put("ReconnectInterval", "2");
903+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
904+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
905+
defaults.put(Session.SETTING_HEARTBTINT, "30");
831906

832907
if (cipherSuites != null) {
833908
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
@@ -857,8 +932,7 @@ private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName,
857932
private SessionSettings createAcceptorSettings(String keyStoreName, boolean needClientAuth, String trustStoreName,
858933
String cipherSuites, String protocols, String keyStoreType, String trustStoreType, int port) {
859934
HashMap<Object, Object> defaults = new HashMap<>();
860-
defaults.put("ConnectionType", "acceptor");
861-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
935+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
862936
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
863937
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
864938
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
@@ -877,12 +951,10 @@ private SessionSettings createAcceptorSettings(String keyStoreName, boolean need
877951
}
878952

879953
defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
880-
defaults.put("SocketAcceptHost", "localhost");
881-
defaults.put("SocketAcceptPort", Integer.toString(port));
882-
defaults.put("StartTime", "00:00:00");
883-
defaults.put("EndTime", "00:00:00");
884-
defaults.put("HeartBtInt", "30");
885-
defaults.put("ReconnectInterval", "2");
954+
defaults.put(Acceptor.SETTING_SOCKET_ACCEPT_PORT, Integer.toString(port));
955+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
956+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
957+
defaults.put(Session.SETTING_HEARTBTINT, "30");
886958

887959
if (cipherSuites != null) {
888960
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
@@ -914,8 +986,8 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
914986
String protocols, String senderId, String targetId, String port, String keyStoreType,
915987
String trustStoreType, String endpointIdentificationAlgorithm) {
916988
HashMap<Object, Object> defaults = new HashMap<>();
917-
defaults.put("ConnectionType", "initiator");
918-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
989+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
990+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
919991
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
920992
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
921993
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
@@ -933,12 +1005,12 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
9331005
}
9341006
}
9351007

936-
defaults.put("SocketConnectHost", "localhost");
937-
defaults.put("SocketConnectPort", port);
938-
defaults.put("StartTime", "00:00:00");
939-
defaults.put("EndTime", "00:00:00");
940-
defaults.put("HeartBtInt", "30");
941-
defaults.put("ReconnectInterval", "2");
1008+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
1009+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, port);
1010+
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
1011+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
1012+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
1013+
defaults.put(Session.SETTING_HEARTBTINT, "30");
9421014

9431015
if (cipherSuites != null) {
9441016
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
@@ -963,4 +1035,27 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
9631035

9641036
return sessionSettings;
9651037
}
1038+
1039+
private SessionSettings createInitiatorSettings(String senderId, String targetId, int port) {
1040+
HashMap<Object, Object> defaults = new HashMap<>();
1041+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
1042+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
1043+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
1044+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, Integer.toString(port));
1045+
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
1046+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
1047+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
1048+
defaults.put(Session.SETTING_HEARTBTINT, "30");
1049+
1050+
SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX44, senderId, targetId);
1051+
1052+
SessionSettings sessionSettings = new SessionSettings();
1053+
sessionSettings.set(defaults);
1054+
sessionSettings.setString(sessionID, "BeginString", FixVersions.BEGINSTRING_FIX44);
1055+
sessionSettings.setString(sessionID, "DataDictionary", "FIX44.xml");
1056+
sessionSettings.setString(sessionID, "SenderCompID", senderId);
1057+
sessionSettings.setString(sessionID, "TargetCompID", targetId);
1058+
1059+
return sessionSettings;
1060+
}
9661061
}

0 commit comments

Comments
 (0)