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  }