### Question:
IbftRound { public void createAndSendProposalMessage(final long headerTimeStampSeconds) { final Block block = blockCreator.createBlock(headerTimeStampSeconds); final IbftExtraData extraData = IbftExtraData.decode(block.getHeader()); LOG.debug("Creating proposed block. round={}", roundState.getRoundIdentifier()); LOG.trace( "Creating proposed block with extraData={} blockHeader={}", extraData, block.getHeader()); updateStateWithProposalAndTransmit(block, Optional.empty()); } IbftRound(
      final RoundState roundState,
      final IbftBlockCreator blockCreator,
      final ProtocolContext protocolContext,
      final BlockImporter blockImporter,
      final Subscribers<MinedBlockObserver> observers,
      final NodeKey nodeKey,
      final MessageFactory messageFactory,
      final IbftMessageTransmitter transmitter,
      final RoundTimer roundTimer); ConsensusRoundIdentifier getRoundIdentifier(); void createAndSendProposalMessage(final long headerTimeStampSeconds); void startRoundWith(
      final RoundChangeArtifacts roundChangeArtifacts, final long headerTimestamp); void handleProposalMessage(final Proposal msg); void handlePrepareMessage(final Prepare msg); void handleCommitMessage(final Commit msg); Optional<PreparedRoundArtifacts> constructPreparedRoundArtifacts();  }### Answer:
@Test public void sendsAProposalWhenRequested() { final RoundState roundState = new RoundState(roundIdentifier, 3, messageValidator); final IbftRound round = new IbftRound( roundState, blockCreator, protocolContext, blockImporter, subscribers, nodeKey, messageFactory, transmitter, roundTimer); round.createAndSendProposalMessage(15); verify(transmitter, times(1)) .multicastProposal(roundIdentifier, proposedBlock, Optional.empty()); verify(transmitter, never()).multicastPrepare(any(), any()); verify(transmitter, never()).multicastCommit(any(), any(), any()); }
@Test public void singleValidatorImportBlocksImmediatelyOnProposalCreation() { final RoundState roundState = new RoundState(roundIdentifier, 1, messageValidator); final IbftRound round = new IbftRound( roundState, blockCreator, protocolContext, blockImporter, subscribers, nodeKey, messageFactory, transmitter, roundTimer); round.createAndSendProposalMessage(15); verify(transmitter, times(1)) .multicastProposal(roundIdentifier, proposedBlock, Optional.empty()); verify(transmitter, never()).multicastPrepare(any(), any()); verify(transmitter, times(1)).multicastCommit(any(), any(), any()); verify(blockImporter, times(1)).importBlock(any(), any(), any()); }
@Test public void creatingNewBlockNotifiesBlockMiningObservers() { final RoundState roundState = new RoundState(roundIdentifier, 1, messageValidator); final IbftRound round = new IbftRound( roundState, blockCreator, protocolContext, blockImporter, subscribers, nodeKey, messageFactory, transmitter, roundTimer); round.createAndSendProposalMessage(15); verify(minedBlockObserver).blockMined(any()); }