Skip to content

Commit

Permalink
Add returning of Version from adapter reset.
Browse files Browse the repository at this point in the history
  • Loading branch information
pwood committed Nov 7, 2020
1 parent 44b4b17 commit a6c7af2
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 12 deletions.
9 changes: 6 additions & 3 deletions adapter_initialise.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ func (z *ZStack) Initialise(ctx context.Context, nc zigbee.NetworkConfiguration)

func (z *ZStack) waitForAdapterReset(ctx context.Context) error {
return retry.Retry(ctx, DefaultZStackTimeout, 18, func(invokeCtx context.Context) error {
return z.resetAdapter(invokeCtx, Soft)
_, err := z.resetAdapter(invokeCtx, Soft)
return err
})
}

Expand Down Expand Up @@ -89,7 +90,8 @@ func (z *ZStack) wipeAdapter(ctx context.Context) error {
return z.writeNVRAM(invokeCtx, ZCDNVStartUpOption{StartOption: 0x03})
},
func(invokeCtx context.Context) error {
return z.resetAdapter(invokeCtx, Soft)
_, err := z.resetAdapter(invokeCtx, Soft)
return err
},
})
}
Expand All @@ -100,7 +102,8 @@ func (z *ZStack) makeCoordinator(ctx context.Context) error {
return z.writeNVRAM(invokeCtx, ZCDNVLogicalType{LogicalType: zigbee.Coordinator})
},
func(invokeCtx context.Context) error {
return z.resetAdapter(invokeCtx, Soft)
_, err := z.resetAdapter(invokeCtx, Soft)
return err
},
})
}
Expand Down
6 changes: 4 additions & 2 deletions adapter_reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package zstack

import "context"

func (z *ZStack) resetAdapter(ctx context.Context, resetType ResetType) error {
return z.requestResponder.RequestResponse(ctx, SysResetReq{ResetType: resetType}, &SysResetInd{})
func (z *ZStack) resetAdapter(ctx context.Context, resetType ResetType) (Version, error) {
resetInd := &SysResetInd{}
err := z.requestResponder.RequestResponse(ctx, SysResetReq{ResetType: resetType}, resetInd)
return resetInd.Version, err
}

type ResetType uint8
Expand Down
24 changes: 17 additions & 7 deletions adapter_reset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,34 @@ func (m *MockRequestResponder) RequestResponse(ctx context.Context, req interfac
func Test_resetAdapter(t *testing.T) {
t.Run("verifies that a request response is made to unpi", func(t *testing.T) {
mrr := new(MockRequestResponder)
defer mrr.AssertExpectations(t)

expectedVersion := Version{
TransportRevision: 1,
ProductID: 2,
MajorRelease: 3,
MinorRelease: 4,
HardwareRevision: 5,
}

mrr.On("RequestResponse", mock.Anything, SysResetReq{ResetType: Soft}, &SysResetInd{}).Return(nil)
mrr.On("RequestResponse", mock.Anything, SysResetReq{ResetType: Soft}, &SysResetInd{}).Return(nil).Run(func(args mock.Arguments) {
sysResetInd := args.Get(2).(*SysResetInd)
sysResetInd.Version = expectedVersion
})

z := ZStack{requestResponder: mrr}

ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

err := z.resetAdapter(ctx, Soft)

mrr.AssertExpectations(t)
actualVersion, err := z.resetAdapter(ctx, Soft)
assert.NoError(t, err)
assert.Equal(t, expectedVersion, actualVersion)
})

t.Run("verifies that a request response with errors is raised", func(t *testing.T) {
mrr := new(MockRequestResponder)
defer mrr.AssertExpectations(t)

mrr.On("RequestResponse", mock.Anything, SysResetReq{ResetType: Soft}, &SysResetInd{}).Return(errors.New("context expired"))

Expand All @@ -75,9 +87,7 @@ func Test_resetAdapter(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

err := z.resetAdapter(ctx, Soft)

mrr.AssertExpectations(t)
_, err := z.resetAdapter(ctx, Soft)
assert.Error(t, err)
})
}

0 comments on commit a6c7af2

Please sign in to comment.