@Test public void decorate_forksWhenFieldsAlreadyClaimed() {

  TraceContext other = TraceContext.newBuilder().traceId(98L).spanId(99L).build();
  BasicMapExtra claimed = factory.decorate(other).findExtra(BasicMapExtra.class);
  List<TraceContext> contexts = asList(
      context.toBuilder().addExtra(claimed).build(),
      context.toBuilder().addExtra(1L).addExtra(claimed).build(),
      context.toBuilder().addExtra(claimed).addExtra(1L).build(),
      context.toBuilder().addExtra(1L).addExtra(claimed).addExtra(2L).build()
  );
  for (TraceContext context : contexts) {
    TraceContext ensured = factory.decorate(context);
    assertThat(ensured).isNotSameAs(context);
    assertThat(ensured.extra())
        .isNotSameAs(context.extra())
        .hasSize(context.extra().size());
    assertExtraClaimed(ensured);
  }
}