Skip to content

Commit 50d6f7f

Browse files
authored
Add test for traceidratio sampler (#164)
1 parent 165f479 commit 50d6f7f

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsTracerConfigurerTest.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,44 @@
2121
import io.opentelemetry.api.trace.TracerProvider;
2222
import io.opentelemetry.sdk.trace.SdkTracerProvider;
2323
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
24+
import io.opentelemetry.sdk.trace.samplers.Sampler;
2425
import java.util.concurrent.TimeUnit;
2526
import org.junit.jupiter.api.RepeatedTest;
2627

2728
class AwsTracerConfigurerTest {
2829

29-
private static final TracerProvider tracerProvider;
30-
31-
static {
32-
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
33-
new AwsTracerConfigurer().configure(builder, null);
34-
tracerProvider = builder.build();
35-
}
36-
3730
// The probability of this passing once without correct IDs is low, 20 times is inconceivable.
3831
@RepeatedTest(20)
3932
void providerGeneratesXrayIds() {
33+
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
34+
new AwsTracerConfigurer().configure(builder, null);
35+
TracerProvider tracerProvider = builder.build();
36+
4037
int startTimeSecs = (int) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
4138
var span = tracerProvider.get("test").spanBuilder("test").startSpan();
4239
byte[] traceId = span.getSpanContext().getTraceIdBytes();
4340
int epoch = Ints.fromBytes(traceId[0], traceId[1], traceId[2], traceId[3]);
4441
assertThat(epoch).isGreaterThanOrEqualTo(startTimeSecs);
4542
}
43+
44+
// Sanity check that the trace ID ratio sampler works fine with the x-ray generator.
45+
@RepeatedTest(20)
46+
void traceIdRatioSampler() {
47+
SdkTracerProviderBuilder builder =
48+
SdkTracerProvider.builder().setSampler(Sampler.traceIdRatioBased(0.01));
49+
new AwsTracerConfigurer().configure(builder, null);
50+
TracerProvider tracerProvider = builder.build();
51+
int numSpans = 100000;
52+
int numSampled = 0;
53+
for (int i = 0; i < numSpans; i++) {
54+
var span = tracerProvider.get("test").spanBuilder("test").startSpan();
55+
if (span.getSpanContext().getTraceFlags().isSampled()) {
56+
numSampled++;
57+
}
58+
span.end();
59+
}
60+
// Configured for 1%, confirm there are at most 5% to account for randomness and reduce test
61+
// flakiness.
62+
assertThat((double) numSampled / numSpans).isLessThan(0.05);
63+
}
4664
}

0 commit comments

Comments
 (0)