Skip to content

Commit

Permalink
Flush data from buffer on closing (#33)
Browse files Browse the repository at this point in the history
Now there is a bug with the buffered transport and if there are some bytes in the buffer before closing the transport they will be silently ignored. It does not create any problem with communication with a Flume server because there is no closing procedure and we can just loose only some unnecessary data of zlib transport. That's all.
  • Loading branch information
vykulakov committed Jan 3, 2020
1 parent 256b460 commit f4deb58
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
6 changes: 5 additions & 1 deletion transports/buffered.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ func NewBuffered(trans Transport, bufferSize int) Transport {
}
}

func (p *bufferedTransport) Close() (err error) {
func (p *bufferedTransport) Close() error {
err := p.w.Flush()
if err != nil {
return err
}
return p.trans.Close()
}

Expand Down
17 changes: 16 additions & 1 deletion transports/buffered_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func prepareBufferedTransport() (transports.Transport, *mocks.MockTransport) {
}

func TestBufferedTransport_Close(t *testing.T) {
t.Run("succeed", func(t *testing.T) {
t.Run("empty", func(t *testing.T) {
b, m := prepareBufferedTransport()

m.On("Close").Return(nil).Once()
Expand All @@ -39,6 +39,21 @@ func TestBufferedTransport_Close(t *testing.T) {
require.EqualError(t, err, "test error")
m.AssertExpectations(t)
})

t.Run("flush data in a buffer", func(t *testing.T) {
d := []byte{0x00, 0x00}
b, m := prepareBufferedTransport()

m.On("Write", d).Return(len(d), nil).Once()
m.On("Close").Return(nil).Once()

_, err := b.Write(d)
require.NoError(t, err)
err = b.Close()
require.NoError(t, err)

m.AssertExpectations(t)
})
}

func TestBufferedTransport_Read(t *testing.T) {
Expand Down

0 comments on commit f4deb58

Please sign in to comment.