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

tests for authorize method in interceptor and beautification

parent e7d01cb1
No related branches found
No related tags found
1 merge request!308Improve test coverage of rbac stuff
Pipeline #101632 failed
This commit is part of merge request !308. Comments created here will be created in the context of that merge request.
......@@ -2,14 +2,13 @@ package server
import (
"context"
"fmt"
"log"
"net"
"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"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/metadata"
......@@ -37,29 +36,16 @@ func dialer() func(context.Context, string) (net.Conn, error) {
}
func TestAuthInterceptor_Unary(t *testing.T) {
validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
validToken, err := createTestUserToken("testAdmin", true)
if err != nil {
log.Fatal(err)
}
wrongUserToken, err := jwt.GenerateToken(rbac.User{UserName: "foo"})
wrongUserToken, err := createTestUserToken("foo", false)
if err != nil {
log.Fatal(err)
}
user, err := userc.Get(store.Query{Name: "testAdmin"})
if err != nil {
log.Fatal(err)
}
user.SetToken(validToken)
err = userc.Update(user)
if err != nil {
log.Fatal(err)
}
md := metadata.Pairs("authorize", validToken)
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
if err != nil {
......@@ -82,7 +68,7 @@ func TestAuthInterceptor_Unary(t *testing.T) {
{
name: "default unary interceptor",
args: args{
ctx: metadata.NewOutgoingContext(context.Background(), md),
ctx: metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorize", validToken)),
request: &apb.GetUsersRequest{},
},
want: &apb.GetUsersResponse{
......@@ -136,23 +122,10 @@ func TestAuthInterceptor_Unary(t *testing.T) {
}
func TestAuthInterceptor_Stream(t *testing.T) {
validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
if err != nil {
log.Fatal(err)
}
user, err := userc.Get(store.Query{Name: "testAdmin"})
validToken, err := createTestUserToken("testAdmin", true)
if err != nil {
log.Fatal(err)
}
user.SetToken(validToken)
err = userc.Update(user)
if err != nil {
log.Fatal(err)
}
md := metadata.Pairs("authorize", validToken)
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
......@@ -175,7 +148,7 @@ func TestAuthInterceptor_Stream(t *testing.T) {
{
name: "default stream interceptor",
args: args{
ctx: metadata.NewOutgoingContext(context.Background(), md),
ctx: metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorize", validToken)),
request: &spb.GetSchemaRequest{
Pid: pndID,
Sid: sbiID,
......@@ -212,3 +185,64 @@ func TestAuthInterceptor_Stream(t *testing.T) {
})
}
}
func TestAuthInterceptor_authorize(t *testing.T) {
validToken, err := createTestUserToken("testAdmin", true)
if err != nil {
log.Fatal(err)
}
wrongUserToken, err := createTestUserToken("foo", false)
if err != nil {
log.Fatal(err)
}
md := metadata.Pairs("authorize", validToken)
fmt.Println(md.Get("authorize"))
type args struct {
ctx context.Context
method string
}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "default authorize",
args: args{
ctx: metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", validToken)),
method: "/gosdn.rbac.UserService/GetUsers",
},
wantErr: false,
},
{
name: "error invalid token",
args: args{
ctx: metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", wrongUserToken)),
method: "/gosdn.rbac.UserService/GetUsers",
},
wantErr: true,
},
{
name: "error no permission for request",
args: args{
ctx: metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", validToken)),
method: "/gosdn.pnd.PndService/DeleteOnd",
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
auth := &AuthInterceptor{
jwtManager: jwt,
}
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)
}
})
}
}
......@@ -6,6 +6,7 @@ import (
"testing"
"code.fbi.h-da.de/danet/gosdn/controller/rbac"
"code.fbi.h-da.de/danet/gosdn/controller/store"
"github.com/google/uuid"
)
......@@ -136,3 +137,27 @@ func patchLogger(t *testing.T) {
log.SetOutput(orig)
})
}
// Creates a token to be used in auth interceptor tests. If validTokenRequired is set as true, the generated token will also
// be attached to the provided user. Else the user won't have the token and can not be authorized.
func createTestUserToken(userName string, validTokenRequired bool) (string, error) {
token, err := jwt.GenerateToken(rbac.User{UserName: userName})
if err != nil {
return token, err
}
if validTokenRequired {
user, err := userc.Get(store.Query{Name: userName})
if err != nil {
return token, err
}
user.SetToken(token)
err = userc.Update(user)
if err != nil {
return token, err
}
}
return token, nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment