MCPcopy
hub / github.com/redis/go-redis / TestMetricsUnderStress

Function TestMetricsUnderStress

extra/redisotel-native/metrics_stress_test.go:27–127  ·  extra/redisotel-native/metrics_stress_test.go::TestMetricsUnderStress

TestMetricsUnderStress validates metrics recording under concurrent load.

(t *testing.T)

Source from the content-addressed store, hash-verified

25
26// TestMetricsUnderStress validates metrics recording under concurrent load.
27func TestMetricsUnderStress(t *testing.T) {
28 ctx := context.Background()
29 testClient := redis.NewClient(&redis.Options{Addr: "localhost:6379"})
30 if err := testClient.Ping(ctx).Err(); err != nil {
31 testClient.Close()
32 t.Skip("Redis not available at localhost:6379")
33 }
34 testClient.Close()
35
36 reader := metric.NewManualReader()
37 meterProvider := metric.NewMeterProvider(metric.WithReader(reader))
38 defer func() {
39 _ = meterProvider.Shutdown(ctx)
40 }()
41
42 otel.SetMeterProvider(meterProvider)
43 resetObservabilityForTest()
44
45 otelInstance := GetObservabilityInstance()
46 config := NewConfig().
47 WithEnabled(true).
48 WithMeterProvider(meterProvider).
49 WithMetricGroups(MetricGroupAll)
50
51 if err := otelInstance.Init(config); err != nil {
52 t.Fatalf("Failed to initialize OTel: %v", err)
53 }
54 defer otelInstance.Shutdown()
55
56 rdb := redis.NewClient(&redis.Options{
57 Addr: "localhost:6379",
58 PoolSize: stressTestConcurrency,
59 MinIdleConns: 10,
60 })
61 defer rdb.Close()
62
63 var opsCompleted atomic.Int64
64 var opsErrors atomic.Int64
65 startTime := time.Now()
66 deadline := startTime.Add(stressTestDuration)
67
68 statusTicker := time.NewTicker(stressTestStatusInterval)
69 defer statusTicker.Stop()
70 done := make(chan struct{})
71
72 go func() {
73 for {
74 select {
75 case <-statusTicker.C:
76 elapsed := time.Since(startTime).Seconds()
77 ops := opsCompleted.Load()
78 t.Logf("[%.0fs] %d ops, %.1f ops/sec", elapsed, ops, float64(ops)/elapsed)
79 case <-done:
80 return
81 }
82 }
83 }()
84

Callers

nothing calls this directly

Calls 15

GetObservabilityInstanceFunction · 0.85
NewConfigFunction · 0.85
validateMetricsFunction · 0.85
WithReaderMethod · 0.80
WithMetricGroupsMethod · 0.80
WithMeterProviderMethod · 0.80
WithEnabledMethod · 0.80
InitMethod · 0.80
WaitMethod · 0.80
CollectMethod · 0.80
ErrMethod · 0.65

Tested by

no test coverage detected