Merge f34c580bd8 into merged_master (Bitcoin PR bitcoin/bitcoin#31620)

This commit is contained in:
ivanlele 2026-04-14 09:07:31 +00:00
commit ebe7f45f36
No known key found for this signature in database
2 changed files with 10 additions and 20 deletions

View file

@ -171,8 +171,6 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
parser = argparse.ArgumentParser(usage="%(prog)s [options]")
parser.add_argument("--nocleanup", dest="nocleanup", default=False, action="store_true",
help="Leave bitcoinds and test.* datadir on exit or error")
parser.add_argument("--noshutdown", dest="noshutdown", default=False, action="store_true",
help="Don't stop bitcoinds after the test execution")
parser.add_argument("--cachedir", dest="cachedir", default=os.path.abspath(os.path.dirname(test_file) + "/../cache"),
help="Directory for caching pregenerated datadirs (default: %(default)s)")
parser.add_argument("--tmpdir", dest="tmpdir", help="Root directory for datadirs (must not exist)")
@ -326,18 +324,15 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
self.log.debug('Closing down network thread')
self.network_thread.close()
if not self.options.noshutdown:
if self.success == TestStatus.FAILED:
self.log.info("Not stopping nodes as test failed. The dangling processes will be cleaned up later.")
else:
self.log.info("Stopping nodes")
if self.nodes:
self.stop_nodes()
else:
for node in self.nodes:
node.cleanup_on_exit = False
self.log.info("Note: bitcoinds were not stopped and may still be running")
should_clean_up = (
not self.options.nocleanup and
not self.options.noshutdown and
self.success != TestStatus.FAILED and
not self.options.perf
)
@ -589,15 +584,10 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
if extra_args is None:
extra_args = [None] * self.num_nodes
assert_equal(len(extra_args), self.num_nodes)
try:
for i, node in enumerate(self.nodes):
node.start(extra_args[i], *args, **kwargs)
for node in self.nodes:
node.wait_for_rpc_connection()
except Exception:
# If one node failed to start, stop the others
self.stop_nodes()
raise
for i, node in enumerate(self.nodes):
node.start(extra_args[i], *args, **kwargs)
for node in self.nodes:
node.wait_for_rpc_connection()
if self.options.coveragedir is not None:
for node in self.nodes:

View file

@ -20,6 +20,7 @@ import time
import urllib.parse
import collections
import shlex
import sys
from pathlib import Path
from .authproxy import (
@ -158,7 +159,6 @@ class TestNode():
self.rpc = None
self.url = None
self.log = logging.getLogger('TestFramework.node%d' % i)
self.cleanup_on_exit = True # Whether to kill the node when this object goes away
# Cache perf subprocesses here by their data output filename.
self.perf_subprocesses = {}
@ -213,11 +213,11 @@ class TestNode():
def __del__(self):
# Ensure that we don't leave any bitcoind processes lying around after
# the test ends
if self.process and self.cleanup_on_exit:
if self.process:
# Should only happen on test failure
# Avoid using logger, as that may have already been shutdown when
# this destructor is called.
print(self._node_msg("Cleaning up leftover process"))
print(self._node_msg("Cleaning up leftover process"), file=sys.stderr)
self.process.kill()
def __getattr__(self, name):