Skip to content

Commit

Permalink
test: adds seednode functional tests
Browse files Browse the repository at this point in the history
Adds functional tests to test the interaction between seednode and the AddrMan
  • Loading branch information
sr-gi committed May 1, 2024
1 parent 84029ce commit 4342d73
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
50 changes: 50 additions & 0 deletions test/functional/p2p_seednode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env python3
# Copyright (c) 2019-2021 The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

"""
Test seednode interaction with the AddrMan
"""
import random

from test_framework.test_framework import BitcoinTestFramework


class P2PSeedNodes(BitcoinTestFramework):
def set_test_params(self):
self.num_nodes = 1
self.disable_autoconnect = False

def test_no_seednode(self):
# Check that if no seednode is provided, the node proceeds as usual (without waiting)
with self.nodes[0].assert_debug_log(expected_msgs=[], unexpected_msgs=["Empty addrman, adding seednode", "Couldn't connect to peers from addrman after 10 seconds. Adding seednode"], timeout=10):
self.restart_node(0)

def test_seednode_empty_addrman(self):
seed_node = "0.0.0.1"
# Check that the seednode is added to m_addr_fetches on bootstrap on an empty addrman
with self.nodes[0].assert_debug_log(expected_msgs=[f"Empty addrman, adding seednode ({seed_node}) to addrfetch"], timeout=10):
self.restart_node(0, extra_args=[f'-seednode={seed_node}'])

def test_seednode_addrman_unreachable_peers(self):
seed_node = "0.0.0.2"
# Fill the addrman with unreachable nodes
for i in range(10):
ip = f"{random.randrange(128,169)}.{random.randrange(1,255)}.{random.randrange(1,255)}.{random.randrange(1,255)}"
port = 8333 + i
self.nodes[0].addpeeraddress(ip, port)

# Restart the node so seednode is processed again
with self.nodes[0].assert_debug_log(expected_msgs=[f"Couldn't connect to peers from addrman after 10 seconds. Adding seednode ({seed_node}) to addrfetch"], unexpected_msgs=["Empty addrman, adding seednode"], timeout=20):
self.restart_node(0, extra_args=[f'-seednode={seed_node}'])

def run_test(self):
self.test_no_seednode()
self.test_seednode_empty_addrman()
self.test_seednode_addrman_unreachable_peers()


if __name__ == '__main__':
P2PSeedNodes().main()

1 change: 1 addition & 0 deletions test/functional/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@
'feature_shutdown.py',
'wallet_migration.py',
'p2p_ibd_txrelay.py',
'p2p_seednode.py',
# Don't append tests at the end to avoid merge conflicts
# Put them in a random line within the section that fits their approximate run-time
]
Expand Down

0 comments on commit 4342d73

Please sign in to comment.