Skip to content

Commit 2bcef59

Browse files
authored
Merge pull request #592 from ackleymi/store-refactor
Refactor external stores into packages
2 parents 5290cae + 7793615 commit 2bcef59

File tree

17 files changed

+407
-259
lines changed

17 files changed

+407
-259
lines changed

.golangci.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,5 @@ linters:
2222
linters-settings:
2323
gofmt:
2424
simplify: true
25-
goimports:
26-
local-prefixes: github.com/quickfixgo/quickfix
2725
dupl:
2826
threshold: 400

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ vet:
1414
go vet `go list ./... | grep -v quickfix/gen`
1515

1616
test:
17-
MONGODB_TEST_CXN=mongodb://db:27017 go test -v -cover . ./datadictionary ./internal
17+
MONGODB_TEST_CXN=mongodb://db:27017 go test -v -cover `go list ./... | grep -v quickfix/gen`
1818

1919
linters-install:
2020
@golangci-lint --version >/dev/null 2>&1 || { \
@@ -62,7 +62,7 @@ build-src:
6262
build: build-src build-test-srv
6363

6464
test-ci:
65-
go test -v -cover . ./datadictionary ./internal
65+
go test -v -cover `go list ./... | grep -v quickfix/gen`
6666

6767
generate-ci: clean
6868
mkdir -p gen; cd gen; go run ../cmd/generate-fix/generate-fix.go -pkg-root=github.com/quickfixgo/quickfix/gen ../spec/$(shell echo $(FIX_TEST) | tr '[:lower:]' '[:upper:]').xml;

_test/test-server/main.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"github.com/quickfixgo/quickfix/config"
1616
field "github.com/quickfixgo/quickfix/gen/field"
1717
tag "github.com/quickfixgo/quickfix/gen/tag"
18+
"github.com/quickfixgo/quickfix/store/file"
19+
"github.com/quickfixgo/quickfix/store/mongo"
1820
)
1921

2022
var router *quickfix.MessageRouter = quickfix.NewMessageRouter()
@@ -149,16 +151,16 @@ func main() {
149151
appSettings.GlobalSettings().Set(config.MongoStoreReplicaSet, mongoReplicaSet)
150152
appSettings.GlobalSettings().Set(config.DynamicSessions, "Y")
151153

152-
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewMongoStoreFactory(appSettings), appSettings, fileLogFactory)
154+
acceptor, err = quickfix.NewAcceptor(app, mongo.NewStoreFactory(appSettings), appSettings, fileLogFactory)
153155
case "FILE":
154156
fileStoreRootPath := path.Join(os.TempDir(), fmt.Sprintf("FileStoreTestSuite-%d", os.Getpid()))
155157
fileStorePath := path.Join(fileStoreRootPath, fmt.Sprintf("%d", time.Now().UnixNano()))
156158
appSettings.GlobalSettings().Set(config.FileStorePath, fileStorePath)
157159
appSettings.GlobalSettings().Set(config.DynamicSessions, "Y")
158160

159-
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewFileStoreFactory(appSettings), appSettings, fileLogFactory)
161+
acceptor, err = quickfix.NewAcceptor(app, file.NewStoreFactory(appSettings), appSettings, fileLogFactory)
160162
case "MEMORY":
161-
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewMemoryStoreFactory(), appSettings, fileLogFactory)
163+
fallthrough
162164
default:
163165
acceptor, err = quickfix.NewAcceptor(app, quickfix.NewMemoryStoreFactory(), appSettings, fileLogFactory)
164166
}

fileutil.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ import (
1919
"fmt"
2020
"os"
2121
"strings"
22-
23-
"github.com/pkg/errors"
2422
)
2523

2624
func sessionIDFilenamePrefix(s SessionID) string {
@@ -47,26 +45,6 @@ func sessionIDFilenamePrefix(s SessionID) string {
4745
return strings.Join(fname, "-")
4846
}
4947

50-
// closeFile behaves like Close, except that no error is returned if the file does not exist.
51-
func closeFile(f *os.File) error {
52-
if f != nil {
53-
if err := f.Close(); err != nil {
54-
if !os.IsNotExist(err) {
55-
return err
56-
}
57-
}
58-
}
59-
return nil
60-
}
61-
62-
// removeFile behaves like os.Remove, except that no error is returned if the file does not exist.
63-
func removeFile(fname string) error {
64-
if err := os.Remove(fname); (err != nil) && !os.IsNotExist(err) {
65-
return errors.Wrapf(err, "remove %v", fname)
66-
}
67-
return nil
68-
}
69-
7048
// openOrCreateFile opens a file for reading and writing, creating it if necessary.
7149
func openOrCreateFile(fname string, perm os.FileMode) (f *os.File, err error) {
7250
if f, err = os.OpenFile(fname, os.O_RDWR, perm); err != nil {

store_test.go renamed to internal/testsuite/store_suite.go

Lines changed: 51 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -13,99 +13,83 @@
1313
// Contact [email protected] if any conditions of this licensing
1414
// are not clear to you.
1515

16-
package quickfix
16+
package testsuite
1717

1818
import (
19-
"testing"
2019
"time"
2120

21+
"github.com/quickfixgo/quickfix"
2222
"github.com/stretchr/testify/assert"
2323
"github.com/stretchr/testify/require"
2424
"github.com/stretchr/testify/suite"
2525
)
2626

27-
// MessageStoreTestSuite is the suite of all tests that should be run against all MessageStore implementations.
28-
type MessageStoreTestSuite struct {
27+
type StoreTestSuite struct {
2928
suite.Suite
30-
msgStore MessageStore
29+
MsgStore quickfix.MessageStore
3130
}
3231

33-
// MemoryStoreTestSuite runs all tests in the MessageStoreTestSuite against the MemoryStore implementation.
34-
type MemoryStoreTestSuite struct {
35-
MessageStoreTestSuite
36-
}
37-
38-
func (suite *MemoryStoreTestSuite) SetupTest() {
39-
var err error
40-
suite.msgStore, err = NewMemoryStoreFactory().Create(SessionID{})
41-
require.Nil(suite.T(), err)
42-
}
43-
44-
func TestMemoryStoreTestSuite(t *testing.T) {
45-
suite.Run(t, new(MemoryStoreTestSuite))
46-
}
47-
48-
func (s *MessageStoreTestSuite) TestMessageStore_SetNextMsgSeqNum_Refresh_IncrNextMsgSeqNum() {
32+
func (s *StoreTestSuite) TestMessageStoreSetNextMsgSeqNumRefreshIncrNextMsgSeqNum() {
4933
// Given a MessageStore with the following sender and target seqnums
50-
s.Require().Nil(s.msgStore.SetNextSenderMsgSeqNum(867))
51-
s.Require().Nil(s.msgStore.SetNextTargetMsgSeqNum(5309))
34+
s.Require().Nil(s.MsgStore.SetNextSenderMsgSeqNum(867))
35+
s.Require().Nil(s.MsgStore.SetNextTargetMsgSeqNum(5309))
5236

5337
// When the store is refreshed from its backing store
54-
s.Require().Nil(s.msgStore.Refresh())
38+
s.Require().Nil(s.MsgStore.Refresh())
5539

5640
// Then the sender and target seqnums should still be
57-
s.Equal(867, s.msgStore.NextSenderMsgSeqNum())
58-
s.Equal(5309, s.msgStore.NextTargetMsgSeqNum())
41+
s.Equal(867, s.MsgStore.NextSenderMsgSeqNum())
42+
s.Equal(5309, s.MsgStore.NextTargetMsgSeqNum())
5943

6044
// When the sender and target seqnums are incremented
61-
s.Require().Nil(s.msgStore.IncrNextSenderMsgSeqNum())
62-
s.Require().Nil(s.msgStore.IncrNextTargetMsgSeqNum())
45+
s.Require().Nil(s.MsgStore.IncrNextSenderMsgSeqNum())
46+
s.Require().Nil(s.MsgStore.IncrNextTargetMsgSeqNum())
6347

6448
// Then the sender and target seqnums should be
65-
s.Equal(868, s.msgStore.NextSenderMsgSeqNum())
66-
s.Equal(5310, s.msgStore.NextTargetMsgSeqNum())
49+
s.Equal(868, s.MsgStore.NextSenderMsgSeqNum())
50+
s.Equal(5310, s.MsgStore.NextTargetMsgSeqNum())
6751

6852
// When the store is refreshed from its backing store
69-
s.Require().Nil(s.msgStore.Refresh())
53+
s.Require().Nil(s.MsgStore.Refresh())
7054

7155
// Then the sender and target seqnums should still be
72-
s.Equal(868, s.msgStore.NextSenderMsgSeqNum())
73-
s.Equal(5310, s.msgStore.NextTargetMsgSeqNum())
56+
s.Equal(868, s.MsgStore.NextSenderMsgSeqNum())
57+
s.Equal(5310, s.MsgStore.NextTargetMsgSeqNum())
7458
}
7559

76-
func (s *MessageStoreTestSuite) TestMessageStore_Reset() {
60+
func (s *StoreTestSuite) TestMessageStoreReset() {
7761
// Given a MessageStore with the following sender and target seqnums
78-
s.Require().Nil(s.msgStore.SetNextSenderMsgSeqNum(1234))
79-
s.Require().Nil(s.msgStore.SetNextTargetMsgSeqNum(5678))
62+
s.Require().Nil(s.MsgStore.SetNextSenderMsgSeqNum(1234))
63+
s.Require().Nil(s.MsgStore.SetNextTargetMsgSeqNum(5678))
8064

8165
// When the store is reset
82-
s.Require().Nil(s.msgStore.Reset())
66+
s.Require().Nil(s.MsgStore.Reset())
8367

8468
// Then the sender and target seqnums should be
85-
s.Equal(1, s.msgStore.NextSenderMsgSeqNum())
86-
s.Equal(1, s.msgStore.NextTargetMsgSeqNum())
69+
s.Equal(1, s.MsgStore.NextSenderMsgSeqNum())
70+
s.Equal(1, s.MsgStore.NextTargetMsgSeqNum())
8771

8872
// When the store is refreshed from its backing store
89-
s.Require().Nil(s.msgStore.Refresh())
73+
s.Require().Nil(s.MsgStore.Refresh())
9074

9175
// Then the sender and target seqnums should still be
92-
s.Equal(1, s.msgStore.NextSenderMsgSeqNum())
93-
s.Equal(1, s.msgStore.NextTargetMsgSeqNum())
76+
s.Equal(1, s.MsgStore.NextSenderMsgSeqNum())
77+
s.Equal(1, s.MsgStore.NextTargetMsgSeqNum())
9478
}
9579

96-
func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_GetMessage() {
80+
func (s *StoreTestSuite) TestMessageStoreSaveMessageGetMessage() {
9781
// Given the following saved messages
9882
expectedMsgsBySeqNum := map[int]string{
9983
1: "In the frozen land of Nador",
10084
2: "they were forced to eat Robin's minstrels",
10185
3: "and there was much rejoicing",
10286
}
10387
for seqNum, msg := range expectedMsgsBySeqNum {
104-
s.Require().Nil(s.msgStore.SaveMessage(seqNum, []byte(msg)))
88+
s.Require().Nil(s.MsgStore.SaveMessage(seqNum, []byte(msg)))
10589
}
10690

10791
// When the messages are retrieved from the MessageStore
108-
actualMsgs, err := s.msgStore.GetMessages(1, 3)
92+
actualMsgs, err := s.MsgStore.GetMessages(1, 3)
10993
s.Require().Nil(err)
11094

11195
// Then the messages should be
@@ -115,10 +99,10 @@ func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_GetMessage() {
11599
s.Equal(expectedMsgsBySeqNum[3], string(actualMsgs[2]))
116100

117101
// When the store is refreshed from its backing store
118-
s.Require().Nil(s.msgStore.Refresh())
102+
s.Require().Nil(s.MsgStore.Refresh())
119103

120104
// And the messages are retrieved from the MessageStore
121-
actualMsgs, err = s.msgStore.GetMessages(1, 3)
105+
actualMsgs, err = s.MsgStore.GetMessages(1, 3)
122106
s.Require().Nil(err)
123107

124108
// Then the messages should still be
@@ -128,8 +112,8 @@ func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_GetMessage() {
128112
s.Equal(expectedMsgsBySeqNum[3], string(actualMsgs[2]))
129113
}
130114

131-
func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_AndIncrement_GetMessage() {
132-
s.Require().Nil(s.msgStore.SetNextSenderMsgSeqNum(420))
115+
func (s *StoreTestSuite) TestMessageStoreSaveMessageAndIncrementGetMessage() {
116+
s.Require().Nil(s.MsgStore.SetNextSenderMsgSeqNum(420))
133117

134118
// Given the following saved messages
135119
expectedMsgsBySeqNum := map[int]string{
@@ -138,12 +122,12 @@ func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_AndIncrement_GetMes
138122
3: "and there was much rejoicing",
139123
}
140124
for seqNum, msg := range expectedMsgsBySeqNum {
141-
s.Require().Nil(s.msgStore.SaveMessageAndIncrNextSenderMsgSeqNum(seqNum, []byte(msg)))
125+
s.Require().Nil(s.MsgStore.SaveMessageAndIncrNextSenderMsgSeqNum(seqNum, []byte(msg)))
142126
}
143-
s.Equal(423, s.msgStore.NextSenderMsgSeqNum())
127+
s.Equal(423, s.MsgStore.NextSenderMsgSeqNum())
144128

145129
// When the messages are retrieved from the MessageStore
146-
actualMsgs, err := s.msgStore.GetMessages(1, 3)
130+
actualMsgs, err := s.MsgStore.GetMessages(1, 3)
147131
s.Require().Nil(err)
148132

149133
// Then the messages should be
@@ -153,13 +137,13 @@ func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_AndIncrement_GetMes
153137
s.Equal(expectedMsgsBySeqNum[3], string(actualMsgs[2]))
154138

155139
// When the store is refreshed from its backing store
156-
s.Require().Nil(s.msgStore.Refresh())
140+
s.Require().Nil(s.MsgStore.Refresh())
157141

158142
// And the messages are retrieved from the MessageStore
159-
actualMsgs, err = s.msgStore.GetMessages(1, 3)
143+
actualMsgs, err = s.MsgStore.GetMessages(1, 3)
160144
s.Require().Nil(err)
161145

162-
s.Equal(423, s.msgStore.NextSenderMsgSeqNum())
146+
s.Equal(423, s.MsgStore.NextSenderMsgSeqNum())
163147

164148
// Then the messages should still be
165149
s.Require().Len(actualMsgs, 3)
@@ -168,22 +152,22 @@ func (s *MessageStoreTestSuite) TestMessageStore_SaveMessage_AndIncrement_GetMes
168152
s.Equal(expectedMsgsBySeqNum[3], string(actualMsgs[2]))
169153
}
170154

171-
func (s *MessageStoreTestSuite) TestMessageStore_GetMessages_EmptyStore() {
155+
func (s *StoreTestSuite) TestMessageStoreGetMessagesEmptyStore() {
172156
// When messages are retrieved from an empty store
173-
messages, err := s.msgStore.GetMessages(1, 2)
157+
messages, err := s.MsgStore.GetMessages(1, 2)
174158
require.Nil(s.T(), err)
175159

176160
// Then no messages should be returned
177161
require.Empty(s.T(), messages, "Did not expect messages from empty store")
178162
}
179163

180-
func (s *MessageStoreTestSuite) TestMessageStore_GetMessages_VariousRanges() {
164+
func (s *StoreTestSuite) TestMessageStoreGetMessagesVariousRanges() {
181165
t := s.T()
182166

183167
// Given the following saved messages
184-
require.Nil(t, s.msgStore.SaveMessage(1, []byte("hello")))
185-
require.Nil(t, s.msgStore.SaveMessage(2, []byte("cruel")))
186-
require.Nil(t, s.msgStore.SaveMessage(3, []byte("world")))
168+
require.Nil(t, s.MsgStore.SaveMessage(1, []byte("hello")))
169+
require.Nil(t, s.MsgStore.SaveMessage(2, []byte("cruel")))
170+
require.Nil(t, s.MsgStore.SaveMessage(3, []byte("world")))
187171

188172
// When the following requests are made to the store
189173
var testCases = []struct {
@@ -203,7 +187,7 @@ func (s *MessageStoreTestSuite) TestMessageStore_GetMessages_VariousRanges() {
203187

204188
// Then the returned messages should be
205189
for _, tc := range testCases {
206-
actualMsgs, err := s.msgStore.GetMessages(tc.beginSeqNo, tc.endSeqNo)
190+
actualMsgs, err := s.MsgStore.GetMessages(tc.beginSeqNo, tc.endSeqNo)
207191
require.Nil(t, err)
208192
require.Len(t, actualMsgs, len(tc.expectedBytes))
209193
for i, expectedMsg := range tc.expectedBytes {
@@ -212,12 +196,12 @@ func (s *MessageStoreTestSuite) TestMessageStore_GetMessages_VariousRanges() {
212196
}
213197
}
214198

215-
func (s *MessageStoreTestSuite) TestMessageStore_CreationTime() {
216-
s.False(s.msgStore.CreationTime().IsZero())
199+
func (s *StoreTestSuite) TestMessageStoreCreationTime() {
200+
s.False(s.MsgStore.CreationTime().IsZero())
217201

218202
t0 := time.Now()
219-
s.Require().Nil(s.msgStore.Reset())
203+
s.Require().Nil(s.MsgStore.Reset())
220204
t1 := time.Now()
221-
s.Require().True(s.msgStore.CreationTime().After(t0))
222-
s.Require().True(s.msgStore.CreationTime().Before(t1))
205+
s.Require().True(s.MsgStore.CreationTime().After(t0))
206+
s.Require().True(s.MsgStore.CreationTime().Before(t1))
223207
}

0 commit comments

Comments
 (0)