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:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2024-01-18 10:30:38 +0300
committerGitLab <noreply@gitlab.com>2024-01-18 10:30:38 +0300
commit92f15bbbd89062e4cb82c07769b97f453f20e18f (patch)
treee4eb93118c668b4a808aa2852b7b78fcf9a9ff41 /internal/backup/locator_test.go
parent8c7ef2ac66421fbdb70025a3ab1ed237e8affa7a (diff)
parent0a3c32cb49864bf5a045aaf3e32d034117f6ab0e (diff)
Merge branch 'manifest_latest' into 'master'qmnguyen0711/rework-metrics-and-logs-of-housekeeping-tasks
Write latest manifest file See merge request https://gitlab.com/gitlab-org/gitaly/-/merge_requests/6613 Merged-by: Patrick Steinhardt <psteinhardt@gitlab.com> Approved-by: Patrick Steinhardt <psteinhardt@gitlab.com> Approved-by: Will Chandler <wchandler@gitlab.com> Reviewed-by: Patrick Steinhardt <psteinhardt@gitlab.com> Co-authored-by: James Fargher <jfargher@gitlab.com>
Diffstat (limited to 'internal/backup/locator_test.go')
-rw-r--r--internal/backup/locator_test.go126
1 files changed, 124 insertions, 2 deletions
diff --git a/internal/backup/locator_test.go b/internal/backup/locator_test.go
index 90cac3664..1d6010554 100644
--- a/internal/backup/locator_test.go
+++ b/internal/backup/locator_test.go
@@ -470,7 +470,9 @@ custom_hooks_path = '%[1]s/%[2]s/001.custom_hooks.tar'
require.NoError(t, l.Commit(ctx, incremental))
manifest := testhelper.MustReadFile(t, filepath.Join(backupPath, "manifests", repo.StorageName, repo.RelativePath, backupID+".toml"))
- require.Equal(t, fmt.Sprintf(`object_format = 'sha1'
+ latestManifest := testhelper.MustReadFile(t, filepath.Join(backupPath, "manifests", repo.StorageName, repo.RelativePath, "+latest.toml"))
+
+ expectedManifest := fmt.Sprintf(`object_format = 'sha1'
[[steps]]
bundle_path = '%[1]s/%[2]s/001.bundle'
@@ -482,7 +484,10 @@ bundle_path = '%[1]s/%[2]s/002.bundle'
ref_path = '%[1]s/%[2]s/002.refs'
previous_ref_path = '%[1]s/%[2]s/001.refs'
custom_hooks_path = '%[1]s/%[2]s/002.custom_hooks.tar'
-`, repo.RelativePath, backupID), string(manifest))
+`, repo.RelativePath, backupID)
+
+ require.Equal(t, expectedManifest, string(manifest))
+ require.Equal(t, expectedManifest, string(latestManifest))
})
}
@@ -605,3 +610,120 @@ custom_hooks_path = 'path/to/002.custom_hooks.tar'
})
}
}
+
+func TestManifestLocator_FindLatest(t *testing.T) {
+ t.Parallel()
+
+ for _, tc := range []struct {
+ desc string
+ repo storage.Repository
+ setup func(t *testing.T, ctx context.Context, backupPath string)
+ expectedBackup *Backup
+ }{
+ {
+ desc: "finds manifest",
+ repo: &gitalypb.Repository{
+ StorageName: "default",
+ RelativePath: "vanity/repo.git",
+ },
+ setup: func(t *testing.T, ctx context.Context, backupPath string) {
+ testhelper.WriteFiles(t, backupPath, map[string]any{
+ "vanity/repo/LATEST": "abc123",
+ "vanity/repo/abc123/LATEST": "002",
+ "manifests/default/vanity/repo.git/+latest.toml": `object_format = 'sha1'
+
+[[steps]]
+bundle_path = 'manifest-path/to/001.bundle'
+ref_path = 'manifest-path/to/001.refs'
+custom_hooks_path = 'manifest-path/to/001.custom_hooks.tar'
+
+[[steps]]
+bundle_path = 'manifest-path/to/002.bundle'
+ref_path = 'manifest-path/to/002.refs'
+previous_ref_path = 'manifest-path/to/001.refs'
+custom_hooks_path = 'manifest-path/to/002.custom_hooks.tar'
+`,
+ })
+ },
+ expectedBackup: &Backup{
+ ID: "+latest",
+ Repository: &gitalypb.Repository{
+ StorageName: "default",
+ RelativePath: "vanity/repo.git",
+ },
+ ObjectFormat: "sha1",
+ Steps: []Step{
+ {
+ BundlePath: "manifest-path/to/001.bundle",
+ RefPath: "manifest-path/to/001.refs",
+ CustomHooksPath: "manifest-path/to/001.custom_hooks.tar",
+ },
+ {
+ BundlePath: "manifest-path/to/002.bundle",
+ RefPath: "manifest-path/to/002.refs",
+ PreviousRefPath: "manifest-path/to/001.refs",
+ CustomHooksPath: "manifest-path/to/002.custom_hooks.tar",
+ },
+ },
+ },
+ },
+ {
+ desc: "fallback",
+ repo: &gitalypb.Repository{
+ StorageName: "default",
+ RelativePath: "vanity/repo.git",
+ },
+ setup: func(t *testing.T, ctx context.Context, backupPath string) {
+ testhelper.WriteFiles(t, backupPath, map[string]any{
+ "vanity/repo/LATEST": "abc123",
+ "vanity/repo/abc123/LATEST": "002",
+ })
+ },
+ expectedBackup: &Backup{
+ ID: "abc123",
+ Repository: &gitalypb.Repository{
+ StorageName: "default",
+ RelativePath: "vanity/repo.git",
+ },
+ ObjectFormat: "sha1",
+ Steps: []Step{
+ {
+ BundlePath: "vanity/repo/abc123/001.bundle",
+ RefPath: "vanity/repo/abc123/001.refs",
+ CustomHooksPath: "vanity/repo/abc123/001.custom_hooks.tar",
+ },
+ {
+ BundlePath: "vanity/repo/abc123/002.bundle",
+ RefPath: "vanity/repo/abc123/002.refs",
+ PreviousRefPath: "vanity/repo/abc123/001.refs",
+ CustomHooksPath: "vanity/repo/abc123/002.custom_hooks.tar",
+ },
+ },
+ },
+ },
+ } {
+ tc := tc
+ t.Run(tc.desc, func(t *testing.T) {
+ t.Parallel()
+
+ ctx := testhelper.Context(t)
+ backupPath := testhelper.TempDir(t)
+
+ tc.setup(t, ctx, backupPath)
+
+ sink := NewFilesystemSink(backupPath)
+ var l Locator = PointerLocator{
+ Sink: sink,
+ }
+ l = ManifestLocator{
+ Sink: sink,
+ Fallback: l,
+ }
+
+ backup, err := l.FindLatest(ctx, tc.repo)
+ require.NoError(t, err)
+
+ require.Equal(t, tc.expectedBackup, backup)
+ })
+ }
+}