@Test
  public void whenProposerSelfRemovesSelectsNextProposerInLineEvenWhenSticky() {
    final long PREV_BLOCK_NUMBER = 2;
    final ConsensusRoundIdentifier roundId = new ConsensusRoundIdentifier(PREV_BLOCK_NUMBER + 1, 0);

    final Address localAddr = AddressHelpers.ofValue(10); // arbitrarily selected

    // LocalAddr will be in index 2 - the next proposer will also be in 2 (as prev proposer is
    // removed)
    final List<Address> validatorList = createValidatorList(localAddr, 2, 2);
    validatorList.remove(localAddr);

    // Note the signer of the Previous block was not included.
    final Blockchain blockchain =
        createMockedBlockChainWithHeadOf(PREV_BLOCK_NUMBER, localAddr, validatorList);

    final ProposerSelector uut =
        new BftProposerSelector(blockchain, blockInterface, false, validatorProvider);

    assertThat(uut.selectProposerForRound(roundId)).isEqualTo(validatorList.get(2));
  }
This creates a list of validators, with the a number of validators above and below the local
address. The returned list is sorted.

@param localAddr The address of the node which signed the parent block
@param countLower The number of validators which have a higher address than localAddr
@param countHigher The number of validators which have a lower address than localAddr
@return A sorted list of validators which matches parameters (including the localAddr).
consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/blockcreation/ProposerSelectorTest.java