From ec0c91e2333d304053665ef62c7a8c85825cbc2a Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 14 Oct 2022 23:44:10 +0200 Subject: [PATCH] rewrite: Add tests for further ways to use the command --- cmd/restic/integration_rewrite_test.go | 49 ++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/cmd/restic/integration_rewrite_test.go b/cmd/restic/integration_rewrite_test.go index b0f6b02ac..e6007973b 100644 --- a/cmd/restic/integration_rewrite_test.go +++ b/cmd/restic/integration_rewrite_test.go @@ -5,23 +5,22 @@ import ( "path/filepath" "testing" + "github.com/restic/restic/internal/restic" rtest "github.com/restic/restic/internal/test" ) -func testRunRewriteExclude(t testing.TB, gopts GlobalOptions, excludes []string) { +func testRunRewriteExclude(t testing.TB, gopts GlobalOptions, excludes []string, forget bool) { opts := RewriteOptions{ excludePatternOptions: excludePatternOptions{ Excludes: excludes, }, + Forget: forget, } rtest.OK(t, runRewrite(context.TODO(), opts, gopts, nil)) } -func TestRewrite(t *testing.T) { - env, cleanup := withTestEnvironment(t) - defer cleanup() - +func createBasicRewriteRepo(t testing.TB, env *testEnvironment) restic.ID { testSetupBackupData(t, env) // create backup @@ -30,9 +29,45 @@ func TestRewrite(t *testing.T) { rtest.Assert(t, len(snapshotIDs) == 1, "expected one snapshot, got %v", snapshotIDs) testRunCheck(t, env.gopts) + return snapshotIDs[0] +} + +func TestRewrite(t *testing.T) { + env, cleanup := withTestEnvironment(t) + defer cleanup() + createBasicRewriteRepo(t, env) + // exclude some data - testRunRewriteExclude(t, env.gopts, []string{"3"}) - snapshotIDs = testRunList(t, "snapshots", env.gopts) + testRunRewriteExclude(t, env.gopts, []string{"3"}, false) + snapshotIDs := testRunList(t, "snapshots", env.gopts) rtest.Assert(t, len(snapshotIDs) == 2, "expected two snapshots, got %v", snapshotIDs) testRunCheck(t, env.gopts) } + +func TestRewriteUnchanged(t *testing.T) { + env, cleanup := withTestEnvironment(t) + defer cleanup() + snapshotID := createBasicRewriteRepo(t, env) + + // use an exclude that will not exclude anything + testRunRewriteExclude(t, env.gopts, []string{"3dflkhjgdflhkjetrlkhjgfdlhkj"}, false) + newSnapshotIDs := testRunList(t, "snapshots", env.gopts) + rtest.Assert(t, len(newSnapshotIDs) == 1, "expected one snapshot, got %v", newSnapshotIDs) + rtest.Assert(t, snapshotID == newSnapshotIDs[0], "snapshot id changed unexpectedly") + testRunCheck(t, env.gopts) +} + +func TestRewriteReplace(t *testing.T) { + env, cleanup := withTestEnvironment(t) + defer cleanup() + snapshotID := createBasicRewriteRepo(t, env) + + // exclude some data + testRunRewriteExclude(t, env.gopts, []string{"3"}, true) + newSnapshotIDs := testRunList(t, "snapshots", env.gopts) + rtest.Assert(t, len(newSnapshotIDs) == 1, "expected one snapshot, got %v", newSnapshotIDs) + rtest.Assert(t, snapshotID != newSnapshotIDs[0], "snapshot id should have changed") + // check forbids unused blobs, thus remove them first + testRunPrune(t, env.gopts, PruneOptions{MaxUnused: "0"}) + testRunCheck(t, env.gopts) +}