Skip to content
Snippets Groups Projects
Commit d40abebd authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

GNMI Transport and PND tests complete

parent 7eeef8ef
Branches
Tags
2 merge requests!101Resolve "Increase test coverage",!90Develop
...@@ -35,13 +35,6 @@ func testSetupGnmi() { ...@@ -35,13 +35,6 @@ func testSetupGnmi() {
Encoding: gpb.Encoding_PROTO, Encoding: gpb.Encoding_PROTO,
} }
transport = &Gnmi{
SetNode: nil,
RespChan: make(chan *gpb.SubscribeResponse),
config: gnmiConfig,
client: &mocks.GNMIClient{},
}
startGnmiTarget = make(chan string) startGnmiTarget = make(chan string)
stopGnmiTarget = make(chan bool) stopGnmiTarget = make(chan bool)
go targetRunner() go targetRunner()
...@@ -56,13 +49,22 @@ func targetRunner() { ...@@ -56,13 +49,22 @@ func targetRunner() {
} }
} }
var transport *Gnmi func mockTransport() Gnmi {
return Gnmi{
SetNode: nil,
RespChan: make(chan *gpb.SubscribeResponse),
config: gnmiConfig,
client: &mocks.GNMIClient{},
}
}
var gnmiConfig *gnmi.Config var gnmiConfig *gnmi.Config
var startGnmiTarget chan string var startGnmiTarget chan string
var stopGnmiTarget chan bool var stopGnmiTarget chan bool
var mockContext = mock.MatchedBy(func(ctx context.Context) bool { return true }) var mockContext = mock.MatchedBy(func(ctx context.Context) bool { return true })
func TestGnmi_Capabilities(t *testing.T) { func TestGnmi_Capabilities(t *testing.T) {
transport := mockTransport()
capabilityResponse := &gpb.CapabilityResponse{ capabilityResponse := &gpb.CapabilityResponse{
SupportedModels: nil, SupportedModels: nil,
SupportedEncodings: []gpb.Encoding{gpb.Encoding_PROTO, gpb.Encoding_JSON_IETF, gpb.Encoding_JSON}, SupportedEncodings: []gpb.Encoding{gpb.Encoding_PROTO, gpb.Encoding_JSON_IETF, gpb.Encoding_JSON},
...@@ -93,7 +95,7 @@ func TestGnmi_Capabilities(t *testing.T) { ...@@ -93,7 +95,7 @@ func TestGnmi_Capabilities(t *testing.T) {
}{ }{
{ {
name: "mock", name: "mock",
fields: fields{transport: transport}, fields: fields{transport: &transport},
args: args{ args: args{
endpoint: gnmiConfig.Addr, endpoint: gnmiConfig.Addr,
runEndpoint: false, runEndpoint: false,
...@@ -151,6 +153,7 @@ func TestGnmi_Close(t *testing.T) { ...@@ -151,6 +153,7 @@ func TestGnmi_Close(t *testing.T) {
} }
func TestGnmi_Get(t *testing.T) { func TestGnmi_Get(t *testing.T) {
transport := mockTransport()
getRequest := &gpb.GetRequest{ getRequest := &gpb.GetRequest{
Prefix: nil, Prefix: nil,
Path: nil, Path: nil,
...@@ -201,14 +204,14 @@ func TestGnmi_Get(t *testing.T) { ...@@ -201,14 +204,14 @@ func TestGnmi_Get(t *testing.T) {
}, },
{ {
name: "mock", name: "mock",
fields: fields{transport: transport}, fields: fields{transport: &transport},
args: args{}, args: args{},
want: getResponse, want: getResponse,
wantErr: false, wantErr: false,
}, },
{ {
name: "endpoint", name: "endpoint",
fields: fields{transport: transport}, fields: fields{transport: &transport},
args: args{ args: args{
runEndpoint: true, runEndpoint: true,
}, },
...@@ -237,6 +240,7 @@ func TestGnmi_Get(t *testing.T) { ...@@ -237,6 +240,7 @@ func TestGnmi_Get(t *testing.T) {
} }
func TestGnmi_GetConfig(t *testing.T) { func TestGnmi_GetConfig(t *testing.T) {
transport := mockTransport()
type fields struct { type fields struct {
transport *Gnmi transport *Gnmi
} }
...@@ -247,7 +251,7 @@ func TestGnmi_GetConfig(t *testing.T) { ...@@ -247,7 +251,7 @@ func TestGnmi_GetConfig(t *testing.T) {
}{ }{
{ {
name: "default", name: "default",
fields: fields{transport: transport}, fields: fields{transport: &transport},
want: gnmiConfig, want: gnmiConfig,
}, },
} }
...@@ -455,6 +459,7 @@ func TestGnmi_get(t *testing.T) { ...@@ -455,6 +459,7 @@ func TestGnmi_get(t *testing.T) {
} }
func TestGnmi_getWithRequest(t *testing.T) { func TestGnmi_getWithRequest(t *testing.T) {
transport := mockTransport()
reqFullNode := &gpb.GetRequest{} reqFullNode := &gpb.GetRequest{}
reqInterfacesWildcard := &gpb.GetRequest{} reqInterfacesWildcard := &gpb.GetRequest{}
respFullNode := &gpb.GetResponse{} respFullNode := &gpb.GetResponse{}
...@@ -504,7 +509,7 @@ func TestGnmi_getWithRequest(t *testing.T) { ...@@ -504,7 +509,7 @@ func TestGnmi_getWithRequest(t *testing.T) {
}{ }{
{ {
name: "getFullNode", name: "getFullNode",
fields: fields{transport: transport}, fields: fields{transport: &transport},
args: args{ args: args{
request: reqFullNode, request: reqFullNode,
}, },
...@@ -513,7 +518,7 @@ func TestGnmi_getWithRequest(t *testing.T) { ...@@ -513,7 +518,7 @@ func TestGnmi_getWithRequest(t *testing.T) {
}, },
{ {
name: "getInterfacesWildcard", name: "getInterfacesWildcard",
fields: fields{transport: transport}, fields: fields{transport: &transport},
args: args{ args: args{
request: reqInterfacesWildcard, request: reqInterfacesWildcard,
}, },
......
...@@ -22,33 +22,36 @@ func testSetupPnd() { ...@@ -22,33 +22,36 @@ func testSetupPnd() {
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
}
defaultPnd = &pndImplementation{ func mockDevice() Device {
name: "default", return Device{
description: "default test pnd",
sbi: map[string]SouthboundInterface{"default": &OpenConfig{}},
devices: map[uuid.UUID]*Device{},
}
deviceWithMockTransport = &Device{
GoStruct: nil, GoStruct: nil,
SBI: &OpenConfig{}, SBI: &OpenConfig{},
Config: DeviceConfig{ Config: DeviceConfig{
Uuid: mdid, Uuid: mdid,
Address: "", Address: "mock://localhost",
Username: "", Username: "mock",
Password: "", Password: "mock",
}, },
Transport: &mocks.Transport{}, Transport: &mocks.Transport{},
} }
} }
var defaultPnd *pndImplementation func freshPnd() pndImplementation {
return pndImplementation{
name: "default",
description: "default test pnd",
sbi: map[string]SouthboundInterface{"default": &OpenConfig{}},
devices: map[uuid.UUID]*Device{},
}
}
var did uuid.UUID var did uuid.UUID
var mdid uuid.UUID var mdid uuid.UUID
var deviceWithMockTransport *Device
func TestNewPND(t *testing.T) { func TestNewPND(t *testing.T) {
pnd := freshPnd()
type args struct { type args struct {
name string name string
description string description string
...@@ -66,7 +69,7 @@ func TestNewPND(t *testing.T) { ...@@ -66,7 +69,7 @@ func TestNewPND(t *testing.T) {
description: "default test pnd", description: "default test pnd",
sbi: &OpenConfig{}, sbi: &OpenConfig{},
}, },
want: defaultPnd, want: &pnd,
}, },
} }
for _, tt := range tests { for _, tt := range tests {
...@@ -115,16 +118,17 @@ func Test_pndImplementation_AddDevice(t *testing.T) { ...@@ -115,16 +118,17 @@ func Test_pndImplementation_AddDevice(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if err := defaultPnd.AddDevice(tt.args.device); (err != nil) != tt.wantErr { pnd := freshPnd()
if err := pnd.AddDevice(tt.args.device); (err != nil) != tt.wantErr {
t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr)
} }
_, ok := defaultPnd.devices[did] _, ok := pnd.devices[did]
if !ok { if !ok {
t.Errorf("AddDevice() Device %v not in device store %v", t.Errorf("AddDevice() Device %v not in device store %v",
tt.args.device, defaultPnd.devices) tt.args.device, pnd.devices)
} }
delete(pnd.devices, did)
}) })
delete(defaultPnd.devices, did)
} }
} }
...@@ -141,16 +145,17 @@ func Test_pndImplementation_AddSbi(t *testing.T) { ...@@ -141,16 +145,17 @@ func Test_pndImplementation_AddSbi(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if err := defaultPnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr { pnd := freshPnd()
if err := pnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr {
t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr)
} }
_, ok := defaultPnd.GetSBIs()[tt.args.sbi.SbiIdentifier()] _, ok := pnd.GetSBIs()[tt.args.sbi.SbiIdentifier()]
if !ok { if !ok {
t.Errorf("AddSbi() SBI %v not in device store %v", t.Errorf("AddSbi() SBI %v not in device store %v",
tt.args.sbi, defaultPnd.GetSBIs()) tt.args.sbi, pnd.GetSBIs())
} }
delete(pnd.sbi, tt.args.sbi.SbiIdentifier())
}) })
delete(defaultPnd.sbi, tt.args.sbi.SbiIdentifier())
} }
} }
...@@ -175,12 +180,13 @@ func Test_pndImplementation_ContainsDevice(t *testing.T) { ...@@ -175,12 +180,13 @@ func Test_pndImplementation_ContainsDevice(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
defaultPnd.devices[tt.args.uuid] = tt.args.device pnd := freshPnd()
if got := defaultPnd.ContainsDevice(tt.args.uuid); got != tt.want { pnd.devices[did] = tt.args.device
if got := pnd.ContainsDevice(tt.args.uuid); got != tt.want {
t.Errorf("ContainsDevice() = %v, want %v", got, tt.want) t.Errorf("ContainsDevice() = %v, want %v", got, tt.want)
} }
delete(pnd.devices, did)
}) })
delete(defaultPnd.devices, did)
} }
} }
...@@ -222,7 +228,8 @@ func Test_pndImplementation_GetDescription(t *testing.T) { ...@@ -222,7 +228,8 @@ func Test_pndImplementation_GetDescription(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if got := defaultPnd.GetDescription(); got != tt.want { pnd := freshPnd()
if got := pnd.GetDescription(); got != tt.want {
t.Errorf("GetDescription() = %v, want %v", got, tt.want) t.Errorf("GetDescription() = %v, want %v", got, tt.want)
} }
}) })
...@@ -238,7 +245,8 @@ func Test_pndImplementation_GetName(t *testing.T) { ...@@ -238,7 +245,8 @@ func Test_pndImplementation_GetName(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if got := defaultPnd.GetName(); got != tt.want { pnd := freshPnd()
if got := pnd.GetName(); got != tt.want {
t.Errorf("GetName() = %v, want %v", got, tt.want) t.Errorf("GetName() = %v, want %v", got, tt.want)
} }
}) })
...@@ -246,15 +254,16 @@ func Test_pndImplementation_GetName(t *testing.T) { ...@@ -246,15 +254,16 @@ func Test_pndImplementation_GetName(t *testing.T) {
} }
func Test_pndImplementation_GetSBIs(t *testing.T) { func Test_pndImplementation_GetSBIs(t *testing.T) {
pnd := freshPnd()
tests := []struct { tests := []struct {
name string name string
want map[string]SouthboundInterface want map[string]SouthboundInterface
}{ }{
{name: "default", want: defaultPnd.sbi}, {name: "default", want: pnd.sbi},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if got := defaultPnd.GetSBIs(); !reflect.DeepEqual(got, tt.want) { if got := pnd.GetSBIs(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetSBIs() = %v, want %v", got, tt.want) t.Errorf("GetSBIs() = %v, want %v", got, tt.want)
} }
}) })
...@@ -275,6 +284,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) { ...@@ -275,6 +284,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
pnd := freshPnd()
d := &Device{ d := &Device{
GoStruct: &openconfig.Device{}, GoStruct: &openconfig.Device{},
SBI: nil, SBI: nil,
...@@ -286,8 +296,8 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) { ...@@ -286,8 +296,8 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
}, },
Transport: nil, Transport: nil,
} }
_ = defaultPnd.addDevice(d) _ = pnd.addDevice(d)
got, err := defaultPnd.MarshalDevice(tt.args.uuid) got, err := pnd.MarshalDevice(tt.args.uuid)
if (err != nil) != tt.wantErr { if (err != nil) != tt.wantErr {
t.Errorf("MarshalDevice() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("MarshalDevice() error = %v, wantErr %v", err, tt.wantErr)
return return
...@@ -295,6 +305,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) { ...@@ -295,6 +305,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
if got != tt.want { if got != tt.want {
t.Errorf("MarshalDevice() got = %v, want %v", got, tt.want) t.Errorf("MarshalDevice() got = %v, want %v", got, tt.want)
} }
delete(pnd.devices, did)
}) })
} }
} }
...@@ -312,14 +323,15 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) { ...@@ -312,14 +323,15 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
pnd := freshPnd()
d := &Device{Config: DeviceConfig{Uuid: did}} d := &Device{Config: DeviceConfig{Uuid: did}}
_ = defaultPnd.addDevice(d) _ = pnd.addDevice(d)
if err := defaultPnd.RemoveDevice(tt.args.uuid); (err != nil) != tt.wantErr { if err := pnd.RemoveDevice(tt.args.uuid); (err != nil) != tt.wantErr {
t.Errorf("RemoveDevice() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("RemoveDevice() error = %v, wantErr %v", err, tt.wantErr)
} }
_, ok := defaultPnd.devices[did] _, ok := pnd.devices[did]
if ok { if ok {
t.Errorf("RemoveDevice() device %v still in device store %v", d, defaultPnd.devices) t.Errorf("RemoveDevice() device %v still in device store %v", d, pnd.devices)
} }
}) })
} }
...@@ -338,13 +350,14 @@ func Test_pndImplementation_RemoveSbi(t *testing.T) { ...@@ -338,13 +350,14 @@ func Test_pndImplementation_RemoveSbi(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
_ = defaultPnd.addSbi(&OpenConfig{}) pnd := freshPnd()
if err := defaultPnd.RemoveSbi(tt.args.sbiIdentifier); (err != nil) != tt.wantErr { _ = pnd.addSbi(&OpenConfig{})
if err := pnd.RemoveSbi(tt.args.sbiIdentifier); (err != nil) != tt.wantErr {
t.Errorf("RemoveSbi() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("RemoveSbi() error = %v, wantErr %v", err, tt.wantErr)
} }
sbi, ok := defaultPnd.sbi[tt.args.sbiIdentifier] sbi, ok := pnd.sbi[tt.args.sbiIdentifier]
if ok { if ok {
t.Errorf("RemoveDevice() SBI %v still in SBI store %v", sbi, defaultPnd.sbi) t.Errorf("RemoveDevice() SBI %v still in SBI store %v", sbi, pnd.sbi)
} }
}) })
} }
...@@ -382,16 +395,18 @@ func Test_pndImplementation_Request(t *testing.T) { ...@@ -382,16 +395,18 @@ func Test_pndImplementation_Request(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
deviceWithMockTransport := mockDevice()
pnd := freshPnd()
tr := deviceWithMockTransport.Transport.(*mocks.Transport) tr := deviceWithMockTransport.Transport.(*mocks.Transport)
tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr) tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr)
tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr)
_ = defaultPnd.addDevice(deviceWithMockTransport) _ = pnd.addDevice(&deviceWithMockTransport)
if err := defaultPnd.Request(tt.args.uuid, tt.args.path); (err != nil) != tt.wantErr { if err := pnd.Request(tt.args.uuid, tt.args.path); (err != nil) != tt.wantErr {
t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr)
} }
delete(pnd.devices, mdid)
}) })
} }
delete(defaultPnd.devices, mdid)
} }
func Test_pndImplementation_RequestAll(t *testing.T) { func Test_pndImplementation_RequestAll(t *testing.T) {
...@@ -417,7 +432,7 @@ func Test_pndImplementation_RequestAll(t *testing.T) { ...@@ -417,7 +432,7 @@ func Test_pndImplementation_RequestAll(t *testing.T) {
{ {
name: "error", name: "error",
args: args{ args: args{
uuid: uuid.UUID{}, uuid: did,
path: "", path: "",
rErr: errors.New("deliberate test fail"), rErr: errors.New("deliberate test fail"),
}, },
...@@ -426,14 +441,16 @@ func Test_pndImplementation_RequestAll(t *testing.T) { ...@@ -426,14 +441,16 @@ func Test_pndImplementation_RequestAll(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
deviceWithMockTransport := mockDevice()
pnd := freshPnd()
tr := deviceWithMockTransport.Transport.(*mocks.Transport) tr := deviceWithMockTransport.Transport.(*mocks.Transport)
tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr) tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr)
tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr) tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr)
_ = defaultPnd.addDevice(deviceWithMockTransport) _ = pnd.addDevice(&deviceWithMockTransport)
if err := defaultPnd.RequestAll(tt.args.path); (err != nil) != tt.wantErr { if err := pnd.RequestAll(tt.args.path); (err != nil) != tt.wantErr {
t.Errorf("RequestAll() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("RequestAll() error = %v, wantErr %v", err, tt.wantErr)
} }
delete(pnd.devices, mdid)
}) })
delete(defaultPnd.devices, mdid)
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment