diff --git a/controller/northbound/server/auth_interceptor_test.go b/controller/northbound/server/auth_interceptor_test.go index 7de1c8c354df6ded32be7e7165b0c00d6a2197c6..8498b0e9d5eab1ef0eedcaeb49a104157eecd2d2 100644 --- a/controller/northbound/server/auth_interceptor_test.go +++ b/controller/northbound/server/auth_interceptor_test.go @@ -58,19 +58,24 @@ func dialer(interceptorServer *AuthInterceptor, userServer *User, roleServer *Ro } func TestAuthInterceptor_Unary(t *testing.T) { - a, u, r, s := getTestAuthInterceptorServer(t) - validToken, err := createTestUserToken("testAdmin", true, a.userService, a.jwtManager) + authServer, userServer, roleServer, sbiServer := getTestAuthInterceptorServer(t) + validToken, err := createTestUserToken("testAdmin", true, authServer.userService, authServer.jwtManager) if err != nil { t.Fatal(err) } - wrongUserToken, err := createTestUserToken("foo", false, a.userService, a.jwtManager) + wrongUserToken, err := createTestUserToken("foo", false, authServer.userService, authServer.jwtManager) if err != nil { t.Fatal(err) } ctx := context.Background() - conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer(a, u, r, s))) + conn, err := grpc.DialContext( + ctx, + "", + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer(dialer(authServer, userServer, roleServer, sbiServer)), + ) if err != nil { t.Fatal(err) } @@ -145,14 +150,19 @@ func TestAuthInterceptor_Unary(t *testing.T) { } func TestAuthInterceptor_Stream(t *testing.T) { - a, u, r, s := getTestAuthInterceptorServer(t) - validToken, err := createTestUserToken("testAdmin", true, a.userService, a.jwtManager) + authServer, userServer, roleServer, sbiServer := getTestAuthInterceptorServer(t) + validToken, err := createTestUserToken("testAdmin", true, authServer.userService, authServer.jwtManager) if err != nil { t.Fatal(err) } ctx := context.Background() - conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer(a, u, r, s))) + conn, err := grpc.DialContext( + ctx, + "", + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer(dialer(authServer, userServer, roleServer, sbiServer)), + ) if err != nil { t.Fatal(err) } @@ -211,13 +221,13 @@ func TestAuthInterceptor_Stream(t *testing.T) { } func TestAuthInterceptor_authorize(t *testing.T) { - a, _, _, _ := getTestAuthInterceptorServer(t) - validToken, err := createTestUserToken("testAdmin", true, a.userService, a.jwtManager) + authServer, _, _, _ := getTestAuthInterceptorServer(t) + validToken, err := createTestUserToken("testAdmin", true, authServer.userService, authServer.jwtManager) if err != nil { t.Fatal(err) } - wrongUserToken, err := createTestUserToken("foo", false, a.userService, a.jwtManager) + wrongUserToken, err := createTestUserToken("foo", false, authServer.userService, authServer.jwtManager) if err != nil { t.Fatal(err) } @@ -258,7 +268,7 @@ func TestAuthInterceptor_authorize(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := a.authorize(tt.args.ctx, tt.args.method); (err != nil) != tt.wantErr { + if err := authServer.authorize(tt.args.ctx, tt.args.method); (err != nil) != tt.wantErr { t.Errorf("AuthInterceptor.authorize() error = %v, wantErr %v", err, tt.wantErr) } }) diff --git a/controller/northbound/server/core_test.go b/controller/northbound/server/core_test.go index 61b78f2fe5ef91c5e90b590364cb5298378960eb..333ac2eb6707fae6ecf467c8f5f57b3e9ffcaf25 100644 --- a/controller/northbound/server/core_test.go +++ b/controller/northbound/server/core_test.go @@ -7,8 +7,97 @@ import ( "time" pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" + ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" + spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" + "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/models/generated/openconfig" + "github.com/google/uuid" + "github.com/stretchr/testify/mock" ) +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{ + 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 := NewCoreServer(pndStore) + + return c +} + func Test_core_Set(t *testing.T) { type args struct { ctx context.Context @@ -41,9 +130,7 @@ func Test_core_Set(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - s := Core{ - UnimplementedCoreServiceServer: pb.UnimplementedCoreServiceServer{}, - } + s := getTestCoreServer(t) got, err := s.CreatePndList(tt.args.ctx, tt.args.request) if (err != nil) != tt.wantErr { t.Errorf("core.Set() error = %v, wantErr %v", err, tt.wantErr) @@ -86,9 +173,7 @@ func Test_core_GetPnd(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - s := Core{ - UnimplementedCoreServiceServer: pb.UnimplementedCoreServiceServer{}, - } + s := getTestCoreServer(t) resp, err := s.GetPnd(tt.args.ctx, tt.args.request) if (err != nil) != tt.wantErr { t.Errorf("core.GetPnd() error = %v, wantErr %v", err, tt.wantErr) @@ -129,14 +214,12 @@ func Test_core_GetPndList(t *testing.T) { Timestamp: time.Now().UnixNano(), }, }, - length: 2, + length: 1, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - s := Core{ - UnimplementedCoreServiceServer: pb.UnimplementedCoreServiceServer{}, - } + s := getTestCoreServer(t) resp, err := s.GetPndList(tt.args.ctx, tt.args.request) if (err != nil) != tt.wantErr { t.Errorf("core.GetPndList() error = %v, wantErr %v", err, tt.wantErr) diff --git a/controller/northbound/server/pnd_test.go b/controller/northbound/server/pnd_test.go index 3145caf573d354cabb3acfbe5246ecb058f871e8..bf7d1c463d448e145b9a6a1be993c3893f78eeed 100644 --- a/controller/northbound/server/pnd_test.go +++ b/controller/northbound/server/pnd_test.go @@ -2,11 +2,9 @@ package server import ( "context" - "reflect" "testing" "time" - pb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/core" ppb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/pnd" spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" "code.fbi.h-da.de/danet/gosdn/controller/interfaces/device" @@ -67,88 +65,6 @@ func initUUIDs(t *testing.T) { } } -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{ - 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 := NewCoreServer(pndStore) - - return c -} - func getTestPndServer(t *testing.T) *PndServer { var err error pndUUID, err = uuid.Parse(pndID) @@ -231,56 +147,6 @@ func getTestPndServer(t *testing.T) *PndServer { return c } -// TODO: We should re-add all tests for changes. -// As of now this is not possible as we can't use the mock pnd, as it can't be serialized because of -// cyclic use of mock in it. -func Test_pnd_Get(t *testing.T) { - type args struct { - ctx context.Context - request *pb.GetPndRequest - } - tests := []struct { - name string - args args - want *pb.GetPndResponse - wantErr bool - }{ - { - name: "get pnd", - args: args{ - ctx: context.Background(), - request: &pb.GetPndRequest{ - Pid: pndID, - }, - }, - want: &pb.GetPndResponse{ - Pnd: &ppb.PrincipalNetworkDomain{ - Id: pndID, - Name: "test", - Description: "test"}, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - c := getTestCoreServer(t) - - resp, err := c.GetPnd(tt.args.ctx, tt.args.request) - if (err != nil) != tt.wantErr { - t.Errorf("Get() error = %v, wantErr %v", err, tt.wantErr) - return - } - - got := resp.GetPnd() - - if !reflect.DeepEqual(got, tt.want.Pnd) { - t.Errorf("Get() got = %v, want %v", got, tt.want.Pnd) - } - }) - } -} - func Test_pnd_GetPath(t *testing.T) { initUUIDs(t)