forked from TrueCloudLab/restic
backup: run test with absolute path
This commit is contained in:
parent
e38f6794cd
commit
4380627cb7
4 changed files with 28 additions and 14 deletions
|
@ -52,14 +52,14 @@ func testBackup(t *testing.T, useFsSnapshot bool) {
|
||||||
opts := BackupOptions{UseFsSnapshot: useFsSnapshot}
|
opts := BackupOptions{UseFsSnapshot: useFsSnapshot}
|
||||||
|
|
||||||
// first backup
|
// first backup
|
||||||
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
testRunBackup(t, "", []string{env.testdata}, opts, env.gopts)
|
||||||
testListSnapshots(t, env.gopts, 1)
|
testListSnapshots(t, env.gopts, 1)
|
||||||
|
|
||||||
testRunCheck(t, env.gopts)
|
testRunCheck(t, env.gopts)
|
||||||
stat1 := dirStats(env.repo)
|
stat1 := dirStats(env.repo)
|
||||||
|
|
||||||
// second backup, implicit incremental
|
// second backup, implicit incremental
|
||||||
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
testRunBackup(t, "", []string{env.testdata}, opts, env.gopts)
|
||||||
snapshotIDs := testListSnapshots(t, env.gopts, 2)
|
snapshotIDs := testListSnapshots(t, env.gopts, 2)
|
||||||
|
|
||||||
stat2 := dirStats(env.repo)
|
stat2 := dirStats(env.repo)
|
||||||
|
@ -71,7 +71,7 @@ func testBackup(t *testing.T, useFsSnapshot bool) {
|
||||||
testRunCheck(t, env.gopts)
|
testRunCheck(t, env.gopts)
|
||||||
// third backup, explicit incremental
|
// third backup, explicit incremental
|
||||||
opts.Parent = snapshotIDs[0].String()
|
opts.Parent = snapshotIDs[0].String()
|
||||||
testRunBackup(t, filepath.Dir(env.testdata), []string{"testdata"}, opts, env.gopts)
|
testRunBackup(t, "", []string{env.testdata}, opts, env.gopts)
|
||||||
snapshotIDs = testListSnapshots(t, env.gopts, 3)
|
snapshotIDs = testListSnapshots(t, env.gopts, 3)
|
||||||
|
|
||||||
stat3 := dirStats(env.repo)
|
stat3 := dirStats(env.repo)
|
||||||
|
@ -84,7 +84,7 @@ func testBackup(t *testing.T, useFsSnapshot bool) {
|
||||||
for i, snapshotID := range snapshotIDs {
|
for i, snapshotID := range snapshotIDs {
|
||||||
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
||||||
t.Logf("restoring snapshot %v to %v", snapshotID.Str(), restoredir)
|
t.Logf("restoring snapshot %v to %v", snapshotID.Str(), restoredir)
|
||||||
testRunRestore(t, env.gopts, restoredir, snapshotID)
|
testRunRestore(t, env.gopts, restoredir, snapshotID.String()+":"+toPathInSnapshot(filepath.Dir(env.testdata)))
|
||||||
diff := directoriesContentsDiff(env.testdata, filepath.Join(restoredir, "testdata"))
|
diff := directoriesContentsDiff(env.testdata, filepath.Join(restoredir, "testdata"))
|
||||||
rtest.Assert(t, diff == "", "directories are not equal: %v", diff)
|
rtest.Assert(t, diff == "", "directories are not equal: %v", diff)
|
||||||
}
|
}
|
||||||
|
@ -92,6 +92,20 @@ func testBackup(t *testing.T, useFsSnapshot bool) {
|
||||||
testRunCheck(t, env.gopts)
|
testRunCheck(t, env.gopts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toPathInSnapshot(path string) string {
|
||||||
|
// use path as is on most platforms, but convert it on windows
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
// the path generated by the test is always local so take the shortcut
|
||||||
|
vol := filepath.VolumeName(path)
|
||||||
|
if vol[len(vol)-1] != ':' {
|
||||||
|
panic(fmt.Sprintf("unexpected path: %q", path))
|
||||||
|
}
|
||||||
|
path = vol[:len(vol)-1] + string(filepath.Separator) + path[len(vol)+1:]
|
||||||
|
path = filepath.ToSlash(path)
|
||||||
|
}
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
func TestBackupWithRelativePath(t *testing.T) {
|
func TestBackupWithRelativePath(t *testing.T) {
|
||||||
env, cleanup := withTestEnvironment(t)
|
env, cleanup := withTestEnvironment(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
@ -557,7 +571,7 @@ func TestHardLink(t *testing.T) {
|
||||||
for i, snapshotID := range snapshotIDs {
|
for i, snapshotID := range snapshotIDs {
|
||||||
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
||||||
t.Logf("restoring snapshot %v to %v", snapshotID.Str(), restoredir)
|
t.Logf("restoring snapshot %v to %v", snapshotID.Str(), restoredir)
|
||||||
testRunRestore(t, env.gopts, restoredir, snapshotID)
|
testRunRestore(t, env.gopts, restoredir, snapshotID.String())
|
||||||
diff := directoriesContentsDiff(env.testdata, filepath.Join(restoredir, "testdata"))
|
diff := directoriesContentsDiff(env.testdata, filepath.Join(restoredir, "testdata"))
|
||||||
rtest.Assert(t, diff == "", "directories are not equal %v", diff)
|
rtest.Assert(t, diff == "", "directories are not equal %v", diff)
|
||||||
|
|
||||||
|
|
|
@ -62,11 +62,11 @@ func TestCopy(t *testing.T) {
|
||||||
for i, snapshotID := range snapshotIDs {
|
for i, snapshotID := range snapshotIDs {
|
||||||
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
restoredir := filepath.Join(env.base, fmt.Sprintf("restore%d", i))
|
||||||
origRestores[restoredir] = struct{}{}
|
origRestores[restoredir] = struct{}{}
|
||||||
testRunRestore(t, env.gopts, restoredir, snapshotID)
|
testRunRestore(t, env.gopts, restoredir, snapshotID.String())
|
||||||
}
|
}
|
||||||
for i, snapshotID := range copiedSnapshotIDs {
|
for i, snapshotID := range copiedSnapshotIDs {
|
||||||
restoredir := filepath.Join(env2.base, fmt.Sprintf("restore%d", i))
|
restoredir := filepath.Join(env2.base, fmt.Sprintf("restore%d", i))
|
||||||
testRunRestore(t, env2.gopts, restoredir, snapshotID)
|
testRunRestore(t, env2.gopts, restoredir, snapshotID.String())
|
||||||
foundMatch := false
|
foundMatch := false
|
||||||
for cmpdir := range origRestores {
|
for cmpdir := range origRestores {
|
||||||
diff := directoriesContentsDiff(restoredir, cmpdir)
|
diff := directoriesContentsDiff(restoredir, cmpdir)
|
||||||
|
|
|
@ -18,17 +18,17 @@ import (
|
||||||
"github.com/restic/restic/internal/ui/termstatus"
|
"github.com/restic/restic/internal/ui/termstatus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testRunRestore(t testing.TB, opts GlobalOptions, dir string, snapshotID restic.ID) {
|
func testRunRestore(t testing.TB, opts GlobalOptions, dir string, snapshotID string) {
|
||||||
testRunRestoreExcludes(t, opts, dir, snapshotID, nil)
|
testRunRestoreExcludes(t, opts, dir, snapshotID, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRunRestoreExcludes(t testing.TB, gopts GlobalOptions, dir string, snapshotID restic.ID, excludes []string) {
|
func testRunRestoreExcludes(t testing.TB, gopts GlobalOptions, dir string, snapshotID string, excludes []string) {
|
||||||
opts := RestoreOptions{
|
opts := RestoreOptions{
|
||||||
Target: dir,
|
Target: dir,
|
||||||
}
|
}
|
||||||
opts.Excludes = excludes
|
opts.Excludes = excludes
|
||||||
|
|
||||||
rtest.OK(t, testRunRestoreAssumeFailure(snapshotID.String(), opts, gopts))
|
rtest.OK(t, testRunRestoreAssumeFailure(snapshotID, opts, gopts))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRunRestoreAssumeFailure(snapshotID string, opts RestoreOptions, gopts GlobalOptions) error {
|
func testRunRestoreAssumeFailure(snapshotID string, opts RestoreOptions, gopts GlobalOptions) error {
|
||||||
|
@ -198,7 +198,7 @@ func TestRestoreFilter(t *testing.T) {
|
||||||
snapshotID := testListSnapshots(t, env.gopts, 1)[0]
|
snapshotID := testListSnapshots(t, env.gopts, 1)[0]
|
||||||
|
|
||||||
// no restore filter should restore all files
|
// no restore filter should restore all files
|
||||||
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore0"), snapshotID)
|
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore0"), snapshotID.String())
|
||||||
for _, testFile := range testfiles {
|
for _, testFile := range testfiles {
|
||||||
rtest.OK(t, testFileSize(filepath.Join(env.base, "restore0", "testdata", testFile.name), int64(testFile.size)))
|
rtest.OK(t, testFileSize(filepath.Join(env.base, "restore0", "testdata", testFile.name), int64(testFile.size)))
|
||||||
}
|
}
|
||||||
|
@ -220,7 +220,7 @@ func TestRestoreFilter(t *testing.T) {
|
||||||
|
|
||||||
// restore with excludes
|
// restore with excludes
|
||||||
restoredir := filepath.Join(env.base, "restore-with-excludes")
|
restoredir := filepath.Join(env.base, "restore-with-excludes")
|
||||||
testRunRestoreExcludes(t, env.gopts, restoredir, snapshotID, excludePatterns)
|
testRunRestoreExcludes(t, env.gopts, restoredir, snapshotID.String(), excludePatterns)
|
||||||
testRestoredFileExclusions(t, restoredir)
|
testRestoredFileExclusions(t, restoredir)
|
||||||
|
|
||||||
// Create an exclude file with some patterns
|
// Create an exclude file with some patterns
|
||||||
|
@ -340,7 +340,7 @@ func TestRestoreWithPermissionFailure(t *testing.T) {
|
||||||
|
|
||||||
_ = withRestoreGlobalOptions(func() error {
|
_ = withRestoreGlobalOptions(func() error {
|
||||||
globalOptions.stderr = io.Discard
|
globalOptions.stderr = io.Discard
|
||||||
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore"), snapshots[0])
|
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore"), snapshots[0].String())
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ func TestCheckRestoreNoLock(t *testing.T) {
|
||||||
testRunCheck(t, env.gopts)
|
testRunCheck(t, env.gopts)
|
||||||
|
|
||||||
snapshotIDs := testListSnapshots(t, env.gopts, 4)
|
snapshotIDs := testListSnapshots(t, env.gopts, 4)
|
||||||
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore"), snapshotIDs[0])
|
testRunRestore(t, env.gopts, filepath.Join(env.base, "restore"), snapshotIDs[0].String())
|
||||||
}
|
}
|
||||||
|
|
||||||
// a listOnceBackend only allows listing once per filetype
|
// a listOnceBackend only allows listing once per filetype
|
||||||
|
|
Loading…
Reference in a new issue