### Question:
IbftBlockHeightManager implements BlockHeightManager { @Override public void handleProposalPayload(final Proposal proposal) { LOG.trace("Received a Proposal Payload."); final MessageAge messageAge = determineAgeOfPayload(proposal.getRoundIdentifier().getRoundNumber()); if (messageAge == PRIOR_ROUND) { LOG.trace("Received Proposal Payload for a prior round={}", proposal.getRoundIdentifier()); } else { if (messageAge == FUTURE_ROUND) { if (!futureRoundProposalMessageValidator.validateProposalMessage(proposal)) { LOG.info("Received future Proposal which is illegal, no round change triggered."); return; } startNewRound(proposal.getRoundIdentifier().getRoundNumber()); } currentRound.handleProposalMessage(proposal); } } IbftBlockHeightManager(
      final BlockHeader parentHeader,
      final IbftFinalState finalState,
      final RoundChangeManager roundChangeManager,
      final IbftRoundFactory ibftRoundFactory,
      final Clock clock,
      final MessageValidatorFactory messageValidatorFactory); @Override void handleBlockTimerExpiry(final ConsensusRoundIdentifier roundIdentifier); @Override void roundExpired(final RoundExpiry expire); @Override void handleProposalPayload(final Proposal proposal); @Override void handlePreparePayload(final Prepare prepare); @Override void handleCommitPayload(final Commit commit); @Override void handleRoundChangePayload(final RoundChange message); @Override long getChainHeight(); @Override BlockHeader getParentBlockHeader();  }### Answer:
@Test public void illegalFutureRoundProposalDoesNotTriggerNewRound() { when(futureRoundProposalMessageValidator.validateProposalMessage(any())).thenReturn(false); final ConsensusRoundIdentifier futureRoundIdentifier = createFrom(roundIdentifier, 0, +2); final IbftBlockHeightManager manager = new IbftBlockHeightManager( headerTestFixture.buildHeader(), finalState, roundChangeManager, roundFactory, clock, messageValidatorFactory); final Proposal futureRoundProposal = messageFactory.createProposal( futureRoundIdentifier, createdBlock, Optional.of(new RoundChangeCertificate(Collections.emptyList()))); reset(roundFactory); manager.handleProposalPayload(futureRoundProposal); verify(roundFactory, never()).createNewRound(any(), anyInt()); }