Skip to content

Commit d538bde

Browse files
committed
Close ByteStreamProducer data implementing ReadCloser
This commit closes the data when passed into ByteStreamProducer as a ReadCloser. Example is when go-swagger generates a server handler that produces "application/octet-stream", the data will be a ReadCloser. Ref: - #46 - go-swagger/go-swagger#1311 Signed-off-by: Yongming Lai <yongming.lai@gmail.com>
1 parent f4da4bf commit d538bde

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

bytestream.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ func ByteStreamProducer(opts ...byteStreamOpt) Producer {
109109
}
110110
defer close()
111111

112+
if rc, ok := data.(io.ReadCloser); ok {
113+
defer rc.Close()
114+
}
115+
112116
if rdr, ok := data.(io.Reader); ok {
113117
_, err := io.Copy(writer, rdr)
114118
return err

bytestream_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,4 +217,14 @@ func TestBytestreamProducer_Close(t *testing.T) {
217217
assert.Equal(t, expected, r.String())
218218
assert.EqualValues(t, 0, r.calledClose)
219219
}
220+
221+
cons = ByteStreamProducer()
222+
r = &closingWriter{}
223+
data := &closingReader{b: bytes.NewBufferString(expected)}
224+
// can produce using a readcloser
225+
if assert.NoError(t, cons.Produce(r, data)) {
226+
assert.Equal(t, expected, r.String())
227+
assert.EqualValues(t, 0, r.calledClose)
228+
assert.EqualValues(t, 1, data.calledClose)
229+
}
220230
}

0 commit comments

Comments
 (0)