@Test
public void shouldSendSetupFrameAfterReceivingStatusMessageWithSetupBit()
{
final StatusMessageFlyweight msg = mock(StatusMessageFlyweight.class);
when(msg.consumptionTermId()).thenReturn(INITIAL_TERM_ID);
when(msg.consumptionTermOffset()).thenReturn(0);
when(msg.receiverWindowLength()).thenReturn(ALIGNED_FRAME_LENGTH);
publication.onStatusMessage(msg, rcvAddress);
final UnsafeBuffer buffer = new UnsafeBuffer(ByteBuffer.allocateDirect(PAYLOAD.length));
buffer.putBytes(0, PAYLOAD);
termAppenders[0].appendUnfragmentedMessage(headerWriter, buffer, 0, PAYLOAD.length, null, INITIAL_TERM_ID);
sender.doWork();
assertThat(receivedFrames.size(), is(2));
receivedFrames.remove();
receivedFrames.remove();
publication.triggerSendSetupFrame();
sender.doWork();
assertThat(receivedFrames.size(), is(0));
currentTimestamp += Configuration.PUBLICATION_SETUP_TIMEOUT_NS + 10;
sender.doWork();
assertThat(receivedFrames.size(), is(1));
setupHeader.wrap(new UnsafeBuffer(receivedFrames.remove()));
assertThat(setupHeader.headerType(), is(HeaderFlyweight.HDR_TYPE_SETUP));
}