forked from quic-go/quic-go
make the buffered qlog writer used in interop flush before closing
This commit is contained in:
26
internal/utils/buffered_write_closer.go
Normal file
26
internal/utils/buffered_write_closer.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
)
|
||||
|
||||
type bufferedWriteCloser struct {
|
||||
*bufio.Writer
|
||||
io.Closer
|
||||
}
|
||||
|
||||
// NewBufferedWriteCloser creates an io.WriteCloser from a bufio.Writer and an io.Closer
|
||||
func NewBufferedWriteCloser(writer *bufio.Writer, closer io.Closer) io.WriteCloser {
|
||||
return &bufferedWriteCloser{
|
||||
Writer: writer,
|
||||
Closer: closer,
|
||||
}
|
||||
}
|
||||
|
||||
func (h bufferedWriteCloser) Close() error {
|
||||
if err := h.Writer.Flush(); err != nil {
|
||||
return err
|
||||
}
|
||||
return h.Closer.Close()
|
||||
}
|
||||
26
internal/utils/buffered_write_closer_test.go
Normal file
26
internal/utils/buffered_write_closer_test.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
type nopCloser struct{}
|
||||
|
||||
func (nopCloser) Close() error { return nil }
|
||||
|
||||
var _ = Describe("buffered io.WriteCloser", func() {
|
||||
It("flushes before closing", func() {
|
||||
buf := &bytes.Buffer{}
|
||||
|
||||
w := bufio.NewWriter(buf)
|
||||
wc := NewBufferedWriteCloser(w, &nopCloser{})
|
||||
wc.Write([]byte("foobar"))
|
||||
Expect(buf.Len()).To(BeZero())
|
||||
Expect(wc.Close()).To(Succeed())
|
||||
Expect(buf.String()).To(Equal("foobar"))
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user