diff --git a/internal/restorer/fileswriter.go b/internal/restorer/fileswriter.go index 206ddf2d5..98fb810fb 100644 --- a/internal/restorer/fileswriter.go +++ b/internal/restorer/fileswriter.go @@ -66,4 +66,5 @@ func (w *filesWriter) close(file *fileInfo) { w.lock.Lock() defer w.lock.Unlock() w.writers.Remove(file) + delete(w.inprogress, file) } diff --git a/internal/restorer/fileswriter_test.go b/internal/restorer/fileswriter_test.go new file mode 100644 index 000000000..fd8fa9c92 --- /dev/null +++ b/internal/restorer/fileswriter_test.go @@ -0,0 +1,44 @@ +package restorer + +import ( + "io/ioutil" + "testing" + + rtest "github.com/restic/restic/internal/test" +) + +func TestFilesWriterBasic(t *testing.T) { + dir, cleanup := rtest.TempDir(t) + defer cleanup() + + w := newFilesWriter(1) + + f1 := &fileInfo{path: dir + "/f1"} + f2 := &fileInfo{path: dir + "/f2"} + + rtest.OK(t, w.writeToFile(f1, []byte{1})) + rtest.Equals(t, 1, w.writers.Len()) + rtest.Equals(t, 1, len(w.inprogress)) + + rtest.OK(t, w.writeToFile(f2, []byte{2})) + rtest.Equals(t, 1, w.writers.Len()) + rtest.Equals(t, 2, len(w.inprogress)) + + rtest.OK(t, w.writeToFile(f1, []byte{1})) + w.close(f1) + rtest.Equals(t, 0, w.writers.Len()) + rtest.Equals(t, 1, len(w.inprogress)) + + rtest.OK(t, w.writeToFile(f2, []byte{2})) + w.close(f2) + rtest.Equals(t, 0, w.writers.Len()) + rtest.Equals(t, 0, len(w.inprogress)) + + buf, err := ioutil.ReadFile(f1.path) + rtest.OK(t, err) + rtest.Equals(t, []byte{1, 1}, buf) + + buf, err = ioutil.ReadFile(f2.path) + rtest.OK(t, err) + rtest.Equals(t, []byte{2, 2}, buf) +}