github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/logging/ring_buffer_test.go (about)

     1  package logging
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestRingBuffer(t *testing.T) {
    10  	buf := newRingBuffer(10)
    11  	assert.Equal(t, buf.size, 10)
    12  
    13  	contents := buf.Read()
    14  	assert.Equal(t, "", contents)
    15  
    16  	wrote, err := buf.Write([]byte("hello"))
    17  	assert.NoError(t, err)
    18  	assert.Equal(t, 5, wrote)
    19  	assert.False(t, buf.full)
    20  	contents = buf.Read()
    21  	assert.NoError(t, err)
    22  	assert.Equal(t, "hello", contents)
    23  
    24  	wrote, err = buf.Write([]byte("world"))
    25  	assert.NoError(t, err)
    26  	assert.Equal(t, 5, wrote)
    27  	assert.True(t, buf.full)
    28  	contents = buf.Read()
    29  	assert.NoError(t, err)
    30  	assert.Equal(t, "helloworld", contents)
    31  
    32  	wrote, err = buf.Write([]byte("!")) // will wrap
    33  	assert.NoError(t, err)
    34  	assert.Equal(t, 1, wrote)
    35  	contents = buf.Read()
    36  	assert.NoError(t, err)
    37  	assert.Equal(t, "elloworld!", contents)
    38  
    39  	msg := "this is longer than buf.size"
    40  	wrote, err = buf.Write([]byte(msg))
    41  	assert.NoError(t, err)
    42  	assert.Equal(t, len(msg), wrote)
    43  	contents = buf.Read()
    44  	assert.NoError(t, err)
    45  	assert.Equal(t, msg[len(msg)-10:], contents)
    46  }