@@ -15,9 +15,11 @@ import (
15
15
"testing"
16
16
17
17
"go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
18
+ prometheusbridge "go.opentelemetry.io/contrib/bridges/prometheus"
18
19
"go.opentelemetry.io/otel"
19
20
"go.opentelemetry.io/otel/sdk/metric"
20
21
22
+ "github.com/prometheus/client_golang/prometheus"
21
23
"github.com/stretchr/testify/assert"
22
24
"go.uber.org/goleak"
23
25
)
@@ -192,3 +194,42 @@ func TestMetricProducerPrometheusWithPrometheusExporter(t *testing.T) {
192
194
assert .NoError (t , mp .Shutdown (context .Background ()))
193
195
goleak .VerifyNone (t )
194
196
}
197
+
198
+ func TestMetricProducerFallbackWithPrometheusExporter (t * testing.T ) {
199
+ assertNoOtelHandleErrors (t )
200
+
201
+ reg := prometheus .NewRegistry ()
202
+ someDummyMetric := prometheus .NewCounter (prometheus.CounterOpts {
203
+ Name : "dummy_metric" ,
204
+ Help : "dummy metric" ,
205
+ })
206
+ reg .MustRegister (someDummyMetric )
207
+
208
+ WithFallbackMetricProducer (func (context.Context ) (metric.Producer , error ) {
209
+ return prometheusbridge .NewMetricProducer (prometheusbridge .WithGatherer (reg )), nil
210
+ })
211
+
212
+ t .Setenv ("OTEL_METRICS_EXPORTER" , "prometheus" )
213
+ t .Setenv ("OTEL_EXPORTER_PROMETHEUS_PORT" , "0" )
214
+
215
+ r , err := NewMetricReader (context .Background ())
216
+ assert .NoError (t , err )
217
+
218
+ // pull-based exporters like Prometheus need to be registered
219
+ mp := metric .NewMeterProvider (metric .WithReader (r ))
220
+
221
+ rws , ok := r .(readerWithServer )
222
+ if ! ok {
223
+ t .Errorf ("expected readerWithServer but got %v" , r )
224
+ }
225
+
226
+ resp , err := http .Get (fmt .Sprintf ("http://%s/metrics" , rws .addr ))
227
+ assert .NoError (t , err )
228
+ body , err := io .ReadAll (resp .Body )
229
+ assert .NoError (t , err )
230
+
231
+ assert .Contains (t , string (body ), "HELP dummy_metric_total dummy metric" )
232
+
233
+ assert .NoError (t , mp .Shutdown (context .Background ()))
234
+ goleak .VerifyNone (t )
235
+ }
0 commit comments