Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'internal/gitaly/server/auth_test.go')
-rw-r--r--internal/gitaly/server/auth_test.go82
1 files changed, 62 insertions, 20 deletions
diff --git a/internal/gitaly/server/auth_test.go b/internal/gitaly/server/auth_test.go
index 35959828e..6dee3c821 100644
--- a/internal/gitaly/server/auth_test.go
+++ b/internal/gitaly/server/auth_test.go
@@ -25,8 +25,10 @@ import (
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/setup"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/service/teststream"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitaly/transaction"
"gitlab.com/gitlab-org/gitaly/v14/internal/gitlab"
+ "gitlab.com/gitlab-org/gitaly/v14/internal/streamrpc"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v14/internal/testhelper/testcfg"
"gitlab.com/gitlab-org/gitaly/v14/proto/go/gitalypb"
@@ -86,30 +88,54 @@ func TestTLSSanity(t *testing.T) {
func TestAuthFailures(t *testing.T) {
testCases := []struct {
- desc string
- opts []grpc.DialOption
- code codes.Code
+ desc string
+ creds credentials.PerRPCCredentials
+ code codes.Code
+ message string
}{
- {desc: "no auth", opts: nil, code: codes.Unauthenticated},
{
- desc: "invalid auth",
- opts: []grpc.DialOption{grpc.WithPerRPCCredentials(brokenAuth{})},
- code: codes.Unauthenticated,
+ desc: "no auth",
+ creds: nil,
+ code: codes.Unauthenticated,
+ message: "rpc error: code = Unauthenticated desc = authentication required",
},
{
- desc: "wrong secret",
- opts: []grpc.DialOption{grpc.WithPerRPCCredentials(gitalyauth.RPCCredentialsV2("foobar"))},
- code: codes.PermissionDenied,
+ desc: "invalid auth",
+ creds: brokenAuth{},
+ code: codes.Unauthenticated,
+ message: "rpc error: code = Unauthenticated desc = authentication required",
+ },
+ {
+ desc: "wrong secret",
+ creds: gitalyauth.RPCCredentialsV2("foobar"),
+ code: codes.PermissionDenied,
+ message: "rpc error: code = PermissionDenied desc = permission denied",
},
}
for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
- serverSocketPath := runServer(t, config.Cfg{Auth: auth.Config{Token: "quxbaz"}})
- connOpts := append(tc.opts, grpc.WithInsecure())
+ cfg, repo, _ := testcfg.BuildWithRepo(t, testcfg.WithBase(config.Cfg{
+ Auth: auth.Config{Token: "quxbaz"},
+ }))
+ serverSocketPath := runServer(t, cfg)
+
+ // Make a healthcheck gRPC call
+ connOpts := []grpc.DialOption{grpc.WithInsecure()}
+ if tc.creds != nil {
+ connOpts = append(connOpts, grpc.WithPerRPCCredentials(tc.creds))
+ }
conn, err := dial(serverSocketPath, connOpts)
require.NoError(t, err, tc.desc)
t.Cleanup(func() { conn.Close() })
testhelper.RequireGrpcError(t, healthCheck(conn), tc.code)
+
+ // // Make a streamRPC call
+ var callOpts []streamrpc.CallOption
+ if tc.creds != nil {
+ callOpts = append(callOpts, streamrpc.WithCredentials(tc.creds))
+ }
+ _, _, err = checkStreamRPC(t, streamrpc.DialNet(serverSocketPath), repo, callOpts...)
+ require.EqualError(t, err, tc.message)
})
}
}
@@ -119,40 +145,54 @@ func TestAuthSuccess(t *testing.T) {
testCases := []struct {
desc string
- opts []grpc.DialOption
+ creds credentials.PerRPCCredentials
required bool
token string
}{
{desc: "no auth, not required"},
{
desc: "v2 correct auth, not required",
- opts: []grpc.DialOption{grpc.WithPerRPCCredentials(gitalyauth.RPCCredentialsV2(token))},
+ creds: gitalyauth.RPCCredentialsV2(token),
token: token,
},
{
desc: "v2 incorrect auth, not required",
- opts: []grpc.DialOption{grpc.WithPerRPCCredentials(gitalyauth.RPCCredentialsV2("incorrect"))},
+ creds: gitalyauth.RPCCredentialsV2("incorrect"),
token: token,
},
{
desc: "v2 correct auth, required",
- opts: []grpc.DialOption{grpc.WithPerRPCCredentials(gitalyauth.RPCCredentialsV2(token))},
+ creds: gitalyauth.RPCCredentialsV2(token),
token: token,
required: true,
},
}
for _, tc := range testCases {
t.Run(tc.desc, func(t *testing.T) {
- cfg := testcfg.Build(t, testcfg.WithBase(config.Cfg{
+ cfg, repo, _ := testcfg.BuildWithRepo(t, testcfg.WithBase(config.Cfg{
Auth: auth.Config{Token: tc.token, Transitioning: !tc.required},
}))
serverSocketPath := runServer(t, cfg)
- connOpts := append(tc.opts, grpc.WithInsecure())
+
+ // Make a healthcheck gRPC call
+ connOpts := []grpc.DialOption{grpc.WithInsecure()}
+ if tc.creds != nil {
+ connOpts = append(connOpts, grpc.WithPerRPCCredentials(tc.creds))
+ }
conn, err := dial(serverSocketPath, connOpts)
require.NoError(t, err, tc.desc)
t.Cleanup(func() { conn.Close() })
assert.NoError(t, healthCheck(conn), tc.desc)
+
+ // // Make a streamRPC call
+ var callOpts []streamrpc.CallOption
+ if tc.creds != nil {
+ callOpts = append(callOpts, streamrpc.WithCredentials(tc.creds))
+ }
+ in, out, err := checkStreamRPC(t, streamrpc.DialNet(serverSocketPath), repo, callOpts...)
+ require.NoError(t, err)
+ require.Equal(t, in, out)
})
}
}
@@ -201,8 +241,10 @@ func runServer(t *testing.T, cfg config.Cfg) string {
gitCmdFactory := git.NewExecCommandFactory(cfg)
catfileCache := catfile.NewCache(cfg)
diskCache := cache.New(cfg, locator)
+ streamRPCServer := streamrpc.NewServer()
+ gitalypb.RegisterTestStreamServiceServer(streamRPCServer, teststream.NewServer(locator))
- srv, err := New(false, cfg, testhelper.DiscardTestEntry(t), registry, diskCache)
+ srv, err := New(false, cfg, testhelper.DiscardTestEntry(t), registry, diskCache, streamRPCServer)
require.NoError(t, err)
setup.RegisterAll(srv, &service.Dependencies{
@@ -236,7 +278,7 @@ func runSecureServer(t *testing.T, cfg config.Cfg) string {
conns := client.NewPool()
t.Cleanup(func() { conns.Close() })
- srv, err := New(true, cfg, testhelper.DiscardTestEntry(t), backchannel.NewRegistry(), cache.New(cfg, config.NewLocator(cfg)))
+ srv, err := New(true, cfg, testhelper.DiscardTestEntry(t), backchannel.NewRegistry(), cache.New(cfg, config.NewLocator(cfg)), streamrpc.NewServer())
require.NoError(t, err)
healthpb.RegisterHealthServer(srv, health.NewServer())