public long onStatusMessage(
        final StatusMessageFlyweight flyweight,
        final InetSocketAddress receiverAddress,
        final long senderLimit,
        final int initialTermId,
        final int positionBitsToShift,
        final long timeNs)
    {
        return processStatusMessage(
            flyweight, senderLimit, initialTermId, positionBitsToShift, timeNs, matchesTag(flyweight));
    }
@Test
    void shouldClampToSenderLimitUntilMinimumGroupSizeIsMet()
    {
        final UdpChannel channelGroupSizeThree = UdpChannel.parse(
            "aeron:udp?endpoint=224.20.30.39:24326|interface=localhost|fc=tagged,g:123/3");

        flowControl.initialize(
            newContext(), countersManager, channelGroupSizeThree, 0, 0, 0, 0, 0);
        final long groupTag = 123L;

        final long senderLimit = 5000L;
        final int termOffset = 10_000;

        assertEquals(senderLimit, onStatusMessage(flowControl, 0, termOffset, senderLimit, null));
        assertEquals(senderLimit, onIdle(flowControl, senderLimit));
        assertEquals(senderLimit, onStatusMessage(flowControl, 1, termOffset, senderLimit, groupTag));
        assertEquals(senderLimit, onIdle(flowControl, senderLimit));
        assertEquals(senderLimit, onStatusMessage(flowControl, 2, termOffset, senderLimit, groupTag));
        assertEquals(senderLimit, onIdle(flowControl, senderLimit));
        assertEquals(senderLimit, onStatusMessage(flowControl, 3, termOffset, senderLimit, null));
        assertEquals(senderLimit, onIdle(flowControl, senderLimit));
        assertEquals(termOffset + WINDOW_LENGTH, onStatusMessage(flowControl, 4, termOffset, senderLimit, groupTag));
        assertEquals(termOffset + WINDOW_LENGTH, onIdle(flowControl, senderLimit));
    }