diff --git a/chunker/writer.go b/chunker/writer.go index e1e5ca6..31b278b 100644 --- a/chunker/writer.go +++ b/chunker/writer.go @@ -51,9 +51,14 @@ func (w *Writer) Write(p []byte) (int, error) { } func (w *Writer) Cleanup() error { - if err := os.Remove(w.tmp.Name()); err != nil { + closeErr := w.tmp.Close() + removeErr := os.Remove(w.tmp.Name()) + if closeErr != nil { + return fmt.Errorf("failed to close temporary file %s with error: %s", w.tmp.Name(), closeErr) + } + if removeErr != nil { return fmt.Errorf("failed to remove temporary file %s with error: %s", - w.tmp.Name(), err) + w.tmp.Name(), removeErr) } return nil } diff --git a/chunker/writer_test.go b/chunker/writer_test.go index 35bfca7..8f3688c 100644 --- a/chunker/writer_test.go +++ b/chunker/writer_test.go @@ -88,6 +88,13 @@ func TestWrite(t *testing.T) { if uint64(len(tc.want)) != w.Size() { t.Errorf("Write(%q) = %d, want: %d", string(tc.inChunks), w.Size(), len(tc.want)) } + + if err := w.Cleanup(); err != nil { + t.Errorf("Cleanup() returned an unexpected error: %v", err) + } + if _, err := os.Stat(w.File().Name()); !os.IsNotExist(err) { + t.Errorf("Cleanup() did not remove the temporary file: %s", w.File().Name()) + } }) } }