MCPcopy Create free account
hub / github.com/cortexproject/cortex / TestCheckReplicaMultiCluster

Function TestCheckReplicaMultiCluster

pkg/ha/ha_tracker_test.go:356–406  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

354}
355
356func TestCheckReplicaMultiCluster(t *testing.T) {
357 t.Parallel()
358 replica1 := "replica1"
359 replica2 := "replica2"
360 user := "userCheckReplicaMultiCluster"
361
362 reg := prometheus.NewPedanticRegistry()
363 c, err := NewHATracker(HATrackerConfig{
364 EnableHATracker: true,
365 KVStore: kv.Config{Store: "inmemory"},
366 UpdateTimeout: 100 * time.Millisecond,
367 UpdateTimeoutJitterMax: 0,
368 FailoverTimeout: time.Second,
369 }, trackerLimits{maxReplicaGroups: 100}, haTrackerStatusConfig, prometheus.WrapRegistererWithPrefix("cortex_", reg), "test-ha-tracker", log.NewNopLogger())
370 require.NoError(t, err)
371 require.NoError(t, services.StartAndAwaitRunning(context.Background(), c))
372 defer services.StopAndAwaitTerminated(context.Background(), c) //nolint:errcheck
373
374 now := time.Now()
375
376 // Write the first time.
377 err = c.CheckReplica(context.Background(), user, "c1", replica1, now)
378 assert.NoError(t, err)
379 err = c.CheckReplica(context.Background(), user, "c2", replica1, now)
380 assert.NoError(t, err)
381
382 // Reject samples from replica 2 in each replicaGroup.
383 err = c.CheckReplica(context.Background(), user, "c1", replica2, now)
384 assert.Error(t, err)
385 err = c.CheckReplica(context.Background(), user, "c2", replica2, now)
386 assert.Error(t, err)
387
388 // We should still accept from replica 1.
389 err = c.CheckReplica(context.Background(), user, "c1", replica1, now)
390 assert.NoError(t, err)
391 err = c.CheckReplica(context.Background(), user, "c2", replica1, now)
392 assert.NoError(t, err)
393
394 // We expect no CAS operation failures.
395 metrics, err := reg.Gather()
396 require.NoError(t, err)
397
398 assert.Equal(t, uint64(0), util.GetSumOfHistogramSampleCount(metrics, "cortex_kv_request_duration_seconds", labels.Selector{
399 labels.MustNewMatcher(labels.MatchEqual, "operation", "CAS"),
400 labels.MustNewMatcher(labels.MatchRegexp, "status_code", "5.*"),
401 }))
402 assert.Greater(t, util.GetSumOfHistogramSampleCount(metrics, "cortex_kv_request_duration_seconds", labels.Selector{
403 labels.MustNewMatcher(labels.MatchEqual, "operation", "CAS"),
404 labels.MustNewMatcher(labels.MatchRegexp, "status_code", "2.*"),
405 }), uint64(0))
406}
407
408func TestCheckReplicaMultiClusterTimeout(t *testing.T) {
409 t.Parallel()

Callers

nothing calls this directly

Calls 7

CheckReplicaMethod · 0.95
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
NewHATrackerFunction · 0.85
EqualMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected