[test] Introduce test logic to query DNS seeds

This commit introduces a DNS seed to the regest chain params in order to add
coverage to the DNS querying logic.

The first test checks that we do not query DNS seeds if we are able to
succesfully connect to 2 outbound connections. Since we participate in ADDR
relay with those connections, including sending a GETADDR message during the
VERSION handshake, querying the DNS seeds is unnecessary.

Co-authored-by: Martin Zumsande <mzumsande@gmail.com>
pull/22098/head
Amiti Uttarwar 3 years ago
parent b295395664
commit 9c08719778

@ -435,7 +435,8 @@ public:
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds. vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds.
vSeeds.clear(); //!< Regtest mode doesn't have any DNS seeds. vSeeds.clear();
vSeeds.emplace_back("dummySeed.invalid.");
fDefaultConsistencyChecks = true; fDefaultConsistencyChecks = true;
fRequireStandard = true; fRequireStandard = true;

@ -158,8 +158,9 @@ class ConfArgsTest(BitcoinTestFramework):
self.stop_node(0) self.stop_node(0)
# No peers.dat exists and -dnsseed=1 # No peers.dat exists and -dnsseed=1
# We expect the node will use DNS Seeds, but Regtest mode has 0 DNS seeds # We expect the node will use DNS Seeds, but Regtest mode does not have
# So after 60 seconds, the node should fallback to fixed seeds (this is a slow test) # any valid DNS seeds. So after 60 seconds, the node should fallback to
# fixed seeds
assert not os.path.exists(os.path.join(default_data_dir, "peers.dat")) assert not os.path.exists(os.path.join(default_data_dir, "peers.dat"))
start = int(time.time()) start = int(time.time())
with self.nodes[0].assert_debug_log(expected_msgs=[ with self.nodes[0].assert_debug_log(expected_msgs=[

@ -0,0 +1,34 @@
#!/usr/bin/env python3
# Copyright (c) 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 ThreadDNSAddressSeed logic for querying DNS seeds."""
from test_framework.p2p import P2PInterface
from test_framework.test_framework import BitcoinTestFramework
class P2PDNSSeeds(BitcoinTestFramework):
def set_test_params(self):
self.setup_clean_chain = True
self.num_nodes = 1
self.extra_args = [["-dnsseed=1"]]
def run_test(self):
self.existing_outbound_connections_test()
def existing_outbound_connections_test(self):
# Make sure addrman is populated to enter the conditional where we
# delay and potentially skip DNS seeding.
self.nodes[0].addpeeraddress("192.0.0.8", 8333)
self.log.info("Check that we *do not* query DNS seeds if we have 2 outbound connections")
self.restart_node(0)
with self.nodes[0].assert_debug_log(expected_msgs=["P2P peers available. Skipped DNS seeding."], timeout=12):
for i in range(2):
self.nodes[0].add_outbound_p2p_connection(P2PInterface(), p2p_idx=i, connection_type="outbound-full-relay")
if __name__ == '__main__':
P2PDNSSeeds().main()

@ -121,6 +121,7 @@ BASE_SCRIPTS = [
'wallet_listreceivedby.py --legacy-wallet', 'wallet_listreceivedby.py --legacy-wallet',
'wallet_listreceivedby.py --descriptors', 'wallet_listreceivedby.py --descriptors',
'wallet_abandonconflict.py --legacy-wallet', 'wallet_abandonconflict.py --legacy-wallet',
'p2p_dns_seeds.py',
'wallet_abandonconflict.py --descriptors', 'wallet_abandonconflict.py --descriptors',
'feature_csv_activation.py', 'feature_csv_activation.py',
'rpc_rawtransaction.py --legacy-wallet', 'rpc_rawtransaction.py --legacy-wallet',

Loading…
Cancel
Save