Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/test/processor_tests.cpp
Show First 20 Lines • Show All 1,205 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(quorum_detection) { | ||||
// the quorum as established | // the quorum as established | ||||
processor->withPeerManager([&](avalanche::PeerManager &pm) { | processor->withPeerManager([&](avalanche::PeerManager &pm) { | ||||
pm.removeNode(0); | pm.removeNode(0); | ||||
BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), minScore); | BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), minScore); | ||||
BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | ||||
}); | }); | ||||
BOOST_CHECK(processor->isQuorumEstablished()); | BOOST_CHECK(processor->isQuorumEstablished()); | ||||
// Remove peers one at a time by orphaning their proofs, and ensure the | // Remove peers one at a time and ensure the quorum stays established | ||||
// quorum stays established | auto spendProofUtxo = [&processor](ProofRef proof) { | ||||
auto orphanProof = [&processor](ProofRef proof) { | |||||
{ | { | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | ||||
coins.SpendCoin(proof->getStakes()[0].getStake().getUTXO()); | coins.SpendCoin(proof->getStakes()[0].getStake().getUTXO()); | ||||
} | } | ||||
processor->withPeerManager([&proof](avalanche::PeerManager &pm) { | processor->withPeerManager([&proof](avalanche::PeerManager &pm) { | ||||
pm.updatedBlockTip(); | pm.updatedBlockTip(); | ||||
BOOST_CHECK(pm.isOrphan(proof->getId())); | |||||
BOOST_CHECK(!pm.isBoundToPeer(proof->getId())); | BOOST_CHECK(!pm.isBoundToPeer(proof->getId())); | ||||
}); | }); | ||||
}; | }; | ||||
orphanProof(proof2); | spendProofUtxo(proof2); | ||||
processor->withPeerManager([&](avalanche::PeerManager &pm) { | processor->withPeerManager([&](avalanche::PeerManager &pm) { | ||||
BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), 3 * minScore / 4); | BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), 3 * minScore / 4); | ||||
BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | ||||
}); | }); | ||||
BOOST_CHECK(processor->isQuorumEstablished()); | BOOST_CHECK(processor->isQuorumEstablished()); | ||||
orphanProof(proof1); | spendProofUtxo(proof1); | ||||
processor->withPeerManager([&](avalanche::PeerManager &pm) { | processor->withPeerManager([&](avalanche::PeerManager &pm) { | ||||
BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), minScore / 4); | BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), minScore / 4); | ||||
BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | ||||
}); | }); | ||||
BOOST_CHECK(processor->isQuorumEstablished()); | BOOST_CHECK(processor->isQuorumEstablished()); | ||||
orphanProof(processor->getLocalProof()); | spendProofUtxo(processor->getLocalProof()); | ||||
processor->withPeerManager([&](avalanche::PeerManager &pm) { | processor->withPeerManager([&](avalanche::PeerManager &pm) { | ||||
BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), 0); | BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), 0); | ||||
BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | BOOST_CHECK_EQUAL(pm.getConnectedPeersScore(), 0); | ||||
}); | }); | ||||
BOOST_CHECK(processor->isQuorumEstablished()); | BOOST_CHECK(processor->isQuorumEstablished()); | ||||
gArgs.ClearForcedArg("-avamasterkey"); | gArgs.ClearForcedArg("-avamasterkey"); | ||||
gArgs.ClearForcedArg("-avaproof"); | gArgs.ClearForcedArg("-avaproof"); | ||||
▲ Show 20 Lines • Show All 205 Lines • Show Last 20 Lines |