1616
1717package org .springframework .boot .actuate .autoconfigure .tracing .otlp ;
1818
19+ import java .util .List ;
1920import java .util .function .Supplier ;
2021
2122import io .opentelemetry .api .metrics .MeterProvider ;
23+ import io .opentelemetry .exporter .internal .compression .GzipCompressor ;
2224import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporter ;
2325import io .opentelemetry .exporter .otlp .http .trace .OtlpHttpSpanExporterBuilder ;
2426import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
2527import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporterBuilder ;
2628import io .opentelemetry .sdk .trace .export .SpanExporter ;
2729import okhttp3 .HttpUrl ;
30+ import org .assertj .core .api .InstanceOfAssertFactories ;
2831import org .junit .jupiter .api .Test ;
2932
3033import org .springframework .boot .actuate .autoconfigure .tracing .otlp .OtlpTracingConfigurations .ConnectionDetails .PropertiesOtlpTracingConnectionDetails ;
@@ -70,6 +73,27 @@ void shouldSupplyBeans() {
7073 .hasSingleBean (SpanExporter .class ));
7174 }
7275
76+ @ Test
77+ void shouldCustomizeHttpTransportWithProperties () {
78+ this .contextRunner
79+ .withPropertyValues ("management.otlp.tracing.endpoint=http://localhost:4317/v1/traces" ,
80+ "management.otlp.tracing.timeout=10m" , "management.otlp.tracing.connect-timeout=20m" ,
81+ "management.otlp.tracing.compression=GZIP" , "management.otlp.tracing.headers.spring=boot" )
82+ .run ((context ) -> {
83+ assertThat (context ).hasSingleBean (OtlpHttpSpanExporter .class ).hasSingleBean (SpanExporter .class );
84+ OtlpHttpSpanExporter exporter = context .getBean (OtlpHttpSpanExporter .class );
85+ assertThat (exporter ).extracting ("delegate.httpSender.client" )
86+ .hasFieldOrPropertyWithValue ("connectTimeoutMillis" , 1200000 )
87+ .hasFieldOrPropertyWithValue ("callTimeoutMillis" , 600000 );
88+ assertThat (exporter ).extracting ("delegate.httpSender.compressor" ).isInstanceOf (GzipCompressor .class );
89+ assertThat (exporter ).extracting ("delegate.httpSender.headerSupplier" )
90+ .asInstanceOf (InstanceOfAssertFactories .type (Supplier .class ))
91+ .satisfies ((headerSupplier ) -> assertThat (headerSupplier .get ())
92+ .asInstanceOf (InstanceOfAssertFactories .map (String .class , List .class ))
93+ .containsEntry ("spring" , List .of ("boot" )));
94+ });
95+ }
96+
7397 @ Test
7498 void shouldSupplyBeansIfGrpcTransportIsEnabled () {
7599 this .contextRunner
@@ -79,6 +103,28 @@ void shouldSupplyBeansIfGrpcTransportIsEnabled() {
79103 .hasSingleBean (SpanExporter .class ));
80104 }
81105
106+ @ Test
107+ void shouldCustomizeGrpcTransportWithProperties () {
108+ this .contextRunner
109+ .withPropertyValues ("management.otlp.tracing.endpoint=http://localhost:4317/v1/traces" ,
110+ "management.otlp.tracing.transport=grpc" , "management.otlp.tracing.timeout=10m" ,
111+ "management.otlp.tracing.connect-timeout=20m" , "management.otlp.tracing.compression=GZIP" ,
112+ "management.otlp.tracing.headers.spring=boot" )
113+ .run ((context ) -> {
114+ assertThat (context ).hasSingleBean (OtlpGrpcSpanExporter .class ).hasSingleBean (SpanExporter .class );
115+ OtlpGrpcSpanExporter exporter = context .getBean (OtlpGrpcSpanExporter .class );
116+ assertThat (exporter ).extracting ("delegate.grpcSender.client" )
117+ .hasFieldOrPropertyWithValue ("connectTimeoutMillis" , 1200000 )
118+ .hasFieldOrPropertyWithValue ("callTimeoutMillis" , 600000 );
119+ assertThat (exporter ).extracting ("delegate.grpcSender.compressor" ).isInstanceOf (GzipCompressor .class );
120+ assertThat (exporter ).extracting ("delegate.grpcSender.headersSupplier" )
121+ .asInstanceOf (InstanceOfAssertFactories .type (Supplier .class ))
122+ .satisfies ((headerSupplier ) -> assertThat (headerSupplier .get ())
123+ .asInstanceOf (InstanceOfAssertFactories .map (String .class , List .class ))
124+ .containsEntry ("spring" , List .of ("boot" )));
125+ });
126+ }
127+
82128 @ Test
83129 void shouldNotSupplyBeansIfGlobalTracingIsDisabled () {
84130 this .contextRunner .withPropertyValues ("management.tracing.enabled=false" )
0 commit comments