diff --git a/cmd/restic/integration_helpers_test.go b/cmd/restic/integration_helpers_test.go index 2fb026512..d0450817d 100644 --- a/cmd/restic/integration_helpers_test.go +++ b/cmd/restic/integration_helpers_test.go @@ -11,6 +11,7 @@ import ( "github.com/restic/restic/internal/options" "github.com/restic/restic/internal/repository" + "github.com/restic/restic/internal/restic" rtest "github.com/restic/restic/internal/test" ) @@ -189,6 +190,7 @@ func withTestEnvironment(t testing.TB) (env *testEnvironment, cleanup func()) { } repository.TestUseLowSecurityKDFParameters(t) + restic.TestDisableCheckPolynomial(t) tempdir, err := ioutil.TempDir(rtest.TestTempDir, "restic-test-") rtest.OK(t, err) diff --git a/cmd/restic/integration_test.go b/cmd/restic/integration_test.go index dbc48703e..91b610d0d 100644 --- a/cmd/restic/integration_test.go +++ b/cmd/restic/integration_test.go @@ -44,6 +44,7 @@ func parseIDsFromReader(t testing.TB, rd io.Reader) restic.IDs { func testRunInit(t testing.TB, opts GlobalOptions) { repository.TestUseLowSecurityKDFParameters(t) + restic.TestDisableCheckPolynomial(t) restic.TestSetLockTimeout(t, 0) rtest.OK(t, runInit(opts, nil)) @@ -285,7 +286,7 @@ func TestBackupNonExistingFile(t *testing.T) { globalOptions.stderr = os.Stderr }() - p := filepath.Join(env.testdata, "0", "0") + p := filepath.Join(env.testdata, "0", "0", "9") dirs := []string{ filepath.Join(p, "0"), filepath.Join(p, "1"), @@ -409,7 +410,7 @@ func TestBackupChangedFile(t *testing.T) { globalOptions.stderr = os.Stderr }() - modFile := filepath.Join(env.testdata, "0", "0", "6", "18") + modFile := filepath.Join(env.testdata, "0", "0", "9", "18") ranHook := false debug.Hook("archiver.SaveFile", func(context interface{}) { @@ -575,9 +576,9 @@ func TestBackupExclude(t *testing.T) { } const ( - incrementalFirstWrite = 20 * 1042 * 1024 - incrementalSecondWrite = 12 * 1042 * 1024 - incrementalThirdWrite = 4 * 1042 * 1024 + incrementalFirstWrite = 6 * 1042 * 1024 + incrementalSecondWrite = 1 * 1042 * 1024 + incrementalThirdWrite = 1 * 1042 * 1024 ) func appendRandomData(filename string, bytes uint) error { @@ -893,7 +894,7 @@ func TestRestore(t *testing.T) { for i := 0; i < 10; i++ { p := filepath.Join(env.testdata, fmt.Sprintf("foo/bar/testfile%v", i)) rtest.OK(t, os.MkdirAll(filepath.Dir(p), 0755)) - rtest.OK(t, appendRandomData(p, uint(mrand.Intn(5<<21)))) + rtest.OK(t, appendRandomData(p, uint(mrand.Intn(2<<21)))) } opts := BackupOptions{} @@ -1197,13 +1198,13 @@ func TestPrune(t *testing.T) { rtest.SetupTarTestFixture(t, env.testdata, datafile) opts := BackupOptions{} - testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0")}, opts, env.gopts) + testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0", "9")}, opts, env.gopts) firstSnapshot := testRunList(t, "snapshots", env.gopts) rtest.Assert(t, len(firstSnapshot) == 1, "expected one snapshot, got %v", firstSnapshot) - testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0", "2")}, opts, env.gopts) - testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0", "3")}, opts, env.gopts) + testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0", "9", "2")}, opts, env.gopts) + testRunBackup(t, []string{filepath.Join(env.testdata, "0", "0", "9", "3")}, opts, env.gopts) snapshotIDs := testRunList(t, "snapshots", env.gopts) rtest.Assert(t, len(snapshotIDs) == 3, diff --git a/cmd/restic/testdata/backup-data.tar.gz b/cmd/restic/testdata/backup-data.tar.gz index 337c18fd9..6ba5881ae 100644 Binary files a/cmd/restic/testdata/backup-data.tar.gz and b/cmd/restic/testdata/backup-data.tar.gz differ diff --git a/internal/archiver/archiver_duplication_test.go b/internal/archiver/archiver_duplication_test.go deleted file mode 100644 index 2538dfec0..000000000 --- a/internal/archiver/archiver_duplication_test.go +++ /dev/null @@ -1,155 +0,0 @@ -package archiver_test - -import ( - "context" - "crypto/rand" - "io" - mrand "math/rand" - "sync" - "testing" - "time" - - "github.com/restic/restic/internal/errors" - "github.com/restic/restic/internal/restic" - - "github.com/restic/restic/internal/archiver" - "github.com/restic/restic/internal/mock" - "github.com/restic/restic/internal/repository" -) - -const parallelSaves = 50 -const testSaveIndexTime = 100 * time.Millisecond -const testTimeout = 2 * time.Second - -var DupID restic.ID - -func randomID() restic.ID { - if mrand.Float32() < 0.5 { - return DupID - } - - id := restic.ID{} - _, err := io.ReadFull(rand.Reader, id[:]) - if err != nil { - panic(err) - } - return id -} - -// forgetfulBackend returns a backend that forgets everything. -func forgetfulBackend() restic.Backend { - be := mock.NewBackend() - - be.TestFn = func(ctx context.Context, h restic.Handle) (bool, error) { - return false, nil - } - - be.OpenReaderFn = func(ctx context.Context, h restic.Handle, length int, offset int64) (io.ReadCloser, error) { - return nil, errors.New("not found") - } - - be.SaveFn = func(ctx context.Context, h restic.Handle, rd restic.RewindReader) error { - return nil - } - - be.StatFn = func(ctx context.Context, h restic.Handle) (restic.FileInfo, error) { - return restic.FileInfo{}, errors.New("not found") - } - - be.RemoveFn = func(ctx context.Context, h restic.Handle) error { - return nil - } - - be.ListFn = func(ctx context.Context, t restic.FileType, fn func(restic.FileInfo) error) error { - return nil - } - - be.DeleteFn = func(ctx context.Context) error { - return nil - } - - return be -} - -func testArchiverDuplication(t *testing.T) { - _, err := io.ReadFull(rand.Reader, DupID[:]) - if err != nil { - t.Fatal(err) - } - - repo := repository.New(forgetfulBackend()) - - err = repo.Init(context.TODO(), "foo") - if err != nil { - t.Fatal(err) - } - - arch := archiver.New(repo) - - wg := &sync.WaitGroup{} - done := make(chan struct{}) - for i := 0; i < parallelSaves; i++ { - wg.Add(1) - go func() { - defer wg.Done() - for { - select { - case <-done: - return - default: - } - - id := randomID() - - if repo.Index().Has(id, restic.DataBlob) { - continue - } - - buf := make([]byte, 50) - - err := arch.Save(context.TODO(), restic.DataBlob, buf, id) - if err != nil { - t.Fatal(err) - } - } - }() - } - - saveIndex := func() { - defer wg.Done() - - ticker := time.NewTicker(testSaveIndexTime) - defer ticker.Stop() - - for { - select { - case <-done: - return - case <-ticker.C: - err := repo.SaveFullIndex(context.TODO()) - if err != nil { - t.Fatal(err) - } - } - } - } - - wg.Add(1) - go saveIndex() - - <-time.After(testTimeout) - close(done) - - wg.Wait() - - err = repo.Flush(context.Background()) - if err != nil { - t.Fatal(err) - } -} - -func TestArchiverDuplication(t *testing.T) { - for i := 0; i < 5; i++ { - testArchiverDuplication(t) - } -} diff --git a/internal/archiver/archiver_test.go b/internal/archiver/archiver_test.go index 6a16a36fc..035355a32 100644 --- a/internal/archiver/archiver_test.go +++ b/internal/archiver/archiver_test.go @@ -11,7 +11,6 @@ import ( "time" "github.com/restic/restic/internal/archiver" - "github.com/restic/restic/internal/checker" "github.com/restic/restic/internal/crypto" "github.com/restic/restic/internal/repository" "github.com/restic/restic/internal/restic" @@ -207,98 +206,6 @@ func TestArchiveDedup(t *testing.T) { archiveWithDedup(t) } -// Saves several identical chunks concurrently and later checks that there are no -// unreferenced packs in the repository. See also #292 and #358. -func TestParallelSaveWithDuplication(t *testing.T) { - for seed := 0; seed < 10; seed++ { - testParallelSaveWithDuplication(t, seed) - } -} - -func testParallelSaveWithDuplication(t *testing.T, seed int) { - repo, cleanup := repository.TestRepository(t) - defer cleanup() - - dataSizeMb := 128 - duplication := 7 - - arch := archiver.New(repo) - chunks := getRandomData(seed, dataSizeMb*1024*1024) - - errChannels := [](<-chan error){} - - // interwoven processing of subsequent chunks - maxParallel := 2*duplication - 1 - barrier := make(chan struct{}, maxParallel) - - for _, c := range chunks { - for dupIdx := 0; dupIdx < duplication; dupIdx++ { - errChan := make(chan error) - errChannels = append(errChannels, errChan) - - go func(c chunker.Chunk, errChan chan<- error) { - barrier <- struct{}{} - - id := restic.Hash(c.Data) - time.Sleep(time.Duration(id[0])) - err := arch.Save(context.TODO(), restic.DataBlob, c.Data, id) - <-barrier - errChan <- err - }(c, errChan) - } - } - - for _, errChan := range errChannels { - rtest.OK(t, <-errChan) - } - - rtest.OK(t, repo.Flush(context.Background())) - rtest.OK(t, repo.SaveIndex(context.TODO())) - - chkr := createAndInitChecker(t, repo) - assertNoUnreferencedPacks(t, chkr) -} - -func getRandomData(seed int, size int) []chunker.Chunk { - buf := rtest.Random(seed, size) - var chunks []chunker.Chunk - chunker := chunker.New(bytes.NewReader(buf), testPol) - - for { - c, err := chunker.Next(nil) - if errors.Cause(err) == io.EOF { - break - } - chunks = append(chunks, c) - } - - return chunks -} - -func createAndInitChecker(t *testing.T, repo restic.Repository) *checker.Checker { - chkr := checker.New(repo) - - hints, errs := chkr.LoadIndex(context.TODO()) - if len(errs) > 0 { - t.Fatalf("expected no errors, got %v: %v", len(errs), errs) - } - - if len(hints) > 0 { - t.Errorf("expected no hints, got %v: %v", len(hints), hints) - } - - return chkr -} - -func assertNoUnreferencedPacks(t *testing.T, chkr *checker.Checker) { - errChan := make(chan error) - go chkr.Packs(context.TODO(), errChan) - - for err := range errChan { - rtest.OK(t, err) - } -} - func TestArchiveEmptySnapshot(t *testing.T) { repo, cleanup := repository.TestRepository(t) defer cleanup() diff --git a/internal/repository/testing.go b/internal/repository/testing.go index 7b76762dd..a49072335 100644 --- a/internal/repository/testing.go +++ b/internal/repository/testing.go @@ -43,6 +43,7 @@ const testChunkerPol = chunker.Pol(0x3DA3358B4DC173) // is used for the chunker and low-security test parameters. func TestRepositoryWithBackend(t testing.TB, be restic.Backend) (r restic.Repository, cleanup func()) { TestUseLowSecurityKDFParameters(t) + restic.TestDisableCheckPolynomial(t) var beCleanup func() if be == nil { diff --git a/internal/restic/config.go b/internal/restic/config.go index a11bf5409..4f3c6c4bc 100644 --- a/internal/restic/config.go +++ b/internal/restic/config.go @@ -57,6 +57,15 @@ func TestCreateConfig(t testing.TB, pol chunker.Pol) (cfg Config) { return cfg } +var checkPolynomial = true + +// TestDisableCheckPolynomial disables the check that the polynomial used for +// the chunker. +func TestDisableCheckPolynomial(t testing.TB) { + t.Logf("disabling check of the chunker polynomial") + checkPolynomial = false +} + // LoadConfig returns loads, checks and returns the config for a repository. func LoadConfig(ctx context.Context, r JSONUnpackedLoader) (Config, error) { var ( @@ -72,8 +81,10 @@ func LoadConfig(ctx context.Context, r JSONUnpackedLoader) (Config, error) { return Config{}, errors.New("unsupported repository version") } - if !cfg.ChunkerPolynomial.Irreducible() { - return Config{}, errors.New("invalid chunker polynomial") + if checkPolynomial { + if !cfg.ChunkerPolynomial.Irreducible() { + return Config{}, errors.New("invalid chunker polynomial") + } } return cfg, nil diff --git a/internal/restic/testdata/used_blobs_snapshot0 b/internal/restic/testdata/used_blobs_snapshot0 index 9443e1e16..667ad34db 100644 --- a/internal/restic/testdata/used_blobs_snapshot0 +++ b/internal/restic/testdata/used_blobs_snapshot0 @@ -1,37 +1,23 @@ -{"ID":"087e8d5f45f93a78e52a938ac0b7864f92f8910091c0da69201a156242df3b78","Type":"data"} -{"ID":"0bf505951741c44714527d252313b6959ce4f19d2e5512fca1c1b2da14424da3","Type":"data"} -{"ID":"0c82d00e6ee78b48559cda2f9cc909beeb8769183b115dfda0a5767832accc8d","Type":"data"} -{"ID":"2941bfd03b8933bb150b085a2252b69675495af64523bf8d38e67429e7cccb45","Type":"data"} -{"ID":"378a9b6862c8fa5c6915f158d16e4416243159bb9da44c564896c065bc6c1cf4","Type":"data"} -{"ID":"3ffcf5128fc404c2a363e3e8a8d4c8a7ae8c36fcacba7fdfe71ec9dabcadd567","Type":"data"} -{"ID":"40f5ca234e5eed1dc967c83fa99076ef636619148082f300cf877676728ebf14","Type":"data"} -{"ID":"42aad1ab6cc964043e53e5da13ed0f2b44a3bf6ae7702f60a805f13028377524","Type":"data"} -{"ID":"42bc8f509dbd6b9881cab4c1684d5cf74207046336f654db1b884197f15cae7b","Type":"data"} -{"ID":"47cf470c1c6de9af00b3b1ee963de8b94f51a2870b3338b3f33cfc565c0f8be4","Type":"data"} -{"ID":"587045d0ec69e47a3cc91b13c959aa80add9118ecfac47232ea992650f25f0b9","Type":"data"} -{"ID":"615e8851030f318751f3c8baf8fbfa9958e2dd7f25dc1a87dcf6d6f79d1f1a9f","Type":"data"} -{"ID":"63ec5e835e11203bbeef69095523344dd975f1ab52bdbf4a1db7a53914d967ca","Type":"tree"} -{"ID":"714f9e16404b9ec83de56715e5387b2c4c2ed0af1889166a4e767822f971bf52","Type":"data"} -{"ID":"80ba9a145bf46cae605e911c18165c02213e8d11d68dc5b7824f259d17b7b6d0","Type":"data"} -{"ID":"86af714d79d18be1c9c0ae23cca9dbd7cef44530e253e80af5bd5c34eab09714","Type":"data"} -{"ID":"8a445cf5b6313cbe3b5872a55adde52aa8d1ae188f41d56f176e40a3137ac058","Type":"data"} -{"ID":"8e171f7367d1b68012ed1ceec8f54b7b9b8654ebaf63a760017c34d761b17878","Type":"tree"} -{"ID":"8e98f35e65fb42c85eb4a2ab4793e294148e3f318252cb850a896274d2aa90bc","Type":"data"} -{"ID":"9d65ba6443863394a8c6582fef4a8aaab2fb46417eef41f1792cdbdb38ee0b4c","Type":"data"} -{"ID":"9da502ea8e7a768ee0dbafdc613db3df4a7cd9c98af08328265c4d2e953e8efa","Type":"data"} -{"ID":"9f2899688d2f23391cfd86e7b6d326a54f352bb294160878178639aab4aa378f","Type":"tree"} -{"ID":"a2f3ccf973b3600c06c42dc3b867b263a788c18aa57f4448fea2525b7cbfd784","Type":"data"} -{"ID":"b2deaf9174086129ec3b9f79e05401fdb3baf8b75335addffac1950182d779df","Type":"data"} -{"ID":"b81870ebe27b98f6b8746349e8ea444c96bf2eaac5dbd6236175150ce579f46b","Type":"tree"} -{"ID":"bd4dacd46031b2b837bc9bd06145b0571156fa496408ce728c003ae50b265aaf","Type":"data"} -{"ID":"c0775cfc822f59524b4ed714d257607fd5f2c9f0dc9f65763a86ffc33aac325b","Type":"data"} -{"ID":"c3596f717c495d20c33561e991d4295550b6d7544687f2363e999bdc0266224d","Type":"data"} -{"ID":"c54c4899c4d7dcda8b9e597aebfbaf7d65c9c7a760527d77e7fc9894283d736e","Type":"data"} -{"ID":"ca51ecf1633896f852929cb2d56ad1b5bed4ab6055bdcf370ced4011bed164aa","Type":"data"} -{"ID":"ce8b656cead478c34060510962daf97cea52abde68bbef7934dd5c5513cf6f3b","Type":"data"} -{"ID":"dafbb65569781083b627de833fb931cf98401299a62d747f03d8fc135ab57279","Type":"data"} -{"ID":"e193d395410520580e76a5b89b8d23a1d162c0e28c52cb8194d409a74a120f7d","Type":"data"} -{"ID":"e752efd93f9850ba0cafbbac01bb283c10095ac923cdb8ff027393001123d406","Type":"tree"} -{"ID":"f728e5576d4ab63248c310396d67d9afa3267dd2dea3cfba690dbd04efe181fb","Type":"data"} -{"ID":"f75b6460b68d254f2195b08c606672fb55c05fb7bed7e16699b3231104b673ea","Type":"tree"} -{"ID":"fe19f084021bdac5a9a5d270042ff53ef36357dd0743318d0480dee1a43de266","Type":"data"} +{"ID":"05bddd650a800f83f7c0d844cecb1e02f99ce962df5652a53842be50386078e1","Type":"data"} +{"ID":"087040b12f129e89e4eab2b86aa14467404366a17a6082efb0d11fa7e2f9f58e","Type":"data"} +{"ID":"1e0f0e5799b9d711e07883050366c7eee6b7481c0d884694093149f6c4e9789a","Type":"data"} +{"ID":"229eac8e4e6c2e8d7b1d9f9627ab5d1a59cb17c5744c1e3634215116e7a92e7d","Type":"tree"} +{"ID":"4719f8a039f5b745e16cf90e5b84c9255c290d500da716f7dd25909cdabb85b6","Type":"data"} +{"ID":"4e352975938a29711c3003c498185972235af261a6cf8cf700a8a6ee4f914b05","Type":"data"} +{"ID":"606772eacb7fe1a79267088dcadd13431914854faf1d39d47fe99a26b9fecdcb","Type":"data"} +{"ID":"6b5fd3a9baf615489c82a99a71f9917bf9a2d82d5f640d7f47d175412c4b8d19","Type":"data"} +{"ID":"72b6eb0fd0d87e00392f8b91efc1a4c3f7f5c0c76f861b38aea054bc9d43463b","Type":"data"} +{"ID":"77ab53b52e0cf13b300d1b7f6dac89287c8d86769d85e8a273311006ce6359be","Type":"data"} +{"ID":"99dab094430d3c1be22c801a6ad7364d490a8d2ce3f9dfa3d2677431446925f4","Type":"data"} +{"ID":"9face1b278a49ef8819fbc1855ce573a85077453bbf6683488cad7767c3a38a7","Type":"tree"} +{"ID":"a4c97189465344038584e76c965dd59100eaed051db1fa5ba0e143897e2c87f1","Type":"data"} +{"ID":"a69c8621776ca8bb34c6c90e5ad811ddc8e2e5cfd6bb0cec5e75cca70e0b9ade","Type":"data"} +{"ID":"b11f4dd9d2722b3325186f57cd13a71a3af7791118477f355b49d101104e4c22","Type":"data"} +{"ID":"b1f2ae9d748035e5bd9a87f2579405166d150c6560d8919496f02855e1c36cf9","Type":"data"} +{"ID":"b5ba06039224566a09555abd089de7a693660154991295122fa72b0a3adc4150","Type":"data"} +{"ID":"b7040572b44cbfea8b784ecf8679c3d75cefc1cd3d12ed783ca0d8e5d124a60f","Type":"data"} +{"ID":"b9e634143719742fe77feed78b61f09573d59d2efa23d6d54afe6c159d220503","Type":"data"} +{"ID":"ca896fc9ebf95fcffd7c768b07b92110b21e332a47fef7e382bf15363b0ece1a","Type":"data"} +{"ID":"e6fe3512ea23a4ebf040d30958c669f7ffe724400f155a756467a9f3cafc27c5","Type":"data"} +{"ID":"e96774ac5abfbb59940939f614d65a397fb7b5abba76c29bfe14479c6616eea0","Type":"tree"} +{"ID":"ed00928ce97ac5acd27c862d9097e606536e9063af1c47481257811f66260f3a","Type":"data"} diff --git a/internal/restic/testdata/used_blobs_snapshot1 b/internal/restic/testdata/used_blobs_snapshot1 index 3e6b6f395..a5e8caedf 100644 --- a/internal/restic/testdata/used_blobs_snapshot1 +++ b/internal/restic/testdata/used_blobs_snapshot1 @@ -1,34 +1,15 @@ -{"ID":"011a951a9796979c2b515ef4209662013bd1f16a20a1b35d1d950d7408bdc8b4","Type":"tree"} -{"ID":"087e8d5f45f93a78e52a938ac0b7864f92f8910091c0da69201a156242df3b78","Type":"data"} -{"ID":"0bad18b7f2d82d7c9cf8e405262ad2f3dbe57928aa242c1070b917042a99072d","Type":"data"} -{"ID":"0bf505951741c44714527d252313b6959ce4f19d2e5512fca1c1b2da14424da3","Type":"data"} -{"ID":"0c82d00e6ee78b48559cda2f9cc909beeb8769183b115dfda0a5767832accc8d","Type":"data"} -{"ID":"2941bfd03b8933bb150b085a2252b69675495af64523bf8d38e67429e7cccb45","Type":"data"} -{"ID":"3ffcf5128fc404c2a363e3e8a8d4c8a7ae8c36fcacba7fdfe71ec9dabcadd567","Type":"data"} -{"ID":"40f5ca234e5eed1dc967c83fa99076ef636619148082f300cf877676728ebf14","Type":"data"} -{"ID":"42bc8f509dbd6b9881cab4c1684d5cf74207046336f654db1b884197f15cae7b","Type":"data"} -{"ID":"47cf470c1c6de9af00b3b1ee963de8b94f51a2870b3338b3f33cfc565c0f8be4","Type":"data"} -{"ID":"4b2e91022c34c756b7bd8ece046a2bab6f0dcad89f46c52d1f84cd48e8da55df","Type":"tree"} -{"ID":"6416bc2321cdeb8758188af2b3925f2c82ffde014bf53b7a69c0f113a5c460fe","Type":"data"} -{"ID":"714f9e16404b9ec83de56715e5387b2c4c2ed0af1889166a4e767822f971bf52","Type":"data"} -{"ID":"80ba9a145bf46cae605e911c18165c02213e8d11d68dc5b7824f259d17b7b6d0","Type":"data"} -{"ID":"83bf0196cf45bbca0be7e292688a3622af7888c0e9ec01bb78edaff302cced06","Type":"data"} -{"ID":"8a445cf5b6313cbe3b5872a55adde52aa8d1ae188f41d56f176e40a3137ac058","Type":"data"} -{"ID":"8e98f35e65fb42c85eb4a2ab4793e294148e3f318252cb850a896274d2aa90bc","Type":"data"} -{"ID":"907acef01e05c3e0140858423e9284ddd3d64145ba8b0c3293371c5c7ab3d6b7","Type":"data"} -{"ID":"9d65ba6443863394a8c6582fef4a8aaab2fb46417eef41f1792cdbdb38ee0b4c","Type":"data"} -{"ID":"9da502ea8e7a768ee0dbafdc613db3df4a7cd9c98af08328265c4d2e953e8efa","Type":"data"} -{"ID":"a2f3ccf973b3600c06c42dc3b867b263a788c18aa57f4448fea2525b7cbfd784","Type":"data"} -{"ID":"b2deaf9174086129ec3b9f79e05401fdb3baf8b75335addffac1950182d779df","Type":"data"} -{"ID":"b3915971171e049292e28d7bc61fe362e94f73aa49b578f4ca1322b47d7fc39c","Type":"data"} -{"ID":"bd4dacd46031b2b837bc9bd06145b0571156fa496408ce728c003ae50b265aaf","Type":"data"} -{"ID":"c3596f717c495d20c33561e991d4295550b6d7544687f2363e999bdc0266224d","Type":"data"} -{"ID":"c54c4899c4d7dcda8b9e597aebfbaf7d65c9c7a760527d77e7fc9894283d736e","Type":"data"} -{"ID":"ca51ecf1633896f852929cb2d56ad1b5bed4ab6055bdcf370ced4011bed164aa","Type":"data"} -{"ID":"cb8001715217b4f6960aa24c1abb4b60a20c10f23abc1e5f69e0f5436bd788c8","Type":"data"} -{"ID":"d39c4c264e01ec47b0386da3775c6b0cc337974627ff55792938cca4895ac6c4","Type":"data"} -{"ID":"dafbb65569781083b627de833fb931cf98401299a62d747f03d8fc135ab57279","Type":"data"} -{"ID":"e193d395410520580e76a5b89b8d23a1d162c0e28c52cb8194d409a74a120f7d","Type":"data"} -{"ID":"e791912a7fad8954c764fae41d2958d2feeae2278e403429add9119ab43a36f5","Type":"tree"} -{"ID":"f728e5576d4ab63248c310396d67d9afa3267dd2dea3cfba690dbd04efe181fb","Type":"data"} -{"ID":"fe19f084021bdac5a9a5d270042ff53ef36357dd0743318d0480dee1a43de266","Type":"data"} +{"ID":"04ff190aea26dae65ba4c782926cdfb700b484a8b802a5ffd58e3fadcf70b797","Type":"tree"} +{"ID":"05bddd650a800f83f7c0d844cecb1e02f99ce962df5652a53842be50386078e1","Type":"data"} +{"ID":"18dcaa1a676823c909aafabbb909652591915eebdde4f9a65cee955157583494","Type":"data"} +{"ID":"4719f8a039f5b745e16cf90e5b84c9255c290d500da716f7dd25909cdabb85b6","Type":"data"} +{"ID":"6824d08e63a598c02b364e25f195e64758494b5944f06c921ff30029e1e4e4bf","Type":"data"} +{"ID":"72b6eb0fd0d87e00392f8b91efc1a4c3f7f5c0c76f861b38aea054bc9d43463b","Type":"data"} +{"ID":"8192279e4b56e1644dcff715d5e08d875cd5713349139d36d142ed28364d8e00","Type":"data"} +{"ID":"a69c8621776ca8bb34c6c90e5ad811ddc8e2e5cfd6bb0cec5e75cca70e0b9ade","Type":"data"} +{"ID":"b1f2ae9d748035e5bd9a87f2579405166d150c6560d8919496f02855e1c36cf9","Type":"data"} +{"ID":"b9e634143719742fe77feed78b61f09573d59d2efa23d6d54afe6c159d220503","Type":"data"} +{"ID":"bdd5a029dd295e5998c518022547d185794e72d8f8c38709a638c5841284daef","Type":"tree"} +{"ID":"ca896fc9ebf95fcffd7c768b07b92110b21e332a47fef7e382bf15363b0ece1a","Type":"data"} +{"ID":"cc4cab5b20a3a88995f8cdb8b0698d67a32dbc5b54487f03cb612c30a626af39","Type":"data"} +{"ID":"e6fe3512ea23a4ebf040d30958c669f7ffe724400f155a756467a9f3cafc27c5","Type":"data"} +{"ID":"ed00928ce97ac5acd27c862d9097e606536e9063af1c47481257811f66260f3a","Type":"data"} diff --git a/internal/restic/testdata/used_blobs_snapshot2 b/internal/restic/testdata/used_blobs_snapshot2 index b57f4a417..f6404737e 100644 --- a/internal/restic/testdata/used_blobs_snapshot2 +++ b/internal/restic/testdata/used_blobs_snapshot2 @@ -1,9 +1,24 @@ -{"ID":"35e13e123748cd27d1634c4e07e5ff2fc86901b09b215f3125331d1226c782be","Type":"tree"} -{"ID":"378a9b6862c8fa5c6915f158d16e4416243159bb9da44c564896c065bc6c1cf4","Type":"data"} -{"ID":"42aad1ab6cc964043e53e5da13ed0f2b44a3bf6ae7702f60a805f13028377524","Type":"data"} -{"ID":"47cf470c1c6de9af00b3b1ee963de8b94f51a2870b3338b3f33cfc565c0f8be4","Type":"data"} -{"ID":"615e8851030f318751f3c8baf8fbfa9958e2dd7f25dc1a87dcf6d6f79d1f1a9f","Type":"data"} -{"ID":"83bf0196cf45bbca0be7e292688a3622af7888c0e9ec01bb78edaff302cced06","Type":"data"} -{"ID":"9d65ba6443863394a8c6582fef4a8aaab2fb46417eef41f1792cdbdb38ee0b4c","Type":"data"} -{"ID":"b3915971171e049292e28d7bc61fe362e94f73aa49b578f4ca1322b47d7fc39c","Type":"data"} -{"ID":"c0775cfc822f59524b4ed714d257607fd5f2c9f0dc9f65763a86ffc33aac325b","Type":"data"} +{"ID":"05bddd650a800f83f7c0d844cecb1e02f99ce962df5652a53842be50386078e1","Type":"data"} +{"ID":"087040b12f129e89e4eab2b86aa14467404366a17a6082efb0d11fa7e2f9f58e","Type":"data"} +{"ID":"0b88f99abc5ac71c54b3e8263c52ecb7d8903462779afdb3c8176ec5c4bb04fb","Type":"data"} +{"ID":"1e0f0e5799b9d711e07883050366c7eee6b7481c0d884694093149f6c4e9789a","Type":"data"} +{"ID":"27917462f89cecae77a4c8fb65a094b9b75a917f13794c628b1640b17f4c4981","Type":"data"} +{"ID":"32745e4b26a5883ecec272c9fbfe7f3c9835c9ab41c9a2baa4d06f319697a0bd","Type":"data"} +{"ID":"4719f8a039f5b745e16cf90e5b84c9255c290d500da716f7dd25909cdabb85b6","Type":"data"} +{"ID":"4e352975938a29711c3003c498185972235af261a6cf8cf700a8a6ee4f914b05","Type":"data"} +{"ID":"6824d08e63a598c02b364e25f195e64758494b5944f06c921ff30029e1e4e4bf","Type":"data"} +{"ID":"6b5fd3a9baf615489c82a99a71f9917bf9a2d82d5f640d7f47d175412c4b8d19","Type":"data"} +{"ID":"95c97192efa810ccb1cee112238dca28673fbffce205d75ce8cc990a31005a51","Type":"data"} +{"ID":"99dab094430d3c1be22c801a6ad7364d490a8d2ce3f9dfa3d2677431446925f4","Type":"data"} +{"ID":"9face1b278a49ef8819fbc1855ce573a85077453bbf6683488cad7767c3a38a7","Type":"tree"} +{"ID":"a4c97189465344038584e76c965dd59100eaed051db1fa5ba0e143897e2c87f1","Type":"data"} +{"ID":"a5f2ffcd54e28e2ef3089c35b72aafda66161125e23dad581087ccd050c111c3","Type":"tree"} +{"ID":"a69c8621776ca8bb34c6c90e5ad811ddc8e2e5cfd6bb0cec5e75cca70e0b9ade","Type":"data"} +{"ID":"ab5205525de94e564e3a00f634fcf9ebc397debd567734c68da7b406e612aae4","Type":"tree"} +{"ID":"b6a7e8d2aa717e0a6bd68abab512c6b566074b5a6ca2edf4cd446edc5857d732","Type":"data"} +{"ID":"be2055b7125ccf824fcfa8faa4eb3985119012bac26643944eee46218e71306e","Type":"tree"} +{"ID":"bfc2fdb527b0c9f66bbb8d4ff1c44023cc2414efcc7f0831c10debab06bb4388","Type":"tree"} +{"ID":"ca896fc9ebf95fcffd7c768b07b92110b21e332a47fef7e382bf15363b0ece1a","Type":"data"} +{"ID":"e6fe3512ea23a4ebf040d30958c669f7ffe724400f155a756467a9f3cafc27c5","Type":"data"} +{"ID":"ed00928ce97ac5acd27c862d9097e606536e9063af1c47481257811f66260f3a","Type":"data"} +{"ID":"f3cd67d9c14d2a81663d63522ab914e465b021a3b65e2f1ea6caf7478f2ec139","Type":"data"} diff --git a/internal/restic/testing.go b/internal/restic/testing.go index ad7604a6c..c0d1684f8 100644 --- a/internal/restic/testing.go +++ b/internal/restic/testing.go @@ -69,9 +69,9 @@ func (fs *fakeFileSystem) saveFile(ctx context.Context, rd io.Reader) (blobs IDs } const ( - maxFileSize = 1500000 + maxFileSize = 20000 maxSeed = 32 - maxNodes = 32 + maxNodes = 15 ) func (fs *fakeFileSystem) treeIsKnown(tree *Tree) (bool, []byte, ID) {