diff --git a/test/functional/feature_config_args.py b/test/functional/feature_config_args.py --- a/test/functional/feature_config_args.py +++ b/test/functional/feature_config_args.py @@ -18,8 +18,7 @@ def run_test(self): self.stop_node(0) # Remove the -datadir argument so it doesn't override the config file - self.nodes[0].args = [ - arg for arg in self.nodes[0].args if not arg.startswith("-datadir")] + self.nodes[0].remove_default_args(["-datadir"]) default_data_dir = get_datadir_path(self.options.tmpdir, 0) new_data_dir = os.path.join(default_data_dir, 'newdatadir') 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 @@ -422,13 +422,15 @@ # Create cache directories, run bitcoinds: for i in range(MAX_NODES): datadir = initialize_datadir(self.options.cachedir, 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, extra_args=[], host=None, rpc_port=rpc_port(i), p2p_port=p2p_port(i), timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None)) - self.nodes[i].args = args + self.nodes[i].clear_default_args() + self.nodes[i].extend_default_args([ + "-server", "-keypool=1", "-datadir=" + datadir, + "-discover=0"]) + if i > 0: + self.nodes[i].extend_default_args( + ["-connect=127.0.0.1:" + str(p2p_port(0))]) self.start_node(i) # Wait for RPC connections to be ready 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 @@ -61,10 +61,13 @@ self.binary = binary self.stderr = stderr self.coverage_dir = coverage_dir - # 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. + # Most callers will just need to add extra args to the default list + # below. + # For those callers that need more flexibity, they can access the + # default args using the provided facilities 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=" + self.name] + self.default_args = ["-datadir=" + self.datadir, "-server", "-keypool=1", "-discover=0", "-rest", "-logtimemicros", + "-debug", "-debugexclude=libevent", "-debugexclude=leveldb", "-mocktime=" + str(mocktime), "-uacomment=" + self.name] self.cli = TestNodeCLI( os.getenv("BITCOINCLI", "bitcoin-cli"), self.datadir) @@ -89,6 +92,22 @@ assert self.rpc_connected, "Error: No RPC connection" return getattr(self.rpc, name) + def clear_default_args(self): + self.default_args.clear() + + def extend_default_args(self, args): + self.default_args.extend(args) + + def remove_default_args(self, args): + for rm_arg in args: + # Remove all occurrences of rm_arg in self.default_args: + # - if the arg is a flag (-flag), then the names must match + # - if the arg is a value (-key=value) then the name must starts + # with "-key=" (the '"' char is to avoid removing "-key_suffix" + # arg is "-key" is the argument to remove). + self.default_args = [def_arg for def_arg in self.default_args + if rm_arg != def_arg and not def_arg.startswith(rm_arg + '=')] + def start(self, extra_args=None, stderr=None, *args, **kwargs): """Start the node.""" if extra_args is None: @@ -96,7 +115,8 @@ if stderr is None: stderr = self.stderr self.process = subprocess.Popen( - self.args + extra_args, stderr=stderr, *args, **kwargs) + [self.binary] + self.default_args + extra_args, + stderr=stderr, *args, **kwargs) self.running = True self.log.debug("bitcoind started, waiting for RPC to come up")