Skip to content

Commit aeba705

Browse files
committed
Add more handshake tests and minor refactor
1 parent 0147396 commit aeba705

File tree

3 files changed

+103
-2
lines changed

3 files changed

+103
-2
lines changed

ship/handshake.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,17 @@ func (c *ShipConnection) handleState(timeout bool, message []byte) {
157157
c.setState(smePinStateCheckInit)
158158
c.handleState(false, nil)
159159

160-
// smePinState
160+
// smePinState
161161

162162
case smePinStateCheckInit:
163163
c.handshakePin_Init()
164164

165165
case smePinStateCheckListen:
166166
c.handshakePin_smePinStateCheckListen(message)
167167

168+
case smePinStateCheckOk:
169+
c.handshakeAccessMethods_Init()
170+
168171
// smeAccessMethods
169172

170173
case smeAccessMethodsRequest:

ship/hs_access_test.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package ship
2+
3+
import (
4+
"testing"
5+
6+
"github.com/enbility/eebus-go/ship/model"
7+
"github.com/enbility/eebus-go/util"
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/suite"
10+
)
11+
12+
func TestAccessSuite(t *testing.T) {
13+
suite.Run(t, new(AccessSuite))
14+
}
15+
16+
type AccessSuite struct {
17+
suite.Suite
18+
}
19+
20+
func (s *AccessSuite) Test_Init() {
21+
sut, data := initTest(ShipRoleClient)
22+
23+
sut.setState(smePinStateCheckOk)
24+
sut.handleState(false, nil)
25+
26+
assert.Equal(s.T(), true, sut.handshakeTimerRunning)
27+
assert.Equal(s.T(), smeAccessMethodsRequest, sut.getState())
28+
assert.NotNil(s.T(), data.lastMessage())
29+
30+
shutdownTest(sut)
31+
}
32+
33+
func (s *AccessSuite) Test_Request() {
34+
sut, data := initTest(ShipRoleClient)
35+
36+
sut.setState(smeAccessMethodsRequest)
37+
38+
accessMsg := model.AccessMethodsRequest{
39+
AccessMethodsRequest: model.AccessMethodsRequestType{},
40+
}
41+
msg, err := sut.shipMessage(model.MsgTypeControl, accessMsg)
42+
assert.Nil(s.T(), err)
43+
assert.NotNil(s.T(), msg)
44+
45+
sut.handleState(false, msg)
46+
47+
assert.Equal(s.T(), false, sut.handshakeTimerRunning)
48+
assert.Equal(s.T(), smeAccessMethodsRequest, sut.getState())
49+
assert.NotNil(s.T(), data.lastMessage())
50+
51+
shutdownTest(sut)
52+
}
53+
54+
func (s *AccessSuite) Test_Methods_Ok() {
55+
sut, data := initTest(ShipRoleClient)
56+
57+
sut.setState(smeAccessMethodsRequest)
58+
59+
accessMsg := model.AccessMethods{
60+
AccessMethods: model.AccessMethodsType{
61+
Id: util.Ptr("RemoteShipID"),
62+
},
63+
}
64+
msg, err := sut.shipMessage(model.MsgTypeControl, accessMsg)
65+
assert.Nil(s.T(), err)
66+
assert.NotNil(s.T(), msg)
67+
68+
sut.handleState(false, msg)
69+
70+
assert.Equal(s.T(), false, sut.handshakeTimerRunning)
71+
assert.Equal(s.T(), smeComplete, sut.getState())
72+
assert.NotNil(s.T(), data.lastMessage())
73+
74+
shutdownTest(sut)
75+
}
76+
77+
func (s *AccessSuite) Test_Methods_WrongShipID() {
78+
sut, data := initTest(ShipRoleClient)
79+
80+
sut.setState(smeAccessMethodsRequest)
81+
82+
accessMsg := model.AccessMethods{
83+
AccessMethods: model.AccessMethodsType{
84+
Id: util.Ptr("WrongRemoteShipID"),
85+
},
86+
}
87+
msg, err := sut.shipMessage(model.MsgTypeControl, accessMsg)
88+
assert.Nil(s.T(), err)
89+
assert.NotNil(s.T(), msg)
90+
91+
sut.handleState(false, msg)
92+
93+
assert.Equal(s.T(), false, sut.handshakeTimerRunning)
94+
assert.Equal(s.T(), smeError, sut.getState())
95+
assert.NotNil(s.T(), data.lastMessage())
96+
97+
shutdownTest(sut)
98+
}

ship/hs_pin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (c *ShipConnection) handshakePin_smePinStateCheckListen(message []byte) {
3838
switch connectionPinState.ConnectionPinState.PinState {
3939
case model.PinStateTypeNone:
4040
c.setState(smePinStateCheckOk)
41-
c.handshakeAccessMethods_Init()
41+
c.handleState(false, nil)
4242
case model.PinStateTypeRequired:
4343
c.endHandshakeWithError(errors.New("Got pin state: required (unsupported)"))
4444
case model.PinStateTypeOptional:

0 commit comments

Comments
 (0)