diff --git a/prometheus/promauto/auto_test.go b/prometheus/promauto/auto_test.go index e93817b..44805cb 100644 --- a/prometheus/promauto/auto_test.go +++ b/prometheus/promauto/auto_test.go @@ -19,9 +19,7 @@ import ( "github.com/prometheus/client_golang/prometheus" ) -func TestWrapNil(t *testing.T) { - // A nil registerer should be treated as a no-op by promauto, even when wrapped. - registerer := prometheus.WrapRegistererWith(prometheus.Labels{"foo": "bar"}, nil) - c := With(registerer).NewCounter(prometheus.CounterOpts{Name: "test"}) - c.Inc() +func TestNil(t *testing.T) { + // A nil registerer should be treated as a no-op by promauto. + With(nil).NewCounter(prometheus.CounterOpts{Name: "test"}).Inc() } diff --git a/prometheus/wrap.go b/prometheus/wrap.go index ef6fdec..438aa5e 100644 --- a/prometheus/wrap.go +++ b/prometheus/wrap.go @@ -28,7 +28,8 @@ import ( // registered with the wrapped Registerer in a modified way. The modified // Collector adds the provided Labels to all Metrics it collects (as // ConstLabels). The Metrics collected by the unmodified Collector must not -// duplicate any of those labels. +// duplicate any of those labels. Wrapping a nil value is valid, resulting +// in a no-op Registerer. // // WrapRegistererWith provides a way to add fixed labels to a subset of // Collectors. It should not be used to add fixed labels to all metrics exposed. @@ -51,6 +52,7 @@ func WrapRegistererWith(labels Labels, reg Registerer) Registerer { // Registerer. Collectors registered with the returned Registerer will be // registered with the wrapped Registerer in a modified way. The modified // Collector adds the provided prefix to the name of all Metrics it collects. +// Wrapping a nil value is valid, resulting in a no-op Registerer. // // WrapRegistererWithPrefix is useful to have one place to prefix all metrics of // a sub-system. To make this work, register metrics of the sub-system with the diff --git a/prometheus/wrap_test.go b/prometheus/wrap_test.go index 256875a..003544e 100644 --- a/prometheus/wrap_test.go +++ b/prometheus/wrap_test.go @@ -321,3 +321,12 @@ func TestWrap(t *testing.T) { } } + +func TestNil(t *testing.T) { + // A wrapped nil registerer should be treated as a no-op, and not panic. + c := NewCounter(CounterOpts{Name: "test"}) + err := WrapRegistererWith(Labels{"foo": "bar"}, nil).Register(c) + if err != nil { + t.Fatal("registering failed:", err) + } +}