Merge peers shouldn't put sharing list in to peers.

This commit is contained in:
clemahieu 2014-11-26 01:09:27 -06:00
commit 787a303ddb
4 changed files with 18 additions and 6 deletions

View file

@ -373,7 +373,7 @@ void rai::network::merge_peers (std::array <rai::endpoint, 8> const & peers_a)
{
for (auto i (peers_a.begin ()), j (peers_a.end ()); i != j; ++i)
{
if (!client.peers.insert_peer (*i))
if (!client.peers.known_peer (*i))
{
send_keepalive (*i);
}

View file

@ -620,14 +620,14 @@ namespace rai {
{
public:
peer_container (rai::endpoint const &);
// Unassigned, reserved, self
bool not_a_peer (rai::endpoint const &);
bool known_peer (rai::endpoint const &);
// Returns true if peer was already known
bool known_peer (rai::endpoint const &);
// Notify of peer we received from
bool insert_peer (rai::endpoint const &);
void random_fill (std::array <rai::endpoint, 8> &);
std::vector <peer_information> list ();
void refresh_action ();
void queue_next_refresh ();
std::vector <rai::peer_information> purge_list (std::chrono::system_clock::time_point const &);
size_t size ();
bool empty ();

View file

@ -257,4 +257,14 @@ TEST (client, scale_num)
auto down (rai::scale_down (num));
auto up (rai::scale_up (down));
ASSERT_EQ (num, up);
}
TEST (client, merge_peers)
{
rai::system system (24000, 1);
std::array <rai::endpoint, 8> endpoints;
endpoints.fill (rai::endpoint (boost::asio::ip::address_v6::loopback (), 24000));
endpoints [0] = rai::endpoint (boost::asio::ip::address_v6::loopback (), 24001);
system.clients [0]->network.merge_peers (endpoints);
ASSERT_EQ (0, system.clients [0]->peers.peers.size ());
}

View file

@ -65,9 +65,11 @@ TEST (peer_container, split)
auto now (std::chrono::system_clock::now ());
rai::endpoint endpoint1 (boost::asio::ip::address_v6::any (), 100);
rai::endpoint endpoint2 (boost::asio::ip::address_v6::any (), 101);
peers.peers.insert ({endpoint1, now - std::chrono::seconds (1), now - std::chrono::seconds (1)});
peers.peers.insert ({endpoint2, now + std::chrono::seconds (1), now + std::chrono::seconds (1)});
peers.peers.insert ({endpoint1, now - std::chrono::seconds (1), now});
peers.peers.insert ({endpoint2, now + std::chrono::seconds (1), now});
ASSERT_EQ (2, peers.peers.size ());
auto list (peers.purge_list (now));
ASSERT_EQ (1, peers.peers.size ());
ASSERT_EQ (1, list.size ());
ASSERT_EQ (endpoint2, list [0].endpoint);
}