Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/test/peermanager_tests.cpp
Show First 20 Lines • Show All 495 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(node_binding_reorg) { | ||||
{ | { | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | ||||
coins.SpendCoin(utxo); | coins.SpendCoin(utxo); | ||||
} | } | ||||
pm.updatedBlockTip(); | pm.updatedBlockTip(); | ||||
BOOST_CHECK(pm.isOrphan(proofid)); | BOOST_CHECK(pm.isOrphan(proofid)); | ||||
BOOST_CHECK(!pm.isValid(proofid)); | BOOST_CHECK(!pm.isBoundToPeer(proofid)); | ||||
for (int i = 0; i < 10; i++) { | for (int i = 0; i < 10; i++) { | ||||
BOOST_CHECK(TestPeerManager::isNodePending(pm, i)); | BOOST_CHECK(TestPeerManager::isNodePending(pm, i)); | ||||
BOOST_CHECK(!TestPeerManager::nodeBelongToPeer(pm, i, peerid)); | BOOST_CHECK(!TestPeerManager::nodeBelongToPeer(pm, i, peerid)); | ||||
} | } | ||||
BOOST_CHECK(pm.verify()); | BOOST_CHECK(pm.verify()); | ||||
// Make the proof great again | // Make the proof great again | ||||
{ | { | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | ||||
coins.AddCoin(utxo, Coin(CTxOut(amount, script), height, false), false); | coins.AddCoin(utxo, Coin(CTxOut(amount, script), height, false), false); | ||||
} | } | ||||
pm.updatedBlockTip(); | pm.updatedBlockTip(); | ||||
BOOST_CHECK(!pm.isOrphan(proofid)); | BOOST_CHECK(!pm.isOrphan(proofid)); | ||||
BOOST_CHECK(pm.isValid(proofid)); | BOOST_CHECK(pm.isBoundToPeer(proofid)); | ||||
// The peerid has certainly been updated | // The peerid has certainly been updated | ||||
peerid = TestPeerManager::registerAndGetPeerId(pm, proof); | peerid = TestPeerManager::registerAndGetPeerId(pm, proof); | ||||
BOOST_CHECK_NE(peerid, NO_PEER); | BOOST_CHECK_NE(peerid, NO_PEER); | ||||
for (int i = 0; i < 10; i++) { | for (int i = 0; i < 10; i++) { | ||||
BOOST_CHECK(!TestPeerManager::isNodePending(pm, i)); | BOOST_CHECK(!TestPeerManager::isNodePending(pm, i)); | ||||
BOOST_CHECK(TestPeerManager::nodeBelongToPeer(pm, i, peerid)); | BOOST_CHECK(TestPeerManager::nodeBelongToPeer(pm, i, peerid)); | ||||
} | } | ||||
BOOST_CHECK(pm.verify()); | BOOST_CHECK(pm.verify()); | ||||
▲ Show 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(orphan_proofs) { | ||||
BOOST_CHECK(!pm.registerProof(proof2)); | BOOST_CHECK(!pm.registerProof(proof2)); | ||||
BOOST_CHECK(!pm.registerProof(proof3)); | BOOST_CHECK(!pm.registerProof(proof3)); | ||||
auto checkOrphan = [&](const ProofRef &proof, bool expectedOrphan) { | auto checkOrphan = [&](const ProofRef &proof, bool expectedOrphan) { | ||||
const ProofId &proofid = proof->getId(); | const ProofId &proofid = proof->getId(); | ||||
BOOST_CHECK(pm.exists(proofid)); | BOOST_CHECK(pm.exists(proofid)); | ||||
BOOST_CHECK_EQUAL(pm.isOrphan(proofid), expectedOrphan); | BOOST_CHECK_EQUAL(pm.isOrphan(proofid), expectedOrphan); | ||||
BOOST_CHECK_EQUAL(pm.isValid(proofid), !expectedOrphan); | BOOST_CHECK_EQUAL(pm.isBoundToPeer(proofid), !expectedOrphan); | ||||
bool ret = false; | bool ret = false; | ||||
pm.forEachPeer([&](const Peer &peer) { | pm.forEachPeer([&](const Peer &peer) { | ||||
if (proof->getId() == peer.proof->getId()) { | if (proof->getId() == peer.proof->getId()) { | ||||
ret = true; | ret = true; | ||||
} | } | ||||
}); | }); | ||||
BOOST_CHECK_EQUAL(ret, !expectedOrphan); | BOOST_CHECK_EQUAL(ret, !expectedOrphan); | ||||
▲ Show 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | BOOST_CHECK(pm.isOrphan(conflictingProof->getId())); | ||||
coins.SpendCoin(outpointToSend); | coins.SpendCoin(outpointToSend); | ||||
} | } | ||||
pm.updatedBlockTip(); | pm.updatedBlockTip(); | ||||
BOOST_CHECK(pm.isOrphan(proofToInvalidate->getId())); | BOOST_CHECK(pm.isOrphan(proofToInvalidate->getId())); | ||||
BOOST_CHECK(!pm.isOrphan(conflictingProof->getId())); | BOOST_CHECK(!pm.isOrphan(conflictingProof->getId())); | ||||
BOOST_CHECK(pm.isValid(conflictingProof->getId())); | BOOST_CHECK(pm.isBoundToPeer(conflictingProof->getId())); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(conflicting_proof_selection) { | BOOST_AUTO_TEST_CASE(conflicting_proof_selection) { | ||||
avalanche::PeerManager pm; | avalanche::PeerManager pm; | ||||
const CKey key = CKey::MakeCompressedKey(); | const CKey key = CKey::MakeCompressedKey(); | ||||
const Amount amount(10 * COIN); | const Amount amount(10 * COIN); | ||||
▲ Show 20 Lines • Show All 79 Lines • Show Last 20 Lines |