/** Sleuth host corresponds to annotation/binaryAnnotation.host in zipkin. */ @Test public void annotationsIncludeHost() { span.log("http/request/retry"); span.tag("spring-boot/version", "1.3.1.RELEASE"); io.zipkin.Span result = ZipkinMessageListener.convert(span, host); assertThat(result.annotations.get(0).endpoint).isEqualTo(endpoint); assertThat(result.binaryAnnotations.get(0).endpoint) .isEqualTo(result.annotations.get(0).endpoint); }
/** Sleuth timestamps are millisecond granularity while zipkin is microsecond. */ @Test public void convertsTimestampAndDurationToMicroseconds() { long start = System.currentTimeMillis(); span.log("http/request/retry"); // System.currentTimeMillis io.zipkin.Span result = ZipkinMessageListener.convert(span, host); assertThat(result.timestamp).isEqualTo(span.getBegin() * 1000); assertThat(result.duration).isEqualTo((span.getEnd() - span.getBegin()) * 1000); assertThat(result.annotations.get(0).timestamp) .isGreaterThanOrEqualTo(start * 1000) .isLessThanOrEqualTo(System.currentTimeMillis() * 1000); }
// TODO: "unknown" bc process id, documented as not nullable, is null in some tests. @Test public void nullProcessIdCoercesToUnknownServiceName() { MilliSpan noProcessId = MilliSpan.builder().traceId(1L).name("parent").remote(true).build(); io.zipkin.Span result = ZipkinMessageListener.convert(noProcessId, host); assertThat(result.binaryAnnotations) .containsOnly(BinaryAnnotation.create("lc", "unknown", endpoint)); }
/** * In zipkin, the service context is attached to annotations. Sleuth spans that have no * annotations will get an "lc" one, which allows them to be queryable in zipkin by service name. */ @Test public void spanWithoutAnnotationsLogsComponent() { io.zipkin.Span result = ZipkinMessageListener.convert(span, host); assertThat(result.binaryAnnotations).hasSize(1); assertThat(result.binaryAnnotations.get(0)) .isEqualToComparingFieldByField( BinaryAnnotation.create("lc", span.getProcessId(), endpoint)); }