Page MenuHomePhabricator

test a wrong negative lock annotation
AbandonedPublicDraft

Authored by PiRK on Nov 30 2023, 08:58.

Details

Reviewers
None
Group Reviewers
Restricted Project
Summary

deliberately add a wrong negative lock annotation to test that various clang versions can detect the issue (see D14876).

Warnings generated by clang14 on a debug build:

[412/541] Building CXX object src/CMakeFiles/server.dir/net.cpp.o
/home/pierre/dev/bitcoin-abc/src/net.cpp:3124:9: warning: calling function 'DeleteNode' requires negative capability '!m_nodes_mutex' [-Wthread-safety-analysis]
        DeleteNode(pnode);
        ^
/home/pierre/dev/bitcoin-abc/src/net.cpp:3138:9: warning: calling function 'DeleteNode' requires negative capability '!m_nodes_mutex' [-Wthread-safety-analysis]
        DeleteNode(pnode);
        ^
2 warnings generated.
[417/541] Building CXX object src/CMakeFiles/server.dir/net_processing.cpp.o
/home/pierre/dev/bitcoin-abc/src/net_processing.cpp:6314:9: warning: cannot call function 'ProcessMessage' while mutex 'm_recent_confirmed_transactions_mutex' is held [-Wthread-safety-analysis]
        ProcessMessage(config, *pfrom, msg.m_type, vRecv, msg.m_time,
        ^
1 warning generated.

Depends on D14876

Test Plan

compile with clang and debug

Diff Detail

Event Timeline

Tail of the build log:

-- Installing: /results/artifacts/include/secp256k1_recovery.h
-- Installing: /results/artifacts/include/secp256k1_schnorr.h
[363/543] Building CXX object src/CMakeFiles/server.dir/txorphanage.cpp.o
[364/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[365/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[366/543] Building CXX object src/CMakeFiles/server.dir/torcontrol.cpp.o
[367/543] Building CXX object src/CMakeFiles/server.dir/rpc/avalanche.cpp.o
[368/543] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[369/543] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[370/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[371/543] Linking C executable src/secp256k1/ecmult-bench
[372/543] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[373/543] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
[374/543] Linking CXX executable src/bitcoin-cli
[375/543] Linking C executable src/secp256k1/internal-bench
[376/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[377/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[378/543] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[379/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[380/543] Building CXX object src/CMakeFiles/server.dir/rpc/rawtransaction.cpp.o
[381/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[382/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[383/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[384/543] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[385/543] Linking CXX executable src/bitcoin-tx
[386/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[387/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[388/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[389/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[390/543] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[391/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[392/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[393/543] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[394/543] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[395/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[396/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[397/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[398/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[399/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[400/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[401/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[402/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[403/543] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[404/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[405/543] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[406/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[407/543] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[408/543] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[409/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[410/543] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[411/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[412/543] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[413/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[414/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[415/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[416/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[417/543] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[418/543] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1
The build failed due to an unexpected infrastructure outage. The administrators have been notified to investigate. Sorry for the inconvenience.

Failed tests logs:

====== Bitcoin ABC functional tests: abc-mempool-coherence-on-activations.py ======

------- Stdout: -------
2023-11-30T09:13:30.316000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-mempool-coherence-on-activations_118
2023-11-30T09:14:30.892000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:14:30.892000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-mempool-coherence-on-activations.py", line 225, in run_test
    peer.send_blocks_and_test(maturity_blocks, node)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 879, in test
    self.wait_until(
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:14:30.943000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:15:30.960000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-mempool-coherence-on-activations.py", line 373, in <module>
    MempoolCoherenceOnActivationsTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-minimaldata.py ======

------- Stdout: -------
2023-11-30T09:13:37.482000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-minimaldata_119
2023-11-30T09:13:37.899000Z TestFramework (INFO): Create some blocks with OP_1 coinbase for spending.
2023-11-30T09:14:37.996000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:14:37.997000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-minimaldata.py", line 122, in run_test
    node.p2ps[0].send_blocks_and_test(blocks, node, success=True)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 888, in test
    self.sync_with_ping(timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:14:38.047000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:15:38.056000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-minimaldata.py", line 181, in <module>
    MinimaldataTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-schnorr.py ======

------- Stdout: -------
2023-11-30T09:13:43.362000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-schnorr_121
2023-11-30T09:13:43.774000Z TestFramework (INFO): Create some blocks with OP_1 coinbase for spending.
2023-11-30T09:13:43.889000Z TestFramework (INFO): Mature the blocks and get out of IBD.
2023-11-30T09:13:43.961000Z TestFramework (INFO): Setting up spends to test and mining the fundings.
2023-11-30T09:13:44.084000Z TestFramework (INFO): Typical ECDSA and Schnorr CHECKSIG are valid.
2023-11-30T09:14:44.122000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:14:44.122000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-schnorr.py", line 211, in run_test
    node.p2ps[0].send_txs_and_test([schnorrchecksigtx, ecdsachecksigtx], node)
  File "/work/test/functional/test_framework/p2p.py", line 941, in send_txs_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 925, in test
    self.sync_with_ping()
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:14:44.173000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:15:44.223000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-schnorr.py", line 256, in <module>
    SchnorrTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-schnorrmultisig.py ======

------- Stdout: -------
2023-11-30T09:14:48.277000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-schnorrmultisig_122
2023-11-30T09:14:48.690000Z TestFramework (INFO): Create some blocks with OP_1 coinbase for spending.
2023-11-30T09:15:48.804000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:15:48.804000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-schnorrmultisig.py", line 141, in run_test
    node.p2ps[0].send_blocks_and_test(blocks, node, success=True)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 888, in test
    self.sync_with_ping(timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:15:48.857000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:16:48.903000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-schnorrmultisig.py", line 241, in <module>
    SchnorrMultisigTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-segwit-recovery.py ======

------- Stdout: -------
2023-11-30T09:15:31.043000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-segwit-recovery_123
2023-11-30T09:16:31.774000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:16:31.774000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-segwit-recovery.py", line 182, in run_test
    peer_nonstd.send_blocks_and_test(matureblocks, node_nonstd)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 879, in test
    self.wait_until(
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:16:31.825000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:17:31.866000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-segwit-recovery.py", line 243, in <module>
    SegwitRecoveryTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-sync-chain.py ======

------- Stdout: -------
2023-11-30T09:17:09.926000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-sync-chain_158
2023-11-30T09:18:10.440000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def node_synced():
            return node0.getbestblockhash() == blocks[-1].hash
'''
2023-11-30T09:18:10.441000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-sync-chain.py", line 67, in run_test
    self.wait_until(node_synced)
  File "/work/test/functional/test_framework/test_framework.py", line 815, in wait_until
    return wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def node_synced():
            return node0.getbestblockhash() == blocks[-1].hash
''' not true after 60.0 seconds
2023-11-30T09:18:10.491000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:19:10.520000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-sync-chain.py", line 71, in <module>
    SyncChainTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc-transaction-ordering.py ======

------- Stdout: -------
2023-11-30T09:11:27.260000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc-transaction-ordering_93
2023-11-30T09:12:27.803000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:12:27.803000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc-transaction-ordering.py", line 165, in run_test
    peer.send_blocks_and_test(maturity_blocks, node)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 879, in test
    self.wait_until(
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:12:27.854000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:13:27.910000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc-transaction-ordering.py", line 232, in <module>
    TransactionOrderingTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc_feature_minerfund.py ======

------- Stdout: -------
2023-11-30T09:15:31.444000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc_feature_minerfund_124
2023-11-30T09:15:31.777000Z TestFramework (INFO): Create some history
2023-11-30T09:16:32.364000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc_feature_minerfund.py", line 147, in run_test
    self.run_for_ratio(MINER_FUND_RATIO)
  File "/work/test/functional/abc_feature_minerfund.py", line 36, in run_for_ratio
    self.generate(node, 10)
  File "/work/test/functional/test_framework/test_framework.py", line 726, in generate
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '67d5cff28ce8ab42d1166e7a77a40777a4a322dde3c240749a4585a94740395e'
  '6195d8a4ece6f23b507aee421857d965b9379129843902bb9ee0816527ba24c2'
2023-11-30T09:16:32.417000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:17:32.584000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_feature_minerfund.py", line 151, in <module>
    MinerFundTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc_p2p_avalanche_transaction_voting.py ======

------- Stdout: -------
2023-11-30T09:10:29.079000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc_p2p_avalanche_transaction_voting_83
2023-11-30T09:10:29.809000Z TestFramework (INFO): Check the votes are unknown while the quorum is not established
2023-11-30T09:10:29.865000Z TestFramework (INFO): Check the votes on valid mempool transactions
2023-11-30T09:10:37.436000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:10:37.436000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc_p2p_avalanche_transaction_voting.py", line 97, in run_test
    assert_response(
  File "/work/test/functional/abc_p2p_avalanche_transaction_voting.py", line 53, in assert_response
    response = poll_node.wait_for_avaresponse()
  File "/work/test/functional/test_framework/avatools.py", line 239, in wait_for_avaresponse
    self.wait_until(lambda: len(self.avaresponses) > 0, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 5.0 seconds
2023-11-30T09:10:37.487000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:11:37.529000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_avalanche_transaction_voting.py", line 157, in <module>
    AvalancheTransactionVotingTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc_p2p_compactproofs.py ======

------- Stdout: -------
2023-11-30T09:04:47.889000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc_p2p_compactproofs_10
2023-11-30T09:04:48.469000Z TestFramework (INFO): Check we send a getavaproofs message to our avalanche outbound peers
2023-11-30T09:04:50.503000Z TestFramework (INFO): Check we send periodic getavaproofs message to some of our peers
2023-11-30T09:04:50.555000Z TestFramework (INFO): After the first avaproofs has been received, all the peers are requested periodically
2023-11-30T09:04:50.819000Z TestFramework (INFO): Empty avaproofs will not trigger any request
2023-11-30T09:04:50.820000Z TestFramework (INFO): Check we send a getavaproofs message to our manually connected peers that support avalanche
2023-11-30T09:04:52.160000Z TestFramework (INFO): Check the node responds to getavaproofs messages
2023-11-30T09:04:55.618000Z TestFramework (INFO): Check the node requests the missing proofs after receiving an avaproofs message
2023-11-30T09:04:56.001000Z TestFramework (INFO): The node ignores unsollicited avaproofs
2023-11-30T09:04:56.163000Z TestFramework (INFO): Check no proof is requested if there is no shortid
2023-11-30T09:04:56.421000Z TestFramework (INFO): Check the node requests all the proofs if it known none
2023-11-30T09:04:56.578000Z TestFramework (INFO): Check the node requests only the missing proofs
2023-11-30T09:04:56.743000Z TestFramework (INFO): Check the node don't request prefilled proofs
2023-11-30T09:04:56.904000Z TestFramework (INFO): Check the node requests no proof if it knows all of them
2023-11-30T09:04:57.066000Z TestFramework (INFO): Check out of bounds index
2023-11-30T09:04:57.281000Z TestFramework (INFO): An invalid prefilled proof will trigger a ban
2023-11-30T09:04:57.444000Z TestFramework (INFO): Check the node respond to missing proofs requests
2023-11-30T09:04:59.015000Z TestFramework (INFO): Unsollicited requests are ignored
2023-11-30T09:04:59.228000Z TestFramework (INFO): Sending an empty request has no effect
2023-11-30T09:04:59.279000Z TestFramework (INFO): Check the requested proofs are sent by the node
2023-11-30T09:05:00.776000Z TestFramework (INFO): Check the node will not send the proofs if not requested before the timeout elapsed
2023-11-30T09:05:01.450000Z TestFramework (INFO): Check the node get compact proofs upon avalanche outbound discovery
2023-11-30T09:05:02.295000Z TestFramework (INFO): Check the node don't request compact proofs during IBD
2023-11-30T09:05:03.022000Z TestFramework (INFO): Check we also request the inbounds until the quorum is established
2023-11-30T09:05:08.979000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:06:09.152000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_compactproofs.py", line 747, in <module>
    CompactProofsTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc_p2p_fullblocktest.py ======

------- Stdout: -------
2023-11-30T09:03:49.384000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc_p2p_fullblocktest_2
2023-11-30T09:04:49.941000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:04:49.941000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc_p2p_fullblocktest.py", line 201, in run_test
    peer.send_blocks_and_test(maturity_blocks, node)
  File "/work/test/functional/test_framework/p2p.py", line 901, in send_blocks_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 879, in test
    self.wait_until(
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:04:49.994000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:05:50.024000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_fullblocktest.py", line 237, in <module>
    FullBlockTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: abc_rpc_avalancheproof.py ======

------- Stdout: -------
2023-11-30T09:06:23.101000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/abc_rpc_avalancheproof_44
2023-11-30T09:06:23.563000Z TestFramework (INFO): Make build a valid proof and restart the node to use it
2023-11-30T09:06:23.566000Z TestFramework (INFO): Test decodeavalancheproof RPC
2023-11-30T09:06:23.978000Z TestFramework (INFO): The proof is registered at first chaintip update if we have inbounds
2023-11-30T09:06:24.103000Z TestFramework (INFO): Start a node with an immature proof
2023-11-30T09:07:25.062000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/abc_rpc_avalancheproof.py", line 212, in run_test
    self.sync_blocks()
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '44687761cea68f62ad8d45b2c8dad58cfc6a5f473b01a2ca7ca3e3f20d933ed1'
  '7cd2cfc48a07895d3413640f411eb9b7622a68eacb276a38afde7cea2e18f41b'
2023-11-30T09:07:25.116000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:08:25.234000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_rpc_avalancheproof.py", line 722, in <module>
    AvalancheProofTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: feature_assumevalid.py ======

------- Stdout: -------
2023-11-30T09:08:30.392000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/feature_assumevalid_56
2023-11-30T09:09:32.237000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        self.wait_until(lambda: self.nodes[0].getblockcount() >= 101)
'''
2023-11-30T09:09:32.237000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/feature_assumevalid.py", line 170, in run_test
    self.wait_until(lambda: self.nodes[0].getblockcount() >= 101)
  File "/work/test/functional/test_framework/test_framework.py", line 815, in wait_until
    return wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        self.wait_until(lambda: self.nodes[0].getblockcount() >= 101)
''' not true after 60.0 seconds
2023-11-30T09:09:32.287000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:10:32.346000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 2] Cleaning up leftover process
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/feature_assumevalid.py", line 190, in <module>
    AssumeValidTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: feature_cltv.py ======

------- Stdout: -------
2023-11-30T09:15:44.307000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/feature_cltv_131
2023-11-30T09:15:44.670000Z TestFramework (INFO): Mining 1349 blocks
2023-11-30T09:15:45.934000Z TestFramework (INFO): Test that an invalid-according-to-CLTV transaction can still appear in a block
2023-11-30T09:15:45.987000Z TestFramework (INFO): Test that blocks must now be at least version 4
2023-11-30T09:15:46.093000Z TestFramework (INFO): Test that invalid-according-to-cltv transactions cannot appear in a block
2023-11-30T09:16:46.123000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:16:46.123000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/feature_cltv.py", line 137, in run_test
    peer.send_and_ping(msg_tx(fundtx))
  File "/work/test/functional/test_framework/p2p.py", line 674, in send_and_ping
    self.sync_with_ping(timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:16:46.174000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:17:46.189000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/feature_cltv.py", line 214, in <module>
    BIP65Test().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: feature_coinstatsindex.py ======

------- Stdout: -------
2023-11-30T09:11:36.106000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/feature_coinstatsindex_97
2023-11-30T09:12:37.189000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/feature_coinstatsindex.py", line 38, in run_test
    self._test_coin_stats_index()
  File "/work/test/functional/feature_coinstatsindex.py", line 59, in _test_coin_stats_index
    self.generate(self.wallet, 101)
  File "/work/test/functional/test_framework/test_framework.py", line 726, in generate
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '446c9fc28fd8bc50e5bcea40eceb01102558d288e5ff8321fa19073110039d3d'
  '220412633b05ecb68b2c1f3c5333d616b599b56e355622d3eea2ae4060fa8057'
2023-11-30T09:12:37.242000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:13:37.400000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/feature_coinstatsindex.py", line 327, in <module>
    CoinStatsIndexTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: feature_minchainwork.py ======

------- Stdout: -------
2023-11-30T09:09:21.816000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/feature_minchainwork_71
2023-11-30T09:09:22.182000Z TestFramework (INFO): Testing relay across node 1 (minChainWork = 101)
2023-11-30T09:09:22.183000Z TestFramework (INFO): Generating 49 blocks on node0
2023-11-30T09:09:22.203000Z TestFramework (INFO): Node0 current chain work: 0000000000000000000000000000000000000000000000000000000000000064
2023-11-30T09:09:25.203000Z TestFramework (INFO): Verifying node 2 has no more blocks than before
2023-11-30T09:09:25.205000Z TestFramework (INFO): Blockcounts: [49, 0, 0]
2023-11-30T09:09:25.207000Z TestFramework (INFO): Generating one more block
2023-11-30T09:10:26.102000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/feature_minchainwork.py", line 84, in run_test
    self.generate(self.nodes[0], 1)
  File "/work/test/functional/test_framework/test_framework.py", line 726, in generate
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '5788af885c9cb75af14d5b44a099e7da15eff978e9f33dc6eaef270090f5b1c0'
  '193d508d105ec1357ffc3b6ecf79d79fc5a4106a939845ae4d148d09009c44a2'
  '0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206'
2023-11-30T09:10:26.155000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:11:26.316000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 2] Cleaning up leftover process
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/feature_minchainwork.py", line 99, in <module>
    MinimumChainWorkTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: feature_tx_version.py ======

------- Stdout: -------
2023-11-30T09:11:40.639000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/feature_tx_version_100
2023-11-30T09:11:41.246000Z TestFramework (INFO): These are always OK for the mempool
2023-11-30T09:12:41.292000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:12:41.292000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/feature_tx_version.py", line 81, in run_test
    test_mempool_accepts_ok_versions()
  File "/work/test/functional/feature_tx_version.py", line 67, in test_mempool_accepts_ok_versions
    peer.send_txs_and_test([tx], node, success=True)
  File "/work/test/functional/test_framework/p2p.py", line 941, in send_txs_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 925, in test
    self.sync_with_ping()
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:12:41.343000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:13:41.352000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/feature_tx_version.py", line 143, in <module>
    TxVersionTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: mempool_reorg.py ======

------- Stdout: -------
2023-11-30T09:15:51.499000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/mempool_reorg_136
2023-11-30T09:15:51.902000Z TestFramework (INFO): Add 4 coinbase utxos to the miniwallet
2023-11-30T09:15:52.166000Z TestFramework (INFO): Create three transactions spending from coinbase utxos: spend_1, spend_2, spend_3
2023-11-30T09:15:52.169000Z TestFramework (INFO): Create another transaction which is time-locked to two blocks in the future
2023-11-30T09:15:52.172000Z TestFramework (INFO): Check that the time-locked transaction is too immature to spend
2023-11-30T09:15:52.174000Z TestFramework (INFO): Broadcast and mine spend_2 and spend_3
2023-11-30T09:15:52.185000Z TestFramework (INFO): Generate a block
2023-11-30T09:15:52.210000Z TestFramework (INFO): Check that time-locked transaction is still too immature to spend
2023-11-30T09:15:52.212000Z TestFramework (INFO): Create spend_2_1 and spend_3_1
2023-11-30T09:15:52.214000Z TestFramework (INFO): Broadcast and mine spend_3_1
2023-11-30T09:15:52.216000Z TestFramework (INFO): Generate a block
2023-11-30T09:15:52.236000Z TestFramework (INFO): The time-locked transaction can now be spent
2023-11-30T09:15:52.238000Z TestFramework (INFO): Add spend_1 and spend_2_1 to the mempool
2023-11-30T09:16:53.302000Z TestFramework (ERROR): JSONRPC error
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 216, in _get_response
    http_response = self.__conn.getresponse()
  File "/usr/lib/python3.9/http/client.py", line 1347, in getresponse
    response.begin()
  File "/usr/lib/python3.9/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.9/http/client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.9/socket.py", line 704, in readinto
    return self._sock.recv_into(b)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/mempool_reorg.py", line 118, in run_test
    self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 811, in sync_all
    self.sync_mempools(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 780, in sync_mempools
    assert all(len(x.getpeerinfo()) for x in rpc_connections)
  File "/work/test/functional/test_framework/test_framework.py", line 780, in <genexpr>
    assert all(len(x.getpeerinfo()) for x in rpc_connections)
  File "/work/test/functional/test_framework/coverage.py", line 47, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
  File "/work/test/functional/test_framework/authproxy.py", line 175, in __call__
    response, status = self._request(
  File "/work/test/functional/test_framework/authproxy.py", line 126, in _request
    return self._get_response()
  File "/work/test/functional/test_framework/authproxy.py", line 218, in _get_response
    raise JSONRPCException(
test_framework.authproxy.JSONRPCException: 'getpeerinfo' RPC took longer than 60 seconds. Consider using larger timeout for calls that take longer to return. (-344)
2023-11-30T09:16:53.358000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:16:53.363000Z TestFramework.node1 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 502, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 47, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
  File "/work/test/functional/test_framework/authproxy.py", line 175, in __call__
    response, status = self._request(
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.9/http/client.py", line 1255, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.9/http/client.py", line 1266, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.9/http/client.py", line 1092, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
2023-11-30T09:17:53.525000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/mempool_reorg.py", line 167, in <module>
    MempoolCoinbaseTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_blockfilters.py ======

------- Stdout: -------
2023-11-30T09:06:26.268000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_blockfilters_47
2023-11-30T09:12:28.465000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_blockfilters.py", line 61, in run_test
    self.sync_blocks(timeout=360)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 360s:
  '35aa5cb7b40d6c367401ee19e6f65d5fc6025f7d83a04823ccd41086c2a4f39b'
  '6f65403cce791b9a35de90efe12c11e02df78897099fd0ad7c69da449b3ab099'
2023-11-30T09:12:28.518000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:13:28.607000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_blockfilters.py", line 273, in <module>
    CompactFiltersTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_blocksonly.py ======

------- Stdout: -------
2023-11-30T09:06:21.260000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_blocksonly_43
2023-11-30T09:06:21.544000Z TestFramework (INFO): Tests with node running in -blocksonly mode
2023-11-30T09:06:21.646000Z TestFramework (INFO): Check that txs from P2P are rejected and result in disconnect
2023-11-30T09:06:21.748000Z TestFramework (INFO): Check that tx invs also violate the protocol
2023-11-30T09:07:21.870000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:07:21.870000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_blocksonly.py", line 27, in run_test
    self.blocksonly_mode_tests()
  File "/work/test/functional/p2p_blocksonly.py", line 47, in blocksonly_mode_tests
    self.nodes[0].p2ps[0].wait_for_disconnect()
  File "/work/test/functional/test_framework/p2p.py", line 583, in wait_for_disconnect
    self.wait_until(test_function, timeout=timeout, check_connected=False)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:07:21.921000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:08:21.930000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_blocksonly.py", line 153, in <module>
    P2PBlocksOnly().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_eviction.py ======

------- Stdout: -------
2023-11-30T09:03:49.720000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_eviction_6
2023-11-30T09:03:50.126000Z TestFramework (INFO): Create 4 peers and protect them from eviction by sending us a block
2023-11-30T09:03:51.362000Z TestFramework (INFO): Create 4 peers and protect them from eviction by sending us a proof
2023-11-30T09:03:52.314000Z TestFramework (INFO): Create 5 slow-pinging peers, making them eviction candidates
2023-11-30T09:03:53.101000Z TestFramework (INFO): Create 4 peers and protect them from eviction by sending us a tx
2023-11-30T09:04:53.385000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:04:53.386000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_eviction.py", line 134, in run_test
    txpeer = node.add_p2p_connection(SlowP2PInterface())
  File "/work/test/functional/test_framework/test_node.py", line 873, in add_p2p_connection
    p2p_conn.sync_with_ping()
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:04:53.436000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:05:53.461000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_eviction.py", line 211, in <module>
    P2PEvict().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_feefilter.py ======

------- Stdout: -------
2023-11-30T09:10:36.410000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_feefilter_86
2023-11-30T09:10:36.807000Z TestFramework (INFO): Check that peers without forcerelay permission (default) get a feefilter message
2023-11-30T09:10:36.913000Z TestFramework (INFO): Check that peers with forcerelay permission do not get a feefilter message
2023-11-30T09:10:38.029000Z TestFramework (INFO): Test txs paying 0.2 sat/byte are received by test connection
2023-11-30T09:11:38.097000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:11:38.097000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_feefilter.py", line 66, in run_test
    self.test_feefilter()
  File "/work/test/functional/p2p_feefilter.py", line 108, in test_feefilter
    conn.wait_for_invs_to_match(txids)
  File "/work/test/functional/p2p_feefilter.py", line 39, in wait_for_invs_to_match
    self.wait_until(lambda: invs_expected == sorted(self.txinvs))
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:11:38.150000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:12:38.205000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_feefilter.py", line 181, in <module>
    FeeFilterTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_invalid_tx.py ======

------- Stdout: -------
2023-11-30T09:09:29.061000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_invalid_tx_74
2023-11-30T09:09:29.446000Z TestFramework (INFO): Create a new block with an anyone-can-spend coinbase.
2023-11-30T09:09:29.551000Z TestFramework (INFO): Mature the block.
2023-11-30T09:09:29.665000Z TestFramework (INFO): Testing invalid transaction: OutputMissing
2023-11-30T09:10:29.700000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:10:29.700000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_invalid_tx.py", line 75, in run_test
    node.p2ps[0].send_txs_and_test(
  File "/work/test/functional/test_framework/p2p.py", line 939, in send_txs_and_test
    test()
  File "/work/test/functional/test_framework/p2p.py", line 923, in test
    self.wait_for_disconnect()
  File "/work/test/functional/test_framework/p2p.py", line 583, in wait_for_disconnect
    self.wait_until(test_function, timeout=timeout, check_connected=False)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:10:29.753000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:11:29.797000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_invalid_tx.py", line 203, in <module>
    InvalidTxRequestTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_node_network_limited.py ======

------- Stdout: -------
2023-11-30T09:06:28.575000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_node_network_limited_48
2023-11-30T09:06:28.959000Z TestFramework (INFO): Check that node has signalled expected services.
2023-11-30T09:06:28.960000Z TestFramework (INFO): Check that the localservices is as expected.
2023-11-30T09:06:28.962000Z TestFramework (INFO): Mine enough blocks to reach the NODE_NETWORK_LIMITED range.
2023-11-30T09:07:29.931000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_node_network_limited.py", line 76, in run_test
    blocks = self.generate(
  File "/work/test/functional/test_framework/test_framework.py", line 726, in generate
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/p2p_node_network_limited.py", line 79, in <lambda>
    sync_fun=lambda: self.sync_blocks([self.nodes[0], self.nodes[1]]),
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '644d2aabcac6196162727777dd551a68cb47a1821c8ed478a999123dbec4d880'
  '6da33c46805fb3c863f605ff53330bd64592073bce047d8775c4ead0b3b5c398'
2023-11-30T09:07:29.984000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:08:30.044000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 2] Cleaning up leftover process
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_node_network_limited.py", line 138, in <module>
    NodeNetworkLimitedTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_permissions.py ======

------- Stdout: -------
2023-11-30T09:07:20.354000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_permissions_49
2023-11-30T09:08:21.454000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_permissions.py", line 25, in run_test
    self.check_tx_relay()
  File "/work/test/functional/p2p_permissions.py", line 129, in check_tx_relay
    self.generatetoaddress(self.nodes[0], 100, ADDRESS_ECREG_P2SH_OP_TRUE)[0]
  File "/work/test/functional/test_framework/test_framework.py", line 736, in generatetoaddress
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '1100770ac34b03d87591c3aace252699029e4fd6a099e550e6a189eed7a3dcb7'
  '28be07c4e12292ba2e4fd042024e2279f06543375f25bfad2a887640d8432021'
2023-11-30T09:08:21.507000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:09:21.598000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_permissions.py", line 205, in <module>
    P2PPermissionsTests().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_sendheaders.py ======

------- Stdout: -------
2023-11-30T09:05:15.566000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_sendheaders_22
2023-11-30T09:05:16.132000Z TestFramework (INFO): Verify getheaders with null locator and valid hashstop returns headers.
2023-11-30T09:05:16.183000Z TestFramework (INFO): Verify getheaders with null locator and invalid hashstop does not return headers.
2023-11-30T09:05:16.290000Z TestFramework (INFO): Part 1: headers don't start before sendheaders message...
2023-11-30T09:05:16.551000Z TestFramework (INFO): Part 1: success!
2023-11-30T09:05:16.551000Z TestFramework (INFO): Part 2: announce blocks with headers after sendheaders message...
2023-11-30T09:06:20.179000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:06:20.179000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_sendheaders.py", line 252, in run_test
    self.test_nonnull_locators(test_node, inv_node)
  File "/work/test/functional/p2p_sendheaders.py", line 390, in test_nonnull_locators
    test_node.sync_with_ping()
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:06:20.230000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:07:20.269000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_sendheaders.py", line 647, in <module>
    SendHeadersTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: p2p_unrequested_blocks.py ======

------- Stdout: -------
2023-11-30T09:12:46.523000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/p2p_unrequested_blocks_104
2023-11-30T09:12:47.118000Z TestFramework (INFO): First height 2 block accepted by node0; correctly rejected by node1
2023-11-30T09:12:47.234000Z TestFramework (INFO): Second height 2 block accepted, but not reorg'ed to
2023-11-30T09:12:47.294000Z TestFramework (INFO): Unrequested more-work block accepted
2023-11-30T09:12:47.964000Z TestFramework (INFO): Unrequested block that would complete more-work chain was ignored
2023-11-30T09:12:48.016000Z TestFramework (INFO): Inv at tip triggered getdata for unprocessed block
2023-11-30T09:13:48.055000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
'''
2023-11-30T09:13:48.055000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/p2p_unrequested_blocks.py", line 242, in run_test
    test_node.send_and_ping(msg_block(block_h1f))
  File "/work/test/functional/test_framework/p2p.py", line 674, in send_and_ping
    self.sync_with_ping(timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 694, in sync_with_ping
    self.wait_until(test_function, timeout=timeout)
  File "/work/test/functional/test_framework/p2p.py", line 566, in wait_until
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
        def test_function():
            if check_connected:
                assert self.is_connected
            return test_function_in()
''' not true after 60.0 seconds
2023-11-30T09:13:48.106000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:14:48.165000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/p2p_unrequested_blocks.py", line 338, in <module>
    AcceptBlockTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: rpc_getchaintips.py ======

------- Stdout: -------
2023-11-30T09:13:28.160000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/rpc_getchaintips_106
2023-11-30T09:14:31.125000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/rpc_getchaintips.py", line 50, in run_test
    self.join_network()
  File "/work/test/functional/test_framework/test_framework.py", line 719, in join_network
    self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '2462bd78e721dd78a3424763949048bb420318bbe9e7eadc241a62973fd3ec10'
  '7907095cccf26860b8cd6bbd484ddf17e6f454dc3daa937f29816a09e3209e88'
  '57d2ce06e0f7000634d6728ddfc7c6b7433d548a8684382c118efa805ea412ee'
  '57d2ce06e0f7000634d6728ddfc7c6b7433d548a8684382c118efa805ea412ee'
2023-11-30T09:14:31.178000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:15:31.332000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 3] Cleaning up leftover process
[node 2] Cleaning up leftover process
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/rpc_getchaintips.py", line 64, in <module>
    GetChainTipsTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
====== Bitcoin ABC functional tests: rpc_net.py ======

------- Stdout: -------
2023-11-30T09:08:22.152000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-without-wallet/test/tmp/test_runner_₿₵_  _20231130_090347/rpc_net_51
2023-11-30T09:09:23.002000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 142, in main
    self.run_test()
  File "/work/test/functional/rpc_net.py", line 65, in run_test
    self.generate(self.nodes[0], 101)
  File "/work/test/functional/test_framework/test_framework.py", line 726, in generate
    sync_fun() if sync_fun else self.sync_all()
  File "/work/test/functional/test_framework/test_framework.py", line 810, in sync_all
    self.sync_blocks(nodes)
  File "/work/test/functional/test_framework/test_framework.py", line 762, in sync_blocks
    raise AssertionError(f"Block sync timed out after {timeout}s:{best_hashes}")
AssertionError: Block sync timed out after 60s:
  '56344924d5d83f103df2cdd00461af7ee9e16989aa5194843dc5ade0695877c7'
  '27e08987ce5b475568d799f1185774789b979d5bb8874ed23e92a1c05461e322'
2023-11-30T09:09:23.053000Z TestFramework (INFO): Stopping nodes
2023-11-30T09:10:23.221000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/rpc_net.py", line 391, in <module>
    NetTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds

Each failure log is accessible here:
Bitcoin ABC functional tests: abc-mempool-coherence-on-activations.py
Bitcoin ABC functional tests: abc-minimaldata.py
Bitcoin ABC functional tests: abc-schnorr.py
Bitcoin ABC functional tests: abc-schnorrmultisig.py
Bitcoin ABC functional tests: abc-segwit-recovery.py
Bitcoin ABC functional tests: abc-sync-chain.py
Bitcoin ABC functional tests: abc-transaction-ordering.py
Bitcoin ABC functional tests: abc_feature_minerfund.py
Bitcoin ABC functional tests: abc_p2p_avalanche_transaction_voting.py
Bitcoin ABC functional tests: abc_p2p_compactproofs.py
Bitcoin ABC functional tests: abc_p2p_fullblocktest.py
Bitcoin ABC functional tests: abc_rpc_avalancheproof.py
Bitcoin ABC functional tests: feature_assumevalid.py
Bitcoin ABC functional tests: feature_cltv.py
Bitcoin ABC functional tests: feature_coinstatsindex.py
Bitcoin ABC functional tests: feature_minchainwork.py
Bitcoin ABC functional tests: feature_tx_version.py
Bitcoin ABC functional tests: mempool_reorg.py
Bitcoin ABC functional tests: p2p_blockfilters.py
Bitcoin ABC functional tests: p2p_blocksonly.py
Bitcoin ABC functional tests: p2p_eviction.py
Bitcoin ABC functional tests: p2p_feefilter.py
Bitcoin ABC functional tests: p2p_invalid_tx.py
Bitcoin ABC functional tests: p2p_node_network_limited.py
Bitcoin ABC functional tests: p2p_permissions.py
Bitcoin ABC functional tests: p2p_sendheaders.py
Bitcoin ABC functional tests: p2p_unrequested_blocks.py
Bitcoin ABC functional tests: rpc_getchaintips.py
Bitcoin ABC functional tests: rpc_net.py

Tail of the build log:

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
'''
[node 1] Cleaning up leftover process

stderr:
Traceback (most recent call last):
  File "/work/test/functional/wallet_hd.py", line 365, in <module>
    WalletHDTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 165, in main
    exit_code = self.shutdown()
  File "/work/test/functional/test_framework/test_framework.py", line 391, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 640, in stop_nodes
    node.wait_until_stopped()
  File "/work/test/functional/test_framework/test_node.py", line 547, in wait_until_stopped
    wait_until_helper(
  File "/work/test/functional/test_framework/util.py", line 298, in wait_until_helper
    raise AssertionError(
AssertionError: Predicate ''''
    def is_node_stopped(self):
        """Checks whether the node has stopped.

        Returns True if the node has stopped. False otherwise.
        This method is responsible for freeing resources (self.process)."""
        if not self.running:
            return True
        return_code = self.process.poll()
        if return_code is None:
            return False

        # process has stopped. Assert that it didn't return an error code.
        assert return_code == 0, self._node_msg(
            f"Node returned non-zero exit code ({return_code}) when stopping"
        )
        self.running = False
        self.process = None
        self.rpc_connected = False
        self.rpc = None
        self.log.debug("Node stopped")
        return True
''' not true after 60.0 seconds
Build build-diff timed out after 1200.0s