Skip to content
Snippets Groups Projects
Commit 3cc140ae authored by Fabian Seidl's avatar Fabian Seidl
Browse files

added tests for auth interceptor streaming

parent d83ddcfd
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !308. Comments created here will be created in the context of that merge request.
...@@ -60,6 +60,7 @@ func (auth *AuthInterceptor) Stream() grpc.StreamServerInterceptor { ...@@ -60,6 +60,7 @@ func (auth *AuthInterceptor) Stream() grpc.StreamServerInterceptor {
info *grpc.StreamServerInfo, info *grpc.StreamServerInfo,
handler grpc.StreamHandler, handler grpc.StreamHandler,
) error { ) error {
err := auth.authorize(stream.Context(), info.FullMethod) err := auth.authorize(stream.Context(), info.FullMethod)
if err != nil { if err != nil {
return err return err
......
...@@ -4,10 +4,10 @@ import ( ...@@ -4,10 +4,10 @@ import (
"context" "context"
"log" "log"
"net" "net"
"reflect"
"testing" "testing"
apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac"
spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
"code.fbi.h-da.de/danet/gosdn/controller/rbac" "code.fbi.h-da.de/danet/gosdn/controller/rbac"
"code.fbi.h-da.de/danet/gosdn/controller/store" "code.fbi.h-da.de/danet/gosdn/controller/store"
"google.golang.org/grpc" "google.golang.org/grpc"
...@@ -23,6 +23,7 @@ func dialer() func(context.Context, string) (net.Conn, error) { ...@@ -23,6 +23,7 @@ func dialer() func(context.Context, string) (net.Conn, error) {
server := grpc.NewServer(grpc.UnaryInterceptor(interceptor.Unary()), grpc.StreamInterceptor(interceptor.Stream())) server := grpc.NewServer(grpc.UnaryInterceptor(interceptor.Unary()), grpc.StreamInterceptor(interceptor.Stream()))
apb.RegisterUserServiceServer(server, &User{}) apb.RegisterUserServiceServer(server, &User{})
spb.RegisterSbiServiceServer(server, &sbiServer{})
go func() { go func() {
if err := server.Serve(listener); err != nil { if err := server.Serve(listener); err != nil {
...@@ -59,6 +60,15 @@ func TestAuthInterceptor_Unary(t *testing.T) { ...@@ -59,6 +60,15 @@ func TestAuthInterceptor_Unary(t *testing.T) {
md := metadata.Pairs("authorize", validToken) md := metadata.Pairs("authorize", validToken)
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
client := apb.NewUserServiceClient(conn)
type args struct { type args struct {
ctx context.Context ctx context.Context
request *apb.GetUsersRequest request *apb.GetUsersRequest
...@@ -109,15 +119,6 @@ func TestAuthInterceptor_Unary(t *testing.T) { ...@@ -109,15 +119,6 @@ func TestAuthInterceptor_Unary(t *testing.T) {
}, },
} }
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
client := apb.NewUserServiceClient(conn)
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
got, err := client.GetUsers(tt.args.ctx, tt.args.request) got, err := client.GetUsers(tt.args.ctx, tt.args.request)
...@@ -135,135 +136,78 @@ func TestAuthInterceptor_Unary(t *testing.T) { ...@@ -135,135 +136,78 @@ func TestAuthInterceptor_Unary(t *testing.T) {
} }
func TestAuthInterceptor_Stream(t *testing.T) { func TestAuthInterceptor_Stream(t *testing.T) {
type fields struct { validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
jwtManager *rbac.JWTManager if err != nil {
} log.Fatal(err)
tests := []struct {
name string
fields fields
want grpc.StreamServerInterceptor
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: tt.fields.jwtManager,
}
if got := auth.Stream(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("AuthInterceptor.Stream() = %v, want %v", got, tt.want)
}
})
} }
}
func TestAuthInterceptor_authorize(t *testing.T) { user, err := userc.Get(store.Query{Name: "testAdmin"})
type fields struct { if err != nil {
jwtManager *rbac.JWTManager log.Fatal(err)
}
type args struct {
ctx context.Context
method string
}
tests := []struct {
name string
fields fields
args args
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: tt.fields.jwtManager,
}
if err := auth.authorize(tt.args.ctx, tt.args.method); (err != nil) != tt.wantErr {
t.Errorf("AuthInterceptor.authorize() error = %v, wantErr %v", err, tt.wantErr)
}
})
} }
} user.SetToken(validToken)
func TestAuthInterceptor_verifyPermisisonForRequestedCall(t *testing.T) { err = userc.Update(user)
type fields struct { if err != nil {
jwtManager *rbac.JWTManager log.Fatal(err)
}
type args struct {
userRoles map[string]string
requestedMethod string
}
tests := []struct {
name string
fields fields
args args
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: tt.fields.jwtManager,
}
if err := auth.verifyPermisisonForRequestedCall(tt.args.userRoles, tt.args.requestedMethod); (err != nil) != tt.wantErr {
t.Errorf("AuthInterceptor.verifyPermisisonForRequestedCall() error = %v, wantErr %v", err, tt.wantErr)
}
})
} }
}
func TestAuthInterceptor_verifyUserRoleAndRequestedCall(t *testing.T) { md := metadata.Pairs("authorize", validToken)
type fields struct {
jwtManager *rbac.JWTManager
}
type args struct {
userRole string
requestedMethod string
}
tests := []struct {
name string
fields fields
args args
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: tt.fields.jwtManager,
}
if err := auth.verifyUserRoleAndRequestedCall(tt.args.userRole, tt.args.requestedMethod); (err != nil) != tt.wantErr {
t.Errorf("AuthInterceptor.verifyUserRoleAndRequestedCall() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestAuthInterceptor_compareRequestedPermissionWithRolePermissions(t *testing.T) { ctx := context.Background()
type fields struct { conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
jwtManager *rbac.JWTManager if err != nil {
log.Fatal(err)
} }
defer conn.Close()
client := spb.NewSbiServiceClient(conn)
type args struct { type args struct {
requestedMethod string ctx context.Context
storedRolePermissions []string request *spb.GetSchemaRequest
} }
tests := []struct { tests := []struct {
name string name string
fields fields args args
args args want bool
wantErr bool
}{ }{
// TODO: Add test cases. {
name: "default stream interceptor",
args: args{
ctx: metadata.NewOutgoingContext(context.Background(), md),
request: &spb.GetSchemaRequest{
Pid: pndID,
Sid: sbiID,
},
},
want: true,
},
{
name: "error stream interceptor",
args: args{
ctx: metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorize", "foo")),
request: &spb.GetSchemaRequest{
Pid: pndID,
Sid: sbiID,
},
},
want: false,
},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{ got, err := client.GetSchema(tt.args.ctx, tt.args.request)
jwtManager: tt.fields.jwtManager, if err != nil {
t.Errorf("AuthInterceptor.Stream() = %v", err)
return
} }
if err := auth.compareRequestedPermissionWithRolePermissions(tt.args.requestedMethod, tt.args.storedRolePermissions); (err != nil) != tt.wantErr {
t.Errorf("AuthInterceptor.compareRequestedPermissionWithRolePermissions() error = %v, wantErr %v", err, tt.wantErr) payload, _ := got.Recv()
if (payload != nil) != tt.want {
t.Errorf("AuthInterceptor.Stream() = %v", tt.want)
return
} }
}) })
} }
......
...@@ -103,7 +103,7 @@ func TestMain(m *testing.M) { ...@@ -103,7 +103,7 @@ func TestMain(m *testing.M) {
mockPnd.On("GetName").Return("test") mockPnd.On("GetName").Return("test")
mockPnd.On("GetDescription").Return("test") mockPnd.On("GetDescription").Return("test")
mockPnd.On("GetSBIs").Return(sbiStore) mockPnd.On("GetSBIs").Return(sbiStore)
mockPnd.On("GetSBI").Return(mockDevice.SBI(), nil) mockPnd.On("GetSBI", mock.Anything).Return(mockDevice.SBI(), nil)
mockPnd.On("Devices").Return([]uuid.UUID{deviceUUID}) mockPnd.On("Devices").Return([]uuid.UUID{deviceUUID})
mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID}) mockPnd.On("PendingChanges").Return([]uuid.UUID{pendingChangeUUID})
mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID}) mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID})
......
...@@ -148,6 +148,7 @@ func TestRole_GetRoles(t *testing.T) { ...@@ -148,6 +148,7 @@ func TestRole_GetRoles(t *testing.T) {
"/gosdn.core.CoreService/GetPnd", "/gosdn.core.CoreService/GetPnd",
"/gosdn.core.CoreService/GetPndList", "/gosdn.core.CoreService/GetPndList",
"/gosdn.rbac.UserService/GetUsers", "/gosdn.rbac.UserService/GetUsers",
"/gosdn.southbound.SbiService/GetSchema",
}}, }},
{ {
Name: "userTestRole", Name: "userTestRole",
......
...@@ -89,6 +89,7 @@ func createTestRoles() error { ...@@ -89,6 +89,7 @@ func createTestRoles() error {
"/gosdn.core.CoreService/GetPnd", "/gosdn.core.CoreService/GetPnd",
"/gosdn.core.CoreService/GetPndList", "/gosdn.core.CoreService/GetPndList",
"/gosdn.rbac.UserService/GetUsers", "/gosdn.rbac.UserService/GetUsers",
"/gosdn.southbound.SbiService/GetSchema",
}, },
}, },
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment