github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/lib/circbufwriter/writer_test.go (about) 1 package circbufwriter 2 3 import ( 4 "bytes" 5 "fmt" 6 "io/ioutil" 7 "testing" 8 9 "github.com/hashicorp/nomad/testutil" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestWriter_NonBlockingWrite(t *testing.T) { 14 require := require.New(t) 15 var buf bytes.Buffer 16 w := New(&buf, 64) 17 n, err := w.Write([]byte("test")) 18 require.Equal(4, n) 19 require.NoError(err) 20 21 n, err = w.Write([]byte("test")) 22 require.Equal(4, n) 23 require.NoError(err) 24 25 testutil.WaitForResult(func() (bool, error) { 26 return "testtest" == buf.String(), fmt.Errorf("expected both writes") 27 }, func(err error) { 28 require.NoError(err) 29 }) 30 } 31 32 type blockingWriter struct { 33 buf bytes.Buffer 34 unblock <-chan struct{} 35 } 36 37 func (b *blockingWriter) Write(p []byte) (nn int, err error) { 38 <-b.unblock 39 return b.buf.Write(p) 40 } 41 42 func TestWriter_BlockingWrite(t *testing.T) { 43 require := require.New(t) 44 blockCh := make(chan struct{}) 45 bw := &blockingWriter{unblock: blockCh} 46 w := New(bw, 64) 47 48 n, err := w.Write([]byte("test")) 49 require.Equal(4, n) 50 require.NoError(err) 51 require.Empty(bw.buf.Bytes()) 52 53 n, err = w.Write([]byte("test")) 54 require.Equal(4, n) 55 require.NoError(err) 56 require.Empty(bw.buf.Bytes()) 57 close(blockCh) 58 59 testutil.WaitForResult(func() (bool, error) { 60 return "testtest" == bw.buf.String(), fmt.Errorf("expected both writes") 61 }, func(err error) { 62 require.NoError(err) 63 }) 64 } 65 66 func TestWriter_CloseClose(t *testing.T) { 67 require := require.New(t) 68 w := New(ioutil.Discard, 64) 69 require.NoError(w.Close()) 70 require.NoError(w.Close()) 71 }