Skip to content

Commit 8961609

Browse files
committed
Ensure that nil registers are treat as a no-op, even when wrapping.
Signed-off-by: Tom Wilkie <[email protected]>
1 parent 84c6b9d commit 8961609

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

prometheus/promauto/auto_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2020 The Prometheus Authors
2+
// Licensed under the Apache License, Version 2.0 (the "License");
3+
// you may not use this file except in compliance with the License.
4+
// You may obtain a copy of the License at
5+
//
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
package promauto
15+
16+
import (
17+
"testing"
18+
19+
"github.com/prometheus/client_golang/prometheus"
20+
)
21+
22+
func TestWrapNil(t *testing.T) {
23+
// A nil registerer should be treated as a no-op by promauto, even when wrapped.
24+
registerer := prometheus.WrapRegistererWith(prometheus.Labels{"foo": "bar"}, nil)
25+
c := With(registerer).NewCounter(prometheus.CounterOpts{
26+
Name: "test",
27+
})
28+
c.Inc()
29+
}

prometheus/wrap.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ type wrappingRegisterer struct {
8181
}
8282

8383
func (r *wrappingRegisterer) Register(c Collector) error {
84+
if r.wrappedRegisterer == nil {
85+
return nil
86+
}
8487
return r.wrappedRegisterer.Register(&wrappingCollector{
8588
wrappedCollector: c,
8689
prefix: r.prefix,
@@ -89,6 +92,9 @@ func (r *wrappingRegisterer) Register(c Collector) error {
8992
}
9093

9194
func (r *wrappingRegisterer) MustRegister(cs ...Collector) {
95+
if r.wrappedRegisterer == nil {
96+
return
97+
}
9298
for _, c := range cs {
9399
if err := r.Register(c); err != nil {
94100
panic(err)
@@ -97,6 +103,9 @@ func (r *wrappingRegisterer) MustRegister(cs ...Collector) {
97103
}
98104

99105
func (r *wrappingRegisterer) Unregister(c Collector) bool {
106+
if r.wrappedRegisterer == nil {
107+
return false
108+
}
100109
return r.wrappedRegisterer.Unregister(&wrappingCollector{
101110
wrappedCollector: c,
102111
prefix: r.prefix,

0 commit comments

Comments
 (0)