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/service/repository/replicate_test.go')
-rw-r--r--internal/service/repository/replicate_test.go97
1 files changed, 96 insertions, 1 deletions
diff --git a/internal/service/repository/replicate_test.go b/internal/service/repository/replicate_test.go
index b82c96ac3..189531dc4 100644
--- a/internal/service/repository/replicate_test.go
+++ b/internal/service/repository/replicate_test.go
@@ -8,6 +8,8 @@ import (
"path/filepath"
"testing"
+ "gitlab.com/gitlab-org/gitaly/internal/git/objectpool"
+
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/internal/config"
"gitlab.com/gitlab-org/gitaly/internal/helper"
@@ -25,9 +27,10 @@ func TestReplicateRepository(t *testing.T) {
replicaPath := filepath.Join(tmpPath, "replica")
require.NoError(t, os.MkdirAll(replicaPath, 0755))
+ storages := config.Config.Storages
defer func(storages []config.Storage) {
config.Config.Storages = storages
- }(config.Config.Storages)
+ }(storages)
config.Config.Storages = []config.Storage{
config.Storage{
@@ -93,6 +96,98 @@ func TestReplicateRepository(t *testing.T) {
)
}
+func TestReplicateRepositoryObjectPool(t *testing.T) {
+ tmpPath, cleanup := testhelper.TempDir(t, testhelper.GitlabTestStoragePath(), t.Name())
+ defer require.NoError(t, cleanup())
+
+ replicaPath := filepath.Join(tmpPath, "replica")
+ require.NoError(t, os.MkdirAll(replicaPath, 0755))
+
+ storages := config.Config.Storages
+ defer func(storages []config.Storage) {
+ config.Config.Storages = storages
+ }(storages)
+
+ config.Config.Storages = []config.Storage{
+ config.Storage{
+ Name: "default",
+ Path: testhelper.GitlabTestStoragePath(),
+ },
+ config.Storage{
+ Name: "replica",
+ Path: replicaPath,
+ },
+ }
+
+ server, serverSocketPath := runFullServer(t)
+ defer server.Stop()
+
+ testRepo, _, cleanupRepo := testhelper.NewTestRepo(t)
+ defer cleanupRepo()
+
+ config.Config.SocketPath = serverSocketPath
+
+ repoClient, conn := repository.NewRepositoryClient(t, serverSocketPath)
+ defer conn.Close()
+
+ // create object pool on the source
+ objectPoolPath := testhelper.NewTestObjectPoolName(t)
+ pool, err := objectpool.NewObjectPool(testRepo.GetStorageName(), objectPoolPath)
+ require.NoError(t, err)
+
+ poolCtx, cancel := testhelper.Context()
+
+ require.NoError(t, pool.Create(poolCtx, testRepo))
+ require.NoError(t, pool.Link(poolCtx, testRepo))
+ cancel()
+
+ ctx, cancel := testhelper.Context()
+ defer cancel()
+ md := testhelper.GitalyServersMetadata(t, serverSocketPath)
+ injectedCtx := metadata.NewOutgoingContext(ctx, md)
+
+ targetRepo := *testRepo
+ targetRepo.StorageName = "replica"
+
+ _, err = repoClient.ReplicateRepository(injectedCtx, &gitalypb.ReplicateRepositoryRequest{
+ Repository: &targetRepo,
+ Source: testRepo,
+ })
+ require.NoError(t, err)
+
+ targetRepoPath, err := helper.GetRepoPath(&targetRepo)
+ require.NoError(t, err)
+
+ testhelper.MustRunCommand(t, nil, "git", "-C", targetRepoPath, "fsck")
+
+ // replicate object pool repository
+ targetObjectPoolRepo := *pool.ToProto().GetRepository()
+ targetObjectPoolRepo.StorageName = "replica"
+
+ ctx, cancel = testhelper.Context()
+ defer cancel()
+ injectedCtx = metadata.NewOutgoingContext(ctx, md)
+
+ _, err = repoClient.ReplicateRepository(injectedCtx, &gitalypb.ReplicateRepositoryRequest{
+ Repository: &targetObjectPoolRepo,
+ Source: pool.ToProto().GetRepository(),
+ })
+ require.NoError(t, err)
+
+ ctx, cancel = testhelper.Context()
+ defer cancel()
+ injectedCtx = metadata.NewOutgoingContext(ctx, md)
+
+ _, err = repoClient.ReplicateRepository(injectedCtx, &gitalypb.ReplicateRepositoryRequest{
+ Repository: &targetRepo,
+ Source: testRepo,
+ })
+ require.NoError(t, err)
+
+ testhelper.MustRunCommand(t, nil, "git", "-C", targetRepoPath, "gc")
+ require.True(t, getGitObjectDirSize(t, targetRepoPath) < 100, "expect a small object directory size")
+}
+
func TestReplicateRepositoryInvalidArguments(t *testing.T) {
testCases := []struct {
description string