diff --git a/Makefile b/Makefile index b05c5d72f..b68843f3c 100644 --- a/Makefile +++ b/Makefile @@ -28,24 +28,30 @@ lint: linters-install # --------------------------------------------------------------- # Targets related to running acceptance tests - +ifdef STORE_TYPE +STORE := $(STORE_TYPE) +else +STORE := memory +endif + build-test-srv: - cd _test; go build -o echo_server ./test-server/ + cd _test; go build -v -o echo_server ./test-server/ fix40: - cd _test; ./runat.sh $@.cfg 5001 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5001 $(STORE) "definitions/server/$@/*.def" fix41: - cd _test; ./runat.sh $@.cfg 5002 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5002 $(STORE) "definitions/server/$@/*.def" fix42: - cd _test; ./runat.sh $@.cfg 5003 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5003 $(STORE) "definitions/server/$@/*.def" fix43: - cd _test; ./runat.sh $@.cfg 5004 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5004 $(STORE) "definitions/server/$@/*.def" fix44: - cd _test; ./runat.sh $@.cfg 5005 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5005 $(STORE) "definitions/server/$@/*.def" fix50: - cd _test; ./runat.sh $@.cfg 5006 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5006 $(STORE) "definitions/server/$@/*.def" fix50sp1: - cd _test; ./runat.sh $@.cfg 5007 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5007 $(STORE) "definitions/server/$@/*.def" fix50sp2: - cd _test; ./runat.sh $@.cfg 5008 $(STORE_TYPE) "definitions/server/$@/*.def" + cd _test; ./runat.sh $@.cfg 5008 $(STORE) "definitions/server/$@/*.def" ACCEPT_SUITE=fix40 fix41 fix42 fix43 fix44 fix50 fix50sp1 fix50sp2 accept: $(ACCEPT_SUITE) diff --git a/session.go b/session.go index 1bf60b122..5ab8c5edc 100644 --- a/session.go +++ b/session.go @@ -310,8 +310,6 @@ func (s *session) prepMessageForSend(msg *Message, inReplyTo *Message) (msgBytes } if isAdminMessageType(msgType) { - s.application.ToAdmin(msg, s.sessionID) - if bytes.Equal(msgType, msgTypeLogon) { var resetSeqNumFlag FIXBoolean if msg.Body.Has(tagResetSeqNumFlag) { @@ -330,6 +328,7 @@ func (s *session) prepMessageForSend(msg *Message, inReplyTo *Message) (msgBytes msg.Header.SetField(tagMsgSeqNum, FIXInt(seqNum)) } } + s.application.ToAdmin(msg, s.sessionID) } else { if err = s.application.ToApp(msg, s.sessionID); err != nil { return diff --git a/session_state.go b/session_state.go index 527556209..2c8b84d3c 100644 --- a/session_state.go +++ b/session_state.go @@ -49,6 +49,14 @@ func (sm *stateMachine) Connect(session *session) { return } } + + if session.ResetOnLogon { + if err := session.store.Reset(); err != nil { + session.logError(err) + return + } + } + session.log.OnEvent("Sending logon request") if err := session.sendLogon(); err != nil { session.logError(err) diff --git a/session_test.go b/session_test.go index b9a70c9b5..9308ec4f0 100644 --- a/session_test.go +++ b/session_test.go @@ -673,14 +673,18 @@ func (s *SessionSuite) TestInitiateLogonResetSeqNumFlag() { } s.session.State = latentState{} s.session.HeartBtInt = time.Duration(45) * time.Second + s.Require().Nil(s.store.Reset()) + s.NextSenderMsgSeqNum(1) + s.NextTargetMsgSeqNum(1) s.IncrNextTargetMsgSeqNum() s.IncrNextSenderMsgSeqNum() + s.session.ResetOnLogon = true s.session.InitiateLogon = true + s.NextSenderMsgSeqNum(2) + s.NextTargetMsgSeqNum(2) + s.MockApp.On("ToAdmin") - s.MockApp.decorateToAdmin = func(msg *Message) { - msg.Body.SetField(tagResetSeqNumFlag, FIXBoolean(true)) - } s.session.onAdmin(adminMsg) s.MockApp.AssertExpectations(s.T())