/** * Creates a reference to a {@link TraceContext} * * @return {@code this}, for chaining * @param traceContext parent trace context */ public ErrorCapture asChildOf(TraceContext traceContext) { this.traceContext.asChildOf(traceContext); return this; }
private void assertValid(String s) { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); assertThat(traceContext.asChildOf(s)).isTrue(); } }
private void assertInvalid(String s) { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); assertThat(traceContext.asChildOf(s)).isFalse(); }
@Test void parseFromTraceParentHeader_notSampled() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-00"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isFalse(); assertThat(traceContext.getIncomingTraceParentHeader()).isEqualTo(header); }
@Test void parseFromTraceParentHeaderRecorded() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-01"); }
@Test void parseFromTraceParentHeaderUnsupportedFlag() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-03"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-03"); }
@Test void parseFromTraceParentHeaderNotRecorded() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-00"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.isSampled()).isFalse(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()).endsWith("-00"); }
@Test void outgoingHeader() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); final String header = "00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-03"; assertThat(traceContext.asChildOf(header)).isTrue(); assertThat(traceContext.getOutgoingTraceParentHeader().toString()) .isEqualTo("00-0af7651916cd43dd8448eb211c80319c-" + traceContext.getId().toString() + "-03"); }
@Test void testResetState() { final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); traceContext.asChildOf("00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-00"); traceContext.resetState(); assertThat(traceContext.getIncomingTraceParentHeader()).isEqualTo("00-00000000000000000000000000000000-0000000000000000-00"); }
@Test void testPropagateTransactionIdForUnsampledSpan() { final TraceContext rootContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); rootContext.asRootSpan(ConstantSampler.of(false)); final TraceContext childContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); childContext.asChildOf(rootContext); assertThat(childContext.getOutgoingTraceParentHeader().toString()).doesNotContain(childContext.getId().toString()); assertThat(childContext.getOutgoingTraceParentHeader().toString()).contains(rootContext.getId().toString()); }
@Test void testW3CData() { assertSoftly(softly -> { for (JsonNode testCase : testData) { PotentiallyMultiValuedMap headersMap = getHeaders(testCase.get("headers")); if (headersMap.getAll("traceparent").size() == 1) { final String traceParentHeader = headersMap.getFirst("traceparent"); final boolean traceparentValid = testCase.get("is_traceparent_valid").booleanValue(); final TraceContext traceContext = TraceContext.with64BitId(mock(ElasticApmTracer.class)); softly.assertThat(traceContext.asChildOf(traceParentHeader)) .withFailMessage("Expected '%s' to be %s", traceParentHeader, traceparentValid ? "valid" : "invalid") .isEqualTo(traceparentValid); } } }); }