Skip to content

Commit a72230f

Browse files
authored
Merge pull request #231 from cbusbey/logon_resend_tests
fixes logic around logon message with sequence number too high
2 parents d0dbe03 + 86e4fe8 commit a72230f

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

logon_state.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ func (s logonState) FixMsgIn(session *session, msg Message) (nextState sessionSt
3636

3737
return latentState{}
3838

39+
case targetTooHigh:
40+
if err := session.doTargetTooHigh(err); err != nil {
41+
return handleStateError(session, err)
42+
}
43+
44+
return resendState{}
45+
3946
default:
4047
return handleStateError(session, err)
4148
}

logon_state_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,29 @@ func (s *LogonStateTestSuite) TestFixMsgInLogonRejectLogon() {
174174
s.NextTargetMsgSeqNum(3)
175175
s.NextSenderMsgSeqNum(3)
176176
}
177+
178+
func (s *LogonStateTestSuite) TestFixMsgInLogonSeqNumTooHigh() {
179+
s.MessageFactory.SetNextSeqNum(6)
180+
logon := s.Logon()
181+
logon.Body.SetField(tagHeartBtInt, FIXInt(32))
182+
183+
s.MockApp.On("FromAdmin").Return(nil)
184+
s.MockApp.On("OnLogon")
185+
s.MockApp.On("ToAdmin")
186+
s.fixMsgIn(s.session, logon)
187+
188+
s.State(resendState{})
189+
s.NextTargetMsgSeqNum(1)
190+
191+
//session should send logon, and then queues resend request for send
192+
s.MockApp.AssertNumberOfCalls(s.T(), "ToAdmin", 2)
193+
msgBytesSent, ok := s.Receiver.LastMessage()
194+
s.Require().True(ok)
195+
sentMessage, err := ParseMessage(msgBytesSent)
196+
s.Require().Nil(err)
197+
s.MessageType(enum.MsgType_LOGON, sentMessage)
198+
199+
s.session.sendQueued()
200+
s.MessageType(enum.MsgType_RESEND_REQUEST, s.MockApp.lastToAdmin)
201+
s.FieldEquals(tagBeginSeqNo, 1, s.MockApp.lastToAdmin.Body)
202+
}

session.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,7 @@ func (s *session) handleLogon(msg Message) error {
368368
s.application.OnLogon(s.sessionID)
369369

370370
if err := s.checkTargetTooHigh(msg); err != nil {
371-
switch TypedError := err.(type) {
372-
case targetTooHigh:
373-
return s.doTargetTooHigh(TypedError)
374-
}
371+
return err
375372
}
376373

377374
return s.store.IncrNextTargetMsgSeqNum()

0 commit comments

Comments
 (0)