Fail on failures to close the file descriptors, and especially the SparseWriter

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
Miloslav Trmač 2024-03-07 14:29:44 +01:00
parent 5e0b7e54c0
commit 7bfe5e700f
2 changed files with 11 additions and 4 deletions

View File

@ -71,7 +71,7 @@ func newDecompressor(compressedFilePath string, compressedFileContent []byte) (d
}
}
func runDecompression(d decompressor, decompressedFilePath string) error {
func runDecompression(d decompressor, decompressedFilePath string) (retErr error) {
compressedFileReader, err := d.compressedFileReader()
if err != nil {
return err
@ -100,6 +100,9 @@ func runDecompression(d decompressor, decompressedFilePath string) error {
defer func() {
if err := decompressedFileWriter.Close(); err != nil {
logrus.Warnf("Unable to to close destination file %s: %q", decompressedFilePath, err)
if retErr == nil {
retErr = err
}
}
}()

View File

@ -120,7 +120,7 @@ func setup() (string, *machineTestBuilder) {
}
defer func() {
if err := dest.Close(); err != nil {
fmt.Printf("failed to close destination file %q: %q\n", dest.Name(), err)
Fail(fmt.Sprintf("failed to close destination file %q: %q\n", dest.Name(), err))
}
}()
fmt.Printf("--> copying %q to %q\n", src.Name(), dest.Name())
@ -159,9 +159,13 @@ func teardown(origHomeDir string, testDir string, mb *machineTestBuilder) {
}
// copySparse is a helper method for tests only; caller is responsible for closures
func copySparse(dst io.WriteSeeker, src io.Reader) error {
func copySparse(dst io.WriteSeeker, src io.Reader) (retErr error) {
spWriter := compression.NewSparseWriter(dst)
defer spWriter.Close()
defer func() {
if err := spWriter.Close(); err != nil && retErr == nil {
retErr = err
}
}()
_, err := io.Copy(spWriter, src)
return err
}