test: add combined onion/localhost eviction protection coverage
This commit is contained in:
1 file changed
+104
@@ -156,6 +156,110 @@ BOOST_AUTO_TEST_CASE(peer_protection_test)
|
|||||||
/* protected_peer_ids */ {0, 1, 2, 7, 8, 9},
|
/* protected_peer_ids */ {0, 1, 2, 7, 8, 9},
|
||||||
/* unprotected_peer_ids */ {3, 4, 5, 6, 10, 11},
|
/* unprotected_peer_ids */ {3, 4, 5, 6, 10, 11},
|
||||||
random_context));
|
random_context));
|
||||||
|
|
||||||
|
// Tests with 2 networks...
|
||||||
|
|
||||||
|
// Combined test: expect having 1 localhost and 1 onion peer out of 4 to
|
||||||
|
// protect 1 localhost, 0 onion and 1 other peer, sorted by longest uptime;
|
||||||
|
// stable sort breaks tie with array order of localhost first.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
4, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 4);
|
||||||
|
c.m_network = (c.id == 3) ? NET_ONION : NET_IPV4;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 4},
|
||||||
|
/* unprotected_peer_ids */ {1, 2},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 1 localhost and 1 onion peer out of 7 to
|
||||||
|
// protect 1 localhost, 0 onion, and 2 other peers (3 total), sorted by
|
||||||
|
// uptime; stable sort breaks tie with array order of localhost first.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
7, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 6);
|
||||||
|
c.m_network = (c.id == 5) ? NET_ONION : NET_IPV4;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 6},
|
||||||
|
/* unprotected_peer_ids */ {2, 3, 4, 5},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 1 localhost and 1 onion peer out of 8 to
|
||||||
|
// protect protect 1 localhost, 1 onion and 2 other peers (4 total), sorted
|
||||||
|
// by uptime; stable sort breaks tie with array order of localhost first.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
8, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 6);
|
||||||
|
c.m_network = (c.id == 5) ? NET_ONION : NET_IPV4;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 5, 6},
|
||||||
|
/* unprotected_peer_ids */ {2, 3, 4, 7},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 3 localhost and 3 onion peers out of 12 to
|
||||||
|
// protect 2 localhost and 1 onion, plus 3 other peers, sorted by longest
|
||||||
|
// uptime; stable sort breaks ties with the array order of localhost first.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
num_peers, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 6 || c.id == 9 || c.id == 11);
|
||||||
|
c.m_network = (c.id == 7 || c.id == 8 || c.id == 10) ? NET_ONION : NET_IPV6;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 2, 6, 7, 9},
|
||||||
|
/* unprotected_peer_ids */ {3, 4, 5, 8, 10, 11},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 4 localhost and 1 onion peer out of 12 to
|
||||||
|
// protect 2 localhost and 1 onion, plus 3 other peers, sorted by longest uptime.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
num_peers, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id > 4 && c.id < 9);
|
||||||
|
c.m_network = (c.id == 10) ? NET_ONION : NET_IPV4;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 2, 5, 6, 10},
|
||||||
|
/* unprotected_peer_ids */ {3, 4, 7, 8, 9, 11},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 4 localhost and 2 onion peers out of 16 to
|
||||||
|
// protect 2 localhost and 2 onions, plus 4 other peers, sorted by longest uptime.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
16, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 6 || c.id == 9 || c.id == 11 || c.id == 12);
|
||||||
|
c.m_network = (c.id == 8 || c.id == 10) ? NET_ONION : NET_IPV6;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 2, 3, 6, 8, 9, 10},
|
||||||
|
/* unprotected_peer_ids */ {4, 5, 7, 11, 12, 13, 14, 15},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 5 localhost and 1 onion peer out of 16 to
|
||||||
|
// protect 3 localhost (recovering the unused onion slot), 1 onion, and 4
|
||||||
|
// others, sorted by longest uptime.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
16, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id > 10);
|
||||||
|
c.m_network = (c.id == 10) ? NET_ONION : NET_IPV4;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 2, 3, 10, 11, 12, 13},
|
||||||
|
/* unprotected_peer_ids */ {4, 5, 6, 7, 8, 9, 14, 15},
|
||||||
|
random_context));
|
||||||
|
|
||||||
|
// Combined test: expect having 1 localhost and 4 onion peers out of 16 to
|
||||||
|
// protect 1 localhost and 3 onions (recovering the unused localhost slot),
|
||||||
|
// plus 4 others, sorted by longest uptime.
|
||||||
|
BOOST_CHECK(IsProtected(
|
||||||
|
16, [](NodeEvictionCandidate& c) {
|
||||||
|
c.nTimeConnected = c.id;
|
||||||
|
c.m_is_local = (c.id == 15);
|
||||||
|
c.m_network = (c.id > 6 && c.id < 11) ? NET_ONION : NET_IPV6;
|
||||||
|
},
|
||||||
|
/* protected_peer_ids */ {0, 1, 2, 3, 7, 8, 9, 15},
|
||||||
|
/* unprotected_peer_ids */ {5, 6, 10, 11, 12, 13, 14},
|
||||||
|
random_context));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if any of the node ids in node_ids are selected for eviction.
|
// Returns true if any of the node ids in node_ids are selected for eviction.
|
||||||
|
|||||||
Reference in new issue
Block a user