use of com.radixdlt.consensus.VoteData in project radixdlt by radixdlt.
the class VertexStoreTest method setUp.
@Before
public void setUp() {
// No type check issues with mocking generic here
Ledger ssc = mock(Ledger.class);
this.ledger = ssc;
// TODO: replace mock with the real thing
doAnswer(invocation -> {
VerifiedVertex verifiedVertex = invocation.getArgument(1);
return Optional.of(new PreparedVertex(verifiedVertex, MOCKED_HEADER, ImmutableList.of(), ImmutableMap.of(), 1L));
}).when(ledger).prepare(any(), any());
this.bftUpdateSender = rmock(EventDispatcher.class);
this.rebuildUpdateEventDispatcher = rmock(EventDispatcher.class);
this.bftHighQCUpdateEventDispatcher = rmock(EventDispatcher.class);
this.committedSender = rmock(EventDispatcher.class);
this.genesisHash = HashUtils.zero256();
this.genesisVertex = new VerifiedVertex(UnverifiedVertex.createGenesis(MOCKED_HEADER), genesisHash);
this.rootQC = QuorumCertificate.ofGenesis(genesisVertex, MOCKED_HEADER);
this.sut = VertexStore.create(VerifiedVertexStoreState.create(HighQC.from(rootQC), genesisVertex, Optional.empty(), hasher), ledger, hasher, bftUpdateSender, rebuildUpdateEventDispatcher, bftHighQCUpdateEventDispatcher, committedSender);
AtomicReference<BFTHeader> lastParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
AtomicReference<BFTHeader> lastGrandParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
AtomicReference<BFTHeader> lastGreatGrandParentHeader = new AtomicReference<>(new BFTHeader(View.genesis(), genesisHash, MOCKED_HEADER));
this.nextSkippableVertex = (skipOne) -> {
BFTHeader parentHeader = lastParentHeader.get();
BFTHeader grandParentHeader = lastGrandParentHeader.get();
BFTHeader greatGrandParentHeader = lastGreatGrandParentHeader.get();
final QuorumCertificate qc;
if (!parentHeader.getView().equals(View.genesis())) {
VoteData data = new VoteData(parentHeader, grandParentHeader, skipOne ? null : greatGrandParentHeader);
qc = new QuorumCertificate(data, new TimestampedECDSASignatures());
} else {
qc = rootQC;
}
View view = parentHeader.getView().next();
if (skipOne) {
view = view.next();
}
var rawVertex = UnverifiedVertex.create(qc, view, List.of(Txn.create(new byte[0])), BFTNode.random());
HashCode hash = hasher.hash(rawVertex);
VerifiedVertex vertex = new VerifiedVertex(rawVertex, hash);
lastParentHeader.set(new BFTHeader(view, hash, MOCKED_HEADER));
lastGrandParentHeader.set(parentHeader);
lastGreatGrandParentHeader.set(grandParentHeader);
return vertex;
};
this.nextVertex = () -> nextSkippableVertex.apply(false);
}
use of com.radixdlt.consensus.VoteData in project radixdlt by radixdlt.
the class VerifiedVertexStoreStateCreationTest method creating_vertex_store_with_qc_not_matching_vertex_should_fail.
@Test
public void creating_vertex_store_with_qc_not_matching_vertex_should_fail() {
BFTHeader genesisHeader = new BFTHeader(View.of(0), HashUtils.random256(), mock(LedgerHeader.class));
VoteData voteData = new VoteData(genesisHeader, genesisHeader, genesisHeader);
QuorumCertificate badRootQC = new QuorumCertificate(voteData, new TimestampedECDSASignatures());
assertThatThrownBy(() -> VerifiedVertexStoreState.create(HighQC.from(badRootQC), genesisVertex, Optional.empty(), hasher)).isInstanceOf(IllegalStateException.class);
}
Aggregations