From 65a794d8329b0a9d6f6cc59d8e36e651f8cc8857 Mon Sep 17 00:00:00 2001 From: wangyusheng1985 Date: Wed, 2 Sep 2026 10:04:12 +0000 Subject: [PATCH] Add WrapRegistererWith conflicting-label regression test --- prometheus/wrap_test.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/prometheus/wrap_test.go b/prometheus/wrap_test.go index 36a309e4b..3032d0070 100644 --- a/prometheus/wrap_test.go +++ b/prometheus/wrap_test.go @@ -337,6 +337,32 @@ func assertEqualMFs(t *testing.T, wantMF, gotMF []*dto.MetricFamily) { } } +func TestWrapRegistererWithConflictingLabels(t *testing.T) { + reg := NewRegistry() + wrappedReg := WrapRegistererWith(Labels{"foo": "bar"}, reg) + collector := NewGauge(GaugeOpts{ + Name: "test", + Help: "help", + ConstLabels: Labels{"foo": "baz"}, + }) + + err := wrappedReg.Register(collector) + if err == nil { + t.Fatal("expected registration to fail") + } + if want := `attempted wrapping with already existing label name "foo"`; !strings.Contains(err.Error(), want) { + t.Fatalf("unexpected registration error: %v", err) + } + + gathered, err := reg.Gather() + if err != nil { + t.Fatalf("gathering failed after rejected registration: %v", err) + } + if len(gathered) != 0 { + t.Fatalf("expected no metric families after rejected registration, got %d", len(gathered)) + } +} + func TestNil(t *testing.T) { // A wrapped nil registerer should be treated as a no-op, and not panic. c := NewCounter(CounterOpts{Name: "test"})