zrepl/internal/util/limitio/limitio_readcloser_test.go
2024-10-18 19:21:17 +02:00

45 lines
825 B
Go

package limitio
import (
"bytes"
"io"
"testing"
"github.com/stretchr/testify/assert"
)
type mockRC struct {
r io.Reader
closed bool
}
func newMockRC(r io.Reader) *mockRC { return &mockRC{r, false} }
func (m mockRC) Read(b []byte) (int, error) {
if m.closed {
return 0, io.ErrClosedPipe
}
return m.r.Read(b)
}
func (m *mockRC) Close() error {
m.closed = true
return nil
}
func TestReadCloser(t *testing.T) {
foobarReader := bytes.NewReader([]byte("foobar2342"))
mock := newMockRC(foobarReader)
limited := ReadCloser(mock, 6)
var buf [20]byte
n, err := limited.Read(buf[:])
assert.NoError(t, err)
assert.Equal(t, 6, n)
assert.Equal(t, buf[:n], []byte("foobar"))
n, err = limited.Read(buf[:])
assert.Equal(t, 0, n)
assert.Equal(t, io.EOF, err)
limited.Close()
assert.True(t, mock.closed)
}