fleet/orbit/pkg/table/santa/ringbuffer_test.go
2025-10-08 08:58:08 -06:00

65 lines
1.3 KiB
Go

//go:build darwin
package santa
import (
"testing"
"github.com/stretchr/testify/require"
)
func mk(n int) logEntry {
return logEntry{Timestamp: string(rune('A' + n))}
}
func tsSlice(entries []logEntry) []string {
out := make([]string, len(entries))
for i := range entries {
out[i] = entries[i].Timestamp
}
return out
}
func TestRingBuffer_Len(t *testing.T) {
rb := newRingBuffer(3)
require.Equal(t, 0, rb.Len())
rb.Add(mk(0))
require.Equal(t, 1, rb.Len())
rb.Add(mk(1))
require.Equal(t, 2, rb.Len())
rb.Add(mk(2))
require.Equal(t, 3, rb.Len())
rb.Add(mk(3))
require.Equal(t, 3, rb.Len())
rb.Add(mk(4))
require.Equal(t, 3, rb.Len())
}
func TestRingBuffer_NoWrap(t *testing.T) {
rb := newRingBuffer(3)
rb.Add(mk(0)) // A
rb.Add(mk(1)) // B
require.Equal(t, []string{"A", "B"}, tsSlice(rb.SliceChrono()))
}
func TestRingBuffer_Wrap(t *testing.T) {
rb := newRingBuffer(3)
// Add 6: A B C D E F → keep last 3: D E F
for i := range 6 {
rb.Add(mk(i))
}
require.Equal(t, []string{"D", "E", "F"}, tsSlice(rb.SliceChrono()))
}
func TestRingBuffer_ExactCapacity(t *testing.T) {
rb := newRingBuffer(2)
rb.Add(mk(0)) // A
rb.Add(mk(1)) // B
require.Equal(t, []string{"A", "B"}, tsSlice(rb.SliceChrono()))
}
func TestRingBuffer_Empty(t *testing.T) {
rb := newRingBuffer(2)
require.Empty(t, rb.SliceChrono())
}