Skip to content

Commit f470c02

Browse files
authored
Merge pull request #761 from the-thing/ssl_mixed_sessions
Additional test scenario with acceptor running mixed sessions
2 parents 8e25819 + 7e66ea8 commit f470c02

File tree

1 file changed

+121
-25
lines changed

1 file changed

+121
-25
lines changed

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

Lines changed: 121 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,21 @@
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;
3333
import quickfix.FixVersions;
34+
import quickfix.Initiator;
3435
import quickfix.MemoryStoreFactory;
3536
import quickfix.MessageFactory;
3637
import quickfix.MessageStoreFactory;
3738
import quickfix.RuntimeError;
3839
import quickfix.Session;
40+
import quickfix.SessionFactory;
3941
import quickfix.SessionID;
4042
import quickfix.SessionSettings;
4143
import quickfix.ThreadedSocketAcceptor;
@@ -552,6 +554,51 @@ public void shouldFailWhenUsingBadServerCertificate() throws Exception {
552554
}
553555
}
554556

557+
@Test
558+
public void shouldConnectDifferentTypesOfSessions() throws Exception {
559+
int sslPort = AvailablePortFinder.getNextAvailable();
560+
int nonSslPort = AvailablePortFinder.getNextAvailable();
561+
TestAcceptor acceptor = new TestAcceptor(createMixedSessionAcceptorSettings(sslPort, nonSslPort, "single-session/server.keystore"));
562+
563+
try {
564+
acceptor.start();
565+
566+
TestInitiator sslInitiator = new TestInitiator(
567+
createInitiatorSettings("single-session/client.keystore", "single-session/client.truststore",
568+
CIPHER_SUITES_TLS, "TLSv1.2", "ZULU_SSL", "ALFA_SSL", Integer.toString(sslPort), "JKS", "JKS"));
569+
570+
TestInitiator nonSslInitiator = new TestInitiator(createInitiatorSettings("ZULU_NON_SSL", "ALFA_NON_SSL", nonSslPort));
571+
572+
try {
573+
sslInitiator.start();
574+
nonSslInitiator.start();
575+
576+
sslInitiator.assertNoSslExceptionThrown();
577+
sslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"));
578+
sslInitiator.assertAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_SSL", "ALFA_SSL"),
579+
new BigInteger("1448538842"));
580+
581+
acceptor.assertNoSslExceptionThrown();
582+
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));
583+
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL"));
584+
585+
nonSslInitiator.assertNoSslExceptionThrown();
586+
nonSslInitiator.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));
587+
nonSslInitiator.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ZULU_NON_SSL", "ALFA_NON_SSL"));
588+
589+
acceptor.assertNoSslExceptionThrown();
590+
acceptor.assertLoggedOn(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));
591+
acceptor.assertNotAuthenticated(new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL"));
592+
593+
} finally {
594+
sslInitiator.stop();
595+
nonSslInitiator.stop();
596+
}
597+
} finally {
598+
acceptor.stop();
599+
}
600+
}
601+
555602
static abstract class TestConnector {
556603
private static final Logger LOGGER = LoggerFactory.getLogger(TestConnector.class);
557604
private static final int TIMEOUT_SECONDS = 5;
@@ -744,24 +791,53 @@ public SessionConnector createConnector(SessionSettings sessionSettings) throws
744791
return new ThreadedSocketInitiator(new ApplicationAdapter(),
745792
messageStoreFactory, sessionSettings, messageFactory);
746793
}
794+
}
747795

796+
/**
797+
* Creates acceptor settings that contains two sessions. One with SSL support, one without.
798+
*/
799+
private SessionSettings createMixedSessionAcceptorSettings(int sslPort, int nonSslPort, String keyStoreName) {
800+
HashMap<Object, Object> defaults = new HashMap<>();
801+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
802+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
803+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
804+
defaults.put(Session.SETTING_HEARTBTINT, "30");
805+
806+
SessionSettings sessionSettings = new SessionSettings();
807+
sessionSettings.set(defaults);
808+
809+
SessionID sslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_SSL", "ZULU_SSL");
810+
sessionSettings.setString(sslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
811+
sessionSettings.setString(sslSession, "DataDictionary", "FIX44.xml");
812+
sessionSettings.setString(sslSession, "TargetCompID", "ZULU_SSL");
813+
sessionSettings.setString(sslSession, "SenderCompID", "ALFA_SSL");
814+
sessionSettings.setString(sslSession, SSLSupport.SETTING_USE_SSL, "Y");
815+
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
816+
sessionSettings.setString(sslSession, SSLSupport.SETTING_KEY_STORE_PWD, "password");
817+
sessionSettings.setString(sslSession, SSLSupport.SETTING_NEED_CLIENT_AUTH, "N");
818+
sessionSettings.setString(sslSession, "SocketAcceptPort", Integer.toString(sslPort));
819+
820+
SessionID nonSslSession = new SessionID(FixVersions.BEGINSTRING_FIX44, "ALFA_NON_SSL", "ZULU_NON_SSL");
821+
sessionSettings.setString(nonSslSession, "BeginString", FixVersions.BEGINSTRING_FIX44);
822+
sessionSettings.setString(nonSslSession, "DataDictionary", "FIX44.xml");
823+
sessionSettings.setString(nonSslSession, "TargetCompID", "ZULU_NON_SSL");
824+
sessionSettings.setString(nonSslSession, "SenderCompID", "ALFA_NON_SSL");
825+
sessionSettings.setString(nonSslSession, "SocketAcceptPort", Integer.toString(nonSslPort));
826+
827+
return sessionSettings;
748828
}
749829

750830
private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName, boolean needClientAuth,
751831
String[] trustStoreNames, String cipherSuites, String protocols) {
752832
HashMap<Object, Object> defaults = new HashMap<>();
753-
defaults.put("ConnectionType", "acceptor");
754-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
833+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
755834
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
756835
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
757836
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
758-
759837
defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
760-
defaults.put("SocketAcceptHost", "localhost");
761-
defaults.put("StartTime", "00:00:00");
762-
defaults.put("EndTime", "00:00:00");
763-
defaults.put("HeartBtInt", "30");
764-
defaults.put("ReconnectInterval", "2");
838+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
839+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
840+
defaults.put(Session.SETTING_HEARTBTINT, "30");
765841

766842
if (cipherSuites != null) {
767843
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
@@ -791,8 +867,7 @@ private SessionSettings createMultiSessionAcceptorSettings(String keyStoreName,
791867
private SessionSettings createAcceptorSettings(String keyStoreName, boolean needClientAuth, String trustStoreName,
792868
String cipherSuites, String protocols, String keyStoreType, String trustStoreType, int port) {
793869
HashMap<Object, Object> defaults = new HashMap<>();
794-
defaults.put("ConnectionType", "acceptor");
795-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
870+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "acceptor");
796871
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
797872
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
798873
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
@@ -811,12 +886,10 @@ private SessionSettings createAcceptorSettings(String keyStoreName, boolean need
811886
}
812887

813888
defaults.put(SSLSupport.SETTING_NEED_CLIENT_AUTH, needClientAuth ? "Y" : "N");
814-
defaults.put("SocketAcceptHost", "localhost");
815-
defaults.put("SocketAcceptPort", Integer.toString(port));
816-
defaults.put("StartTime", "00:00:00");
817-
defaults.put("EndTime", "00:00:00");
818-
defaults.put("HeartBtInt", "30");
819-
defaults.put("ReconnectInterval", "2");
889+
defaults.put(Acceptor.SETTING_SOCKET_ACCEPT_PORT, Integer.toString(port));
890+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
891+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
892+
defaults.put(Session.SETTING_HEARTBTINT, "30");
820893

821894
if (cipherSuites != null) {
822895
defaults.put(SSLSupport.SETTING_CIPHER_SUITES, cipherSuites);
@@ -848,8 +921,8 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
848921
String protocols, String senderId, String targetId, String port, String keyStoreType,
849922
String trustStoreType, String endpointIdentificationAlgorithm) {
850923
HashMap<Object, Object> defaults = new HashMap<>();
851-
defaults.put("ConnectionType", "initiator");
852-
defaults.put("SocketConnectProtocol", ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
924+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
925+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
853926
defaults.put(SSLSupport.SETTING_USE_SSL, "Y");
854927
defaults.put(SSLSupport.SETTING_KEY_STORE_NAME, keyStoreName);
855928
defaults.put(SSLSupport.SETTING_KEY_STORE_PWD, "password");
@@ -867,12 +940,12 @@ private SessionSettings createInitiatorSettings(String keyStoreName, String trus
867940
}
868941
}
869942

870-
defaults.put("SocketConnectHost", "localhost");
871-
defaults.put("SocketConnectPort", port);
872-
defaults.put("StartTime", "00:00:00");
873-
defaults.put("EndTime", "00:00:00");
874-
defaults.put("HeartBtInt", "30");
875-
defaults.put("ReconnectInterval", "2");
943+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
944+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, port);
945+
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
946+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
947+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
948+
defaults.put(Session.SETTING_HEARTBTINT, "30");
876949

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

898971
return sessionSettings;
899972
}
973+
974+
private SessionSettings createInitiatorSettings(String senderId, String targetId, int port) {
975+
HashMap<Object, Object> defaults = new HashMap<>();
976+
defaults.put(SessionFactory.SETTING_CONNECTION_TYPE, "initiator");
977+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PROTOCOL, ProtocolFactory.getTypeString(ProtocolFactory.SOCKET));
978+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_HOST, "localhost");
979+
defaults.put(Initiator.SETTING_SOCKET_CONNECT_PORT, Integer.toString(port));
980+
defaults.put(Initiator.SETTING_RECONNECT_INTERVAL, "2");
981+
defaults.put(Session.SETTING_START_TIME, "00:00:00");
982+
defaults.put(Session.SETTING_END_TIME, "00:00:00");
983+
defaults.put(Session.SETTING_HEARTBTINT, "30");
984+
985+
SessionID sessionID = new SessionID(FixVersions.BEGINSTRING_FIX44, senderId, targetId);
986+
987+
SessionSettings sessionSettings = new SessionSettings();
988+
sessionSettings.set(defaults);
989+
sessionSettings.setString(sessionID, "BeginString", FixVersions.BEGINSTRING_FIX44);
990+
sessionSettings.setString(sessionID, "DataDictionary", "FIX44.xml");
991+
sessionSettings.setString(sessionID, "SenderCompID", senderId);
992+
sessionSettings.setString(sessionID, "TargetCompID", targetId);
993+
994+
return sessionSettings;
995+
}
900996
}

0 commit comments

Comments
 (0)