From 5fb6dad55b09dde4fd032867d24f03e5867772e7 Mon Sep 17 00:00:00 2001 From: Manuel Kieweg <manuel.kieweg@h-da.de> Date: Wed, 9 Jun 2021 15:00:00 +0200 Subject: [PATCH] make Device interface --- cli/grpc_test.go | 2 +- cli/subscribe.go | 2 +- controller.go | 14 ++-- go.mod | 14 ++-- go.sum | 36 ++++++---- initialise_test.go | 11 --- northbound/server/pnd.go | 2 +- northbound/server/pnd_test.go | 16 ++--- nucleus/device.go | 97 +++++++++++++++++++++++--- nucleus/device_test.go | 16 ++--- nucleus/initialise_test.go | 6 +- nucleus/principalNetworkDomain.go | 36 +++++----- nucleus/principalNetworkDomain_test.go | 51 +++++++------- nucleus/store.go | 6 +- nucleus/store_test.go | 12 ++-- 15 files changed, 199 insertions(+), 122 deletions(-) diff --git a/cli/grpc_test.go b/cli/grpc_test.go index c3117c407..c54269714 100644 --- a/cli/grpc_test.go +++ b/cli/grpc_test.go @@ -65,7 +65,7 @@ func init() { mockPnd.On("CommittedChanges").Return([]uuid.UUID{changeUUID}) mockPnd.On("GetChange", mock.Anything).Return(&nucleus.Change{}, nil) mockPnd.On("AddDevice", mock.Anything, mock.Anything, mock.Anything).Return(nil) - mockPnd.On("GetDevice", mock.Anything).Return(&nucleus.Device{ + mockPnd.On("GetDevice", mock.Anything).Return(&nucleus.CommonDevice{ UUID: deviceUUID, GoStruct: &openconfig.Device{}, }, nil) diff --git a/cli/subscribe.go b/cli/subscribe.go index 3be7882a5..6222ca63c 100644 --- a/cli/subscribe.go +++ b/cli/subscribe.go @@ -56,7 +56,7 @@ func Subscribe(address, username, password, deviceName string, sample, heartbeat signal.Notify(done, syscall.SIGILL, syscall.SIGTERM) ctx := context.WithValue(context.Background(), types.CtxKeyOpts, opts) //nolint go func() { - if err := device.Transport.Subscribe(ctx); err != nil { + if err := device.Transport().Subscribe(ctx); err != nil { log.Fatal(err) } }() diff --git a/controller.go b/controller.go index c6a434178..da943ff12 100644 --- a/controller.go +++ b/controller.go @@ -9,18 +9,18 @@ import ( "sync" "time" - spb "code.fbi.h-da.de/cocsn/api/go/gosdn/southbound" - + "github.com/google/uuid" + log "github.com/sirupsen/logrus" "github.com/spf13/viper" "google.golang.org/grpc" pb "code.fbi.h-da.de/cocsn/api/go/gosdn/core" ppb "code.fbi.h-da.de/cocsn/api/go/gosdn/pnd" - "code.fbi.h-da.de/cocsn/gosdn/database" + spb "code.fbi.h-da.de/cocsn/api/go/gosdn/southbound" nbi "code.fbi.h-da.de/cocsn/gosdn/northbound/server" + + "code.fbi.h-da.de/cocsn/gosdn/database" "code.fbi.h-da.de/cocsn/gosdn/nucleus" - "github.com/google/uuid" - log "github.com/sirupsen/logrus" ) var coreLock sync.RWMutex @@ -53,14 +53,14 @@ func init() { // initialize does start-up housekeeping like reading controller config files func initialize() error { - if err := createSouthboundInterfaces(); err != nil { + if err := startGrpcServer(); err != nil { return err } coreLock.Lock() startHttpServer() coreLock.Unlock() - return startGrpcServer() + return createSouthboundInterfaces() } func startGrpcServer() error { diff --git a/go.mod b/go.mod index 6ee6ddbd8..2822dde48 100644 --- a/go.mod +++ b/go.mod @@ -3,17 +3,19 @@ module code.fbi.h-da.de/cocsn/gosdn go 1.16 require ( - code.fbi.h-da.de/cocsn/api/go v0.0.0-20210606170310-dde53dd7d211 + code.fbi.h-da.de/cocsn/api/go v0.0.0-20210609120033-1ef56612bd26 code.fbi.h-da.de/cocsn/yang-models v0.0.7 github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a - github.com/docker/docker v1.13.1 + github.com/docker/docker v20.10.6+incompatible github.com/golang/protobuf v1.5.2 - github.com/google/gnxi v0.0.0-20201221102247-c26672548161 - github.com/google/uuid v1.1.2 + github.com/google/gnxi v0.0.0-20210423111716-4b504ef806a7 + github.com/google/uuid v1.2.0 + github.com/imdario/mergo v0.3.11 // indirect github.com/neo4j/neo4j-go-driver v1.8.3 - github.com/openconfig/gnmi v0.0.0-20210430192044-ab96b57c5113 + github.com/onsi/gomega v1.10.3 // indirect + github.com/openconfig/gnmi v0.0.0-20210527163611-d3a3e30199da github.com/openconfig/goyang v0.2.4 - github.com/openconfig/ygot v0.10.5 + github.com/openconfig/ygot v0.10.11 github.com/sirupsen/logrus v1.8.1 github.com/spf13/cobra v1.1.3 github.com/spf13/viper v1.7.1 diff --git a/go.sum b/go.sum index 49e5ce1c5..fbaf8d267 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,8 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -code.fbi.h-da.de/cocsn/api/go v0.0.0-20210606170310-dde53dd7d211 h1:/KdYVxBq9FuYYzCIoGLTAOqRatHUJ/oO6fAqIF/6+OM= -code.fbi.h-da.de/cocsn/api/go v0.0.0-20210606170310-dde53dd7d211/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0= +code.fbi.h-da.de/cocsn/api/go v0.0.0-20210609120033-1ef56612bd26 h1:Uqo/Gfh/pwmkHZFiTtcJGCZbHh+ZDcD2W1zOdABerbI= +code.fbi.h-da.de/cocsn/api/go v0.0.0-20210609120033-1ef56612bd26/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0= code.fbi.h-da.de/cocsn/yang-models v0.0.7 h1:3TOo8J+EdAJKeq4o3aaNWZRhjSwguIS8wciW1U9PkSk= code.fbi.h-da.de/cocsn/yang-models v0.0.7/go.mod h1:M+2HinfhTT8nA8qvn2cpWNlOtuiizTNDWA3yfy72K/g= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -86,8 +86,9 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.13.1 h1:IkZjBSIc8hBjLpqeAbeE5mca5mNgeatLHBy3GO78BWo= github.com/docker/docker v1.13.1/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.6+incompatible h1:oXI3Vas8TI8Eu/EjH4srKHJBVqraSzJybhxY7Om9faQ= +github.com/docker/docker v20.10.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -169,8 +170,8 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/gnxi v0.0.0-20201221102247-c26672548161 h1:8Huhvr/sx+mAUzfujNPTCbq+z4LG1qUIu0smjXTaBw0= -github.com/google/gnxi v0.0.0-20201221102247-c26672548161/go.mod h1:dPTuHPVOqxZ2yGKPjymiMt1vrZa8KHXWKX+Lx1z5d88= +github.com/google/gnxi v0.0.0-20210423111716-4b504ef806a7 h1:cJ62uhbZcclaYm9gq4JNyazqSY7bUEggwZdw0nHTT7o= +github.com/google/gnxi v0.0.0-20210423111716-4b504ef806a7/go.mod h1:dPTuHPVOqxZ2yGKPjymiMt1vrZa8KHXWKX+Lx1z5d88= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -194,8 +195,9 @@ github.com/google/protobuf v3.11.4+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bj github.com/google/protobuf v3.14.0+incompatible/go.mod h1:lUQ9D1ePzbH2PrIS7ob/bjm9HXyH5WHB0Akwh7URreM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= @@ -231,11 +233,11 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= @@ -311,24 +313,29 @@ github.com/neo4j/neo4j-go-driver v1.8.3/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcL github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= github.com/openconfig/gnmi v0.0.0-20200414194230-1597cc0f2600/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= github.com/openconfig/gnmi v0.0.0-20200508230933-d19cebf5e7be/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802/go.mod h1:M/EcuapNQgvzxo1DDXHK4tx3QpYM/uG4l591v33jG2A= -github.com/openconfig/gnmi v0.0.0-20210430192044-ab96b57c5113 h1:gHZS9U5wmDYeS8vPu4eEXbWHAVwayPwJ/Ze5RGYGXLw= github.com/openconfig/gnmi v0.0.0-20210430192044-ab96b57c5113/go.mod h1:H/20NXlnWbCPFC593nxpiKJ+OU//7mW7s7Qk7uVdg3Q= +github.com/openconfig/gnmi v0.0.0-20210527163611-d3a3e30199da h1:Gaj4Reje4wKdliTXaXDE7ginHeVzDbcUTszUx6xpQeE= +github.com/openconfig/gnmi v0.0.0-20210527163611-d3a3e30199da/go.mod h1:H/20NXlnWbCPFC593nxpiKJ+OU//7mW7s7Qk7uVdg3Q= github.com/openconfig/goyang v0.0.0-20200115183954-d0a48929f0ea/go.mod h1:dhXaV0JgHJzdrHi2l+w0fZrwArtXL7jEFoiqLEdmkvU= github.com/openconfig/goyang v0.2.2/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= github.com/openconfig/goyang v0.2.3/go.mod h1:vX61x01Q46AzbZUzG617vWqh/cB+aisc+RrNkXRd3W8= @@ -338,8 +345,8 @@ github.com/openconfig/reference v0.0.0-20190727015836-8dfd928c9696/go.mod h1:ym2 github.com/openconfig/ygot v0.6.0/go.mod h1:o30svNf7O0xK+R35tlx95odkDmZWS9JyWWQSmIhqwAs= github.com/openconfig/ygot v0.9.0/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= github.com/openconfig/ygot v0.10.0/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= -github.com/openconfig/ygot v0.10.5 h1:8RQxM/AY4bbfKAtYihWlyIEwKuLjNE1jzXI4gxPN27w= -github.com/openconfig/ygot v0.10.5/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= +github.com/openconfig/ygot v0.10.11 h1:qxdyjBV8hl82vNjW+AqvC+wzUV0b3sKmgs9npS5s+0c= +github.com/openconfig/ygot v0.10.11/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5HspHcjlxSAQ= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= @@ -522,6 +529,7 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -558,6 +566,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -712,7 +721,6 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= diff --git a/initialise_test.go b/initialise_test.go index 85d5fb6f4..6994a752f 100644 --- a/initialise_test.go +++ b/initialise_test.go @@ -5,7 +5,6 @@ import ( "os" "testing" - "code.fbi.h-da.de/cocsn/gosdn/mocks" "code.fbi.h-da.de/cocsn/gosdn/nucleus" "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" "github.com/google/uuid" @@ -76,13 +75,3 @@ func readTestUUIDs() { log.Fatal(err) } } - -func mockDevice() nucleus.Device { - sbi := &nucleus.OpenConfig{} - return nucleus.Device{ - UUID: mdid, - GoStruct: sbi.Schema().Root, - SBI: sbi, - Transport: &mocks.Transport{}, - } -} diff --git a/northbound/server/pnd.go b/northbound/server/pnd.go index d74119c20..00a334b88 100644 --- a/northbound/server/pnd.go +++ b/northbound/server/pnd.go @@ -185,7 +185,7 @@ func fillOnds(pnd nucleus.PrincipalNetworkDomain, all bool, did ...string) ([]*p return nil, err } cfg := ygot.GNMINotificationsConfig{} - dev, err := ygot.TogNMINotifications(d.(*nucleus.Device).GoStruct, time.Now().UnixNano(), cfg) + dev, err := ygot.TogNMINotifications(d.(nucleus.Device).Model(), time.Now().UnixNano(), cfg) if err != nil { return nil, err } diff --git a/northbound/server/pnd_test.go b/northbound/server/pnd_test.go index 3ddee4600..e5fea39f2 100644 --- a/northbound/server/pnd_test.go +++ b/northbound/server/pnd_test.go @@ -29,7 +29,7 @@ var pendingChangeUUID uuid.UUID var committedChangeUUID uuid.UUID var deviceUUID uuid.UUID var mockPnd *mocks.PrincipalNetworkDomain -var mockDevice *nucleus.Device +var mockDevice nucleus.Device var sbiStore *nucleus.SbiStore func TestMain(m *testing.M) { @@ -55,7 +55,7 @@ func TestMain(m *testing.M) { log.Fatal(err) } - mockDevice = &nucleus.Device{ + mockDevice = &nucleus.CommonDevice{ GoStruct: &openconfig.Device{ System: &openconfig.OpenconfigSystem_System{ Config: &openconfig.OpenconfigSystem_System_Config{ @@ -63,14 +63,14 @@ func TestMain(m *testing.M) { }, }, }, - UUID: deviceUUID, - SBI: nucleus.NewSBI(spb.Type_OPENCONFIG), - Transport: &mocks.Transport{}, - Name: hostname, + UUID: deviceUUID, } + mockDevice.(*nucleus.CommonDevice).SetSBI(nucleus.NewSBI(spb.Type_OPENCONFIG)) + mockDevice.(*nucleus.CommonDevice).SetTransport(&mocks.Transport{}) + mockDevice.(*nucleus.CommonDevice).SetName(hostname) sbiStore = nucleus.NewSbiStore() - if err := sbiStore.Add(mockDevice.SBI); err != nil { + if err := sbiStore.Add(mockDevice.SBI()); err != nil { log.Fatal(err) } @@ -122,7 +122,7 @@ func Test_pnd_Get(t *testing.T) { want: []string{ pndID, ondID, - mockDevice.SBI.ID().String(), + mockDevice.SBI().ID().String(), pendingChangeID, committedChangeID, }, diff --git a/nucleus/device.go b/nucleus/device.go index 18c36a27d..b92a9eee0 100644 --- a/nucleus/device.go +++ b/nucleus/device.go @@ -3,13 +3,25 @@ package nucleus import ( tpb "code.fbi.h-da.de/cocsn/api/go/gosdn/transport" "github.com/docker/docker/pkg/namesgenerator" + "github.com/golang/protobuf/proto" "github.com/google/uuid" "github.com/openconfig/ygot/ygot" ) // Device represents an Orchestrated Network Device (OND) which is managed by // nucleus -type Device struct { +type Device interface { + ID() uuid.UUID + Model() ygot.GoStruct + Transport() Transport + Name() string + SBI() SouthboundInterface + ProcessResponse(proto.Message) error + + isDevice() +} + +type CommonDevice struct { // UUID represents the Devices UUID UUID uuid.UUID @@ -17,17 +29,17 @@ type Device struct { ygot.GoStruct // SBI is the device's southbound interface implementation - SBI SouthboundInterface + sbi SouthboundInterface // Transport is the device's Transport implementation - Transport Transport + transport Transport // Name is the device's human readable name - Name string + name string } // NewDevice creates a Device -func NewDevice(name string, opt *tpb.TransportOption, sbi SouthboundInterface) (*Device, error) { +func NewDevice(name string, opt *tpb.TransportOption, sbi SouthboundInterface) (Device, error) { transport, err := NewTransport(opt, sbi) if err != nil { return nil, err @@ -37,16 +49,81 @@ func NewDevice(name string, opt *tpb.TransportOption, sbi SouthboundInterface) ( name = namesgenerator.GetRandomName(0) } - return &Device{ + return &CommonDevice{ UUID: uuid.New(), GoStruct: sbi.Schema().Root, - SBI: sbi, - Transport: transport, - Name: name, + sbi: sbi, + transport: transport, + name: name, }, nil } // ID returns the UUID of the Device -func (d *Device) ID() uuid.UUID { +func (d *CommonDevice) ID() uuid.UUID { return d.UUID } + +func (d *CommonDevice) Model() ygot.GoStruct { + return d.GoStruct +} + +func (d *CommonDevice) Transport() Transport { + return d.transport +} + +func (d *CommonDevice) Name() string { + return d.name +} + +func (d *CommonDevice) SBI() SouthboundInterface { + return d.sbi +} + +func (d *CommonDevice) SetTransport(t Transport) { + d.transport = t +} + +func (d *CommonDevice) SetName(n string) { + d.name = n +} + +func (d *CommonDevice) SetSBI(sbi SouthboundInterface) { + d.sbi = sbi +} + +func (d *CommonDevice) ProcessResponse(resp proto.Message) error { + return d.transport.ProcessResponse(resp, d.GoStruct, d.sbi.Schema()) +} + +func (d *CommonDevice) isDevice() {} + +type csbiDevice struct { + CommonDevice +} + +// ID returns the UUID of the Device +func (d *csbiDevice) ID() uuid.UUID { + return d.UUID +} + +func (d *csbiDevice) Model() ygot.GoStruct { + return d.GoStruct +} + +func (d *csbiDevice) Transport() Transport { + return d.Transport() +} + +func (d *csbiDevice) Name() string { + return d.Name() +} + +func (d *csbiDevice) SBI() SouthboundInterface { + return d.SBI() +} + +func (d *csbiDevice) ProcessResponse(resp proto.Message) error { + return d.transport.ProcessResponse(resp, d.GoStruct, d.sbi.Schema()) +} + +func (d *csbiDevice) isDevice() {} diff --git a/nucleus/device_test.go b/nucleus/device_test.go index d5d38cab3..1efa75681 100644 --- a/nucleus/device_test.go +++ b/nucleus/device_test.go @@ -34,12 +34,12 @@ func TestDevice_Id(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - d := &Device{ + d := &CommonDevice{ GoStruct: tt.fields.GoStruct, - SBI: tt.fields.SBI, - Transport: tt.fields.Transport, + sbi: tt.fields.SBI, + transport: tt.fields.Transport, UUID: tt.fields.UUID, - Name: tt.fields.Name, + name: tt.fields.Name, } if got := d.ID(); !reflect.DeepEqual(got, tt.want) { t.Errorf("ID() = %v, want %v", got, tt.want) @@ -102,16 +102,16 @@ func TestNewDevice(t *testing.T) { return } if resp != nil { - if reflect.TypeOf(resp.GoStruct) != reflect.TypeOf(&openconfig.Device{}) { + if reflect.TypeOf(resp.Model()) != reflect.TypeOf(&openconfig.Device{}) { t.Error("NewDevice() returned invalid GoStruct") } - if reflect.TypeOf(resp.Transport) != reflect.TypeOf(&Gnmi{}) { + if reflect.TypeOf(resp.Transport()) != reflect.TypeOf(&Gnmi{}) { t.Error("NewDevice() returned invalid transport") } - if reflect.TypeOf(resp.SBI) != reflect.TypeOf(&OpenConfig{}) { + if reflect.TypeOf(resp.SBI()) != reflect.TypeOf(&OpenConfig{}) { t.Error("NewDevice() returned invalid GoStruct") } - if resp.Name != "MyDevice" { + if resp.Name() != "MyDevice" { t.Error("NewDevice() returned wrong name") } } diff --git a/nucleus/initialise_test.go b/nucleus/initialise_test.go index e412a631d..e3b589fe4 100644 --- a/nucleus/initialise_test.go +++ b/nucleus/initialise_test.go @@ -117,11 +117,11 @@ func readTestUUIDs() { func mockDevice() Device { sbi := &OpenConfig{} - return Device{ + return &CommonDevice{ UUID: mdid, GoStruct: sbi.Schema().Root, - SBI: sbi, - Transport: &mocks.Transport{}, + sbi: sbi, + transport: &mocks.Transport{}, } } diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go index f9bcd8e6c..beec0666b 100644 --- a/nucleus/principalNetworkDomain.go +++ b/nucleus/principalNetworkDomain.go @@ -2,20 +2,20 @@ package nucleus import ( "context" + "encoding/json" "reflect" ppb "code.fbi.h-da.de/cocsn/api/go/gosdn/pnd" tpb "code.fbi.h-da.de/cocsn/api/go/gosdn/transport" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/errors" "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/cocsn/gosdn/nucleus/errors" + + "github.com/golang/protobuf/proto" + "github.com/google/uuid" "github.com/openconfig/ygot/ygot" "github.com/openconfig/ygot/ytypes" log "github.com/sirupsen/logrus" - - "encoding/json" - - "github.com/google/uuid" ) // PrincipalNetworkDomain provides an @@ -208,7 +208,7 @@ func (pnd *pndImplementation) AddSbi(sbi interface{}) error { } // RemoveSbi removes a SBI from the PND -// TODO: this should to recursivly through +// TODO: this should to recursively through // devices and remove the devices using // this SBI func (pnd *pndImplementation) RemoveSbi(id uuid.UUID) error { @@ -235,12 +235,12 @@ func (pnd *pndImplementation) GetDevice(identifier string) (interface{}, error) return nil, err } - copiedGoStruct, err := ygot.DeepCopy(d.GoStruct) + copiedGoStruct, err := ygot.DeepCopy(d.Model()) if err != nil { return nil, err } - copiedDevice := &Device{Name: d.Name, UUID: d.UUID, GoStruct: copiedGoStruct} + copiedDevice := &CommonDevice{name: d.Name(), UUID: d.ID(), GoStruct: copiedGoStruct} return copiedDevice, nil } @@ -264,8 +264,8 @@ func (pnd *pndImplementation) removeSbi(id uuid.UUID) error { return pnd.sbic.Delete(id) } -func (pnd *pndImplementation) addDevice(device *Device) error { - err := pnd.devices.Add(device, device.Name) +func (pnd *pndImplementation) addDevice(device Device) error { + err := pnd.devices.Add(device, device.Name()) if err != nil { return err } @@ -283,7 +283,7 @@ func (pnd *pndImplementation) MarshalDevice(identifier string) (string, error) { return "", err } - jsonTree, err := json.MarshalIndent(foundDevice.GoStruct, "", "\t") + jsonTree, err := json.MarshalIndent(foundDevice.Model(), "", "\t") if err != nil { return "", err } @@ -303,11 +303,11 @@ func (pnd *pndImplementation) Request(uuid uuid.UUID, path string) error { return err } ctx := context.Background() - res, err := d.Transport.Get(ctx, path) + res, err := d.Transport().Get(ctx, path) if err != nil { return err } - err = d.Transport.ProcessResponse(res, d.GoStruct, d.SBI.Schema()) + err = d.ProcessResponse(res.(proto.Message)) if err != nil { return err } @@ -334,7 +334,7 @@ func (pnd *pndImplementation) ChangeOND(uuid uuid.UUID, operation ppb.ApiOperati if err != nil { return err } - cpy, err := ygot.DeepCopy(d.GoStruct) + cpy, err := ygot.DeepCopy(d.Model()) ygot.BuildEmptyTree(cpy) if err != nil { return err @@ -355,11 +355,11 @@ func (pnd *pndImplementation) ChangeOND(uuid uuid.UUID, operation ppb.ApiOperati switch operation { case ppb.ApiOperation_UPDATE, ppb.ApiOperation_REPLACE: typedValue := gnmi.TypedValue(value[0]) - if err := ytypes.SetNode(d.SBI.Schema().RootSchema(), cpy, p, typedValue); err != nil { + if err := ytypes.SetNode(d.SBI().Schema().RootSchema(), cpy, p, typedValue); err != nil { return err } case ppb.ApiOperation_DELETE: - if err := ytypes.DeleteNode(d.SBI.Schema().RootSchema(), cpy, p); err != nil { + if err := ytypes.DeleteNode(d.SBI().Schema().RootSchema(), cpy, p); err != nil { return err } default: @@ -368,11 +368,11 @@ func (pnd *pndImplementation) ChangeOND(uuid uuid.UUID, operation ppb.ApiOperati callback := func(state ygot.GoStruct, change ygot.GoStruct) error { ctx := context.Background() - return d.Transport.Set(ctx, state, change) + return d.Transport().Set(ctx, state, change) } errChan := make(chan error) - change := NewChange(uuid, d.GoStruct, cpy, callback, errChan) + change := NewChange(uuid, d.Model(), cpy, callback, errChan) pnd.errChans[change.ID()] = errChan return pnd.pendingChanges.Add(change) diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go index f2eb25cc6..5e6e5ec43 100644 --- a/nucleus/principalNetworkDomain_test.go +++ b/nucleus/principalNetworkDomain_test.go @@ -12,6 +12,7 @@ import ( "code.fbi.h-da.de/cocsn/gosdn/mocks" "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "github.com/google/uuid" + gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/ygot/ygot" "github.com/stretchr/testify/mock" ) @@ -101,7 +102,7 @@ func Test_pndImplementation_AddDevice(t *testing.T) { { name: "already exists", args: args{ - device: &Device{ + device: &CommonDevice{ UUID: did, }, }, @@ -122,7 +123,7 @@ func Test_pndImplementation_AddDevice(t *testing.T) { t.Error(err) } if tt.name == "already exists" { - pnd.devices.store[did] = tt.args.device.(*Device) + pnd.devices.store[did] = tt.args.device.(Device) } err := pnd.AddDevice(tt.args.name, tt.args.opts, defaultSbiID) if (err != nil) != tt.wantErr { @@ -135,8 +136,8 @@ func Test_pndImplementation_AddDevice(t *testing.T) { t.Errorf("AddDevice() error = %v", err) return } - if d.Name != tt.args.name { - t.Errorf("AddDevice() got = %v, want %v", d.Name, tt.args.name) + if d.Name() != tt.args.name { + t.Errorf("AddDevice() got = %v, want %v", d.Name(), tt.args.name) } if err := pnd.devices.Delete(d.ID()); err != nil { t.Error(err) @@ -213,7 +214,7 @@ func Test_pndImplementation_AddSbi(t *testing.T) { func Test_pndImplementation_ContainsDevice(t *testing.T) { type args struct { uuid uuid.UUID - device *Device + device Device } tests := []struct { name string @@ -222,15 +223,15 @@ func Test_pndImplementation_ContainsDevice(t *testing.T) { }{ {name: "default", args: args{ uuid: did, - device: &Device{UUID: did}, + device: &CommonDevice{UUID: did}, }, want: true}, {name: "fails", args: args{ uuid: uuid.New(), - device: &Device{UUID: did}, + device: &CommonDevice{UUID: did}, }, want: false}, {name: "fails empty", args: args{ uuid: uuid.New(), - device: &Device{UUID: did}, + device: &CommonDevice{UUID: did}, }, want: false}, } for _, tt := range tests { @@ -351,11 +352,11 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { pnd := newPnd() - d := &Device{ + d := &CommonDevice{ UUID: tt.args.uuid, GoStruct: &openconfig.Device{}, - SBI: nil, - Transport: nil, + sbi: nil, + transport: nil, } if err := pnd.addDevice(d); err != nil { t.Error(err) @@ -392,7 +393,7 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) { t.Run(tt.name, func(t *testing.T) { pnd := newPnd() if tt.name != "fails empty" { - d := &Device{UUID: did} + d := &CommonDevice{UUID: did} if err := pnd.addDevice(d); err != nil { t.Error(err) } @@ -478,10 +479,10 @@ func Test_pndImplementation_Request(t *testing.T) { t.Run(tt.name, func(t *testing.T) { deviceWithMockTransport := mockDevice() pnd := newPnd() - tr := deviceWithMockTransport.Transport.(*mocks.Transport) - tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr) + tr := deviceWithMockTransport.Transport().(*mocks.Transport) + tr.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) - _ = pnd.addDevice(&deviceWithMockTransport) + _ = pnd.addDevice(deviceWithMockTransport) if err := pnd.Request(tt.args.uuid, tt.args.path); (err != nil) != tt.wantErr { t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr) } @@ -526,10 +527,10 @@ func Test_pndImplementation_RequestAll(t *testing.T) { t.Run(tt.name, func(t *testing.T) { deviceWithMockTransport := mockDevice() pnd := newPnd() - tr := deviceWithMockTransport.Transport.(*mocks.Transport) - tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr) + tr := deviceWithMockTransport.Transport().(*mocks.Transport) + tr.On("Get", mockContext, mock.Anything).Return(&gpb.GetResponse{}, tt.args.rErr) tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) - _ = pnd.addDevice(&deviceWithMockTransport) + _ = pnd.addDevice(deviceWithMockTransport) if err := pnd.RequestAll(tt.args.path); (err != nil) != tt.wantErr { t.Errorf("RequestAll() error = %v, wantErr %v", err, tt.wantErr) } @@ -706,8 +707,8 @@ func Test_pndImplementation_GetDevice(t *testing.T) { return } if foundDevice != nil { - if !reflect.DeepEqual(foundDevice.(*Device).GoStruct, tt.want) { - t.Errorf("GetDevice() got = %v, want %v", foundDevice.(*Device).GoStruct, tt.want) + if !reflect.DeepEqual(foundDevice.(Device).Model(), tt.want) { + t.Errorf("GetDevice() got = %v, want %v", foundDevice.(Device).Model(), tt.want) } } @@ -738,7 +739,7 @@ func Test_pndImplementation_GetDeviceByName(t *testing.T) { }{ { name: "default", - args: args{name: d.Name}, + args: args{name: d.Name()}, want: sbi.Schema().Root, wantErr: false, }, @@ -757,8 +758,8 @@ func Test_pndImplementation_GetDeviceByName(t *testing.T) { return } if foundDevice != nil { - if !reflect.DeepEqual(foundDevice.(*Device).GoStruct, tt.want) { - t.Errorf("GetDeviceByName() got = %v, want %v", foundDevice.(*Device).GoStruct, tt.want) + if !reflect.DeepEqual(foundDevice.(Device).Model(), tt.want) { + t.Errorf("GetDeviceByName() got = %v, want %v", foundDevice.(Device).Model(), tt.want) } } @@ -784,9 +785,9 @@ func Test_pndImplementation_Confirm(t *testing.T) { t.Run(tt.name, func(t *testing.T) { pnd := newPnd() d := mockDevice() - tr := d.Transport.(*mocks.Transport) + tr := d.Transport().(*mocks.Transport) tr.On("Set", mockContext, mock.Anything, mock.Anything).Return(nil) - if err := pnd.addDevice(&d); err != nil { + if err := pnd.addDevice(d); err != nil { t.Error(err) return } diff --git a/nucleus/store.go b/nucleus/store.go index 639762d43..911ae3112 100644 --- a/nucleus/store.go +++ b/nucleus/store.go @@ -177,7 +177,7 @@ type DeviceStore struct { // Get takes a Device's UUID and returns the Device. If the requested // Device does not exist an error is returned. -func (s DeviceStore) Get(id uuid.UUID, parseErrors ...error) (*Device, error) { +func (s DeviceStore) Get(id uuid.UUID, parseErrors ...error) (Device, error) { var foundID uuid.UUID foundID = id @@ -201,11 +201,11 @@ func (s DeviceStore) Get(id uuid.UUID, parseErrors ...error) (*Device, error) { if err != nil { return nil, err } - device, ok := item.(*Device) + device, ok := item.(Device) if !ok { return nil, &errors.ErrInvalidTypeAssertion{ Value: device, - Type: reflect.TypeOf(&Device{}), + Type: reflect.TypeOf((Device)(nil)), } } log.WithFields(log.Fields{ diff --git a/nucleus/store_test.go b/nucleus/store_test.go index 18a13fd4c..69bbd6282 100644 --- a/nucleus/store_test.go +++ b/nucleus/store_test.go @@ -271,7 +271,7 @@ func Test_sbiStore_get(t *testing.T) { name: "fails wrong type", fields: fields{ store: store{ - did: &Device{ + did: &CommonDevice{ UUID: did, }, }, @@ -344,7 +344,7 @@ func Test_pndStore_get(t *testing.T) { name: "fails wrong type", fields: fields{ store: store{ - did: &Device{ + did: &CommonDevice{ UUID: did, }, }, @@ -381,16 +381,16 @@ func Test_deviceStore_get(t *testing.T) { name string fields fields args args - want *Device + want Device wantErr bool }{ { name: "exists", fields: fields{ store: store{ - defaultPndID: &Device{UUID: did}}}, + defaultPndID: &CommonDevice{UUID: did}}}, args: args{id: defaultPndID}, - want: &Device{ + want: &CommonDevice{ UUID: did, }, wantErr: false, @@ -399,7 +399,7 @@ func Test_deviceStore_get(t *testing.T) { name: "fails", fields: fields{ store: store{ - defaultPndID: &Device{UUID: did}}}, + defaultPndID: &CommonDevice{UUID: did}}}, args: args{id: iid}, wantErr: true, }, -- GitLab