/** * Creates a new {@link TraceContext} with a 128 bit {@link #id}, * suitable for errors, * as those might not have a trace reference and therefore require a larger id in order to be globally unique. * @param tracer */ public static TraceContext with128BitId(ElasticApmTracer tracer) { return new TraceContext(tracer, Id.new128BitId()); }
@Test void testFromAndToLong() { final Id id = Id.new128BitId(); id.fromLongs(21, 42); assertThat(id.isEmpty()).isFalse(); assertThat(id.readLong(0)).isEqualTo(21); assertThat(id.readLong(8)).isEqualTo(42); } }
@Test void isSampledEmpiricalTest() { int sampledTransactions = 0; Id id = Id.new128BitId(); for (int i = 0; i < ITERATIONS; i++) { id.setToRandomValue(); if (sampler.isSampled(id)) { sampledTransactions++; } } assertThat(sampledTransactions).isBetween((int) (SAMPLING_RATE * ITERATIONS - DELTA), (int) (SAMPLING_RATE * ITERATIONS + DELTA)); }
@Test void testSamplingLowerBoundary() { long lowerBound = -Long.MAX_VALUE / 2; final Id transactionId = Id.new128BitId(); transactionId.fromLongs((long) 0, lowerBound + 1); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isTrue(); transactionId.fromLongs((long) 0, lowerBound); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isTrue(); transactionId.fromLongs((long) 0, lowerBound - 1); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isFalse(); }
@Test void testSamplingUpperBoundary() { long upperBound = Long.MAX_VALUE / 2; final Id transactionId = Id.new128BitId(); transactionId.fromLongs((long) 0, upperBound - 1); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isTrue(); transactionId.fromLongs((long) 0, upperBound); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isTrue(); transactionId.fromLongs((long) 0, upperBound + 1); assertThat(ProbabilitySampler.of(0.5).isSampled(transactionId)).isFalse(); }