Search in sources :

Example 21 with BFTNode

use of com.radixdlt.consensus.bft.BFTNode in project radixdlt by radixdlt.

the class WeightedRotatingLeadersTest method when_validators_distributed_by_fibonacci__then_leaders_also_distributed_in_fibonacci.

@Test
public void when_validators_distributed_by_fibonacci__then_leaders_also_distributed_in_fibonacci() {
    // fibonacci sequence can quickly explode so keep sizes small
    final int validatorSetSize = 8;
    final int sizeOfCache = 4;
    final Supplier<IntStream> fibonacci = () -> Stream.iterate(new int[] { 1, 1 }, t -> new int[] { t[1], t[0] + t[1] }).mapToInt(t -> t[0]).limit(validatorSetSize);
    final int sumOfPower = fibonacci.get().sum();
    this.validatorsInOrder = fibonacci.get().mapToObj(p -> BFTValidator.from(BFTNode.random(), UInt256.from(p))).collect(ImmutableList.toImmutableList());
    BFTValidatorSet validatorSet = BFTValidatorSet.from(validatorsInOrder);
    this.weightedRotatingLeaders = new WeightedRotatingLeaders(validatorSet, sizeOfCache);
    Map<BFTNode, UInt256> proposerCounts = Stream.iterate(View.of(0), View::next).limit(sumOfPower).map(this.weightedRotatingLeaders::getProposer).collect(groupingBy(p -> p, collectingAndThen(counting(), UInt256::from)));
    Map<BFTNode, UInt256> expected = validatorsInOrder.stream().collect(toMap(BFTValidator::getNode, BFTValidator::getPower));
    assertThat(proposerCounts).isEqualTo(expected);
}
Also used : IntStream(java.util.stream.IntStream) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Collectors.counting(java.util.stream.Collectors.counting) Collectors.groupingBy(java.util.stream.Collectors.groupingBy) Test(org.junit.Test) Collectors.collectingAndThen(java.util.stream.Collectors.collectingAndThen) BFTValidatorSet(com.radixdlt.consensus.bft.BFTValidatorSet) Supplier(java.util.function.Supplier) BFTValidator(com.radixdlt.consensus.bft.BFTValidator) ECKeyPair(com.radixdlt.crypto.ECKeyPair) Stream(java.util.stream.Stream) Collectors.toMap(java.util.stream.Collectors.toMap) ImmutableList(com.google.common.collect.ImmutableList) Map(java.util.Map) BFTNode(com.radixdlt.consensus.bft.BFTNode) KeyComparator(com.radixdlt.utils.KeyComparator) Comparator(java.util.Comparator) View(com.radixdlt.consensus.bft.View) UInt256(com.radixdlt.utils.UInt256) BFTNode(com.radixdlt.consensus.bft.BFTNode) BFTValidatorSet(com.radixdlt.consensus.bft.BFTValidatorSet) IntStream(java.util.stream.IntStream) UInt256(com.radixdlt.utils.UInt256) Test(org.junit.Test)

Aggregations

BFTNode (com.radixdlt.consensus.bft.BFTNode)21 Test (org.junit.Test)11 View (com.radixdlt.consensus.bft.View)9 BFTValidatorSet (com.radixdlt.consensus.bft.BFTValidatorSet)8 HighQC (com.radixdlt.consensus.HighQC)6 Vote (com.radixdlt.consensus.Vote)6 ViewUpdate (com.radixdlt.consensus.bft.ViewUpdate)6 AbstractModule (com.google.inject.AbstractModule)5 HashSigner (com.radixdlt.consensus.HashSigner)5 Proposal (com.radixdlt.consensus.Proposal)5 BFTInsertUpdate (com.radixdlt.consensus.bft.BFTInsertUpdate)5 ValidationState (com.radixdlt.consensus.bft.ValidationState)5 ImmutableList (com.google.common.collect.ImmutableList)4 TypeLiteral (com.google.inject.TypeLiteral)4 BFTConfiguration (com.radixdlt.consensus.BFTConfiguration)4 BFTCommittedUpdate (com.radixdlt.consensus.bft.BFTCommittedUpdate)4 BFTHighQCUpdate (com.radixdlt.consensus.bft.BFTHighQCUpdate)4 BFTRebuildUpdate (com.radixdlt.consensus.bft.BFTRebuildUpdate)4 BFTValidator (com.radixdlt.consensus.bft.BFTValidator)4 NoVote (com.radixdlt.consensus.bft.NoVote)4