forked from TrueCloudLab/restic
Rework withTestEnvironment
Switch from a function passed as a parameter to a cleanup function, which is also executed when the test function panics, so no temporary directories are left behind.
This commit is contained in:
parent
608adf15a3
commit
d780b1eede
4 changed files with 759 additions and 735 deletions
|
@ -142,44 +142,45 @@ func TestMount(t *testing.T) {
|
||||||
t.Skip("Skipping fuse tests")
|
t.Skip("Skipping fuse tests")
|
||||||
}
|
}
|
||||||
|
|
||||||
withTestEnvironment(t, func(env *testEnvironment, gopts GlobalOptions) {
|
env, cleanup := withTestEnvironment(t)
|
||||||
testRunInit(t, gopts)
|
defer cleanup()
|
||||||
|
|
||||||
repo, err := OpenRepository(gopts)
|
testRunInit(t, env.gopts)
|
||||||
OK(t, err)
|
|
||||||
|
|
||||||
// We remove the mountpoint now to check that cmdMount creates it
|
repo, err := OpenRepository(env.gopts)
|
||||||
RemoveAll(t, env.mountpoint)
|
OK(t, err)
|
||||||
|
|
||||||
checkSnapshots(t, gopts, repo, env.mountpoint, env.repo, []restic.ID{})
|
// We remove the mountpoint now to check that cmdMount creates it
|
||||||
|
RemoveAll(t, env.mountpoint)
|
||||||
|
|
||||||
SetupTarTestFixture(t, env.testdata, filepath.Join("testdata", "backup-data.tar.gz"))
|
checkSnapshots(t, env.gopts, repo, env.mountpoint, env.repo, []restic.ID{})
|
||||||
|
|
||||||
// first backup
|
SetupTarTestFixture(t, env.testdata, filepath.Join("testdata", "backup-data.tar.gz"))
|
||||||
testRunBackup(t, []string{env.testdata}, BackupOptions{}, gopts)
|
|
||||||
snapshotIDs := testRunList(t, "snapshots", gopts)
|
|
||||||
Assert(t, len(snapshotIDs) == 1,
|
|
||||||
"expected one snapshot, got %v", snapshotIDs)
|
|
||||||
|
|
||||||
checkSnapshots(t, gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
// first backup
|
||||||
|
testRunBackup(t, []string{env.testdata}, BackupOptions{}, env.gopts)
|
||||||
|
snapshotIDs := testRunList(t, "snapshots", env.gopts)
|
||||||
|
Assert(t, len(snapshotIDs) == 1,
|
||||||
|
"expected one snapshot, got %v", snapshotIDs)
|
||||||
|
|
||||||
// second backup, implicit incremental
|
checkSnapshots(t, env.gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
||||||
testRunBackup(t, []string{env.testdata}, BackupOptions{}, gopts)
|
|
||||||
snapshotIDs = testRunList(t, "snapshots", gopts)
|
|
||||||
Assert(t, len(snapshotIDs) == 2,
|
|
||||||
"expected two snapshots, got %v", snapshotIDs)
|
|
||||||
|
|
||||||
checkSnapshots(t, gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
// second backup, implicit incremental
|
||||||
|
testRunBackup(t, []string{env.testdata}, BackupOptions{}, env.gopts)
|
||||||
|
snapshotIDs = testRunList(t, "snapshots", env.gopts)
|
||||||
|
Assert(t, len(snapshotIDs) == 2,
|
||||||
|
"expected two snapshots, got %v", snapshotIDs)
|
||||||
|
|
||||||
// third backup, explicit incremental
|
checkSnapshots(t, env.gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
||||||
bopts := BackupOptions{Parent: snapshotIDs[0].String()}
|
|
||||||
testRunBackup(t, []string{env.testdata}, bopts, gopts)
|
|
||||||
snapshotIDs = testRunList(t, "snapshots", gopts)
|
|
||||||
Assert(t, len(snapshotIDs) == 3,
|
|
||||||
"expected three snapshots, got %v", snapshotIDs)
|
|
||||||
|
|
||||||
checkSnapshots(t, gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
// third backup, explicit incremental
|
||||||
})
|
bopts := BackupOptions{Parent: snapshotIDs[0].String()}
|
||||||
|
testRunBackup(t, []string{env.testdata}, bopts, env.gopts)
|
||||||
|
snapshotIDs = testRunList(t, "snapshots", env.gopts)
|
||||||
|
Assert(t, len(snapshotIDs) == 3,
|
||||||
|
"expected three snapshots, got %v", snapshotIDs)
|
||||||
|
|
||||||
|
checkSnapshots(t, env.gopts, repo, env.mountpoint, env.repo, snapshotIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMountSameTimestamps(t *testing.T) {
|
func TestMountSameTimestamps(t *testing.T) {
|
||||||
|
@ -187,18 +188,19 @@ func TestMountSameTimestamps(t *testing.T) {
|
||||||
t.Skip("Skipping fuse tests")
|
t.Skip("Skipping fuse tests")
|
||||||
}
|
}
|
||||||
|
|
||||||
withTestEnvironment(t, func(env *testEnvironment, gopts GlobalOptions) {
|
env, cleanup := withTestEnvironment(t)
|
||||||
SetupTarTestFixture(t, env.base, filepath.Join("testdata", "repo-same-timestamps.tar.gz"))
|
defer cleanup()
|
||||||
|
|
||||||
repo, err := OpenRepository(gopts)
|
SetupTarTestFixture(t, env.base, filepath.Join("testdata", "repo-same-timestamps.tar.gz"))
|
||||||
OK(t, err)
|
|
||||||
|
|
||||||
ids := []restic.ID{
|
repo, err := OpenRepository(env.gopts)
|
||||||
restic.TestParseID("280303689e5027328889a06d718b729e96a1ce6ae9ef8290bff550459ae611ee"),
|
OK(t, err)
|
||||||
restic.TestParseID("75ad6cdc0868e082f2596d5ab8705e9f7d87316f5bf5690385eeff8dbe49d9f5"),
|
|
||||||
restic.TestParseID("5fd0d8b2ef0fa5d23e58f1e460188abb0f525c0f0c4af8365a1280c807a80a1b"),
|
|
||||||
}
|
|
||||||
|
|
||||||
checkSnapshots(t, gopts, repo, env.mountpoint, env.repo, ids)
|
ids := []restic.ID{
|
||||||
})
|
restic.TestParseID("280303689e5027328889a06d718b729e96a1ce6ae9ef8290bff550459ae611ee"),
|
||||||
|
restic.TestParseID("75ad6cdc0868e082f2596d5ab8705e9f7d87316f5bf5690385eeff8dbe49d9f5"),
|
||||||
|
restic.TestParseID("5fd0d8b2ef0fa5d23e58f1e460188abb0f525c0f0c4af8365a1280c807a80a1b"),
|
||||||
|
}
|
||||||
|
|
||||||
|
checkSnapshots(t, env.gopts, repo, env.mountpoint, env.repo, ids)
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,11 +168,12 @@ func dirStats(dir string) (stat dirStat) {
|
||||||
|
|
||||||
type testEnvironment struct {
|
type testEnvironment struct {
|
||||||
base, cache, repo, mountpoint, testdata string
|
base, cache, repo, mountpoint, testdata string
|
||||||
|
gopts GlobalOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
// withTestEnvironment creates a test environment and calls f with it. After f has
|
// withTestEnvironment creates a test environment and returns a cleanup
|
||||||
// returned, the temporary directory is removed.
|
// function which removes it.
|
||||||
func withTestEnvironment(t testing.TB, f func(*testEnvironment, GlobalOptions)) {
|
func withTestEnvironment(t testing.TB) (env *testEnvironment, cleanup func()) {
|
||||||
if !RunIntegrationTest {
|
if !RunIntegrationTest {
|
||||||
t.Skip("integration tests disabled")
|
t.Skip("integration tests disabled")
|
||||||
}
|
}
|
||||||
|
@ -182,7 +183,7 @@ func withTestEnvironment(t testing.TB, f func(*testEnvironment, GlobalOptions))
|
||||||
tempdir, err := ioutil.TempDir(TestTempDir, "restic-test-")
|
tempdir, err := ioutil.TempDir(TestTempDir, "restic-test-")
|
||||||
OK(t, err)
|
OK(t, err)
|
||||||
|
|
||||||
env := testEnvironment{
|
env = &testEnvironment{
|
||||||
base: tempdir,
|
base: tempdir,
|
||||||
cache: filepath.Join(tempdir, "cache"),
|
cache: filepath.Join(tempdir, "cache"),
|
||||||
repo: filepath.Join(tempdir, "repo"),
|
repo: filepath.Join(tempdir, "repo"),
|
||||||
|
@ -195,7 +196,7 @@ func withTestEnvironment(t testing.TB, f func(*testEnvironment, GlobalOptions))
|
||||||
OK(t, os.MkdirAll(env.cache, 0700))
|
OK(t, os.MkdirAll(env.cache, 0700))
|
||||||
OK(t, os.MkdirAll(env.repo, 0700))
|
OK(t, os.MkdirAll(env.repo, 0700))
|
||||||
|
|
||||||
gopts := GlobalOptions{
|
env.gopts = GlobalOptions{
|
||||||
Repo: env.repo,
|
Repo: env.repo,
|
||||||
Quiet: true,
|
Quiet: true,
|
||||||
ctx: context.Background(),
|
ctx: context.Background(),
|
||||||
|
@ -206,14 +207,15 @@ func withTestEnvironment(t testing.TB, f func(*testEnvironment, GlobalOptions))
|
||||||
}
|
}
|
||||||
|
|
||||||
// always overwrite global options
|
// always overwrite global options
|
||||||
globalOptions = gopts
|
globalOptions = env.gopts
|
||||||
|
|
||||||
f(&env, gopts)
|
cleanup = func() {
|
||||||
|
if !TestCleanupTempDirs {
|
||||||
if !TestCleanupTempDirs {
|
t.Logf("leaving temporary directory %v used for test", tempdir)
|
||||||
t.Logf("leaving temporary directory %v used for test", tempdir)
|
return
|
||||||
return
|
}
|
||||||
|
RemoveAll(t, tempdir)
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAll(t, tempdir)
|
return env, cleanup
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,33 +8,34 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRestoreLocalLayout(t *testing.T) {
|
func TestRestoreLocalLayout(t *testing.T) {
|
||||||
withTestEnvironment(t, func(env *testEnvironment, gopts GlobalOptions) {
|
env, cleanup := withTestEnvironment(t)
|
||||||
var tests = []struct {
|
defer cleanup()
|
||||||
filename string
|
|
||||||
layout string
|
|
||||||
}{
|
|
||||||
{"repo-layout-default.tar.gz", ""},
|
|
||||||
{"repo-layout-s3legacy.tar.gz", ""},
|
|
||||||
{"repo-layout-default.tar.gz", "default"},
|
|
||||||
{"repo-layout-s3legacy.tar.gz", "s3legacy"},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, test := range tests {
|
var tests = []struct {
|
||||||
datafile := filepath.Join("..", "..", "internal", "backend", "testdata", test.filename)
|
filename string
|
||||||
|
layout string
|
||||||
|
}{
|
||||||
|
{"repo-layout-default.tar.gz", ""},
|
||||||
|
{"repo-layout-s3legacy.tar.gz", ""},
|
||||||
|
{"repo-layout-default.tar.gz", "default"},
|
||||||
|
{"repo-layout-s3legacy.tar.gz", "s3legacy"},
|
||||||
|
}
|
||||||
|
|
||||||
SetupTarTestFixture(t, env.base, datafile)
|
for _, test := range tests {
|
||||||
|
datafile := filepath.Join("..", "..", "internal", "backend", "testdata", test.filename)
|
||||||
|
|
||||||
gopts.extended["local.layout"] = test.layout
|
SetupTarTestFixture(t, env.base, datafile)
|
||||||
|
|
||||||
// check the repo
|
env.gopts.extended["local.layout"] = test.layout
|
||||||
testRunCheck(t, gopts)
|
|
||||||
|
|
||||||
// restore latest snapshot
|
// check the repo
|
||||||
target := filepath.Join(env.base, "restore")
|
testRunCheck(t, env.gopts)
|
||||||
testRunRestoreLatest(t, gopts, target, nil, "")
|
|
||||||
|
|
||||||
RemoveAll(t, filepath.Join(env.base, "repo"))
|
// restore latest snapshot
|
||||||
RemoveAll(t, target)
|
target := filepath.Join(env.base, "restore")
|
||||||
}
|
testRunRestoreLatest(t, env.gopts, target, nil, "")
|
||||||
})
|
|
||||||
|
RemoveAll(t, filepath.Join(env.base, "repo"))
|
||||||
|
RemoveAll(t, target)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue