Skip to content

Commit e22c1f7

Browse files
authored
[chore][exporter/prometheusexporter] Enable goleak check (#30965)
**Description:** This enables the `goleak` package for testing the Prometheus exporter. This helps to ensure no goroutines are leaked by this component. This is a test only change, the only updates are making sure all tests close the response body of `Get` calls. **Link to tracking Issue:** #30438 **Testing:** All tests are passing, including added `goleak` test.
1 parent 3a8275e commit e22c1f7

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

exporter/prometheusexporter/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ require (
2222
go.opentelemetry.io/collector/semconv v0.96.1-0.20240322165517-15201f1e5967
2323
go.opentelemetry.io/otel/metric v1.24.0
2424
go.opentelemetry.io/otel/trace v1.24.0
25+
go.uber.org/goleak v1.3.0
2526
go.uber.org/zap v1.27.0
2627
gopkg.in/yaml.v2 v2.4.0
2728
)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package prometheusexporter
5+
6+
import (
7+
"testing"
8+
9+
"go.uber.org/goleak"
10+
)
11+
12+
// The IgnoreTopFunction call prevents catching the leak generated by opencensus
13+
// defaultWorker.Start which at this time is part of the package's init call.
14+
// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
15+
func TestMain(m *testing.M) {
16+
goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
17+
}

exporter/prometheusexporter/prometheus_test.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,10 @@ func TestPrometheusExporter_WithTLS(t *testing.T) {
136136
t.Cleanup(func() {
137137
require.NoError(t, exp.Shutdown(context.Background()))
138138
// trigger a get so that the server cleans up our keepalive socket
139-
_, err = httpClient.Get("https://localhost:7777/metrics")
139+
var resp *http.Response
140+
resp, err = httpClient.Get("https://localhost:7777/metrics")
140141
require.NoError(t, err)
142+
require.NoError(t, resp.Body.Close())
141143
})
142144

143145
assert.NotNil(t, exp)
@@ -195,8 +197,10 @@ func TestPrometheusExporter_endToEndMultipleTargets(t *testing.T) {
195197
t.Cleanup(func() {
196198
require.NoError(t, exp.Shutdown(context.Background()))
197199
// trigger a get so that the server cleans up our keepalive socket
198-
_, err = http.Get("http://localhost:7777/metrics")
200+
var resp *http.Response
201+
resp, err = http.Get("http://localhost:7777/metrics")
199202
require.NoError(t, err)
203+
require.NoError(t, resp.Body.Close())
200204
})
201205

202206
assert.NotNil(t, exp)
@@ -277,8 +281,10 @@ func TestPrometheusExporter_endToEnd(t *testing.T) {
277281
t.Cleanup(func() {
278282
require.NoError(t, exp.Shutdown(context.Background()))
279283
// trigger a get so that the server cleans up our keepalive socket
280-
_, err = http.Get("http://localhost:7777/metrics")
284+
var resp *http.Response
285+
resp, err = http.Get("http://localhost:7777/metrics")
281286
require.NoError(t, err)
287+
require.NoError(t, resp.Body.Close())
282288
})
283289

284290
assert.NotNil(t, exp)
@@ -354,8 +360,10 @@ func TestPrometheusExporter_endToEndWithTimestamps(t *testing.T) {
354360
t.Cleanup(func() {
355361
require.NoError(t, exp.Shutdown(context.Background()))
356362
// trigger a get so that the server cleans up our keepalive socket
357-
_, err = http.Get("http://localhost:7777/metrics")
363+
var resp *http.Response
364+
resp, err = http.Get("http://localhost:7777/metrics")
358365
require.NoError(t, err)
366+
require.NoError(t, resp.Body.Close())
359367
})
360368

361369
assert.NotNil(t, exp)
@@ -434,8 +442,10 @@ func TestPrometheusExporter_endToEndWithResource(t *testing.T) {
434442
t.Cleanup(func() {
435443
require.NoError(t, exp.Shutdown(context.Background()))
436444
// trigger a get so that the server cleans up our keepalive socket
437-
_, err = http.Get("http://localhost:7777/metrics")
445+
var resp *http.Response
446+
resp, err = http.Get("http://localhost:7777/metrics")
438447
require.NoError(t, err, "Failed to perform a scrape")
448+
require.NoError(t, resp.Body.Close())
439449
})
440450

441451
assert.NotNil(t, exp)

0 commit comments

Comments
 (0)