diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -128,8 +128,6 @@ /** * Peer API. */ - PeerId addPeer(uint32_t score) { return addPeer(nextPeerId++, score); } - // Provide the peer associated toa proof. If the peer does not exists, then // it is created. PeerId getPeer(const Proof &proof); diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -10,16 +10,6 @@ namespace avalanche { -PeerId PeerManager::addPeer(PeerId p, uint32_t score) { - auto inserted = peers.emplace(p, uint32_t(slots.size()), Proof(score)); - assert(inserted.second); - - const uint64_t start = slotCount; - slots.emplace_back(start, score, p); - slotCount = start + score; - return p; -} - PeerId PeerManager::getPeer(const Proof &proof) { auto &pview = peers.get(); auto it = pview.find(proof.getId()); diff --git a/src/avalanche/test/peermanager_tests.cpp b/src/avalanche/test/peermanager_tests.cpp --- a/src/avalanche/test/peermanager_tests.cpp +++ b/src/avalanche/test/peermanager_tests.cpp @@ -149,35 +149,38 @@ } } -BOOST_AUTO_TEST_CASE(add_peer) { +BOOST_AUTO_TEST_CASE(peer_probabilities) { // No peers. PeerManager pm; - BOOST_CHECK_EQUAL(pm.selectPeer(), NO_PEER); + BOOST_CHECK_EQUAL(pm.selectNode(), NO_NODE); + + const NodeId node0 = 42, node1 = 69, node2 = 37; // One peer, we always return it. - PeerId peer0 = pm.addPeer(100); - BOOST_CHECK_EQUAL(pm.selectPeer(), peer0); + Proof proof0(100); + pm.addNode(Proof(100), node0, CPubKey()); + BOOST_CHECK_EQUAL(pm.selectNode(), node0); // Two peers, verify ratio. - PeerId peer1 = pm.addPeer(200); + pm.addNode(Proof(200), node1, CPubKey()); std::unordered_map results = {}; for (int i = 0; i < 10000; i++) { - size_t p = pm.selectPeer(); - BOOST_CHECK(p == peer0 || p == peer1); - results[p]++; + size_t n = pm.selectNode(); + BOOST_CHECK(n == node0 || n == node1); + results[n]++; } BOOST_CHECK(abs(2 * results[0] - results[1]) < 500); // Three peers, verify ratio. - PeerId peer2 = pm.addPeer(100); + pm.addNode(Proof(100), node2, CPubKey()); results.clear(); for (int i = 0; i < 10000; i++) { - size_t p = pm.selectPeer(); - BOOST_CHECK(p == peer0 || p == peer1 || p == peer2); - results[p]++; + size_t n = pm.selectNode(); + BOOST_CHECK(n == node0 || n == node1 || n == node2); + results[n]++; } BOOST_CHECK(abs(results[0] - results[1] + results[2]) < 500); @@ -191,7 +194,7 @@ // Add 4 peers. std::array peerids; for (int i = 0; i < 4; i++) { - peerids[i] = pm.addPeer(100); + peerids[i] = pm.getPeer(Proof(100)); } BOOST_CHECK_EQUAL(pm.getSlotCount(), 400); @@ -221,7 +224,7 @@ // Add 4 more peers. for (int i = 0; i < 4; i++) { - peerids[i + 4] = pm.addPeer(100); + peerids[i + 4] = pm.getPeer(Proof(100)); } BOOST_CHECK_EQUAL(pm.getSlotCount(), 700); @@ -263,7 +266,7 @@ // Add 4 peers. std::array peerids; for (int i = 0; i < 4; i++) { - peerids[i] = pm.addPeer(100); + peerids[i] = pm.getPeer(Proof(100)); } BOOST_CHECK_EQUAL(pm.getSlotCount(), 400); @@ -331,7 +334,7 @@ // Add 4 peers. std::array peerids; for (int i = 0; i < 4; i++) { - peerids[i] = pm.addPeer(100); + peerids[i] = pm.getPeer(Proof(100)); } // Remove all peers.