From a7b75e0b286d97fd2af85f0869fd9aeaeb35fe13 Mon Sep 17 00:00:00 2001 From: Peter Wood Date: Fri, 14 Jun 2024 11:29:22 +0100 Subject: [PATCH] Add persistence for storing node table data. --- adapter_endpoints_test.go | 5 +++-- adapter_info_test.go | 5 +++-- adapter_initialise_test.go | 21 +++++++++++---------- events_test.go | 3 ++- go.mod | 14 ++++++++++++-- go.sum | 27 +++++---------------------- joining_test.go | 11 ++++++----- network_manager_test.go | 25 +++++++++++++------------ node_address_test.go | 13 +++++++------ node_bind_test.go | 3 ++- node_description_test.go | 3 ++- node_endpoint_description_test.go | 3 ++- node_endpoints_test.go | 3 ++- node_receive_message_test.go | 3 ++- node_remove_test.go | 5 +++-- node_request_test.go | 13 +++++++------ node_send_message_test.go | 5 +++-- node_unbind_test.go | 3 ++- zstack.go | 10 +++++++--- 19 files changed, 94 insertions(+), 81 deletions(-) diff --git a/adapter_endpoints_test.go b/adapter_endpoints_test.go index 7cbb183..9eeb167 100644 --- a/adapter_endpoints_test.go +++ b/adapter_endpoints_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_RegisterAdapterEndpoint(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -44,7 +45,7 @@ func Test_RegisterAdapterEndpoint(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/adapter_info_test.go b/adapter_info_test.go index 6ab5d7f..f6549df 100644 --- a/adapter_info_test.go +++ b/adapter_info_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_GetAdapterIEEEAddress(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -43,7 +44,7 @@ func Test_GetAdapterNetworkAddress(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/adapter_initialise_test.go b/adapter_initialise_test.go index 3af4f06..8e30b04 100644 --- a/adapter_initialise_test.go +++ b/adapter_initialise_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -17,7 +18,7 @@ func Test_Initialise(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer zstack.Stop() @@ -120,7 +121,7 @@ func Test_Initialise(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer zstack.Stop() @@ -248,7 +249,7 @@ func Test_Initialise(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer zstack.Stop() @@ -353,7 +354,7 @@ func Test_verifyAdapterNetworkConfig(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer zstack.Stop() @@ -404,7 +405,7 @@ func Test_verifyAdapterNetworkConfig(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer zstack.Stop() @@ -457,7 +458,7 @@ func Test_startZigbeeStack(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZDOStartUpFromAppRequestId).Return(Frame{ @@ -478,7 +479,7 @@ func Test_startZigbeeStack(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZDOStartUpFromAppRequestId).Return(Frame{ @@ -509,7 +510,7 @@ func Test_startZigbeeStack(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZDOStartUpFromAppRequestId).Return(Frame{ @@ -532,7 +533,7 @@ func Test_waitForCoordinatorStart(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() go func() { @@ -556,7 +557,7 @@ func Test_waitForCoordinatorStart(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() err := zstack.waitForCoordinatorStart(ctx) diff --git a/events_test.go b/events_test.go index 3835879..b88349f 100644 --- a/events_test.go +++ b/events_test.go @@ -2,6 +2,7 @@ package zstack import ( "context" + "github.com/shimmeringbee/persistence/impl/memory" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/stretchr/testify/assert" "testing" @@ -14,7 +15,7 @@ func Test_ReadEvent(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) diff --git a/go.mod b/go.mod index 917db85..1fccbc9 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,23 @@ module github.com/shimmeringbee/zstack -go 1.14 +go 1.22.0 + +toolchain go1.22.2 require ( github.com/shimmeringbee/bytecodec v0.0.0-20210228205504-1e9e0677347b github.com/shimmeringbee/logwrap v0.1.3 + github.com/shimmeringbee/persistence v0.0.0-20240521204303-bf4ab8a6b71b github.com/shimmeringbee/retry v0.0.0-20221006193055-2ce01bf139c2 github.com/shimmeringbee/unpi v0.0.0-20210525151328-7ede275a1033 - github.com/shimmeringbee/zigbee v0.0.0-20221016122511-6c2328db0d94 + github.com/shimmeringbee/zigbee v0.0.0-20240614090423-d67fd427d102 github.com/stretchr/testify v1.9.0 golang.org/x/sync v0.7.0 ) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.5.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum index b60fd16..20d48b2 100644 --- a/go.sum +++ b/go.sum @@ -8,43 +8,28 @@ github.com/shimmeringbee/bytecodec v0.0.0-20200216120857-49d677293817/go.mod h1: github.com/shimmeringbee/bytecodec v0.0.0-20210111165458-877359ca1003/go.mod h1:iqI5PkiqY+Xq6Hu22TNhepAY00iJCfk9jiXKBUrMSQQ= github.com/shimmeringbee/bytecodec v0.0.0-20210228205504-1e9e0677347b h1:8q7X6JQwYKjnl+Absfv9m+LbDSBBllqTDDKzmtZ1ybY= github.com/shimmeringbee/bytecodec v0.0.0-20210228205504-1e9e0677347b/go.mod h1:WYnxfxTJ45UQ+xeAuuTSIalcEepgP8Rb7T/OhCaDdgo= -github.com/shimmeringbee/logwrap v0.0.0-20210228205504-ec4498cd3a41 h1:ZyQT0LgUA8s7UyMRvi444yROU4TXFxvz3XIqpIvlgbs= -github.com/shimmeringbee/logwrap v0.0.0-20210228205504-ec4498cd3a41/go.mod h1:NBAcZCUl6aFOGnWTs8m67EUAmWFZXRhoRQf5nknY8W0= github.com/shimmeringbee/logwrap v0.1.3 h1:1PqPGdgbeQxACQqc6RUWERn7EnpA1jbiHzXVYFa7q2A= github.com/shimmeringbee/logwrap v0.1.3/go.mod h1:NBAcZCUl6aFOGnWTs8m67EUAmWFZXRhoRQf5nknY8W0= -github.com/shimmeringbee/retry v0.0.0-20210228205505-2704f9c1c8a2 h1:BAAlZ6gR1/mUbbTIVLz2fXQnfkERO1PJYu+r3L+EqxM= -github.com/shimmeringbee/retry v0.0.0-20210228205505-2704f9c1c8a2/go.mod h1:FFeFkkqdD9vdDFr2la9PkSTQr6qgU9aBiGU3QKn8ZKY= +github.com/shimmeringbee/persistence v0.0.0-20240521204303-bf4ab8a6b71b h1:hxMT4WUvcmJVzv4EgSGq4LvEoUZFdysWIznFTJoSRIU= +github.com/shimmeringbee/persistence v0.0.0-20240521204303-bf4ab8a6b71b/go.mod h1:Z5euPm65BHgTSRFgaWHByaXejU/J4oUqESV9k0VzQDU= github.com/shimmeringbee/retry v0.0.0-20221006193055-2ce01bf139c2 h1:HxpPz7w7SxVf1GmcM5oTK1JK64TGpK1UflweYRSOwC4= github.com/shimmeringbee/retry v0.0.0-20221006193055-2ce01bf139c2/go.mod h1:KYvVq5b7/BSSlWng+AKB5jwNGpc0D7eg8ySWrdPAlms= github.com/shimmeringbee/unpi v0.0.0-20210111165207-f0210c6942fc/go.mod h1:iAt5R5HT+VC7B9U77uBmN5Z6+DJo4U0z6ag68NH2mMw= github.com/shimmeringbee/unpi v0.0.0-20210525151328-7ede275a1033 h1:PQGdXelNwwcQH58S90MR0xA3GnikCnzt+xpDw0P4qxM= github.com/shimmeringbee/unpi v0.0.0-20210525151328-7ede275a1033/go.mod h1:hOrncW6hd26Z18eayp99i7hNKj0aHtUx1SxXT49aEsk= -github.com/shimmeringbee/zigbee v0.0.0-20210427191220-76676a734066 h1:3ClT9MdUGZToPHXmLM+pC5csq5XptJ6thQTQbhjV6Dw= -github.com/shimmeringbee/zigbee v0.0.0-20210427191220-76676a734066/go.mod h1:GMA6rVpzvUK16cZwi8uW11JUTx8xUGOk5DbkXYWvm/8= -github.com/shimmeringbee/zigbee v0.0.0-20221016122511-6c2328db0d94 h1:WlfIY/YXIl+8DvmyAnA1PD8pJ6kxRfXrFzWERTSv7pY= -github.com/shimmeringbee/zigbee v0.0.0-20221016122511-6c2328db0d94/go.mod h1:GMA6rVpzvUK16cZwi8uW11JUTx8xUGOk5DbkXYWvm/8= +github.com/shimmeringbee/zigbee v0.0.0-20240614090423-d67fd427d102 h1:SNuznHuBvY1iEbkOEP0jbmIvn2p0GQGlCNQAUyDmcRQ= +github.com/shimmeringbee/zigbee v0.0.0-20240614090423-d67fd427d102/go.mod h1:k5LLUXiOWq3hlNvMecCZRqamocgH9Zp9ocadrAfyCpw= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -52,8 +37,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/joining_test.go b/joining_test.go index bed153a..3bfb7ec 100644 --- a/joining_test.go +++ b/joining_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_PermitJoin(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -43,7 +44,7 @@ func Test_PermitJoin(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() zstack.NetworkProperties.NetworkAddress = zigbee.NetworkAddress(0x0102) @@ -69,7 +70,7 @@ func Test_PermitJoin(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -93,7 +94,7 @@ func Test_DenyJoin(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -119,7 +120,7 @@ func Test_DenyJoin(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/network_manager_test.go b/network_manager_test.go index 6a4c716..70f64ee 100644 --- a/network_manager_test.go +++ b/network_manager_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -15,7 +16,7 @@ import ( func Test_NetworkManager(t *testing.T) { t.Run("issues a lqi poll request only for coordinators or routers", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer zstack.Stop() @@ -40,7 +41,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("the coordinator is added to the node list as a coordinator", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer zstack.Stop() @@ -74,7 +75,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("a node is added to the node table when an ZdoIEEEAddrRsp messages are received", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -109,7 +110,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("a node is added to the node table when an ZdoNWKAddrRsp messages are received", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -147,7 +148,7 @@ func Test_NetworkManager(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -214,7 +215,7 @@ func Test_NetworkManager(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -263,7 +264,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("a new router will be queried for network state", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -318,7 +319,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("nodes in lqi query are added to network manager", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -380,7 +381,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("nodes in lqi query are added to network manager", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -424,7 +425,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("nodes in lqi query are not added if Ext PANID does not match", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) @@ -481,7 +482,7 @@ func Test_NetworkManager(t *testing.T) { t.Run("nodes in lqi query are not added if it has an invalid IEEE address", func(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) zstack.NetworkProperties.IEEEAddress = zigbee.IEEEAddress(1) @@ -543,7 +544,7 @@ func Test_NetworkManager(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() defer unpiMock.AssertCalls(t) diff --git a/node_address_test.go b/node_address_test.go index 7839e40..def6d22 100644 --- a/node_address_test.go +++ b/node_address_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -19,7 +20,7 @@ func Test_ResolveNodeIEEEAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -36,7 +37,7 @@ func Test_ResolveNodeIEEEAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -77,7 +78,7 @@ func Test_QueryNodeIEEEAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -118,7 +119,7 @@ func Test_ResolveNodeNWKAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -135,7 +136,7 @@ func Test_ResolveNodeNWKAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -176,7 +177,7 @@ func Test_QueryNodeNWKAddress(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_bind_test.go b/node_bind_test.go index 57d6eec..8b504db 100644 --- a/node_bind_test.go +++ b/node_bind_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_BindToNode(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_description_test.go b/node_description_test.go index 2c011f9..4a6c84e 100644 --- a/node_description_test.go +++ b/node_description_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_QueryNodeDescription(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_endpoint_description_test.go b/node_endpoint_description_test.go index 3948d32..fe138e3 100644 --- a/node_endpoint_description_test.go +++ b/node_endpoint_description_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_QueryNodeEndpointDescription(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_endpoints_test.go b/node_endpoints_test.go index 9195921..78c6691 100644 --- a/node_endpoints_test.go +++ b/node_endpoints_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_QueryNodeEndpoints(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_receive_message_test.go b/node_receive_message_test.go index e1d576b..c18e213 100644 --- a/node_receive_message_test.go +++ b/node_receive_message_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_ReceiveMessage(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() zstack.nodeTable.addOrUpdate(zigbee.IEEEAddress(0x1122334455667788), zigbee.NetworkAddress(0x1000)) diff --git a/node_remove_test.go b/node_remove_test.go index a9f586c..e7cd7ab 100644 --- a/node_remove_test.go +++ b/node_remove_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func TestZStack_RequestNodeLeave(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -61,7 +62,7 @@ func TestZStack_ForceNodeLeave(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() zstack.nodeTable.addOrUpdate(zigbee.IEEEAddress(1), zigbee.NetworkAddress(0x4000)) diff --git a/node_request_test.go b/node_request_test.go index d884b7f..e3670b8 100644 --- a/node_request_test.go +++ b/node_request_test.go @@ -2,6 +2,7 @@ package zstack import ( "context" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -16,7 +17,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() type NotSuccessful struct{} @@ -33,7 +34,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZdoActiveEpReqID).Return(Frame{ @@ -57,7 +58,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZdoActiveEpReqID).Return(Frame{ @@ -92,7 +93,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZdoActiveEpReqID).Return(Frame{ @@ -137,7 +138,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZdoActiveEpReqID).Return(Frame{ @@ -180,7 +181,7 @@ func Test_NodeRequest(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) defer unpiMock.Stop() unpiMock.On(SREQ, ZDO, ZdoActiveEpReqID).Return(Frame{ diff --git a/node_send_message_test.go b/node_send_message_test.go index 3fab794..e0a2c7c 100644 --- a/node_send_message_test.go +++ b/node_send_message_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -19,7 +20,7 @@ func Test_SendNodeMessage(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() @@ -64,7 +65,7 @@ func Test_SendNodeMessage(t *testing.T) { unpiMock := unpiTest.NewMockAdapter() defer unpiMock.AssertCalls(t) - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/node_unbind_test.go b/node_unbind_test.go index 6320481..fd5cd34 100644 --- a/node_unbind_test.go +++ b/node_unbind_test.go @@ -3,6 +3,7 @@ package zstack import ( "context" "github.com/shimmeringbee/bytecodec" + "github.com/shimmeringbee/persistence/impl/memory" . "github.com/shimmeringbee/unpi" unpiTest "github.com/shimmeringbee/unpi/testing" "github.com/shimmeringbee/zigbee" @@ -18,7 +19,7 @@ func Test_UnbindToNode(t *testing.T) { defer cancel() unpiMock := unpiTest.NewMockAdapter() - zstack := New(unpiMock) + zstack := New(unpiMock, memory.New()) zstack.sem = semaphore.NewWeighted(8) defer unpiMock.Stop() diff --git a/zstack.go b/zstack.go index e371b06..db3aa9f 100644 --- a/zstack.go +++ b/zstack.go @@ -1,9 +1,10 @@ -package zstack // import "github.com/shimmeringbee/zstack" +package zstack import ( "context" "github.com/shimmeringbee/logwrap" "github.com/shimmeringbee/logwrap/impl/golog" + "github.com/shimmeringbee/persistence" "github.com/shimmeringbee/unpi/broker" "github.com/shimmeringbee/unpi/library" "github.com/shimmeringbee/zigbee" @@ -43,6 +44,8 @@ type ZStack struct { nodeTable *nodeTable transactionIdStore chan uint8 + persistence persistence.Section + sem *semaphore.Weighted logger logwrap.Logger @@ -74,7 +77,7 @@ const DefaultZStackRetries = 3 const DefaultInflightEvents = 50 const DefaultInflightTransactions = 20 -func New(uart io.ReadWriter) *ZStack { +func New(uart io.ReadWriter, p persistence.Section) *ZStack { ml := library.NewLibrary() registerMessages(ml) @@ -83,7 +86,7 @@ func New(uart io.ReadWriter) *ZStack { transactionIDs := make(chan uint8, DefaultInflightTransactions) - for i := 0; i < DefaultInflightTransactions; i++ { + for i := range DefaultInflightTransactions { transactionIDs <- uint8(i) } @@ -96,6 +99,7 @@ func New(uart io.ReadWriter) *ZStack { networkManagerIncoming: make(chan interface{}, DefaultInflightEvents), nodeTable: newNodeTable(), transactionIdStore: transactionIDs, + persistence: p, } zstack.WithGoLogger(log.New(os.Stderr, "", log.LstdFlags))