if (!containsSameSpansInSameOrder(currentSpanStack, registerMe)) {
@Test @UseDataProvider("dataProviderForContainsSameSpansInSameOrder") public void containsSameSpansInSameOrder_should_work_as_expected_for_known_data(Deque<Span> stack, Deque<Span> otherStack, boolean expected, String testId) { assertThat(Tracer.getInstance().containsSameSpansInSameOrder(stack, otherStack)).isEqualTo(expected).withFailMessage("Test failed: " + testId); }
@Test public void registerWithThread_should_work_as_advertised() { // given Tracer tracer = Tracer.getInstance(); Deque<Span> newSpanStack = new LinkedList<>(); Span parentSpan = Span.newBuilder("foo", SpanPurpose.LOCAL_ONLY).build(); Span subspan = Span.newBuilder("bar", SpanPurpose.LOCAL_ONLY).build(); newSpanStack.push(parentSpan); newSpanStack.push(subspan); assertThat(MDC.get(Tracer.TRACE_ID_MDC_KEY)).isNull(); assertThat(MDC.get(Tracer.SPAN_JSON_MDC_KEY)).isNull(); // when tracer.registerWithThread(newSpanStack); // then // our stack was registered, so subspan should be current assertThat(MDC.get(Tracer.TRACE_ID_MDC_KEY)).isEqualTo(subspan.getTraceId()); assertThat(MDC.get(Tracer.SPAN_JSON_MDC_KEY)).isEqualTo(subspan.toJSON()); assertThat(tracer.getCurrentSpan()).isEqualTo(subspan); // a *copy* of the stack we passed in should have been registered, and modifying the original stack should not affect Tracer's stack Deque<Span> spanStack = getSpanStackThreadLocal().get(); assertThat(Tracer.getInstance().containsSameSpansInSameOrder(spanStack, newSpanStack)).isTrue(); assertThat(spanStack).isNotSameAs(newSpanStack); newSpanStack.push(subspan.generateChildSpan("subsub", SpanPurpose.LOCAL_ONLY)); assertThat(newSpanStack).hasSize(3); assertThat(spanStack).hasSize(2); }
@Test public void registerWithThread_should_work_as_advertised_if_existing_stack_is_empty() { // given getSpanStackThreadLocal().set(new LinkedList<Span>()); Tracer tracer = Tracer.getInstance(); Deque<Span> newSpanStack = new LinkedList<>(); Span parentSpan = Span.newBuilder("foo", SpanPurpose.LOCAL_ONLY).build(); Span subspan = Span.newBuilder("bar", SpanPurpose.LOCAL_ONLY).build(); newSpanStack.push(parentSpan); newSpanStack.push(subspan); assertThat(MDC.get(Tracer.TRACE_ID_MDC_KEY)).isNull(); assertThat(MDC.get(Tracer.SPAN_JSON_MDC_KEY)).isNull(); // when tracer.registerWithThread(newSpanStack); // then // our stack was registered, so subspan should be current assertThat(MDC.get(Tracer.TRACE_ID_MDC_KEY)).isEqualTo(subspan.getTraceId()); assertThat(MDC.get(Tracer.SPAN_JSON_MDC_KEY)).isEqualTo(subspan.toJSON()); assertThat(tracer.getCurrentSpan()).isEqualTo(subspan); // a *copy* of the stack we passed in should have been registered, and modifying the original stack should not affect Tracer's stack Deque<Span> spanStack = getSpanStackThreadLocal().get(); assertThat(Tracer.getInstance().containsSameSpansInSameOrder(spanStack, newSpanStack)).isTrue(); assertThat(spanStack).isNotSameAs(newSpanStack); newSpanStack.push(subspan.generateChildSpan("subsub", SpanPurpose.LOCAL_ONLY)); assertThat(newSpanStack).hasSize(3); assertThat(spanStack).hasSize(2); }