package ioutils import ( "bytes" "github.com/stretchr/testify/suite" "testing" "time" ) type RetryWriterTestSuite struct { suite.Suite } func (s *RetryWriterTestSuite) SetupSuite() { } func (s *RetryWriterTestSuite) TearDownSuite() { } func (s *RetryWriterTestSuite) SetupTest() { } func (s *RetryWriterTestSuite) TearDownTest() { } func TestRetryWriterTestSuit(t *testing.T) { suite.Run(t, &RetryWriterTestSuite{}) } func (s *RetryWriterTestSuite) Test_WriteInOneGo() { buf := &bytes.Buffer{} retrier := &RetryWriter{Writer: buf} bytesWritten := []byte("hello this is a test string") t0 := time.Now() retrier.Write(bytesWritten) bytesRead := buf.Bytes() s.Equal(bytesWritten, bytesRead) // no delays introduced if data is writteni none go. s.True(time.Now().Sub(t0) < 5*time.Millisecond) } type ShortWriteBuffer struct { bytes.Buffer } func (buf *ShortWriteBuffer) Write(b []byte) (int, error) { if len(b) == 0 { return buf.Buffer.Write(b) } return buf.Buffer.Write(b[:1]) } func (buf *ShortWriteBuffer) Bytes() []byte { return buf.Buffer.Bytes() } func (s *RetryWriterTestSuite) Test_WriteInParts() { buf := &ShortWriteBuffer{} retrier := &RetryWriter{Writer: buf} bytesWritten := []byte("hello this is a test string") t0 := time.Now() retrier.Write(bytesWritten) bytesRead := buf.Bytes() s.Equal(bytesWritten, bytesRead) // no delays introduced if data is writteni none go. s.True(time.Now().Sub(t0) > 5*time.Millisecond) }