diff --git a/test/functional/abc-p2p-compactblocks.py b/test/functional/abc-p2p-compactblocks.py --- a/test/functional/abc-p2p-compactblocks.py +++ b/test/functional/abc-p2p-compactblocks.py @@ -273,7 +273,8 @@ # Check that compact block also work for big blocks node = self.nodes[0] peer = TestNode() - peer.add_connection(NodeConn('127.0.0.1', p2p_port(0), node, peer)) + peer.add_connection( + NodeConn('127.0.0.1', self.p2p_port(0), node, peer)) # Wait for connection to be etablished peer.wait_for_verack() diff --git a/test/functional/assumevalid.py b/test/functional/assumevalid.py --- a/test/functional/assumevalid.py +++ b/test/functional/assumevalid.py @@ -45,7 +45,7 @@ msg_headers) from test_framework.script import (CScript, OP_TRUE) from test_framework.test_framework import BitcoinTestFramework -from test_framework.util import (p2p_port, assert_equal) +from test_framework.util import (assert_equal) class BaseNode(NodeConnCB): @@ -102,7 +102,7 @@ node0 = BaseNode() connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], node0)) node0.add_connection(connections[0]) NetworkThread().start() # Start up network handling in another thread @@ -176,14 +176,14 @@ self.start_node(1, extra_args=["-assumevalid=" + hex(block102.sha256)]) node1 = BaseNode() # connects to node1 connections.append( - NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], node1)) + NodeConn('127.0.0.1', self.p2p_port(1), self.nodes[1], node1)) node1.add_connection(connections[1]) node1.wait_for_verack() self.start_node(2, extra_args=["-assumevalid=" + hex(block102.sha256)]) node2 = BaseNode() # connects to node2 connections.append( - NodeConn('127.0.0.1', p2p_port(2), self.nodes[2], node2)) + NodeConn('127.0.0.1', self.p2p_port(2), self.nodes[2], node2)) node2.add_connection(connections[2]) node2.wait_for_verack() diff --git a/test/functional/bip65-cltv-p2p.py b/test/functional/bip65-cltv-p2p.py --- a/test/functional/bip65-cltv-p2p.py +++ b/test/functional/bip65-cltv-p2p.py @@ -74,7 +74,7 @@ node0 = NodeConnCB() connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], node0)) node0.add_connection(connections[0]) # Start up network handling in another thread diff --git a/test/functional/bipdersig-p2p.py b/test/functional/bipdersig-p2p.py --- a/test/functional/bipdersig-p2p.py +++ b/test/functional/bipdersig-p2p.py @@ -62,7 +62,7 @@ node0 = NodeConnCB() connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], node0)) node0.add_connection(connections[0]) NetworkThread().start() # Start up network handling in another thread 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 @@ -28,7 +28,6 @@ from test_framework.util import ( assert_equal, connect_nodes, - p2p_port, wait_until, ) @@ -141,7 +140,7 @@ node0 = BaseNode() connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], node0)) node0.add_connection(connections[0]) # Start up network handling in another thread. This needs to be called @@ -203,7 +202,7 @@ self.log.info("Add P2P connection to node2") node2 = BaseNode() connections.append( - NodeConn('127.0.0.1', p2p_port(2), self.nodes[2], node2)) + NodeConn('127.0.0.1', self.p2p_port(2), self.nodes[2], node2)) node2.add_connection(connections[1]) node2.wait_for_verack() diff --git a/test/functional/maxuploadtarget.py b/test/functional/maxuploadtarget.py --- a/test/functional/maxuploadtarget.py +++ b/test/functional/maxuploadtarget.py @@ -66,7 +66,7 @@ for i in range(3): test_nodes.append(TestNode()) connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_nodes[i])) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], test_nodes[i])) test_nodes[i].add_connection(connections[i]) # Start up network handling in another thread @@ -163,7 +163,7 @@ # recreate/reconnect a test node test_nodes = [TestNode()] - connections = [NodeConn('127.0.0.1', p2p_port( + connections = [NodeConn('127.0.0.1', self.p2p_port( 0), self.nodes[0], test_nodes[0])] test_nodes[0].add_connection(connections[0]) diff --git a/test/functional/net.py b/test/functional/net.py --- a/test/functional/net.py +++ b/test/functional/net.py @@ -14,7 +14,6 @@ assert_equal, assert_raises_rpc_error, connect_nodes_bi, - p2p_port, ) @@ -82,7 +81,7 @@ def _test_getaddednodeinfo(self): assert_equal(self.nodes[0].getaddednodeinfo(), []) # add a node (node2) to node0 - ip_port = "127.0.0.1:{}".format(p2p_port(2)) + ip_port = "127.0.0.1:{}".format(self.p2p_port(2)) self.nodes[0].addnode(ip_port, 'add') # check that the node has indeed been added added_nodes = self.nodes[0].getaddednodeinfo(ip_port) 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 @@ -96,10 +96,10 @@ connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], test_node)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], test_node)) connections.append( - NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], white_node)) - connections.append(NodeConn('127.0.0.1', p2p_port(2), + NodeConn('127.0.0.1', self.p2p_port(1), self.nodes[1], white_node)) + connections.append(NodeConn('127.0.0.1', self.p2p_port(2), self.nodes[2], min_work_node)) test_node.add_connection(connections[0]) white_node.add_connection(connections[1]) diff --git a/test/functional/p2p-compactblocks.py b/test/functional/p2p-compactblocks.py --- a/test/functional/p2p-compactblocks.py +++ b/test/functional/p2p-compactblocks.py @@ -808,10 +808,10 @@ connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.test_node)) - connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], self.test_node)) + connections.append(NodeConn('127.0.0.1', self.p2p_port(1), self.nodes[1], self.ex_softfork_node, services=NODE_NETWORK)) - connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], + connections.append(NodeConn('127.0.0.1', self.p2p_port(1), self.nodes[1], self.old_node, services=NODE_NETWORK)) self.test_node.add_connection(connections[0]) self.ex_softfork_node.add_connection(connections[1]) diff --git a/test/functional/p2p-feefilter.py b/test/functional/p2p-feefilter.py --- a/test/functional/p2p-feefilter.py +++ b/test/functional/p2p-feefilter.py @@ -58,7 +58,7 @@ # Setup the p2p connections and start up the network thread. test_node = TestNode() connection = NodeConn( - '127.0.0.1', p2p_port(0), self.nodes[0], test_node) + '127.0.0.1', self.p2p_port(0), self.nodes[0], test_node) test_node.add_connection(connection) NetworkThread().start() test_node.wait_for_verack() diff --git a/test/functional/p2p-leaktests.py b/test/functional/p2p-leaktests.py --- a/test/functional/p2p-leaktests.py +++ b/test/functional/p2p-leaktests.py @@ -127,11 +127,11 @@ no_verack_idlenode = CNodeNoVerackIdle() connections = [] - connections.append(NodeConn('127.0.0.1', p2p_port( + connections.append(NodeConn('127.0.0.1', self.p2p_port( 0), self.nodes[0], no_version_bannode, send_version=False)) - connections.append(NodeConn('127.0.0.1', p2p_port( + connections.append(NodeConn('127.0.0.1', self.p2p_port( 0), self.nodes[0], no_version_idlenode, send_version=False)) - connections.append(NodeConn('127.0.0.1', p2p_port(0), + connections.append(NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], no_verack_idlenode)) no_version_bannode.add_connection(connections[0]) no_version_idlenode.add_connection(connections[1]) diff --git a/test/functional/p2p-mempool.py b/test/functional/p2p-mempool.py --- a/test/functional/p2p-mempool.py +++ b/test/functional/p2p-mempool.py @@ -17,7 +17,8 @@ def run_test(self): # connect a mininode aTestNode = NodeConnCB() - node = NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], aTestNode) + node = NodeConn('127.0.0.1', self.p2p_port(0), + self.nodes[0], aTestNode) aTestNode.add_connection(node) NetworkThread().start() aTestNode.wait_for_verack() diff --git a/test/functional/p2p-timeouts.py b/test/functional/p2p-timeouts.py --- a/test/functional/p2p-timeouts.py +++ b/test/functional/p2p-timeouts.py @@ -47,11 +47,11 @@ connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_verack_node)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], self.no_verack_node)) connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_version_node, send_version=False)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], self.no_version_node, send_version=False)) connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_send_node, send_version=False)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], self.no_send_node, send_version=False)) self.no_verack_node.add_connection(connections[0]) self.no_version_node.add_connection(connections[1]) self.no_send_node.add_connection(connections[2]) diff --git a/test/functional/rpcbind_test.py b/test/functional/rpcbind_test.py --- a/test/functional/rpcbind_test.py +++ b/test/functional/rpcbind_test.py @@ -74,7 +74,7 @@ self.log.info("Using interface %s for testing" % non_loopback_ip) - defaultport = rpc_port(0) + defaultport = self.rpc_port(0) # check default without rpcallowip (IPv4 and IPv6 localhost) self.run_bind_test(None, '127.0.0.1', [], diff --git a/test/functional/sendheaders.py b/test/functional/sendheaders.py --- a/test/functional/sendheaders.py +++ b/test/functional/sendheaders.py @@ -223,10 +223,10 @@ connections = [] connections.append( - NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], inv_node)) + NodeConn('127.0.0.1', self.p2p_port(0), self.nodes[0], inv_node)) # Set nServices to 0 for test_node, so no block download will occur outside of # direct fetching - connections.append(NodeConn('127.0.0.1', p2p_port( + connections.append(NodeConn('127.0.0.1', self.p2p_port( 0), self.nodes[0], test_node, services=0)) inv_node.add_connection(connections[0]) test_node.add_connection(connections[1]) diff --git a/test/functional/test_framework/comptool.py b/test/functional/test_framework/comptool.py --- a/test/functional/test_framework/comptool.py +++ b/test/functional/test_framework/comptool.py @@ -19,7 +19,7 @@ from .mininode import * from .blockstore import BlockStore, TxStore -from .util import p2p_port, wait_until +from .util import wait_until import logging @@ -191,7 +191,7 @@ test_node = TestNode(self.block_store, self.tx_store) self.test_nodes.append(test_node) self.connections.append( - NodeConn('127.0.0.1', p2p_port(i), nodes[i], test_node)) + NodeConn('127.0.0.1', self.test_generator.p2p_port(i), nodes[i], test_node)) # Make sure the TestNode (callback class) has a reference to its # associated NodeConn test_node.add_connection(self.connections[-1]) 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 @@ -21,15 +21,14 @@ from .test_node import TestNode from .util import ( MAX_NODES, - PortSeed, + PORT_MIN, + PORT_RANGE, assert_equal, check_json_precision, connect_nodes_bi, disconnect_nodes, initialize_datadir, log_filename, - p2p_port, - rpc_port, set_node_times, sync_blocks, sync_mempools, @@ -102,7 +101,7 @@ assert hasattr( self, "num_nodes"), "Test must set self.num_nodes in set_test_params()" - PortSeed.n = self.options.port_seed + self.port_seed = self.options.port_seed os.environ['PATH'] = self.options.srcdir + ":" + \ self.options.srcdir + "/qt:" + os.environ['PATH'] @@ -228,7 +227,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="127.0.0.1", timewait=None, binary=None): """Instantiate TestNode objects""" if extra_args is None: @@ -238,7 +237,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, rpc_port(i), p2p_port(i), timewait=timewait, + self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, self.rpc_port(i), self.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): @@ -293,6 +292,13 @@ self.stop_node(i) self.start_node(i, extra_args) + def rpc_port(self, n): + return PORT_MIN + PORT_RANGE + n + (MAX_NODES * self.port_seed) % (PORT_RANGE - 1 - MAX_NODES) + + def p2p_port(self, n): + assert(n <= MAX_NODES) + return PORT_MIN + n + (MAX_NODES * self.port_seed) % (PORT_RANGE - 1 - MAX_NODES) + def assert_start_raises_init_error(self, i, extra_args=None, expected_msg=None): with tempfile.SpooledTemporaryFile(max_size=2**16) as log_stderr: try: @@ -414,13 +420,13 @@ # Create cache directories, run bitcoinds: for i in range(MAX_NODES): datadir = initialize_datadir( - self.options.cachedir, i, p2p_port(i), rpc_port(i)) + self.options.cachedir, i, self.p2p_port(i), self.rpc_port(i)) args = [os.getenv("BITCOIND", "bitcoind"), "-server", "-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, [ - ], None, rpc_port(i), p2p_port(i), timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None)) + args.append("-connect=127.0.0.1:" + str(self.p2p_port(0))) + self.nodes.append(TestNode(i, self.options.cachedir, extra_args=[ + ], host=None, rpc_port=self.rpc_port(i), p2p_port=self.p2p_port(i), timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None)) self.nodes[i].args = args self.start_node(i) @@ -462,7 +468,7 @@ shutil.copytree(from_dir, to_dir) # Overwrite port/rpcport in bitcoin.conf initialize_datadir(self.options.tmpdir, i, - p2p_port(i), rpc_port(i)) + self.p2p_port(i), self.rpc_port(i)) def _initialize_chain_clean(self): """Initialize empty blockchain for use by the test. @@ -471,7 +477,7 @@ Useful if a test case wants complete control over initialization.""" for i in range(self.num_nodes): initialize_datadir(self.options.tmpdir, i, - p2p_port(i), rpc_port(i)) + self.p2p_port(i), self.rpc_port(i)) class ComparisonTestFramework(BitcoinTestFramework): 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,8 +16,6 @@ from .mininode import COIN, ToHex, FromHex, CTransaction from .util import ( assert_equal, - p2p_port, - rpc_port, get_rpc_proxy, rpc_url, wait_until, 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 @@ -269,12 +269,6 @@ # The number of ports to "reserve" for p2p and rpc, each PORT_RANGE = 5000 - -class PortSeed: - # Must be initialized with a unique integer for each process - n = None - - def get_rpc_proxy(url, node_number, timeout=None, coveragedir=None): """ Args: @@ -301,15 +295,6 @@ return coverage.AuthServiceProxyWrapper(proxy, coverage_logfile) -def p2p_port(n): - assert(n <= MAX_NODES) - return PORT_MIN + n + (MAX_NODES * PortSeed.n) % (PORT_RANGE - 1 - MAX_NODES) - - -def rpc_port(n): - return PORT_MIN + PORT_RANGE + n + (MAX_NODES * PortSeed.n) % (PORT_RANGE - 1 - MAX_NODES) - - def rpc_url(datadir, i, rpchost, rpcport): rpc_u, rpc_p = get_auth_cookie(datadir) host = '127.0.0.1'