mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-05 01:10:54 +02:00
qa: Test bitcond shutdown
This commit is contained in:
parent
8d3f46ec39
commit
28479f926f
28
test/functional/feature_shutdown.py
Executable file
28
test/functional/feature_shutdown.py
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2018 The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
"""Test bitcoind shutdown."""
|
||||||
|
|
||||||
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
|
from test_framework.util import assert_equal, get_rpc_proxy
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
def test_long_call(node):
|
||||||
|
block = node.waitfornewblock()
|
||||||
|
assert_equal(block['height'], 0)
|
||||||
|
|
||||||
|
class ShutdownTest(BitcoinTestFramework):
|
||||||
|
|
||||||
|
def set_test_params(self):
|
||||||
|
self.setup_clean_chain = True
|
||||||
|
self.num_nodes = 1
|
||||||
|
|
||||||
|
def run_test(self):
|
||||||
|
node = get_rpc_proxy(self.nodes[0].url, 1, timeout=600, coveragedir=self.nodes[0].coverage_dir)
|
||||||
|
Thread(target=test_long_call, args=(node,)).start()
|
||||||
|
# wait 1 second to ensure event loop waits for current connections to close
|
||||||
|
self.stop_node(0, wait=1000)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
ShutdownTest().main()
|
@ -325,16 +325,16 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
|
|||||||
for node in self.nodes:
|
for node in self.nodes:
|
||||||
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
|
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
|
||||||
|
|
||||||
def stop_node(self, i, expected_stderr=''):
|
def stop_node(self, i, expected_stderr='', wait=0):
|
||||||
"""Stop a bitcoind test node"""
|
"""Stop a bitcoind test node"""
|
||||||
self.nodes[i].stop_node(expected_stderr)
|
self.nodes[i].stop_node(expected_stderr, wait=wait)
|
||||||
self.nodes[i].wait_until_stopped()
|
self.nodes[i].wait_until_stopped()
|
||||||
|
|
||||||
def stop_nodes(self):
|
def stop_nodes(self, wait=0):
|
||||||
"""Stop multiple bitcoind test nodes"""
|
"""Stop multiple bitcoind test nodes"""
|
||||||
for node in self.nodes:
|
for node in self.nodes:
|
||||||
# Issue RPC to stop nodes
|
# Issue RPC to stop nodes
|
||||||
node.stop_node()
|
node.stop_node(wait=wait)
|
||||||
|
|
||||||
for node in self.nodes:
|
for node in self.nodes:
|
||||||
# Wait for nodes to stop
|
# Wait for nodes to stop
|
||||||
|
@ -228,13 +228,13 @@ class TestNode():
|
|||||||
wallet_path = "wallet/{}".format(urllib.parse.quote(wallet_name))
|
wallet_path = "wallet/{}".format(urllib.parse.quote(wallet_name))
|
||||||
return self.rpc / wallet_path
|
return self.rpc / wallet_path
|
||||||
|
|
||||||
def stop_node(self, expected_stderr=''):
|
def stop_node(self, expected_stderr='', wait=0):
|
||||||
"""Stop the node."""
|
"""Stop the node."""
|
||||||
if not self.running:
|
if not self.running:
|
||||||
return
|
return
|
||||||
self.log.debug("Stopping node")
|
self.log.debug("Stopping node")
|
||||||
try:
|
try:
|
||||||
self.stop()
|
self.stop(wait=wait)
|
||||||
except http.client.CannotSendRequest:
|
except http.client.CannotSendRequest:
|
||||||
self.log.exception("Unable to stop node.")
|
self.log.exception("Unable to stop node.")
|
||||||
|
|
||||||
|
@ -185,6 +185,7 @@ BASE_SCRIPTS = [
|
|||||||
'feature_config_args.py',
|
'feature_config_args.py',
|
||||||
'rpc_help.py',
|
'rpc_help.py',
|
||||||
'feature_help.py',
|
'feature_help.py',
|
||||||
|
'feature_shutdown.py',
|
||||||
# Don't append tests at the end to avoid merge conflicts
|
# Don't append tests at the end to avoid merge conflicts
|
||||||
# Put them in a random line within the section that fits their approximate run-time
|
# Put them in a random line within the section that fits their approximate run-time
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user