@Test
public void writeShouldFavorPriority() throws Http2Exception {

    // Root the streams at the connection and assign weights.
    setPriority(STREAM_A, 0, (short) 50, false);
    setPriority(STREAM_B, 0, (short) 200, false);
    setPriority(STREAM_C, 0, (short) 100, false);
    setPriority(STREAM_D, 0, (short) 100, false);
    updateStream(STREAM_A, 1000, true);
    updateStream(STREAM_B, 1000, true);
    updateStream(STREAM_C, 1000, false);
    updateStream(STREAM_D, 1000, false);
    // Set allocation quantum to 1 so it is easier to see the ratio of total bytes written between each stream.
    distributor.allocationQuantum(1);
    assertTrue(write(100));
    assertEquals(20, captureWrites(STREAM_A));
    verifyWrite(times(20), STREAM_A, 1);
    assertEquals(80, captureWrites(STREAM_B));
    verifyWrite(times(0), STREAM_B, 1);
    verifyNeverWrite(STREAM_C);
    verifyNeverWrite(STREAM_D);
    assertTrue(write(100));
    assertEquals(40, captureWrites(STREAM_A));
    verifyWrite(times(40), STREAM_A, 1);
    assertEquals(160, captureWrites(STREAM_B));
    verifyWrite(atMost(1), STREAM_B, 1);
    verifyNeverWrite(STREAM_C);
    verifyNeverWrite(STREAM_D);
    assertTrue(write(1050));
    assertEquals(250, captureWrites(STREAM_A));
    verifyWrite(times(250), STREAM_A, 1);
    assertEquals(1000, captureWrites(STREAM_B));
    verifyWrite(atMost(2), STREAM_B, 1);
    verifyNeverWrite(STREAM_C);
    verifyNeverWrite(STREAM_D);
    assertFalse(write(750));
    assertEquals(1000, captureWrites(STREAM_A));
    verifyWrite(times(1), STREAM_A, 750);
    assertEquals(1000, captureWrites(STREAM_B));
    verifyWrite(times(0), STREAM_B, 0);
    verifyNeverWrite(STREAM_C);
    verifyNeverWrite(STREAM_D);
}