use of com.radixdlt.consensus.Vote 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.consensus.Vote in project radixdlt by radixdlt.
the class SafetyRulesTest method when_vote_on_proposal_two_after_genesis__then_returned_vote_has_no_commit.
@Test
public void when_vote_on_proposal_two_after_genesis__then_returned_vote_has_no_commit() {
when(safetyState.getLastVotedView()).thenReturn(View.of(1));
when(safetyState.getLockedView()).thenReturn(View.of(0));
when(safetyState.toBuilder()).thenReturn(mock(Builder.class));
VerifiedVertex proposal = mock(VerifiedVertex.class);
when(proposal.touchesGenesis()).thenReturn(true);
when(proposal.hasDirectParent()).thenReturn(true);
when(proposal.parentHasDirectParent()).thenReturn(true);
BFTHeader parent = mock(BFTHeader.class);
when(parent.getView()).thenReturn(View.of(1));
when(proposal.getParentHeader()).thenReturn(parent);
when(proposal.getView()).thenReturn(View.of(2));
BFTHeader grandParent = mock(BFTHeader.class);
when(grandParent.getView()).thenReturn(mock(View.class));
when(proposal.getGrandParentHeader()).thenReturn(grandParent);
Optional<Vote> voteMaybe = safetyRules.voteFor(proposal, mock(BFTHeader.class), 1L, mock(HighQC.class));
assertThat(voteMaybe).isNotEmpty();
Vote vote = voteMaybe.get();
assertThat(vote.getVoteData().getCommitted()).isEmpty();
}
use of com.radixdlt.consensus.Vote in project radixdlt by radixdlt.
the class SafetyRulesTest method when_vote_on_proposal_three_after_genesis_with_skip__then_returned_vote_has_no_commit.
@Test
public void when_vote_on_proposal_three_after_genesis_with_skip__then_returned_vote_has_no_commit() {
when(safetyState.getLastVotedView()).thenReturn(View.of(1));
when(safetyState.getLockedView()).thenReturn(View.of(0));
when(safetyState.toBuilder()).thenReturn(mock(Builder.class));
VerifiedVertex proposal = mock(VerifiedVertex.class);
when(proposal.touchesGenesis()).thenReturn(false);
when(proposal.hasDirectParent()).thenReturn(false);
when(proposal.parentHasDirectParent()).thenReturn(true);
BFTHeader parent = mock(BFTHeader.class);
when(parent.getView()).thenReturn(View.of(2));
when(proposal.getParentHeader()).thenReturn(parent);
when(proposal.getView()).thenReturn(View.of(4));
BFTHeader grandParent = mock(BFTHeader.class);
when(grandParent.getView()).thenReturn(mock(View.class));
when(proposal.getGrandParentHeader()).thenReturn(grandParent);
Optional<Vote> voteMaybe = safetyRules.voteFor(proposal, mock(BFTHeader.class), 1L, mock(HighQC.class));
assertThat(voteMaybe).isNotEmpty();
Vote vote = voteMaybe.get();
assertThat(vote.getVoteData().getCommitted()).isEmpty();
}
use of com.radixdlt.consensus.Vote in project radixdlt by radixdlt.
the class SafetyRulesTest method when_timeout_already_timed_out_vote_than_the_same_vote_is_returned.
@Test
public void when_timeout_already_timed_out_vote_than_the_same_vote_is_returned() {
Vote vote = mock(Vote.class);
when(vote.isTimeout()).thenReturn(true);
assertEquals(vote, safetyRules.timeoutVote(vote));
}
use of com.radixdlt.consensus.Vote in project radixdlt by radixdlt.
the class BFTEventReducerTest method when_process_vote_with_quorum__then_processed.
@Test
public void when_process_vote_with_quorum__then_processed() {
BFTNode author = mock(BFTNode.class);
Vote vote = mock(Vote.class);
when(vote.getAuthor()).thenReturn(author);
QuorumCertificate qc = mock(QuorumCertificate.class);
HighQC highQc = mock(HighQC.class);
QuorumCertificate highestCommittedQc = mock(QuorumCertificate.class);
when(highQc.highestCommittedQC()).thenReturn(highestCommittedQc);
when(vote.getView()).thenReturn(View.of(1));
when(this.pendingVotes.insertVote(any(), any())).thenReturn(VoteProcessingResult.qcQuorum(qc));
when(this.vertexStore.highQC()).thenReturn(highQc);
// Move to view 1
this.bftEventReducer.processViewUpdate(ViewUpdate.create(View.of(1), highQc, mock(BFTNode.class), this.self));
this.bftEventReducer.processVote(vote);
verify(this.viewQuorumReachedEventDispatcher, times(1)).dispatch(any());
verify(this.pendingVotes, times(1)).insertVote(eq(vote), any());
verifyNoMoreInteractions(this.pendingVotes);
}
Aggregations