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/praefect/server_test.go')
-rw-r--r--internal/praefect/server_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/internal/praefect/server_test.go b/internal/praefect/server_test.go
index c71c466fd..626cc7bd6 100644
--- a/internal/praefect/server_test.go
+++ b/internal/praefect/server_test.go
@@ -6,6 +6,7 @@ import (
"bytes"
"context"
"errors"
+ "google.golang.org/grpc/health"
"io"
"math/rand"
"net"
@@ -1044,6 +1045,79 @@ func TestErrorThreshold(t *testing.T) {
}
}
+func TestStreamingRPCRejected(t *testing.T) {
+ t.Parallel()
+
+ conf := config.Config{
+ VirtualStorages: []*config.VirtualStorage{
+ {
+ Name: "default",
+ Nodes: []*config.Node{
+ {
+ Storage: "praefect-internal-0",
+ Address: "tcp://this-does-not-matter",
+ },
+ },
+ },
+ },
+ }
+ ctx := testhelper.Context(t)
+
+ queue := datastore.NewPostgresReplicationEventQueue(testdb.New(t))
+ entry := testhelper.NewDiscardingLogEntry(t)
+
+ rs := datastore.MockRepositoryStore{}
+ nodeMgr, err := nodes.NewManager(entry, conf, nil, rs, promtest.NewMockHistogramVec(), protoregistry.GitalyProtoPreregistered, nil, nil, nil)
+ require.NoError(t, err)
+ defer nodeMgr.Stop()
+
+ coordinator := NewCoordinator(
+ queue,
+ rs,
+ NewNodeManagerRouter(nodeMgr, rs),
+ transactions.NewManager(conf),
+ conf,
+ protoregistry.GitalyProtoPreregistered,
+ )
+
+ server := grpc.NewServer(
+ grpc.ForceServerCodec(proxy.NewCodec()),
+ grpc.UnknownServiceHandler(proxy.TransparentHandler(coordinator.StreamDirector)),
+ )
+ grpc_health_v1.RegisterHealthServer(server, health.NewServer())
+
+ socket := testhelper.GetTemporaryGitalySocketFileName(t)
+ listener, err := net.Listen("unix", socket)
+ require.NoError(t, err)
+
+ go testhelper.MustServe(t, server, listener)
+ defer server.Stop()
+
+ conn, err := dial("unix://"+socket, []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())})
+ require.NoError(t, err)
+ defer testhelper.MustClose(t, conn)
+
+ client := gitalypb.NewSmartHTTPServiceClient(conn)
+ stream, err := client.PostUploadPack(ctx)
+ require.NoError(t, err)
+
+ testserver.WaitHealthy(t, ctx, "unix://"+socket, "")
+
+ err = stream.Send(&gitalypb.PostUploadPackRequest{Repository: &gitalypb.Repository{
+ StorageName: "praefect-internal-0",
+ RelativePath: "please-do-not-exist",
+ }})
+ require.NoError(t, err)
+
+ var response gitalypb.PostUploadPackWithSidechannelResponse
+ err = stream.RecvMsg(&response)
+ require.NoError(t, err)
+
+ var response2 gitalypb.PostUploadPackResponse
+ err = stream.RecvMsg(&response2)
+ require.NoError(t, err)
+}
+
func newSmartHTTPClient(t *testing.T, serverSocketPath string) (gitalypb.SmartHTTPServiceClient, *grpc.ClientConn) {
t.Helper()