diff --git a/op-preimage/filechan.go b/op-preimage/filechan.go index 3d844c58b6b..efb0fba139f 100644 --- a/op-preimage/filechan.go +++ b/op-preimage/filechan.go @@ -46,10 +46,10 @@ func (rw *ReadWritePair) Writer() *os.File { func (rw *ReadWritePair) Close() error { var combinedErr error if err := rw.r.Close(); err != nil { - combinedErr = errors.Join(fmt.Errorf("failed to close reader: %w", err)) + combinedErr = errors.Join(combinedErr, fmt.Errorf("failed to close reader: %w", err)) } if err := rw.w.Close(); err != nil { - combinedErr = errors.Join(fmt.Errorf("failed to close writer: %w", err)) + combinedErr = errors.Join(combinedErr, fmt.Errorf("failed to close writer: %w", err)) } return combinedErr } diff --git a/op-preimage/filechan_test.go b/op-preimage/filechan_test.go new file mode 100644 index 00000000000..eab32f929ef --- /dev/null +++ b/op-preimage/filechan_test.go @@ -0,0 +1,25 @@ +package preimage + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReadWritePairCloseJoinsReaderAndWriterErrors(t *testing.T) { + reader, err := os.CreateTemp(t.TempDir(), "reader") + require.NoError(t, err) + writer, err := os.CreateTemp(t.TempDir(), "writer") + require.NoError(t, err) + + require.NoError(t, reader.Close()) + require.NoError(t, writer.Close()) + + err = NewReadWritePair(reader, writer).Close() + require.Error(t, err) + + errMsg := err.Error() + require.Contains(t, errMsg, "failed to close reader") + require.Contains(t, errMsg, "failed to close writer") +}