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/kafka/partition/committer_test.go

77 lines
2.5 KiB

package partition
import (
"context"
"testing"
"time"
"github.com/go-kit/log"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/twmb/franz-go/pkg/kadm"
"github.com/twmb/franz-go/plugin/kprom"
"github.com/prometheus/client_golang/prometheus/testutil"
"github.com/grafana/loki/v3/pkg/kafka/client"
"github.com/grafana/loki/v3/pkg/kafka/testkafka"
)
func TestPartitionCommitter(t *testing.T) {
// Create a test Kafka cluster
numPartitions := int32(3)
topicName := "test-topic"
_, kafkaCfg := testkafka.CreateCluster(t, numPartitions, topicName)
client, err := client.NewReaderClient(kafkaCfg, kprom.NewMetrics("foo"), log.NewNopLogger())
require.NoError(t, err)
// Create a Kafka admin client
admClient := kadm.NewClient(client)
defer admClient.Close()
// Create a partition committer
logger := log.NewNopLogger()
reg := prometheus.NewRegistry()
partitionID := int32(1)
consumerGroup := "test-consumer-group"
committer := newCommitter(kafkaCfg, admClient, partitionID, consumerGroup, logger, reg)
// Test committing an offset
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
testOffset := int64(100)
err = committer.Commit(ctx, testOffset)
require.NoError(t, err)
// Verify metrics
assert.Equal(t, float64(1), testutil.ToFloat64(committer.commitRequestsTotal))
assert.Equal(t, float64(0), testutil.ToFloat64(committer.commitFailuresTotal))
assert.Equal(t, float64(testOffset), testutil.ToFloat64(committer.lastCommittedOffset))
// Verify committed offset
offsets, err := admClient.FetchOffsets(context.Background(), consumerGroup)
require.NoError(t, err)
committedOffset, ok := offsets.Lookup(topicName, partitionID)
require.True(t, ok)
assert.Equal(t, testOffset, committedOffset.At)
// Test committing a new offset
newTestOffset := int64(200)
err = committer.Commit(ctx, newTestOffset)
require.NoError(t, err)
// Verify updated metrics
assert.Equal(t, float64(2), testutil.ToFloat64(committer.commitRequestsTotal))
assert.Equal(t, float64(0), testutil.ToFloat64(committer.commitFailuresTotal))
assert.Equal(t, float64(newTestOffset), testutil.ToFloat64(committer.lastCommittedOffset))
// Verify updated committed offset
offsets, err = admClient.FetchOffsets(context.Background(), consumerGroup)
require.NoError(t, err)
committedOffset, ok = offsets.Lookup(topicName, partitionID)
require.True(t, ok)
assert.Equal(t, newTestOffset, committedOffset.At)
}