Changeset View
Changeset View
Standalone View
Standalone View
test/functional/p2p_leak.py
Show All 14 Lines | |||||
from test_framework.messages import ( | from test_framework.messages import ( | ||||
msg_getaddr, | msg_getaddr, | ||||
msg_ping, | msg_ping, | ||||
msg_verack, | msg_verack, | ||||
) | ) | ||||
from test_framework.mininode import ( | from test_framework.mininode import ( | ||||
mininode_lock, | mininode_lock, | ||||
network_thread_join, | |||||
network_thread_start, | |||||
P2PInterface, | P2PInterface, | ||||
) | ) | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import wait_until | from test_framework.util import wait_until | ||||
banscore = 10 | banscore = 10 | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | class P2PLeakTest(BitcoinTestFramework): | ||||
def run_test(self): | def run_test(self): | ||||
no_version_bannode = self.nodes[0].add_p2p_connection( | no_version_bannode = self.nodes[0].add_p2p_connection( | ||||
CNodeNoVersionBan(), send_version=False) | CNodeNoVersionBan(), send_version=False) | ||||
no_version_idlenode = self.nodes[0].add_p2p_connection( | no_version_idlenode = self.nodes[0].add_p2p_connection( | ||||
CNodeNoVersionIdle(), send_version=False) | CNodeNoVersionIdle(), send_version=False) | ||||
no_verack_idlenode = self.nodes[0].add_p2p_connection( | no_verack_idlenode = self.nodes[0].add_p2p_connection( | ||||
CNodeNoVerackIdle()) | CNodeNoVerackIdle()) | ||||
network_thread_start() | |||||
wait_until(lambda: no_version_bannode.ever_connected, | wait_until(lambda: no_version_bannode.ever_connected, | ||||
timeout=10, lock=mininode_lock) | timeout=10, lock=mininode_lock) | ||||
wait_until(lambda: no_version_idlenode.ever_connected, | wait_until(lambda: no_version_idlenode.ever_connected, | ||||
timeout=10, lock=mininode_lock) | timeout=10, lock=mininode_lock) | ||||
wait_until(lambda: no_verack_idlenode.version_received, | wait_until(lambda: no_verack_idlenode.version_received, | ||||
timeout=10, lock=mininode_lock) | timeout=10, lock=mininode_lock) | ||||
# Mine a block and make sure that it's not sent to the connected nodes | # Mine a block and make sure that it's not sent to the connected nodes | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
# Give the node enough time to possibly leak out a message | # Give the node enough time to possibly leak out a message | ||||
time.sleep(5) | time.sleep(5) | ||||
# This node should have been banned | # This node should have been banned | ||||
assert not no_version_bannode.is_connected | assert not no_version_bannode.is_connected | ||||
self.nodes[0].disconnect_p2ps() | self.nodes[0].disconnect_p2ps() | ||||
# Wait until all connections are closed and the network thread has terminated | # Wait until all connections are closed | ||||
wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 0) | wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 0) | ||||
network_thread_join() | |||||
# Make sure no unexpected messages came in | # Make sure no unexpected messages came in | ||||
assert(no_version_bannode.unexpected_msg == False) | assert(no_version_bannode.unexpected_msg == False) | ||||
assert(no_version_idlenode.unexpected_msg == False) | assert(no_version_idlenode.unexpected_msg == False) | ||||
assert(no_verack_idlenode.unexpected_msg == False) | assert(no_verack_idlenode.unexpected_msg == False) | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
P2PLeakTest().main() | P2PLeakTest().main() |