@Test void oneway_loopback() {
    V1Span v1 =
        V1Span.newBuilder()
            .traceId(1L)
            .parentId(2L)
            .id(3L)
            .name("get")
            .addAnnotation(1472470996199000L, "cs", FRONTEND)
            .addAnnotation(1472470996250000L, "sr", FRONTEND)
            .build();

    Span.Builder newBuilder = Span.newBuilder().traceId("1").parentId("2").id("3").name("get");

    Span clientV2 =
        newBuilder
            .clone()
            .kind(Kind.CLIENT)
            .localEndpoint(FRONTEND)
            .timestamp(1472470996199000L)
            .build();

    Span serverV2 =
        newBuilder
            .clone()
            .kind(Kind.SERVER)
            .shared(true)
            .localEndpoint(FRONTEND)
            .timestamp(1472470996250000L)
            .build();

    assertThat(v1SpanConverter.convert(v1)).containsExactly(clientV2, serverV2);
  }
The old v1 format had no means of saying it is shared or not. This uses lack of timestamp as a
signal
zipkin/src/test/java/zipkin2/v1/SpanConverterTest.java