@Test public void contextsAreIndependent() {

  TraceContext decorated = propagationFactory.decorate(context);
  BasicMapExtra extra1 = decorated.findExtra(BasicMapExtra.class);
  extra1.put("1", "one");
  context2 = propagationFactory.decorate(context2.toBuilder().addExtra(extra1).build());
  BasicMapExtra extra2 = context2.findExtra(BasicMapExtra.class);
  // Instances are not the same
  assertThat(extra1).isNotSameAs(extra2);
  // But have the same values
  assertThat(extra1).isEqualTo(extra2);
  extra1.put("1", "two");
  extra2.put("1", "three");
  // Yet downstream changes don't affect eachother
  assertThat(extra1.get("1")).isEqualTo("two");
  assertThat(extra2.get("1")).isEqualTo("three");
}