Skip to content

Commit bd47bca

Browse files
committed
feat(registry): added self contained registries so you can run a back to back test in process
1 parent 9449794 commit bd47bca

13 files changed

+483
-87
lines changed

EmptyApplication.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package quickfix
2+
3+
type EmptyApplication struct{}
4+
5+
var _ Application = EmptyApplication{}
6+
7+
func (e EmptyApplication) OnCreate(_ SessionID) {
8+
}
9+
10+
func (e EmptyApplication) OnLogon(_ SessionID) {
11+
}
12+
13+
func (e EmptyApplication) OnLogout(_ SessionID) {
14+
}
15+
16+
func (e EmptyApplication) ToAdmin(_ *Message, _ SessionID) {
17+
}
18+
19+
func (e EmptyApplication) ToApp(_ *Message, _ SessionID) error {
20+
return nil
21+
}
22+
23+
func (e EmptyApplication) FromAdmin(_ *Message, _ SessionID) MessageRejectError {
24+
return nil
25+
}
26+
27+
func (e EmptyApplication) FromApp(_ *Message, _ SessionID) MessageRejectError {
28+
return nil
29+
}

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ vet:
1717
go vet `go list ./... | grep -v quickfix/gen`
1818

1919
test:
20-
MONGODB_TEST_CXN=mongodb://db:27017 go test -v -cover `go list ./... | grep -v quickfix/gen`
20+
MONGODB_TEST_CXN=mongodb://db:27017 go test -v -race -timeout 20s -cover `go list ./... | grep -v quickfix/gen`
2121

2222
linters-install:
2323
@golangci-lint --version >/dev/null 2>&1 || { \

acceptor.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (a *Acceptor) Stop() {
150150
a.sessionGroup.Wait()
151151

152152
for sessionID := range a.sessions {
153-
err := UnregisterSession(sessionID)
153+
err := a.UnregisterSession(sessionID)
154154
if err != nil {
155155
return
156156
}
@@ -167,8 +167,16 @@ func (a *Acceptor) RemoteAddr(sessionID SessionID) (net.Addr, bool) {
167167
return val, ok
168168
}
169169

170+
type AcceptorOption func(*Acceptor)
171+
172+
func WithAcceptorRegistry(registry *Registry) AcceptorOption {
173+
return func(a *Acceptor) {
174+
a.sessionFactory.Registry = registry
175+
}
176+
}
177+
170178
// NewAcceptor creates and initializes a new Acceptor.
171-
func NewAcceptor(app Application, storeFactory MessageStoreFactory, settings *Settings, logFactory LogFactory) (a *Acceptor, err error) {
179+
func NewAcceptor(app Application, storeFactory MessageStoreFactory, settings *Settings, logFactory LogFactory, opts ...AcceptorOption) (a *Acceptor, err error) {
172180
a = &Acceptor{
173181
app: app,
174182
storeFactory: storeFactory,
@@ -178,6 +186,11 @@ func NewAcceptor(app Application, storeFactory MessageStoreFactory, settings *Se
178186
sessionHostPort: make(map[SessionID]int),
179187
listeners: make(map[string]net.Listener),
180188
}
189+
a.sessionFactory.Registry = defaultRegistry
190+
for _, opt := range opts {
191+
opt(a)
192+
}
193+
181194
if a.settings.GlobalSettings().HasSetting(config.DynamicSessions) {
182195
if a.dynamicSessions, err = settings.globalSettings.BoolSetting(config.DynamicSessions); err != nil {
183196
return
@@ -386,7 +399,7 @@ LOOP:
386399
sessions[sessionID] = session
387400
go func() {
388401
session.run()
389-
err := UnregisterSession(session.sessionID)
402+
err := a.UnregisterSession(session.sessionID)
390403
if err != nil {
391404
a.globalLog.OnEventf("Unregister dynamic session %v failed: %v", session.sessionID, err)
392405
return

go.mod

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,31 @@ go 1.23
44

55
require (
66
github.com/mattn/go-sqlite3 v1.14.22
7-
github.com/pires/go-proxyproto v0.7.0
7+
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5
8+
github.com/pires/go-proxyproto v0.8.0
89
github.com/pkg/errors v0.9.1
910
github.com/quagmt/udecimal v1.8.0
1011
github.com/shopspring/decimal v1.4.0
11-
github.com/stretchr/testify v1.9.0
12-
go.mongodb.org/mongo-driver v1.15.0
13-
golang.org/x/net v0.24.0
12+
github.com/stretchr/testify v1.10.0
13+
go.mongodb.org/mongo-driver v1.17.1
14+
golang.org/x/net v0.32.0
1415
)
1516

1617
require (
1718
github.com/davecgh/go-spew v1.1.1 // indirect
1819
github.com/golang/snappy v0.0.4 // indirect
1920
github.com/klauspost/compress v1.15.12 // indirect
20-
github.com/kr/text v0.2.0 // indirect
21-
github.com/montanaflynn/stats v0.6.6 // indirect
21+
github.com/kr/pretty v0.3.0 // indirect
22+
github.com/montanaflynn/stats v0.7.1 // indirect
2223
github.com/pmezard/go-difflib v1.0.0 // indirect
2324
github.com/stretchr/objx v0.5.2 // indirect
2425
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
2526
github.com/xdg-go/scram v1.1.2 // indirect
2627
github.com/xdg-go/stringprep v1.0.4 // indirect
27-
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
28-
golang.org/x/crypto v0.22.0 // indirect
29-
golang.org/x/sync v0.1.0 // indirect
30-
golang.org/x/text v0.14.0 // indirect
28+
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
29+
golang.org/x/crypto v0.30.0 // indirect
30+
golang.org/x/sync v0.10.0 // indirect
31+
golang.org/x/text v0.21.0 // indirect
3132
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
3233
gopkg.in/yaml.v3 v3.0.1 // indirect
3334
)

go.sum

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,63 +3,74 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
33
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
44
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
55
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
6-
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
7-
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
6+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
7+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
88
github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM=
99
github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
10-
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
10+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
1111
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
12+
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
13+
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
1214
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1315
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
1416
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1517
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
1618
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
1719
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
18-
github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
19-
github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
20-
github.com/pires/go-proxyproto v0.7.0 h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs=
21-
github.com/pires/go-proxyproto v0.7.0/go.mod h1:Vz/1JPY/OACxWGQNIRY2BeyDmpoaWmEP40O9LbuiFR4=
20+
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
21+
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
22+
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
23+
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
24+
github.com/pires/go-proxyproto v0.8.0 h1:5unRmEAPbHXHuLjDg01CxJWf91cw3lKHc/0xzKpXEe0=
25+
github.com/pires/go-proxyproto v0.8.0/go.mod h1:iknsfgnH8EkjrMeMyvfKByp9TiBZCKZM0jx2xmKqnVY=
2226
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
2327
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
2428
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2529
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2630
github.com/quagmt/udecimal v1.8.0 h1:d4MJNGb/dg8r03AprkeSiDlVKtkZnL10L3de/YGOiiI=
2731
github.com/quagmt/udecimal v1.8.0/go.mod h1:ScmJ/xTGZcEoYiyMMzgDLn79PEJHcMBiJ4NNRT3FirA=
32+
github.com/quickfixgo/enum v0.1.0 h1:TnCPOqxAWA5/IWp7lsvj97x7oyuHYgj3STBJlBzZGjM=
33+
github.com/quickfixgo/enum v0.1.0/go.mod h1:65gdG2/8vr6uOYcjZBObVHMuTEYc5rr/+aKVWTrFIrQ=
34+
github.com/quickfixgo/field v0.1.0 h1:JVO6fVD6Nkyy8e/ROYQtV/nQhMX/BStD5Lq7XIgYz2g=
35+
github.com/quickfixgo/field v0.1.0/go.mod h1:Zu0qYmpj+gljlB2HgpUt9EcTIThs2lIQb8C57qbJr8o=
36+
github.com/quickfixgo/fix44 v0.1.0 h1:g/rTl6mXDlG7iIMbY7zaPbHcj9N/B+tteOZ01yGzeSQ=
37+
github.com/quickfixgo/fix44 v0.1.0/go.mod h1:d6Ia02Eq/JYgKCn/2V9FHxguAl1Alp/yu/xVpry82dA=
38+
github.com/quickfixgo/tag v0.1.0 h1:R2A1Zf7CBE903+mOQlmTlfTmNZQz/yh7HunMbgcsqsA=
39+
github.com/quickfixgo/tag v0.1.0/go.mod h1:l/drB1eO3PwN9JQTDC9Vt2EqOcaXk3kGJ+eeCQljvAI=
40+
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
41+
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
2842
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
2943
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
3044
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
3145
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
32-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
33-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
46+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
47+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
3448
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
3549
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
3650
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
3751
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
3852
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
3953
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
40-
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
41-
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
54+
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
55+
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
4256
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
43-
go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc=
44-
go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
57+
go.mongodb.org/mongo-driver v1.17.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM=
58+
go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4=
4559
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
46-
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
4760
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
48-
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
49-
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
61+
golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY=
62+
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
5063
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
51-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
5264
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
5365
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
5466
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
55-
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
56-
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
67+
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
68+
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
5769
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5870
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
59-
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
60-
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
71+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
72+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6173
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
62-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6374
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6475
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6576
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -70,16 +81,16 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
7081
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
7182
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
7283
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
73-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
74-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
84+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
85+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
7586
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
7687
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
7788
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
7889
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
79-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
80-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
8190
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
91+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
8292
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
8393
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
94+
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
8495
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
8596
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

initiator.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,23 +78,35 @@ func (i *Initiator) Stop() {
7878
i.wg.Wait()
7979

8080
for sessionID := range i.sessionSettings {
81-
err := UnregisterSession(sessionID)
81+
err := i.UnregisterSession(sessionID)
8282
if err != nil {
8383
return
8484
}
8585
}
8686
}
8787

88+
type InitiatorOption func(*Initiator)
89+
90+
func WithInitiatorRegistry(registry *Registry) InitiatorOption {
91+
return func(i *Initiator) {
92+
i.sessionFactory.Registry = registry
93+
}
94+
}
95+
8896
// NewInitiator creates and initializes a new Initiator.
89-
func NewInitiator(app Application, storeFactory MessageStoreFactory, appSettings *Settings, logFactory LogFactory) (*Initiator, error) {
97+
func NewInitiator(app Application, storeFactory MessageStoreFactory, appSettings *Settings, logFactory LogFactory, opts ...InitiatorOption) (*Initiator, error) {
9098
i := &Initiator{
9199
app: app,
92100
storeFactory: storeFactory,
93101
settings: appSettings,
94102
sessionSettings: appSettings.SessionSettings(),
95103
logFactory: logFactory,
96104
sessions: make(map[SessionID]*session),
97-
sessionFactory: sessionFactory{true},
105+
sessionFactory: sessionFactory{BuildInitiators: true, Registry: defaultRegistry},
106+
}
107+
108+
for _, opt := range opts {
109+
opt(i)
98110
}
99111

100112
var err error

message_router.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,24 @@ type MessageRoute func(msg *Message, sessionID SessionID) MessageRejectError
4040
// A MessageRouter is a mutex for MessageRoutes.
4141
type MessageRouter struct {
4242
routes map[routeKey]MessageRoute
43+
*Registry
44+
}
45+
type RouterOption func(*MessageRouter)
46+
47+
func WithMessageRouterRegistry(registry *Registry) RouterOption {
48+
return func(r *MessageRouter) {
49+
r.Registry = registry
50+
}
4351
}
4452

4553
// NewMessageRouter returns an initialized MessageRouter instance.
46-
func NewMessageRouter() *MessageRouter {
47-
return &MessageRouter{routes: make(map[routeKey]MessageRoute)}
54+
func NewMessageRouter(opts ...RouterOption) *MessageRouter {
55+
router := MessageRouter{routes: make(map[routeKey]MessageRoute)}
56+
router.Registry = defaultRegistry
57+
for _, opt := range opts {
58+
opt(&router)
59+
}
60+
return &router
4861
}
4962

5063
// AddRoute adds a route to the MessageRouter instance keyed to begin string and msgType.
@@ -74,7 +87,7 @@ func (c MessageRouter) tryRoute(beginString string, msgType string, msg *Message
7487
if beginString == BeginStringFIXT11 && !isAdminMsg {
7588
var applVerID FIXString
7689
if err := msg.Header.GetField(tagApplVerID, &applVerID); err != nil {
77-
session, _ := lookupSession(sessionID)
90+
session, _ := c.lookupSession(sessionID)
7891
applVerID = FIXString(session.TargetDefaultApplicationVersionID())
7992
}
8093

message_router_test.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (suite *MessageRouterTestSuite) givenTargetDefaultApplVerIDForSession(defau
7070
sessionID: sessionID,
7171
targetDefaultApplVerID: defaultApplVerID,
7272
}
73-
suite.Nil(registerSession(s))
73+
suite.Nil(suite.registerSession(s))
7474
}
7575

7676
func (suite *MessageRouterTestSuite) givenAFIX42NewOrderSingle() {
@@ -107,10 +107,7 @@ func (suite *MessageRouterTestSuite) resetRouter() {
107107

108108
func (suite *MessageRouterTestSuite) SetupTest() {
109109
suite.resetRouter()
110-
sessionsLock.Lock()
111-
defer sessionsLock.Unlock()
112-
113-
sessions = make(map[SessionID]*session)
110+
suite.Registry = NewRegistry()
114111
suite.msg = NewMessage()
115112
}
116113

0 commit comments

Comments
 (0)