@@ -126,3 +126,51 @@ func TestAcceptor_SetTLSConfig(t *testing.T) {
126126 assert .NotNil (t , conn )
127127 defer conn .Close ()
128128}
129+
130+ func TestAcceptor_SetCallback (t * testing.T ) {
131+ sessionSettings := NewSessionSettings ()
132+ sessionSettings .Set (config .BeginString , BeginStringFIX42 )
133+ sessionSettings .Set (config .SenderCompID , "sender" )
134+ sessionSettings .Set (config .TargetCompID , "target" )
135+
136+ genericSettings := NewSettings ()
137+
138+ genericSettings .GlobalSettings ().Set ("SocketAcceptPort" , "5001" )
139+ _ , err := genericSettings .AddSession (sessionSettings )
140+ require .NoError (t , err )
141+
142+ logger , err := NewNullLogFactory ().Create ()
143+ require .NoError (t , err )
144+ acceptor := & Acceptor {settings : genericSettings , globalLog : logger }
145+ defer acceptor .Stop ()
146+ // example of a customized tls.Config that loads the certificates dynamically by the `GetCertificate` function
147+ // as opposed to the Certificates slice, that is static in nature, and is only populated once and needs application restart to reload the certs.
148+ customizedTLSConfig := tls.Config {
149+ Certificates : []tls.Certificate {},
150+ GetCertificate : func (* tls.ClientHelloInfo ) (* tls.Certificate , error ) {
151+ cert , err := tls .LoadX509KeyPair ("_test_data/localhost.crt" , "_test_data/localhost.key" )
152+ if err != nil {
153+ return nil , err
154+ }
155+ return & cert , nil
156+ },
157+ }
158+
159+ didUseCallback := false
160+ acceptor .SetTLSConfig (& customizedTLSConfig )
161+ acceptor .SetNewListenerCallback (func (address string , tlsConfig * tls.Config ) (net.Listener , error ) {
162+ didUseCallback = true
163+ assert .Equal (t , & customizedTLSConfig , tlsConfig )
164+ return tls .Listen ("tcp" , address , tlsConfig )
165+ })
166+ assert .NoError (t , acceptor .Start ())
167+ assert .Len (t , acceptor .listeners , 1 )
168+
169+ conn , err := tls .Dial ("tcp" , "localhost:5001" , & tls.Config {
170+ InsecureSkipVerify : true ,
171+ })
172+ require .NoError (t , err )
173+ assert .NotNil (t , conn )
174+ assert .True (t , didUseCallback )
175+ defer conn .Close ()
176+ }
0 commit comments