mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-05-05 11:28:49 +02:00
Merge #19512: p2p: banscore updates to gui, tests, release notes
fa108d6a75test: update tests for peer discouragement (Jon Atack)1a9f462caagui, doc: rm Ban Score in GUI Peers window/release notes updates (Jon Atack) Pull request description: This is the third `-banscore` PR in the mini-series described in #19464. See that PR for the intention and reasoning. - no longer display "Ban Score" in the GUI peers window and add a release note, plus release note fixups per https://github.com/bitcoin/bitcoin/pull/19464#pullrequestreview-447452052 - update tests (`src/test/denialofservice_tests.cpp` and `test/functional/p2p_leak.py`) from banning to discouragement and per https://github.com/bitcoin/bitcoin/pull/19464#issuecomment-658052518 ACKs for top commit: jnewbery: ACKfa108d6a75laanwj: ACKfa108d6a75Tree-SHA512: 58a449b3f47b8cb5490b34e4442ee8675bfad1ce48af4e4fd5c67715b0c1a596fb8e731d42e576b4c3b64627f76e0a68cbb1da9ea9f588a5932fe119baf40d50
This commit is contained in:
@@ -65,9 +65,10 @@ class CLazyNode(P2PInterface):
|
||||
|
||||
# Node that never sends a version. We'll use this to send a bunch of messages
|
||||
# anyway, and eventually get disconnected.
|
||||
class CNodeNoVersionBan(CLazyNode):
|
||||
# send a bunch of veracks without sending a message. This should get us disconnected.
|
||||
# NOTE: implementation-specific check here. Remove if bitcoind ban behavior changes
|
||||
class CNodeNoVersionMisbehavior(CLazyNode):
|
||||
# Send enough veracks without a message to reach the peer discouragement
|
||||
# threshold. This should get us disconnected. NOTE: implementation-specific
|
||||
# test; update if our discouragement policy for peer misbehavior changes.
|
||||
def on_open(self):
|
||||
super().on_open()
|
||||
for _ in range(DISCOURAGEMENT_THRESHOLD):
|
||||
@@ -108,7 +109,8 @@ class P2PLeakTest(BitcoinTestFramework):
|
||||
self.num_nodes = 1
|
||||
|
||||
def run_test(self):
|
||||
no_version_bannode = self.nodes[0].add_p2p_connection(CNodeNoVersionBan(), send_version=False, wait_for_verack=False)
|
||||
no_version_disconnect_node = self.nodes[0].add_p2p_connection(
|
||||
CNodeNoVersionMisbehavior(), send_version=False, wait_for_verack=False)
|
||||
no_version_idlenode = self.nodes[0].add_p2p_connection(CNodeNoVersionIdle(), send_version=False, wait_for_verack=False)
|
||||
no_verack_idlenode = self.nodes[0].add_p2p_connection(CNodeNoVerackIdle(), wait_for_verack=False)
|
||||
|
||||
@@ -116,7 +118,7 @@ class P2PLeakTest(BitcoinTestFramework):
|
||||
# verack, since we never sent one
|
||||
no_verack_idlenode.wait_for_verack()
|
||||
|
||||
wait_until(lambda: no_version_bannode.ever_connected, timeout=10, lock=mininode_lock)
|
||||
wait_until(lambda: no_version_disconnect_node.ever_connected, timeout=10, lock=mininode_lock)
|
||||
wait_until(lambda: no_version_idlenode.ever_connected, timeout=10, lock=mininode_lock)
|
||||
wait_until(lambda: no_verack_idlenode.version_received, timeout=10, lock=mininode_lock)
|
||||
|
||||
@@ -126,13 +128,13 @@ class P2PLeakTest(BitcoinTestFramework):
|
||||
#Give the node enough time to possibly leak out a message
|
||||
time.sleep(5)
|
||||
|
||||
#This node should have been banned
|
||||
assert not no_version_bannode.is_connected
|
||||
# Expect this node to be disconnected for misbehavior
|
||||
assert not no_version_disconnect_node.is_connected
|
||||
|
||||
self.nodes[0].disconnect_p2ps()
|
||||
|
||||
# Make sure no unexpected messages came in
|
||||
assert no_version_bannode.unexpected_msg == False
|
||||
assert no_version_disconnect_node.unexpected_msg == False
|
||||
assert no_version_idlenode.unexpected_msg == False
|
||||
assert no_verack_idlenode.unexpected_msg == False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user