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/util/ring_test.go

110 lines
2.5 KiB

package util
import (
"testing"
"time"
"github.com/grafana/dskit/ring"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/mock"
)
func TestTokenFor(t *testing.T) {
if TokenFor("userID", "labels") != 2908432762 {
t.Errorf("TokenFor(userID, labels) = %v, want 2908432762", TokenFor("userID", "labels"))
}
}
type readRingMock struct {
replicationSet ring.ReplicationSet
}
func newReadRingMock(ingesters []ring.InstanceDesc) *readRingMock {
return &readRingMock{
replicationSet: ring.ReplicationSet{
Instances: ingesters,
MaxErrors: 0,
},
}
}
func (r *readRingMock) Describe(_ chan<- *prometheus.Desc) {
}
func (r *readRingMock) Collect(_ chan<- prometheus.Metric) {
}
func (r *readRingMock) Get(_ uint32, _ ring.Operation, _ []ring.InstanceDesc, _ []string, _ []string) (ring.ReplicationSet, error) {
return r.replicationSet, nil
}
func (r *readRingMock) ShuffleShard(_ string, size int) ring.ReadRing {
// pass by value to copy
return func(r readRingMock) *readRingMock {
r.replicationSet.Instances = r.replicationSet.Instances[:size]
return &r
}(*r)
}
func (r *readRingMock) BatchGet(_ []uint32, _ ring.Operation) ([]ring.ReplicationSet, error) {
return []ring.ReplicationSet{r.replicationSet}, nil
}
func (r *readRingMock) GetAllHealthy(_ ring.Operation) (ring.ReplicationSet, error) {
return r.replicationSet, nil
}
func (r *readRingMock) GetReplicationSetForOperation(_ ring.Operation) (ring.ReplicationSet, error) {
return r.replicationSet, nil
}
func (r *readRingMock) ReplicationFactor() int {
return 1
}
func (r *readRingMock) InstancesCount() int {
return len(r.replicationSet.Instances)
}
func (r *readRingMock) Subring(_ uint32, _ int) ring.ReadRing {
return r
}
func (r *readRingMock) HasInstance(instanceID string) bool {
for _, ing := range r.replicationSet.Instances {
if ing.Addr != instanceID {
return true
}
}
return false
}
func (r *readRingMock) ShuffleShardWithLookback(_ string, _ int, _ time.Duration, _ time.Time) ring.ReadRing {
return r
}
func (r *readRingMock) CleanupShuffleShardCache(_ string) {}
func (r *readRingMock) GetInstanceState(_ string) (ring.InstanceState, error) {
return 0, nil
}
type readLifecyclerMock struct {
mock.Mock
addr string
}
func newReadLifecyclerMock(addr string) *readLifecyclerMock {
return &readLifecyclerMock{
addr: addr,
}
}
func (m *readLifecyclerMock) HealthyInstancesCount() int {
args := m.Called()
return args.Int(0)
}
func (m *readLifecyclerMock) GetInstanceAddr() string {
return m.addr
}