use of com.radixdlt.hotstuff.bft.View in project radixdlt by radixdlt.
the class PacemakerStateTest method when_process_qc_for_wrong_view__then_ignored.
@Test
public void when_process_qc_for_wrong_view__then_ignored() {
HighQC highQC = mock(HighQC.class);
when(highQC.getHighestView()).thenReturn(View.of(1));
// Move ahead for a bit so we can send in a QC for a lower view
this.pacemakerState.processQC(highQCFor(View.of(0)));
this.pacemakerState.processQC(highQCFor(View.of(1)));
this.pacemakerState.processQC(highQCFor(View.of(2)));
verify(viewUpdateSender, times(1)).dispatch(argThat(v -> v.getCurrentView().equals(View.of(1))));
verify(viewUpdateSender, times(1)).dispatch(argThat(v -> v.getCurrentView().equals(View.of(2))));
verify(viewUpdateSender, times(1)).dispatch(argThat(v -> v.getCurrentView().equals(View.of(3))));
this.pacemakerState.processQC(highQC);
verifyNoMoreInteractions(viewUpdateSender);
}
use of com.radixdlt.hotstuff.bft.View in project radixdlt by radixdlt.
the class PacemakerTest method when_local_timeout__then_resend_previous_vote.
@Test
public void when_local_timeout__then_resend_previous_vote() {
View view = View.of(0);
Vote lastVote = mock(Vote.class);
Vote lastVoteWithTimeout = mock(Vote.class);
ImmutableSet<BFTNode> validators = rmock(ImmutableSet.class);
when(this.safetyRules.getLastVote(view)).thenReturn(Optional.of(lastVote));
when(this.safetyRules.timeoutVote(lastVote)).thenReturn(lastVoteWithTimeout);
when(this.validatorSet.nodes()).thenReturn(validators);
ViewUpdate viewUpdate = ViewUpdate.create(View.of(0), mock(HighQC.class), mock(BFTNode.class), mock(BFTNode.class));
this.pacemaker.processLocalTimeout(ScheduledLocalTimeout.create(viewUpdate, 0L));
verify(this.voteDispatcher, times(1)).dispatch(eq(validators), eq(lastVoteWithTimeout));
verifyNoMoreInteractions(this.vertexStore);
verify(this.safetyRules, times(1)).getLastVote(view);
verify(this.safetyRules, times(1)).timeoutVote(lastVote);
verifyNoMoreInteractions(this.safetyRules);
}
use of com.radixdlt.hotstuff.bft.View 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);
}
use of com.radixdlt.hotstuff.bft.View in project radixdlt by radixdlt.
the class BFTHeaderSerializeTest method get.
private static BFTHeader get() {
View view = View.of(1234567890L);
LedgerHeader ledgerHeader = LedgerHeaderMock.get();
return new BFTHeader(view, HashUtils.random256(), ledgerHeader);
}
Aggregations