1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
package grpctool
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/tool/grpctool/test"
"go.uber.org/zap"
"go.uber.org/zap/zaptest"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/credentials/insecure"
"k8s.io/apimachinery/pkg/util/wait"
)
var (
_ credentials.PerRPCCredentials = &JwtCredentials{}
)
const (
secret = "dfjnfkadskfadsnfkjadsgkasdbg"
audience = "fasfadsf"
issuer = "cbcxvbvxbxb"
)
func TestJwtCredentialsProducesValidToken(t *testing.T) {
c := &JwtCredentials{
Secret: []byte(secret),
Audience: audience,
Issuer: issuer,
Insecure: true,
}
auther := NewJWTAuther([]byte(secret), issuer, audience, func(ctx context.Context) *zap.Logger {
return zaptest.NewLogger(t)
})
listener := NewDialListener()
srv := grpc.NewServer(
grpc.ChainStreamInterceptor(
auther.StreamServerInterceptor,
),
grpc.ChainUnaryInterceptor(
auther.UnaryServerInterceptor,
),
)
test.RegisterTestingServer(srv, &test.GrpcTestingServer{
UnaryFunc: func(ctx context.Context, request *test.Request) (*test.Response, error) {
return &test.Response{
Message: &test.Response_Scalar{Scalar: 123},
}, nil
},
StreamingFunc: func(server test.Testing_StreamingRequestResponseServer) error {
return server.Send(&test.Response{
Message: &test.Response_Scalar{Scalar: 123},
})
},
})
var wg wait.Group
defer wg.Wait()
defer srv.GracefulStop()
wg.Start(func() {
assert.NoError(t, srv.Serve(listener))
})
conn, err := grpc.DialContext(context.Background(), "pipe",
grpc.WithContextDialer(listener.DialContext),
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithPerRPCCredentials(c),
)
require.NoError(t, err)
defer conn.Close()
client := test.NewTestingClient(conn)
_, err = client.RequestResponse(context.Background(), &test.Request{})
require.NoError(t, err)
stream, err := client.StreamingRequestResponse(context.Background())
require.NoError(t, err)
_, err = stream.Recv()
require.NoError(t, err)
}
|