66package io .opentelemetry .contrib .stacktrace ;
77
88import static io .opentelemetry .sdk .testing .assertj .OpenTelemetryAssertions .assertThat ;
9+ import static org .assertj .core .api .Assertions .assertThatCode ;
910
1011import io .opentelemetry .api .trace .Span ;
1112import io .opentelemetry .api .trace .SpanBuilder ;
@@ -35,6 +36,12 @@ private static long msToNs(int ms) {
3536 return Duration .ofMillis (ms ).toNanos ();
3637 }
3738
39+ @ Test
40+ void tryInvalidMinDuration () {
41+ assertThatCode (() -> new StackTraceSpanProcessor (-1 , null ))
42+ .isInstanceOf (IllegalArgumentException .class );
43+ }
44+
3845 @ Test
3946 void durationAndFiltering () {
4047 // on duration threshold
@@ -45,7 +52,7 @@ void durationAndFiltering() {
4552 checkSpanWithoutStackTrace (YesPredicate .class , "2ms" , msToNs (1 ));
4653
4754 // filtering out span
48- checkSpanWithoutStackTrace (NoPredicate .class , "1ms" , 20 );
55+ checkSpanWithoutStackTrace (NoPredicate .class , "1ms" , msToNs ( 20 ) );
4956 }
5057
5158 public static class YesPredicate implements Predicate <ReadableSpan > {
@@ -99,7 +106,8 @@ private static void checkSpanWithStackTrace(String minDurationString, long spanD
99106 }
100107
101108 private static void checkSpanWithoutStackTrace (
102- Class <? extends Predicate <?>> predicateClass , String minDurationString ,
109+ Class <? extends Predicate <?>> predicateClass ,
110+ String minDurationString ,
103111 long spanDurationNanos ) {
104112 checkSpan (
105113 predicateClass ,
@@ -120,21 +128,23 @@ private static void checkSpan(
120128 InMemorySpanExporter spansExporter = InMemorySpanExporter .create ();
121129
122130 AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk .builder ();
123- sdkBuilder .addPropertiesSupplier (() -> {
124- Map <String , String > configMap = new HashMap <>();
125-
126- configMap .put ("otel.metrics.exporter" , "none" );
127- configMap .put ("otel.traces.exporter" , "logging" );
128- configMap .put ("otel.logs.exporter" , "none" );
129-
130- if (minDurationString != null ) {
131- configMap .put ("otel.java.experimental.span-stacktrace.min.duration" , minDurationString );
132- }
133- if (predicateClass != null ) {
134- configMap .put ("otel.java.experimental.span-stacktrace.filter" , predicateClass .getName ());
135- }
136- return configMap ;
137- });
131+ sdkBuilder .addPropertiesSupplier (
132+ () -> {
133+ Map <String , String > configMap = new HashMap <>();
134+
135+ configMap .put ("otel.metrics.exporter" , "none" );
136+ configMap .put ("otel.traces.exporter" , "logging" );
137+ configMap .put ("otel.logs.exporter" , "none" );
138+
139+ if (minDurationString != null ) {
140+ configMap .put ("otel.java.experimental.span-stacktrace.min.duration" , minDurationString );
141+ }
142+ if (predicateClass != null ) {
143+ configMap .put (
144+ "otel.java.experimental.span-stacktrace.filter" , predicateClass .getName ());
145+ }
146+ return configMap ;
147+ });
138148 // duplicate export to our in-memory span exporter
139149 sdkBuilder .addSpanExporterCustomizer (
140150 (exporter , config ) -> SpanExporter .composite (exporter , spansExporter ));
0 commit comments