2323import org .apache .mina .core .filterchain .IoFilterChain ;
2424import org .apache .mina .core .session .IoSession ;
2525import org .apache .mina .filter .ssl .SslFilter ;
26- import org .junit .Assert ;
2726import org .junit .Test ;
2827import org .slf4j .Logger ;
2928import org .slf4j .LoggerFactory ;
29+ import quickfix .Acceptor ;
3030import quickfix .ApplicationAdapter ;
3131import quickfix .ConfigError ;
3232import quickfix .DefaultMessageFactory ;
3333import quickfix .FixVersions ;
34+ import quickfix .Initiator ;
3435import quickfix .MemoryStoreFactory ;
3536import quickfix .MessageFactory ;
3637import quickfix .MessageStoreFactory ;
3738import quickfix .RuntimeError ;
3839import quickfix .Session ;
40+ import quickfix .SessionFactory ;
3941import quickfix .SessionID ;
4042import quickfix .SessionSettings ;
4143import 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