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

added tests for auth interceptor streaming

parent 3cefbf45
No related branches found
No related tags found
1 merge request!308Improve test coverage of rbac stuff
This commit is part of merge request !308. Comments created here will be created in the context of that merge request.
......@@ -63,6 +63,7 @@ func (auth *AuthInterceptor) Stream() grpc.StreamServerInterceptor {
info *grpc.StreamServerInfo,
handler grpc.StreamHandler,
) error {
err := auth.authorize(stream.Context(), info.FullMethod)
if err != nil {
return err
......
......@@ -4,10 +4,10 @@ import (
"context"
"log"
"net"
"reflect"
"testing"
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/store"
"google.golang.org/grpc"
......@@ -23,6 +23,7 @@ func dialer() func(context.Context, string) (net.Conn, error) {
server := grpc.NewServer(grpc.UnaryInterceptor(interceptor.Unary()), grpc.StreamInterceptor(interceptor.Stream()))
apb.RegisterUserServiceServer(server, &User{})
spb.RegisterSbiServiceServer(server, &sbiServer{})
go func() {
if err := server.Serve(listener); err != nil {
......@@ -59,6 +60,15 @@ func TestAuthInterceptor_Unary(t *testing.T) {
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 {
ctx context.Context
request *apb.GetUsersRequest
......@@ -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 {
t.Run(tt.name, func(t *testing.T) {
got, err := client.GetUsers(tt.args.ctx, tt.args.request)
......@@ -135,135 +136,78 @@ func TestAuthInterceptor_Unary(t *testing.T) {
}
func TestAuthInterceptor_Stream(t *testing.T) {
type fields struct {
jwtManager *rbac.JWTManager
}
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)
}
})
validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
if err != nil {
log.Fatal(err)
}
}
func TestAuthInterceptor_authorize(t *testing.T) {
type fields struct {
jwtManager *rbac.JWTManager
}
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, err := userc.Get(store.Query{Name: "testAdmin"})
if err != nil {
log.Fatal(err)
}
}
user.SetToken(validToken)
func TestAuthInterceptor_verifyPermisisonForRequestedCall(t *testing.T) {
type fields struct {
jwtManager *rbac.JWTManager
}
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)
}
})
err = userc.Update(user)
if err != nil {
log.Fatal(err)
}
}
func TestAuthInterceptor_verifyUserRoleAndRequestedCall(t *testing.T) {
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)
}
})
}
}
md := metadata.Pairs("authorize", validToken)
func TestAuthInterceptor_compareRequestedPermissionWithRolePermissions(t *testing.T) {
type fields struct {
jwtManager *rbac.JWTManager
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 := spb.NewSbiServiceClient(conn)
type args struct {
requestedMethod string
storedRolePermissions []string
ctx context.Context
request *spb.GetSchemaRequest
}
tests := []struct {
name string
fields fields
args args
wantErr bool
name string
args args
want 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 {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: tt.fields.jwtManager,
got, err := client.GetSchema(tt.args.ctx, tt.args.request)
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) {
mockPnd.On("GetName").Return("test")
mockPnd.On("GetDescription").Return("test")
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("PendingChanges").Return([]uuid.UUID{pendingChangeUUID})
mockPnd.On("CommittedChanges").Return([]uuid.UUID{committedChangeUUID})
......
......@@ -148,6 +148,7 @@ func TestRole_GetRoles(t *testing.T) {
"/gosdn.core.CoreService/GetPnd",
"/gosdn.core.CoreService/GetPndList",
"/gosdn.rbac.UserService/GetUsers",
"/gosdn.southbound.SbiService/GetSchema",
}},
{
Name: "userTestRole",
......
......@@ -89,6 +89,7 @@ func createTestRoles() error {
"/gosdn.core.CoreService/GetPnd",
"/gosdn.core.CoreService/GetPndList",
"/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