void assertServerAncestry(List<Span> trace) {
    SpanNode a = buildTree(trace);
    assertThat(a.span()).isEqualTo(trace.get(0));

    SpanNode b_client = a.children().get(0);
    assertThat(b_client.span()).isEqualTo(trace.get(1));
    assertThat(b_client.children()).extracting(SpanNode::span)
      .containsExactly(trace.get(3), trace.get(2));

    SpanNode b_server_bar = b_client.children().get(0);
    assertThat(b_server_bar.children()).extracting(SpanNode::span)
      .containsExactly(trace.get(4));

    SpanNode b_server_foo = b_client.children().get(1);
    assertThat(b_server_foo.children()).extracting(SpanNode::span)
      .containsExactly(trace.get(5));
  }
Same as {@link #constructsTraceTree()}, except with shared span ID
zipkin/src/test/java/zipkin2/internal/SpanNodeTest.java