diff --git a/test/functional/abandonconflict.py b/test/functional/abandonconflict.py --- a/test/functional/abandonconflict.py +++ b/test/functional/abandonconflict.py @@ -49,7 +49,7 @@ balance = newbalance # Disconnect nodes so node0's transactions don't get into node1's mempool - disconnect_nodes(self.nodes[0], 1) + disconnect_nodes(self.nodes[0], self.nodes[1]) # Identify the 10btc outputs nA = next(i for i, vout in enumerate(self.nodes[0].getrawtransaction( @@ -176,7 +176,7 @@ self.nodes[1].sendrawtransaction(signed["hex"]) self.nodes[1].generate(1) - connect_nodes(self.nodes[0], 1) + connect_nodes(self.nodes[0], self.nodes[1]) sync_blocks(self.nodes) # Verify that B and C's 10 BTC outputs are available for spending again because AB1 is now conflicted diff --git a/test/functional/abc-finalize-block.py b/test/functional/abc-finalize-block.py --- a/test/functional/abc-finalize-block.py +++ b/test/functional/abc-finalize-block.py @@ -38,7 +38,7 @@ assert_equal(node.getbestblockhash(), tip) alt_node = self.nodes[1] - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) sync_blocks(self.nodes[0:2]) alt_node.invalidateblock(tip) diff --git a/test/functional/abc-parkedchain.py b/test/functional/abc-parkedchain.py --- a/test/functional/abc-parkedchain.py +++ b/test/functional/abc-parkedchain.py @@ -127,7 +127,7 @@ # First, make sure both nodes are in sync. parking_node = self.nodes[1] - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) sync_blocks(self.nodes[0:2]) assert_equal(node.getbestblockhash(), parking_node.getbestblockhash()) diff --git a/test/functional/bip68-sequence.py b/test/functional/bip68-sequence.py --- a/test/functional/bip68-sequence.py +++ b/test/functional/bip68-sequence.py @@ -442,13 +442,13 @@ assert_greater_than(csv_activation_height - height, 1) self.nodes[0].generate(csv_activation_height - height - 1) assert_equal(self.get_csv_status(), False) - disconnect_nodes(self.nodes[0], 1) + disconnect_nodes(self.nodes[0], self.nodes[1]) self.nodes[0].generate(1) assert_equal(self.get_csv_status(), True) # We have a block that has CSV activated, but we want to be at # the activation point, so we invalidate the tip. self.nodes[0].invalidateblock(self.nodes[0].getbestblockhash()) - connect_nodes(self.nodes[0], 1) + connect_nodes(self.nodes[0], self.nodes[1]) sync_blocks(self.nodes) # Use self.nodes[1] to test standardness relay policy diff --git a/test/functional/disconnect_ban.py b/test/functional/disconnect_ban.py --- a/test/functional/disconnect_ban.py +++ b/test/functional/disconnect_ban.py @@ -79,7 +79,7 @@ # Clear ban lists self.nodes[1].clearbanned() - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) self.log.info("Test disconnectnode RPCs") @@ -106,7 +106,7 @@ self.log.info("disconnectnode: successfully reconnect node") # reconnect the node - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) assert_equal(len(self.nodes[0].getpeerinfo()), 2) assert [node for node in self.nodes[0] .getpeerinfo() if node['addr'] == address1] diff --git a/test/functional/example_test.py b/test/functional/example_test.py --- a/test/functional/example_test.py +++ b/test/functional/example_test.py @@ -117,7 +117,7 @@ # In this test, we're not connecting node2 to node0 or node1. Calls to # sync_all() should not include node2, since we're not expecting it to # sync. - connect_nodes(self.nodes[0], 1) + connect_nodes(self.nodes[0], self.nodes[1]) self.sync_all([self.nodes[0:1]]) # Use setup_nodes() to customize the node start behaviour (for example if @@ -198,7 +198,7 @@ self.nodes[1].waitforblockheight(11) self.log.info("Connect node2 and node1") - connect_nodes(self.nodes[1], 2) + connect_nodes(self.nodes[1], self.nodes[2]) self.log.info("Add P2P connection to node2") node2 = BaseNode() diff --git a/test/functional/fundrawtransaction.py b/test/functional/fundrawtransaction.py --- a/test/functional/fundrawtransaction.py +++ b/test/functional/fundrawtransaction.py @@ -24,10 +24,10 @@ def setup_network(self, split=False): self.setup_nodes() - connect_nodes_bi(self.nodes, 0, 1) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) - connect_nodes_bi(self.nodes, 0, 3) + connect_nodes_bi(self.nodes[0], self.nodes[1]) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[3]) def run_test(self): min_relay_tx_fee = self.nodes[0].getnetworkinfo()['relayfee'] @@ -468,10 +468,10 @@ for node in self.nodes: node.settxfee(min_relay_tx_fee) - connect_nodes_bi(self.nodes, 0, 1) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) - connect_nodes_bi(self.nodes, 0, 3) + connect_nodes_bi(self.nodes[0], self.nodes[1]) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[3]) self.sync_all() # drain the keypool diff --git a/test/functional/import-rescan.py b/test/functional/import-rescan.py --- a/test/functional/import-rescan.py +++ b/test/functional/import-rescan.py @@ -132,7 +132,7 @@ self.add_nodes(self.num_nodes, extra_args) self.start_nodes() for i in range(1, self.num_nodes): - connect_nodes(self.nodes[i], 0) + connect_nodes(self.nodes[i], self.nodes[0]) def run_test(self): # Create one transaction on node 0 with a unique amount and label for diff --git a/test/functional/invalidateblock.py b/test/functional/invalidateblock.py --- a/test/functional/invalidateblock.py +++ b/test/functional/invalidateblock.py @@ -33,7 +33,7 @@ assert(self.nodes[1].getblockcount() == 6) self.log.info("Connect nodes to force a reorg") - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) sync_blocks(self.nodes[0:2]) assert(self.nodes[0].getblockcount() == 6) badhash = self.nodes[1].getblockhash(2) @@ -48,7 +48,7 @@ "Wrong tip for node0, hash %s, height %d" % (newhash, newheight)) self.log.info("\nMake sure we won't reorg to a lower work chain:") - connect_nodes_bi(self.nodes, 1, 2) + connect_nodes_bi(self.nodes[1], self.nodes[2]) self.log.info("Sync node 2 to node 1 so both have 6 blocks") sync_blocks(self.nodes[1:3]) assert(self.nodes[2].getblockcount() == 6) diff --git a/test/functional/keypool-topup.py b/test/functional/keypool-topup.py --- a/test/functional/keypool-topup.py +++ b/test/functional/keypool-topup.py @@ -38,7 +38,7 @@ shutil.copyfile(self.tmpdir + "/node1/regtest/wallet.dat", self.tmpdir + "/wallet.bak") self.start_node(1, self.extra_args[1]) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) self.log.info("Generate keys for wallet") @@ -65,7 +65,7 @@ self.log.info("Verify keypool is restored and balance is correct") self.start_node(1, self.extra_args[1]) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) self.sync_all() assert_equal(self.nodes[1].getbalance(), 15) diff --git a/test/functional/merkle_blocks.py b/test/functional/merkle_blocks.py --- a/test/functional/merkle_blocks.py +++ b/test/functional/merkle_blocks.py @@ -20,9 +20,9 @@ def setup_network(self): self.setup_nodes() - connect_nodes(self.nodes[0], 1) - connect_nodes(self.nodes[0], 2) - connect_nodes(self.nodes[0], 3) + connect_nodes(self.nodes[0], self.nodes[1]) + connect_nodes(self.nodes[0], self.nodes[2]) + connect_nodes(self.nodes[0], self.nodes[3]) self.sync_all() diff --git a/test/functional/minchainwork.py b/test/functional/minchainwork.py --- a/test/functional/minchainwork.py +++ b/test/functional/minchainwork.py @@ -40,7 +40,7 @@ # block relay to inbound peers. self.setup_nodes() for i in range(self.num_nodes-1): - connect_nodes(self.nodes[i+1], i) + connect_nodes(self.nodes[i+1], self.nodes[i]) def run_test(self): # Start building a chain on node0. node2 shouldn't be able to sync until node1's diff --git a/test/functional/net.py b/test/functional/net.py --- a/test/functional/net.py +++ b/test/functional/net.py @@ -75,7 +75,7 @@ time.sleep(0.1) self.nodes[0].setnetworkactive(True) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) assert_equal(self.nodes[0].getnetworkinfo()['networkactive'], True) assert_equal(self.nodes[0].getnetworkinfo()['connections'], 2) diff --git a/test/functional/notifications.py b/test/functional/notifications.py --- a/test/functional/notifications.py +++ b/test/functional/notifications.py @@ -60,7 +60,7 @@ self.log.info("test -walletnotify after rescan") # restart node to rescan to force wallet notifications self.restart_node(1) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) wait_until(lambda: os.path.isfile(self.tx_filename) and os.stat( self.tx_filename).st_size >= (block_count * 65), timeout=10) diff --git a/test/functional/p2p-acceptblock.py b/test/functional/p2p-acceptblock.py --- a/test/functional/p2p-acceptblock.py +++ b/test/functional/p2p-acceptblock.py @@ -264,7 +264,7 @@ [c.disconnect_node() for c in connections] # 8. Connect node2 to node0 and ensure it is able to sync - connect_nodes(self.nodes[0], 2) + connect_nodes(self.nodes[0], self.nodes[2]) sync_blocks([self.nodes[0], self.nodes[2]]) self.log.info("Successfully synced nodes 2 and 0") diff --git a/test/functional/preciousblock.py b/test/functional/preciousblock.py --- a/test/functional/preciousblock.py +++ b/test/functional/preciousblock.py @@ -72,7 +72,7 @@ # Submit competing blocks via RPC so any reorg should occur before we # proceed (no way to wait on inaction for p2p sync) node_sync_via_rpc(self.nodes[0:2]) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) assert_equal(self.nodes[0].getbestblockhash(), hashC) assert_equal(self.nodes[1].getbestblockhash(), hashG) self.log.info("Make Node0 prefer block G") @@ -111,8 +111,8 @@ hashL = self.nodes[2].getbestblockhash() self.log.info("Connect nodes and check no reorg occurs") node_sync_via_rpc(self.nodes[1:3]) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) assert_equal(self.nodes[0].getbestblockhash(), hashH) assert_equal(self.nodes[1].getbestblockhash(), hashH) assert_equal(self.nodes[2].getbestblockhash(), hashL) diff --git a/test/functional/pruning.py b/test/functional/pruning.py --- a/test/functional/pruning.py +++ b/test/functional/pruning.py @@ -58,11 +58,11 @@ self.prunedir = self.options.tmpdir + "/node2/regtest/blocks/" - connect_nodes(self.nodes[0], 1) - connect_nodes(self.nodes[1], 2) - connect_nodes(self.nodes[2], 0) - connect_nodes(self.nodes[0], 3) - connect_nodes(self.nodes[0], 4) + connect_nodes(self.nodes[0], self.nodes[1]) + connect_nodes(self.nodes[1], self.nodes[2]) + connect_nodes(self.nodes[2], self.nodes[0]) + connect_nodes(self.nodes[0], self.nodes[3]) + connect_nodes(self.nodes[0], self.nodes[4]) sync_blocks(self.nodes[0:5]) def setup_nodes(self): @@ -135,8 +135,8 @@ # Create connections in the order so both nodes can see the reorg # at the same time - connect_nodes(self.nodes[1], 0) - connect_nodes(self.nodes[2], 0) + connect_nodes(self.nodes[1], self.nodes[0]) + connect_nodes(self.nodes[2], self.nodes[0]) sync_blocks(self.nodes[0:3]) self.log.info("Usage can be over target because of high stale rate: %d" % @@ -185,8 +185,8 @@ self.nodes[1].generate(300) self.log.info("Reconnect nodes") - connect_nodes(self.nodes[0], 1) - connect_nodes(self.nodes[2], 1) + connect_nodes(self.nodes[0], self.nodes[1]) + connect_nodes(self.nodes[2], self.nodes[1]) sync_blocks(self.nodes[0:3], timeout=120) self.log.info("Verify height on node 2: %d" % @@ -378,7 +378,7 @@ # check that wallet loads loads successfully when restarting a pruned node after IBD. # this was reported to fail in #7494. self.log.info("Syncing node 5 to test wallet") - connect_nodes(self.nodes[0], 5) + connect_nodes(self.nodes[0], self.nodes[5]) nds = [self.nodes[0], self.nodes[5]] sync_blocks(nds, wait=5, timeout=300) self.stop_node(5) # stop and start to trigger rescan diff --git a/test/functional/rawtransactions.py b/test/functional/rawtransactions.py --- a/test/functional/rawtransactions.py +++ b/test/functional/rawtransactions.py @@ -26,7 +26,7 @@ def setup_network(self, split=False): super().setup_network() - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[0], self.nodes[2]) def run_test(self): # prepare some coins for multiple *rawtransaction commands diff --git a/test/functional/rest.py b/test/functional/rest.py --- a/test/functional/rest.py +++ b/test/functional/rest.py @@ -59,7 +59,7 @@ def setup_network(self, split=False): super().setup_network() - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[0], self.nodes[2]) def run_test(self): url = urllib.parse.urlparse(self.nodes[0].url) diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -29,6 +29,7 @@ initialize_datadir, log_filename, p2p_port, + rpc_port, set_node_times, sync_blocks, sync_mempools, @@ -210,7 +211,7 @@ # to split the network between nodes 1 and 2 to get # two halves that can work on competing chains. for i in range(self.num_nodes - 1): - connect_nodes_bi(self.nodes, i, i + 1) + connect_nodes_bi(self.nodes[i], self.nodes[i+1]) self.sync_all() def setup_nodes(self): @@ -227,7 +228,7 @@ # Public helper methods. These can be accessed by the subclass test scripts. - def add_nodes(self, num_nodes, extra_args=None, rpchost=None, timewait=None, binary=None): + def add_nodes(self, num_nodes, extra_args=None, rpchost, timewait=None, binary=None): """Instantiate TestNode objects""" if extra_args is None: @@ -237,7 +238,7 @@ assert_equal(len(extra_args), num_nodes) assert_equal(len(binary), num_nodes) for i in range(num_nodes): - self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, timewait=timewait, + self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, rpc_port(i), p2p_port(i), timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir)) def start_node(self, i, extra_args=None, stderr=None): @@ -321,15 +322,15 @@ """ Split the network of four nodes into nodes 0/1 and 2/3. """ - disconnect_nodes(self.nodes[1], 2) - disconnect_nodes(self.nodes[2], 1) + disconnect_nodes(self.nodes[1], self.nodes[2]) + disconnect_nodes(self.nodes[2], self.nodes[1]) self.sync_all([self.nodes[:2], self.nodes[2:]]) def join_network(self): """ Join the (previously split) network halves together. """ - connect_nodes_bi(self.nodes, 1, 2) + connect_nodes_bi(self.nodes[1], self.nodes[2]) self.sync_all() def sync_all(self, node_groups=None): @@ -394,7 +395,6 @@ Create a cache of a 200-block-long chain (with wallet) for MAX_NODES Afterward, create num_nodes copies from the cache.""" - assert self.num_nodes <= MAX_NODES create_cache = False for i in range(MAX_NODES): @@ -418,8 +418,8 @@ "-keypool=1", "-datadir=" + datadir, "-discover=0"] if i > 0: args.append("-connect=127.0.0.1:" + str(p2p_port(0))) - self.nodes.append(TestNode(i, self.options.cachedir, extra_args=[ - ], rpchost=None, timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None)) + self.nodes.append(TestNode(i, self.options.cachedir, [ + ], None, rpc_port(i), p2p_port(i), timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None)) self.nodes[i].args = args self.start_node(i) diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -16,6 +16,8 @@ from .mininode import COIN, ToHex, FromHex, CTransaction from .util import ( assert_equal, + p2p_port, + rpc_port, get_rpc_proxy, rpc_url, wait_until, @@ -37,10 +39,13 @@ To make things easier for the test writer, a bit of magic is happening under the covers. Any unrecognised messages will be dispatched to the RPC connection.""" - def __init__(self, i, dirname, extra_args, rpchost, timewait, binary, stderr, mocktime, coverage_dir): + def __init__(self, i, dirname, extra_args, host, rpc_port, p2p_port, timewait, binary, stderr, mocktime, coverage_dir): self.index = i self.datadir = os.path.join(dirname, "node" + str(i)) - self.rpchost = rpchost + self.host = host + self.rpc_port = rpc_port + self.p2p_port = p2p_port + self.nodename = "testnode{}".format(i) if timewait: self.rpc_timeout = timewait else: @@ -55,7 +60,7 @@ # Most callers will just need to add extra args to the standard list below. For those callers that need more flexibity, they can just set the args property directly. self.extra_args = extra_args self.args = [self.binary, "-datadir=" + self.datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", - "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment=testnode%d" % i] + "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment={}".format(self.nodename)] self.cli = TestNodeCLI( os.getenv("BITCOINCLI", "bitcoin-cli"), self.datadir) @@ -92,7 +97,7 @@ assert self.process.poll( ) is None, "bitcoind exited with status %i during initialization" % self.process.returncode try: - self.rpc = get_rpc_proxy(rpc_url(self.datadir, self.index, self.rpchost), + self.rpc = get_rpc_proxy(rpc_url(self.datadir, self.index, self.host), self.index, timeout=self.rpc_timeout, coveragedir=self.coverage_dir) self.rpc.getblockcount() # If the call to getblockcount() succeeds then the RPC connection is up diff --git a/test/functional/test_framework/util.py b/test/functional/test_framework/util.py --- a/test/functional/test_framework/util.py +++ b/test/functional/test_framework/util.py @@ -380,20 +380,20 @@ node.setmocktime(t) -def disconnect_nodes(from_connection, node_num): - for peer_id in [peer['id'] for peer in from_connection.getpeerinfo() if "testnode%d" % node_num in peer['subver']]: +def disconnect_nodes(from_connection, node): + for peer_id in [peer['id'] for peer in from_connection.getpeerinfo() if node.nodename in peer['subver']]: from_connection.disconnectnode(nodeid=peer_id) for _ in range(50): - if [peer['id'] for peer in from_connection.getpeerinfo() if "testnode%d" % node_num in peer['subver']] == []: + if [peer['id'] for peer in from_connection.getpeerinfo() if node.nodename in peer['subver']] == []: break time.sleep(0.1) else: raise AssertionError("timed out waiting for disconnect") -def connect_nodes(from_connection, node_num): - ip_port = "127.0.0.1:" + str(p2p_port(node_num)) +def connect_nodes(from_connection, node): + ip_port = "{}:{}".format(node.host, node.p2p_port) from_connection.addnode(ip_port, "onetry") # poll until version handshake complete to avoid race conditions # with transaction relaying @@ -401,9 +401,9 @@ time.sleep(0.1) -def connect_nodes_bi(nodes, a, b): - connect_nodes(nodes[a], b) - connect_nodes(nodes[b], a) +def connect_nodes_bi(a, b): + connect_nodes(a, b) + connect_nodes(b, a) def sync_blocks(rpc_connections, *, wait=1, timeout=60): diff --git a/test/functional/txn_clone.py b/test/functional/txn_clone.py --- a/test/functional/txn_clone.py +++ b/test/functional/txn_clone.py @@ -20,8 +20,8 @@ def setup_network(self): # Start with split network: super(TxnMallTest, self).setup_network() - disconnect_nodes(self.nodes[1], 2) - disconnect_nodes(self.nodes[2], 1) + disconnect_nodes(self.nodes[1], self.nodes[2]) + disconnect_nodes(self.nodes[2], self.nodes[1]) def run_test(self): # All nodes should start with 1,250 BTC: @@ -122,7 +122,7 @@ self.nodes[2].generate(1) # Reconnect the split network, and sync chain: - connect_nodes(self.nodes[1], 2) + connect_nodes(self.nodes[1], self.nodes[2]) self.nodes[2].sendrawtransaction(fund_bar_tx["hex"]) self.nodes[2].sendrawtransaction(tx2["hex"]) self.nodes[2].generate(1) # Mine another block to make sure we sync diff --git a/test/functional/txn_doublespend.py b/test/functional/txn_doublespend.py --- a/test/functional/txn_doublespend.py +++ b/test/functional/txn_doublespend.py @@ -20,8 +20,8 @@ def setup_network(self): # Start with split network: super().setup_network() - disconnect_nodes(self.nodes[1], 2) - disconnect_nodes(self.nodes[2], 1) + disconnect_nodes(self.nodes[1], self.nodes[2]) + disconnect_nodes(self.nodes[2], self.nodes[1]) def run_test(self): # All nodes should start with 1,250 BTC: @@ -109,7 +109,7 @@ self.nodes[2].generate(1) # Reconnect the split network, and sync chain: - connect_nodes(self.nodes[1], 2) + connect_nodes(self.nodes[1], self.nodes[2]) self.nodes[2].generate(1) # Mine another block to make sure we sync sync_blocks(self.nodes) assert_equal(self.nodes[0].gettransaction( diff --git a/test/functional/wallet.py b/test/functional/wallet.py --- a/test/functional/wallet.py +++ b/test/functional/wallet.py @@ -20,9 +20,9 @@ self.start_node(0) self.start_node(1) self.start_node(2) - connect_nodes_bi(self.nodes, 0, 1) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[0], self.nodes[1]) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) self.sync_all([self.nodes[0:3]]) def check_fee_amount(self, curr_balance, balance_with_fee, fee_per_byte, tx_size): @@ -204,7 +204,7 @@ sync_mempools(self.nodes[0:2]) self.start_node(3) - connect_nodes_bi(self.nodes, 0, 3) + connect_nodes_bi(self.nodes[0], self.nodes[3]) sync_blocks(self.nodes) relayed = self.nodes[0].resendwallettransactions() @@ -253,9 +253,9 @@ self.start_node(0, ["-walletbroadcast=0"]) self.start_node(1, ["-walletbroadcast=0"]) self.start_node(2, ["-walletbroadcast=0"]) - connect_nodes_bi(self.nodes, 0, 1) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[0], self.nodes[1]) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) self.sync_all([self.nodes[0:3]]) txIdNotBroadcasted = self.nodes[0].sendtoaddress( @@ -283,9 +283,9 @@ self.start_node(0) self.start_node(1) self.start_node(2) - connect_nodes_bi(self.nodes, 0, 1) - connect_nodes_bi(self.nodes, 1, 2) - connect_nodes_bi(self.nodes, 0, 2) + connect_nodes_bi(self.nodes[0], self.nodes[1]) + connect_nodes_bi(self.nodes[1], self.nodes[2]) + connect_nodes_bi(self.nodes[0], self.nodes[2]) sync_blocks(self.nodes[0:3]) self.nodes[0].generate(1) diff --git a/test/functional/wallet_hd.py b/test/functional/wallet_hd.py --- a/test/functional/wallet_hd.py +++ b/test/functional/wallet_hd.py @@ -27,7 +27,7 @@ self.assert_start_raises_init_error( 1, ['-usehd=0'], 'already existing HD wallet') self.start_node(1) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) # Make sure we use hd, keep masterkeyid masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid'] @@ -89,7 +89,7 @@ assert_equal(hd_info_2["hdkeypath"], "m/0'/0'/" + str(_) + "'") assert_equal(hd_info_2["hdmasterkeyid"], masterkeyid) assert_equal(hd_add, hd_add_2) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) self.sync_all() # Needs rescan @@ -104,7 +104,7 @@ shutil.copyfile(os.path.join(tmpdir, "hd.bak"), os.path.join(tmpdir, "node1/regtest/wallet.dat")) self.start_node(1, extra_args=self.extra_args[1]) - connect_nodes_bi(self.nodes, 0, 1) + connect_nodes_bi(self.nodes[0], self.nodes[1]) self.sync_all() out = self.nodes[1].rescanblockchain(0, 1) assert_equal(out['start_height'], 0) diff --git a/test/functional/walletbackup.py b/test/functional/walletbackup.py --- a/test/functional/walletbackup.py +++ b/test/functional/walletbackup.py @@ -47,10 +47,10 @@ def setup_network(self, split=False): self.setup_nodes() - connect_nodes(self.nodes[0], 3) - connect_nodes(self.nodes[1], 3) - connect_nodes(self.nodes[2], 3) - connect_nodes(self.nodes[2], 0) + connect_nodes(self.nodes[0], self.nodes[3]) + connect_nodes(self.nodes[1], self.nodes[3]) + connect_nodes(self.nodes[2], self.nodes[3]) + connect_nodes(self.nodes[2], self.nodes[0]) self.sync_all() def one_send(self, from_node, to_address): @@ -81,10 +81,10 @@ self.start_node(0) self.start_node(1) self.start_node(2) - connect_nodes(self.nodes[0], 3) - connect_nodes(self.nodes[1], 3) - connect_nodes(self.nodes[2], 3) - connect_nodes(self.nodes[2], 0) + connect_nodes(self.nodes[0], self.nodes[3]) + connect_nodes(self.nodes[1], self.nodes[3]) + connect_nodes(self.nodes[2], self.nodes[3]) + connect_nodes(self.nodes[2], self.nodes[0]) def stop_three(self): self.stop_node(0)