Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
loki/pkg/ingester/chunk_test.go

69 lines
1.7 KiB

package ingester
import (
"fmt"
"math/rand"
"testing"
"time"
"github.com/grafana/logish/pkg/logproto"
"github.com/grafana/logish/pkg/querier"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func testIteratorForward(t *testing.T, iter querier.EntryIterator, from, through int64) {
i := from
for iter.Next() {
entry := iter.Entry()
assert.Equal(t, time.Unix(i, 0), entry.Timestamp)
assert.Equal(t, fmt.Sprintf("line %d", i), entry.Line)
i++
}
assert.Equal(t, through, i)
assert.NoError(t, iter.Error())
}
func testIteratorBackward(t *testing.T, iter querier.EntryIterator, from, through int64) {
i := through - 1
for iter.Next() {
entry := iter.Entry()
assert.Equal(t, time.Unix(i, 0), entry.Timestamp)
assert.Equal(t, fmt.Sprintf("line %d", i), entry.Line)
i--
}
assert.Equal(t, from-1, i)
assert.NoError(t, iter.Error())
}
func TestIterator(t *testing.T) {
chunk := newChunk()
const entries = 100
for i := int64(0); i < entries; i++ {
err := chunk.Push(&logproto.Entry{
Timestamp: time.Unix(i, 0),
Line: fmt.Sprintf("line %d", i),
})
require.NoError(t, err)
}
for i := 0; i < entries; i++ {
from := rand.Intn(entries - 1)
len := rand.Intn(entries-from) + 1
iter := chunk.Iterator(time.Unix(int64(from), 0), time.Unix(int64(from+len), 0), logproto.FORWARD)
require.NotNil(t, iter)
testIteratorForward(t, iter, int64(from), int64(from+len))
iter.Close()
}
for i := 0; i < entries; i++ {
from := rand.Intn(entries - 1)
len := rand.Intn(entries-from) + 1
iter := chunk.Iterator(time.Unix(int64(from), 0), time.Unix(int64(from+len), 0), logproto.BACKWARD)
require.NotNil(t, iter)
testIteratorBackward(t, iter, int64(from), int64(from+len))
iter.Close()
}
}