From 4c90d91d4d680732a61003d7481e60c03e0422d1 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 26 Aug 2022 21:20:52 +0200 Subject: [PATCH] backend: Test that failed uploads are not removed for backends with atomic replace --- internal/backend/backend_retry_test.go | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/internal/backend/backend_retry_test.go b/internal/backend/backend_retry_test.go index e8f4d7315..cd58b9d77 100644 --- a/internal/backend/backend_retry_test.go +++ b/internal/backend/backend_retry_test.go @@ -50,6 +50,36 @@ func TestBackendSaveRetry(t *testing.T) { } } +func TestBackendSaveRetryAtomic(t *testing.T) { + errcount := 0 + calledRemove := false + be := &mock.Backend{ + SaveFn: func(ctx context.Context, h restic.Handle, rd restic.RewindReader) error { + if errcount == 0 { + errcount++ + return errors.New("injected error") + } + return nil + }, + RemoveFn: func(ctx context.Context, h restic.Handle) error { + calledRemove = true + return nil + }, + HasAtomicReplaceFn: func() bool { return true }, + } + + retryBackend := NewRetryBackend(be, 10, nil) + + data := test.Random(23, 5*1024*1024+11241) + err := retryBackend.Save(context.TODO(), restic.Handle{}, restic.NewByteReader(data, be.Hasher())) + if err != nil { + t.Fatal(err) + } + if calledRemove { + t.Fatal("remove must not be called") + } +} + func TestBackendListRetry(t *testing.T) { const ( ID1 = "id1"