2020import io .micrometer .prometheus .PrometheusConfig ;
2121import io .micrometer .prometheus .PrometheusMeterRegistry ;
2222import io .prometheus .client .CollectorRegistry ;
23- import io .prometheus .client .exemplars .DefaultExemplarSampler ;
24- import io .prometheus .client .exemplars .Exemplar ;
2523import io .prometheus .client .exemplars .ExemplarSampler ;
2624import io .prometheus .client .exemplars .tracer .common .SpanContextSupplier ;
2725import io .prometheus .client .exporter .BasicAuthHttpConnectionFactory ;
4745import org .springframework .test .util .ReflectionTestUtils ;
4846
4947import static org .assertj .core .api .Assertions .assertThat ;
48+ import static org .mockito .Mockito .mock ;
5049
5150/**
5251 * Tests for {@link PrometheusMetricsExportAutoConfiguration}.
@@ -66,12 +65,6 @@ void backsOffWithoutAClock() {
6665 this .contextRunner .run ((context ) -> assertThat (context ).doesNotHaveBean (PrometheusMeterRegistry .class ));
6766 }
6867
69- @ Test
70- void backsOfWhenExemplarSamplerIsPresent () {
71- this .contextRunner .withUserConfiguration (CustomExemplarSamplerConfiguration .class )
72- .run ((context ) -> assertThat (context ).doesNotHaveBean (DefaultExemplarSampler .class ));
73- }
74-
7568 @ Test
7669 void autoConfiguresItsConfigCollectorRegistryAndMeterRegistry () {
7770 this .contextRunner .withUserConfiguration (BaseConfiguration .class )
@@ -127,12 +120,21 @@ void allowsCustomCollectorRegistryToBeUsed() {
127120
128121 @ Test
129122 void autoConfiguresExemplarSamplerIfSpanContextSupplierIsPresent () {
130- this .contextRunner .withUserConfiguration (DefaultExemplarSamplerConfiguration .class )
123+ this .contextRunner .withUserConfiguration (ExemplarsConfiguration .class )
131124 .run ((context ) -> assertThat (context ).hasSingleBean (SpanContextSupplier .class )
132125 .hasSingleBean (ExemplarSampler .class )
133126 .hasSingleBean (PrometheusMeterRegistry .class ));
134127 }
135128
129+ @ Test
130+ void allowsCustomExemplarSamplerToBeUsed () {
131+ this .contextRunner .withUserConfiguration (ExemplarsConfiguration .class )
132+ .withBean ("customExemplarSampler" , ExemplarSampler .class , () -> mock (ExemplarSampler .class ))
133+ .run ((context ) -> assertThat (context ).hasSingleBean (ExemplarSampler .class )
134+ .getBean (ExemplarSampler .class )
135+ .isSameAs (context .getBean ("customExemplarSampler" )));
136+ }
137+
136138 @ Test
137139 void exemplarSamplerIsNotAutoConfiguredIfSpanContextSupplierIsMissing () {
138140 this .contextRunner .withUserConfiguration (BaseConfiguration .class )
@@ -295,7 +297,7 @@ PrometheusScrapeEndpoint customEndpoint(CollectorRegistry collectorRegistry) {
295297
296298 @ Configuration (proxyBeanMethods = false )
297299 @ Import (BaseConfiguration .class )
298- static class DefaultExemplarSamplerConfiguration {
300+ static class ExemplarsConfiguration {
299301
300302 @ Bean
301303 SpanContextSupplier spanContextSupplier () {
@@ -321,26 +323,4 @@ public boolean isSampled() {
321323
322324 }
323325
324- @ Configuration (proxyBeanMethods = false )
325- @ Import (BaseConfiguration .class )
326- static class CustomExemplarSamplerConfiguration {
327-
328- @ Bean
329- ExemplarSampler exemplarSampler () {
330- return new ExemplarSampler () {
331-
332- @ Override
333- public Exemplar sample (double value , double bucketFrom , double bucketTo , Exemplar previous ) {
334- return null ;
335- }
336-
337- @ Override
338- public Exemplar sample (double increment , Exemplar previous ) {
339- return null ;
340- }
341- };
342- }
343-
344- }
345-
346326}
0 commit comments