@Test
  public void futureProposalWithInsufficientPreparesDoesNotTriggerNextRound() {
    final QbftBlock initialBlock =
        context.createBlockForProposalFromChainHead(15, peers.getProposer().getNodeAddress());
    final QbftBlock reproposedBlock =
        context.createBlockForProposalFromChainHead(15, peers.getProposer().getNodeAddress());
    final ConsensusRoundIdentifier nextRoundId = new ConsensusRoundIdentifier(1, 1);

    final PreparedCertificate preparedRoundArtifacts =
        createValidPreparedCertificate(context, roundId, initialBlock);

    final List<SignedData<RoundChangePayload>> roundChanges =
        peers.createSignedRoundChangePayload(nextRoundId, preparedRoundArtifacts);

    final List<SignedData<PreparePayload>> prepares =
        peers.createSignedPreparePayloadOfAllPeers(roundId, initialBlock.getHash());

    final ValidatorPeer nextProposer = context.roundSpecificPeers(nextRoundId).getProposer();

    nextProposer.injectProposalForFutureRound(
        nextRoundId, roundChanges, prepares.subList(0, 2), reproposedBlock);

    peers.verifyNoMessagesReceived();
  }
Ensure the Qbft component responds appropriately when a future round Proposal message is
received.
consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/test/ReceivedFutureProposalTest.java