Skip to content
Snippets Groups Projects
Commit d360be1c authored by André Sterba's avatar André Sterba
Browse files

Fix NBI pnd tests

parent 510a698b
Branches
No related tags found
6 merge requests!376Add additional example application hostname-checker,!349Northbound refactoring to implement NIB concept for devices,!343Add basic application framework and example application to show interaction between events an NBI,!339Create basic venv-manager for use with arista,!327Remove NBI package global services and refactor NBI servers,!324Provide prototype implementation for topology handling
...@@ -2,7 +2,6 @@ package server ...@@ -2,7 +2,6 @@ package server
import ( import (
"context" "context"
"os"
"reflect" "reflect"
"testing" "testing"
"time" "time"
...@@ -14,14 +13,12 @@ import ( ...@@ -14,14 +13,12 @@ import (
"code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound"
"code.fbi.h-da.de/danet/gosdn/controller/mocks" "code.fbi.h-da.de/danet/gosdn/controller/mocks"
"code.fbi.h-da.de/danet/gosdn/controller/nucleus" "code.fbi.h-da.de/danet/gosdn/controller/nucleus"
"code.fbi.h-da.de/danet/gosdn/controller/rbac"
"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig" "code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts" "github.com/google/go-cmp/cmp/cmpopts"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/gnmi/proto/gnmi"
log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
) )
...@@ -42,32 +39,59 @@ var mockPnd *mocks.NetworkDomain ...@@ -42,32 +39,59 @@ var mockPnd *mocks.NetworkDomain
var mockDevice device.Device var mockDevice device.Device
var sbiStore southbound.Store var sbiStore southbound.Store
func TestMain(m *testing.M) { func initUUIDs(t *testing.T) {
log.SetReportCaller(true)
var err error var err error
pndUUID, err = uuid.Parse(pndID) pndUUID, err = uuid.Parse(pndID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
sbiUUID, err = uuid.Parse(sbiID) sbiUUID, err = uuid.Parse(sbiID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
pendingChangeUUID, err = uuid.Parse(pendingChangeID) pendingChangeUUID, err = uuid.Parse(pendingChangeID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
committedChangeUUID, err = uuid.Parse(committedChangeID) committedChangeUUID, err = uuid.Parse(committedChangeID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
deviceUUID, err = uuid.Parse(ondID) deviceUUID, err = uuid.Parse(ondID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
}
}
func getTestCoreServer(t *testing.T) *core {
var err error
pndUUID, err = uuid.Parse(pndID)
if err != nil {
t.Fatal(err)
}
sbiUUID, err = uuid.Parse(sbiID)
if err != nil {
t.Fatal(err)
}
pendingChangeUUID, err = uuid.Parse(pendingChangeID)
if err != nil {
t.Fatal(err)
}
committedChangeUUID, err = uuid.Parse(committedChangeID)
if err != nil {
t.Fatal(err)
}
deviceUUID, err = uuid.Parse(ondID)
if err != nil {
t.Fatal(err)
} }
mockDevice = &nucleus.CommonDevice{ mockDevice = &nucleus.CommonDevice{
...@@ -84,14 +108,14 @@ func TestMain(m *testing.M) { ...@@ -84,14 +108,14 @@ func TestMain(m *testing.M) {
sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID) sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
mockDevice.(*nucleus.CommonDevice).SetSBI(sbi) mockDevice.(*nucleus.CommonDevice).SetSBI(sbi)
mockDevice.(*nucleus.CommonDevice).SetTransport(&mocks.Transport{}) mockDevice.(*nucleus.CommonDevice).SetTransport(&mocks.Transport{})
mockDevice.(*nucleus.CommonDevice).SetName(hostname) mockDevice.(*nucleus.CommonDevice).SetName(hostname)
sbiStore = nucleus.NewSbiStore(pndUUID) sbiStore = nucleus.NewSbiStore(pndUUID)
if err := sbiStore.Add(mockDevice.SBI()); err != nil { if err := sbiStore.Add(mockDevice.SBI()); err != nil {
log.Fatal(err) t.Fatal(err)
} }
mockChange := &mocks.Change{} mockChange := &mocks.Change{}
...@@ -115,21 +139,96 @@ func TestMain(m *testing.M) { ...@@ -115,21 +139,96 @@ func TestMain(m *testing.M) {
mockPnd.On("ChangeOND", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil) mockPnd.On("ChangeOND", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil)
mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil) mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil)
pndc = nucleus.NewMemoryPndStore() pndStore := nucleus.NewMemoryPndStore()
if err := pndc.Add(mockPnd); err != nil { if err := pndStore.Add(mockPnd); err != nil {
log.Fatal(err) t.Fatal(err)
} }
// everyting auth related c := NewCoreServer(pndStore)
userService = rbac.NewUserService(rbac.NewMemoryUserStore())
roleService = rbac.NewRoleService(rbac.NewMemoryRoleStore()) return c
err = clearAndCreateAuthTestSetup() }
func getTestPndServer(t *testing.T) *pndServer {
var err error
pndUUID, err = uuid.Parse(pndID)
if err != nil {
t.Fatal(err)
}
sbiUUID, err = uuid.Parse(sbiID)
if err != nil {
t.Fatal(err)
}
pendingChangeUUID, err = uuid.Parse(pendingChangeID)
if err != nil { if err != nil {
log.Fatal(err) t.Fatal(err)
} }
jwt = rbac.NewJWTManager("", 1*time.Minute)
os.Exit(m.Run()) committedChangeUUID, err = uuid.Parse(committedChangeID)
if err != nil {
t.Fatal(err)
}
deviceUUID, err = uuid.Parse(ondID)
if err != nil {
t.Fatal(err)
}
mockDevice = &nucleus.CommonDevice{
Model: &openconfig.Device{
System: &openconfig.OpenconfigSystem_System{
Config: &openconfig.OpenconfigSystem_System_Config{
Hostname: &hostname,
DomainName: &domainname,
},
},
},
UUID: deviceUUID,
}
sbi, err := nucleus.NewSBI(spb.Type_TYPE_OPENCONFIG, sbiUUID)
if err != nil {
t.Fatal(err)
}
mockDevice.(*nucleus.CommonDevice).SetSBI(sbi)
mockDevice.(*nucleus.CommonDevice).SetTransport(&mocks.Transport{})
mockDevice.(*nucleus.CommonDevice).SetName(hostname)
sbiStore = nucleus.NewSbiStore(pndUUID)
if err := sbiStore.Add(mockDevice.SBI()); err != nil {
t.Fatal(err)
}
mockChange := &mocks.Change{}
mockChange.On("Age").Return(time.Hour)
mockChange.On("State").Return(ppb.ChangeState_CHANGE_STATE_INCONSISTENT)
mockPnd = &mocks.NetworkDomain{}
mockPnd.On("ID").Return(pndUUID)
mockPnd.On("GetName").Return("test")
mockPnd.On("GetDescription").Return("test")
mockPnd.On("GetSBIs").Return(sbiStore)
mockPnd.On("GetSBI", mock.Anything).Return(mockDevice.SBI(), nil)
mockPnd.On("Devices").Return([]uuid.UUID{deviceUUID})
mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID})
mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID})
mockPnd.On("GetChange", mock.Anything).Return(mockChange, nil)
mockPnd.On("AddDevice", mock.Anything, mock.Anything, mock.Anything).Return(nil)
mockPnd.On("GetDevice", mock.Anything).Return(mockDevice, nil)
mockPnd.On("Commit", mock.Anything).Return(nil)
mockPnd.On("Confirm", mock.Anything).Return(nil)
mockPnd.On("ChangeOND", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(uuid.Nil, nil)
mockPnd.On("Request", mock.Anything, mock.Anything).Return(nil, nil)
pndStore := nucleus.NewMemoryPndStore()
if err := pndStore.Add(mockPnd); err != nil {
t.Fatal(err)
}
c := NewPndServer(pndStore)
return c
} }
// TODO: We should re-add all tests for changes. // TODO: We should re-add all tests for changes.
...@@ -165,10 +264,9 @@ func Test_pnd_Get(t *testing.T) { ...@@ -165,10 +264,9 @@ func Test_pnd_Get(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) {
p := core{ c := getTestCoreServer(t)
UnimplementedCoreServiceServer: pb.UnimplementedCoreServiceServer{},
} resp, err := c.GetPnd(tt.args.ctx, tt.args.request)
resp, err := p.GetPnd(tt.args.ctx, tt.args.request)
if (err != nil) != tt.wantErr { if (err != nil) != tt.wantErr {
t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr)
return return
...@@ -184,6 +282,8 @@ func Test_pnd_Get(t *testing.T) { ...@@ -184,6 +282,8 @@ func Test_pnd_Get(t *testing.T) {
} }
func Test_pnd_GetPath(t *testing.T) { func Test_pnd_GetPath(t *testing.T) {
initUUIDs(t)
opts := cmp.Options{ opts := cmp.Options{
cmpopts.SortSlices( cmpopts.SortSlices(
func(x, y *gnmi.Update) bool { func(x, y *gnmi.Update) bool {
...@@ -209,9 +309,9 @@ func Test_pnd_GetPath(t *testing.T) { ...@@ -209,9 +309,9 @@ func Test_pnd_GetPath(t *testing.T) {
ctx: context.Background(), ctx: context.Background(),
request: &ppb.GetPathRequest{ request: &ppb.GetPathRequest{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
Did: mockDevice.ID().String(), Did: deviceUUID.String(),
Path: "system/config/hostname", Path: "system/config/hostname",
Pid: mockPnd.ID().String(), Pid: pndUUID.String(),
}, },
}, },
want: []*gnmi.Notification{ want: []*gnmi.Notification{
...@@ -247,9 +347,9 @@ func Test_pnd_GetPath(t *testing.T) { ...@@ -247,9 +347,9 @@ func Test_pnd_GetPath(t *testing.T) {
ctx: context.Background(), ctx: context.Background(),
request: &ppb.GetPathRequest{ request: &ppb.GetPathRequest{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
Did: mockDevice.ID().String(), Did: deviceUUID.String(),
Path: "system", Path: "system",
Pid: mockPnd.ID().String(), Pid: pndUUID.String(),
}, },
}, },
want: []*gnmi.Notification{ want: []*gnmi.Notification{
...@@ -279,9 +379,9 @@ func Test_pnd_GetPath(t *testing.T) { ...@@ -279,9 +379,9 @@ func Test_pnd_GetPath(t *testing.T) {
ctx: context.Background(), ctx: context.Background(),
request: &ppb.GetPathRequest{ request: &ppb.GetPathRequest{
Timestamp: time.Now().UnixNano(), Timestamp: time.Now().UnixNano(),
Did: mockDevice.ID().String(), Did: deviceUUID.String(),
Path: "this/path/is/not/valid", Path: "this/path/is/not/valid",
Pid: mockPnd.ID().String(), Pid: pndUUID.String(),
}, },
}, },
want: []*gnmi.Notification{}, want: []*gnmi.Notification{},
...@@ -290,9 +390,7 @@ func Test_pnd_GetPath(t *testing.T) { ...@@ -290,9 +390,7 @@ func Test_pnd_GetPath(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) {
s := pndServer{ s := getTestPndServer(t)
UnimplementedPndServiceServer: ppb.UnimplementedPndServiceServer{},
}
resp, err := s.GetPath(tt.args.ctx, tt.args.request) resp, err := s.GetPath(tt.args.ctx, tt.args.request)
if (err != nil) != tt.wantErr { if (err != nil) != tt.wantErr {
t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("GetPath() error = %v, wantErr %v", err, tt.wantErr)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment