github.com/grafana/pyroscope@v1.18.0/pkg/util/logger_test.go (about) 1 package util 2 3 import ( 4 "bytes" 5 "fmt" 6 "sync" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestAsyncWriter_Write(t *testing.T) { 15 var buf bytes.Buffer 16 w := NewAsyncWriter(&buf, 10, 2, 2, 100*time.Millisecond) 17 n, err := w.Write([]byte("hello")) 18 require.NoError(t, err) 19 assert.Equal(t, 5, n) 20 assert.NoError(t, w.Close()) 21 assert.Equal(t, "hello", buf.String()) 22 } 23 24 func TestAsyncWriter_Empty(t *testing.T) { 25 var buf bytes.Buffer 26 w := NewAsyncWriter(&buf, 10, 2, 2, 100*time.Millisecond) 27 assert.NoError(t, w.Close()) 28 assert.EqualValues(t, 0, buf.Len()) 29 } 30 31 func TestAsyncWriter_Overflow(t *testing.T) { 32 var buf bytes.Buffer 33 w := NewAsyncWriter(&buf, 10, 2, 2, 100*time.Millisecond) 34 _, _ = w.Write([]byte("hello")) 35 _, _ = w.Write([]byte("world")) 36 assert.NoError(t, w.Close()) 37 assert.Equal(t, "helloworld", buf.String()) 38 } 39 40 func TestAsyncWriter_Close(t *testing.T) { 41 var buf bytes.Buffer 42 w := NewAsyncWriter(&buf, 10, 2, 2, 100*time.Millisecond) 43 _, _ = w.Write([]byte("hello")) 44 assert.NoError(t, w.Close()) 45 assert.Equal(t, "hello", buf.String()) 46 assert.NoError(t, w.Close()) 47 } 48 49 func TestAsyncWriter_ConcurrentWrites(t *testing.T) { 50 var buf bytes.Buffer 51 w := NewAsyncWriter(&buf, 50, 2, 10, 100*time.Millisecond) 52 var wg sync.WaitGroup 53 for i := 0; i < 10; i++ { 54 wg.Add(1) 55 go func(i int) { 56 defer wg.Done() 57 _, _ = fmt.Fprintf(w, "hello %d\n", i) 58 }(i) 59 } 60 wg.Wait() 61 62 assert.NoError(t, w.Close()) 63 assert.Equal(t, 80, buf.Len()) 64 }