mirror of
https://github.com/octoleo/restic.git
synced 2025-01-03 15:17:28 +00:00
Merge pull request #4293 from MichaelEischer/fix-groups-by
Fix parent snapshot selection for relative paths
This commit is contained in:
commit
1dd873b706
@ -71,6 +71,7 @@ func testRunBackupAssumeFailure(t testing.TB, dir string, target []string, opts
|
|||||||
defer cleanup()
|
defer cleanup()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opts.GroupBy = restic.SnapshotGroupByOptions{Host: true, Path: true}
|
||||||
backupErr := runBackup(ctx, opts, gopts, term, target)
|
backupErr := runBackup(ctx, opts, gopts, term, target)
|
||||||
|
|
||||||
cancel()
|
cancel()
|
||||||
@ -362,6 +363,55 @@ func testBackup(t *testing.T, useFsSnapshot bool) {
|
|||||||
testRunCheck(t, env.gopts)
|
testRunCheck(t, env.gopts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBackupWithRelativePath(t *testing.T) {
|
||||||
|
env, cleanup := withTestEnvironment(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
testSetupBackupData(t, env)
|
||||||
|
opts := BackupOptions{}
|
||||||
|
|
||||||
|
// first backup
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
||||||
|
snapshotIDs := testRunList(t, "snapshots", env.gopts)
|
||||||
|
rtest.Assert(t, len(snapshotIDs) == 1, "expected one snapshot, got %v", snapshotIDs)
|
||||||
|
firstSnapshotID := snapshotIDs[0]
|
||||||
|
|
||||||
|
// second backup, implicit incremental
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
||||||
|
|
||||||
|
// that the correct parent snapshot was used
|
||||||
|
latestSn, _ := testRunSnapshots(t, env.gopts)
|
||||||
|
rtest.Assert(t, latestSn != nil, "missing latest snapshot")
|
||||||
|
rtest.Assert(t, latestSn.Parent != nil && latestSn.Parent.Equal(firstSnapshotID), "second snapshot selected unexpected parent %v instead of %v", latestSn.Parent, firstSnapshotID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBackupParentSelection(t *testing.T) {
|
||||||
|
env, cleanup := withTestEnvironment(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
testSetupBackupData(t, env)
|
||||||
|
opts := BackupOptions{}
|
||||||
|
|
||||||
|
// first backup
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata/0/0"}, opts, env.gopts)
|
||||||
|
snapshotIDs := testRunList(t, "snapshots", env.gopts)
|
||||||
|
rtest.Assert(t, len(snapshotIDs) == 1, "expected one snapshot, got %v", snapshotIDs)
|
||||||
|
firstSnapshotID := snapshotIDs[0]
|
||||||
|
|
||||||
|
// second backup, sibling path
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata/0/tests"}, opts, env.gopts)
|
||||||
|
snapshotIDs = testRunList(t, "snapshots", env.gopts)
|
||||||
|
rtest.Assert(t, len(snapshotIDs) == 2, "expected two snapshots, got %v", snapshotIDs)
|
||||||
|
|
||||||
|
// third backup, incremental for the first backup
|
||||||
|
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata/0/0"}, opts, env.gopts)
|
||||||
|
|
||||||
|
// test that the correct parent snapshot was used
|
||||||
|
latestSn, _ := testRunSnapshots(t, env.gopts)
|
||||||
|
rtest.Assert(t, latestSn != nil, "missing latest snapshot")
|
||||||
|
rtest.Assert(t, latestSn.Parent != nil && latestSn.Parent.Equal(firstSnapshotID), "third snapshot selected unexpected parent %v instead of %v", latestSn.Parent, firstSnapshotID)
|
||||||
|
}
|
||||||
|
|
||||||
func TestDryRunBackup(t *testing.T) {
|
func TestDryRunBackup(t *testing.T) {
|
||||||
env, cleanup := withTestEnvironment(t)
|
env, cleanup := withTestEnvironment(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
@ -46,6 +46,7 @@ func (f *SnapshotFilter) findLatest(ctx context.Context, be Lister, loader Loade
|
|||||||
}
|
}
|
||||||
absTargets = append(absTargets, filepath.Clean(target))
|
absTargets = append(absTargets, filepath.Clean(target))
|
||||||
}
|
}
|
||||||
|
f.Paths = absTargets
|
||||||
|
|
||||||
var latest *Snapshot
|
var latest *Snapshot
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user