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/backup/server_side_test.go')
-rw-r--r--internal/backup/server_side_test.go125
1 files changed, 21 insertions, 104 deletions
diff --git a/internal/backup/server_side_test.go b/internal/backup/server_side_test.go
index 69669df60..2acc547c5 100644
--- a/internal/backup/server_side_test.go
+++ b/internal/backup/server_side_test.go
@@ -13,11 +13,9 @@ import (
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/service/setup"
"gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage"
"gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client"
- "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore"
"gitlab.com/gitlab-org/gitaly/v16/internal/structerr"
"gitlab.com/gitlab-org/gitaly/v16/internal/testhelper"
"gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testcfg"
- "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testdb"
"gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testserver"
"gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb"
)
@@ -259,15 +257,28 @@ func TestServerSideAdapter_Restore(t *testing.T) {
}
}
-func TestServerSideAdapter_RemoveRepository(t *testing.T) {
+func TestServerSideAdapter_RemoveAllRepositories(t *testing.T) {
+ testhelper.SkipWithWAL(t, `
+RemoveAll is removing the entire content of the storage. This would also remove the database's and
+the transaction manager's disk state. The RPC needs to be updated to shut down all partitions and
+the database and only then perform the removal.
+
+Issue: https://gitlab.com/gitlab-org/gitaly/-/issues/5269`)
+
t.Parallel()
- db := testdb.New(t)
- db.TruncateAll(t)
- datastore.NewPostgresRepositoryStore(db, map[string][]string{"virtual-storage": {"default"}})
+ backupRoot := testhelper.TempDir(t)
+ sink := backup.NewFilesystemSink(backupRoot)
+ defer testhelper.MustClose(t, sink)
+
+ locator, err := backup.ResolveLocator("pointer", sink)
+ require.NoError(t, err)
cfg := testcfg.Build(t)
- cfg.SocketPath = testserver.RunGitalyServer(t, cfg, setup.RegisterAll)
+ cfg.SocketPath = testserver.RunGitalyServer(t, cfg, setup.RegisterAll,
+ testserver.WithBackupSink(sink),
+ testserver.WithBackupLocator(locator),
+ )
ctx := testhelper.Context(t)
@@ -278,103 +289,9 @@ func TestServerSideAdapter_RemoveRepository(t *testing.T) {
defer testhelper.MustClose(t, pool)
adapter := backup.NewServerSideAdapter(pool)
- err := adapter.RemoveRepository(ctx, &backup.RemoveRepositoryRequest{
- Server: storage.ServerInfo{Address: cfg.SocketPath, Token: cfg.Auth.Token},
- Repo: repo,
+ err = adapter.RemoveAllRepositories(ctx, &backup.RemoveAllRepositoriesRequest{
+ Server: storage.ServerInfo{Address: cfg.SocketPath, Token: cfg.Auth.Token},
+ StorageName: repo.StorageName,
})
require.NoError(t, err)
- require.NoDirExists(t, repoPath)
-
- // With an invalid repository
- err = adapter.RemoveRepository(ctx, &backup.RemoveRepositoryRequest{
- Server: storage.ServerInfo{Address: cfg.SocketPath, Token: cfg.Auth.Token},
- Repo: &gitalypb.Repository{StorageName: "default", RelativePath: "nonexistent"},
- })
-
- require.EqualError(t, err, "server-side remove repo: remove: rpc error: code = NotFound desc = repository does not exist")
-}
-
-func TestServerSideAdapter_ListRepositories(t *testing.T) {
- t.Parallel()
-
- for _, tc := range []struct {
- desc string
- repos map[string][]*gitalypb.Repository
- }{
- {
- desc: "no repos",
- repos: make(map[string][]*gitalypb.Repository),
- },
- {
- desc: "repos in a single storage",
- repos: map[string][]*gitalypb.Repository{
- "storage-1": {
- {RelativePath: "a", StorageName: "storage-1"},
- {RelativePath: "b", StorageName: "storage-1"},
- },
- },
- },
- {
- desc: "repos in multiple storages",
- repos: map[string][]*gitalypb.Repository{
- "storage-1": {
- {RelativePath: "a", StorageName: "storage-1"},
- {RelativePath: "b", StorageName: "storage-1"},
- },
- "storage-2": {
- {RelativePath: "c", StorageName: "storage-2"},
- {RelativePath: "d", StorageName: "storage-2"},
- },
- },
- },
- } {
- t.Run(tc.desc, func(t *testing.T) {
- var storages []string
- for storageName := range tc.repos {
- storages = append(storages, storageName)
- }
-
- db := testdb.New(t)
- db.TruncateAll(t)
- rs := datastore.NewPostgresRepositoryStore(db, map[string][]string{"virtual-storage": storages})
-
- // We don't really need a "default" storage, but this makes initialisation cleaner since
- // WithStorages() takes at least one argument.
- cfg := testcfg.Build(t, testcfg.WithStorages("default", storages...))
- cfg.SocketPath = testserver.RunGitalyServer(t, cfg, setup.RegisterAll)
-
- ctx := testhelper.Context(t)
-
- repoID := 1
- for storageName, repos := range tc.repos {
- for _, repo := range repos {
- storagePath, ok := cfg.StoragePath(storageName)
- require.True(t, ok)
-
- _, _ = gittest.CreateRepository(t, ctx, cfg, gittest.CreateRepositoryConfig{
- RelativePath: repo.RelativePath,
- Storage: config.Storage{Name: storageName, Path: storagePath},
- })
-
- require.NoError(t, rs.CreateRepository(ctx, int64(repoID), "virtual-storage", repo.RelativePath, repo.RelativePath, storageName, nil, nil, false, false))
-
- repoID++
- }
- }
-
- pool := client.NewPool()
- defer testhelper.MustClose(t, pool)
-
- adapter := backup.NewServerSideAdapter(pool)
-
- for storageName, repos := range tc.repos {
- actualRepos, err := adapter.ListRepositories(ctx, &backup.ListRepositoriesRequest{
- Server: storage.ServerInfo{Address: cfg.SocketPath, Token: cfg.Auth.Token},
- StorageName: storageName,
- })
- require.NoError(t, err)
- require.EqualValues(t, repos, actualRepos)
- }
- })
- }
}