Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/test/peermanager_tests.cpp
Show All 23 Lines | struct TestPeerManager { | ||||
return node.peerid == peerid; | return node.peerid == peerid; | ||||
}); | }); | ||||
} | } | ||||
static bool isNodePending(const PeerManager &pm, NodeId nodeid) { | static bool isNodePending(const PeerManager &pm, NodeId nodeid) { | ||||
auto &pendingNodesView = pm.pendingNodes.get<by_nodeid>(); | auto &pendingNodesView = pm.pendingNodes.get<by_nodeid>(); | ||||
return pendingNodesView.find(nodeid) != pendingNodesView.end(); | return pendingNodesView.find(nodeid) != pendingNodesView.end(); | ||||
} | } | ||||
static std::vector<uint32_t> getOrderedScores(const PeerManager &pm) { | |||||
std::vector<uint32_t> scores; | |||||
auto &peerView = pm.peers.get<by_score>(); | |||||
for (const Peer &peer : peerView) { | |||||
scores.push_back(peer.getScore()); | |||||
} | |||||
return scores; | |||||
} | |||||
}; | }; | ||||
} // namespace | } // namespace | ||||
} // namespace avalanche | } // namespace avalanche | ||||
BOOST_FIXTURE_TEST_SUITE(peermanager_tests, TestingSetup) | BOOST_FIXTURE_TEST_SUITE(peermanager_tests, TestingSetup) | ||||
BOOST_AUTO_TEST_CASE(select_peer_linear) { | BOOST_AUTO_TEST_CASE(select_peer_linear) { | ||||
// No peers. | // No peers. | ||||
▲ Show 20 Lines • Show All 743 Lines • ▼ Show 20 Lines | const std::string badProofHex( | ||||
"3e95b02cacfd357b64e4fb6c92e92dd00"); | "3e95b02cacfd357b64e4fb6c92e92dd00"); | ||||
bilingual_str error; | bilingual_str error; | ||||
Proof badProof; | Proof badProof; | ||||
BOOST_CHECK(Proof::FromHex(badProof, badProofHex, error)); | BOOST_CHECK(Proof::FromHex(badProof, badProofHex, error)); | ||||
BOOST_CHECK( | BOOST_CHECK( | ||||
!pm.registerProof(std::make_shared<Proof>(std::move(badProof)))); | !pm.registerProof(std::make_shared<Proof>(std::move(badProof)))); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(score_oredering) { | |||||
avalanche::PeerManager pm; | |||||
std::vector<uint32_t> expectedScores(10); | |||||
// Expect the peers to be ordered by descending score | |||||
std::generate(expectedScores.rbegin(), expectedScores.rend(), | |||||
[n = 1]() mutable { return n++ * MIN_VALID_PROOF_SCORE; }); | |||||
std::vector<std::shared_ptr<Proof>> proofs; | |||||
proofs.reserve(expectedScores.size()); | |||||
for (uint32_t score : expectedScores) { | |||||
proofs.push_back(getRandomProofPtr(score)); | |||||
} | |||||
// Shuffle the proofs so they are registered in a random score order | |||||
Shuffle(proofs.begin(), proofs.end(), FastRandomContext()); | |||||
for (auto &proof : proofs) { | |||||
BOOST_CHECK(pm.registerProof(proof)); | |||||
} | |||||
auto peersScores = TestPeerManager::getOrderedScores(pm); | |||||
BOOST_CHECK_EQUAL_COLLECTIONS(peersScores.begin(), peersScores.end(), | |||||
expectedScores.begin(), expectedScores.end()); | |||||
} | |||||
BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() |