@Test
  public void testReferenceCounts2() {
    ByteBuf c1 = buffer().writeByte(1);
    ByteBuf c2 = buffer().writeByte(2).retain();
    ByteBuf c3 = buffer().writeByte(3).retain(2);

    CompositeByteBuf bufA = compositeBuffer();
    bufA.addComponents(c1, c2, c3).writerIndex(3);

    CompositeByteBuf bufB = compositeBuffer();
    bufB.addComponents(bufA);

    // Ensure that bufA.refCnt() did not change.
    assertThat(bufA.refCnt(), is(1));

    // Ensure that c[123]'s refCnt did not change.
    assertThat(c1.refCnt(), is(1));
    assertThat(c2.refCnt(), is(2));
    assertThat(c3.refCnt(), is(3));

    // This should decrease bufA.refCnt().
    bufB.release();
    assertThat(bufB.refCnt(), is(0));

    // Ensure bufA.refCnt() changed.
    assertThat(bufA.refCnt(), is(0));

    // Ensure that c[123]'s refCnt also changed due to the deallocation of bufA.
    assertThat(c1.refCnt(), is(0));
    assertThat(c2.refCnt(), is(1));
    assertThat(c3.refCnt(), is(2));

    c3.release(2);
    c2.release();
  }