mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
merge bitcoin#18691: add wait_for_cookie_credentials() to framework for rpcwait tests
This commit is contained in:
parent
6c5eda9ad8
commit
0d8932c979
@ -13,7 +13,6 @@ BLOCKS = 101
|
||||
BALANCE = (BLOCKS - 100) * 500
|
||||
|
||||
class TestBitcoinCli(BitcoinTestFramework):
|
||||
|
||||
def set_test_params(self):
|
||||
self.setup_clean_chain = True
|
||||
self.num_nodes = 1
|
||||
@ -33,12 +32,12 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||
user, password = get_auth_cookie(self.nodes[0].datadir, self.chain)
|
||||
|
||||
self.log.info("Test -stdinrpcpass option")
|
||||
assert_equal(BLOCKS, self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input=password).getblockcount())
|
||||
assert_raises_process_error(1, "Incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input="foo").echo)
|
||||
assert_equal(BLOCKS, self.nodes[0].cli('-rpcuser={}'.format(user), '-stdinrpcpass', input=password).getblockcount())
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword', self.nodes[0].cli('-rpcuser={}'.format(user), '-stdinrpcpass', input='foo').echo)
|
||||
|
||||
self.log.info("Test -stdin and -stdinrpcpass")
|
||||
assert_equal(["foo", "bar"], self.nodes[0].cli('-rpcuser=%s' % user, '-stdin', '-stdinrpcpass', input=password + "\nfoo\nbar").echo())
|
||||
assert_raises_process_error(1, "Incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % user, '-stdin', '-stdinrpcpass', input="foo").echo)
|
||||
assert_equal(['foo', 'bar'], self.nodes[0].cli('-rpcuser={}'.format(user), '-stdin', '-stdinrpcpass', input=password + '\nfoo\nbar').echo())
|
||||
assert_raises_process_error(1, 'Incorrect rpcuser or rpcpassword', self.nodes[0].cli('-rpcuser={}'.format(user), '-stdin', '-stdinrpcpass', input='foo').echo)
|
||||
|
||||
self.log.info("Test connecting to a non-existing server")
|
||||
assert_raises_process_error(1, "Could not connect to the server", self.nodes[0].cli('-rpcport=1').echo)
|
||||
@ -52,7 +51,7 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||
self.log.info("Test -getinfo returns expected network and blockchain info")
|
||||
if self.is_wallet_compiled():
|
||||
self.nodes[0].encryptwallet(password)
|
||||
cli_get_info = self.nodes[0].cli('-getinfo').send_cli()
|
||||
cli_get_info = self.nodes[0].cli().send_cli('-getinfo')
|
||||
network_info = self.nodes[0].getnetworkinfo()
|
||||
blockchain_info = self.nodes[0].getblockchaininfo()
|
||||
assert_equal(cli_get_info['version'], network_info['version'])
|
||||
@ -77,20 +76,17 @@ class TestBitcoinCli(BitcoinTestFramework):
|
||||
else:
|
||||
self.log.info("*** Wallet not compiled; cli getwalletinfo and -getinfo wallet tests skipped")
|
||||
|
||||
self.stop_node(0)
|
||||
|
||||
self.log.info("Test -version with node stopped")
|
||||
cli_response = self.nodes[0].cli("-version").send_cli()
|
||||
self.stop_node(0)
|
||||
cli_response = self.nodes[0].cli().send_cli('-version')
|
||||
assert "{} RPC client version".format(self.config['environment']['PACKAGE_NAME']) in cli_response
|
||||
|
||||
self.log.info("Test -rpcwait option waits for RPC connection instead of failing")
|
||||
# Start node without RPC connection.
|
||||
self.nodes[0].start()
|
||||
# Verify failure without -rpcwait.
|
||||
assert_raises_process_error(1, "Could not connect to the server", self.nodes[0].cli('getblockcount').echo)
|
||||
# Verify success using -rpcwait.
|
||||
assert_equal(BLOCKS, self.nodes[0].cli('-rpcwait', 'getblockcount').send_cli())
|
||||
self.log.info("Test -rpcwait option successfully waits for RPC connection")
|
||||
self.nodes[0].start() # start node without RPC connection
|
||||
self.nodes[0].wait_for_cookie_credentials() # ensure cookie file is available to avoid race condition
|
||||
blocks = self.nodes[0].cli('-rpcwait').send_cli('getblockcount')
|
||||
self.nodes[0].wait_for_rpc_connection()
|
||||
assert_equal(blocks, BLOCKS)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -27,6 +27,7 @@ from .util import (
|
||||
MAX_NODES,
|
||||
append_config,
|
||||
delete_cookie_file,
|
||||
get_auth_cookie,
|
||||
get_rpc_proxy,
|
||||
rpc_url,
|
||||
wait_until,
|
||||
@ -280,12 +281,27 @@ class TestNode():
|
||||
pass # Port not yet open?
|
||||
else:
|
||||
raise # unknown OS error
|
||||
except ValueError as e: # cookie file not found and no rpcuser or rpcassword. dashd still starting
|
||||
except ValueError as e: # cookie file not found and no rpcuser or rpcpassword; dashd is still starting
|
||||
if "No RPC credentials" not in str(e):
|
||||
raise
|
||||
time.sleep(1.0 / poll_per_s)
|
||||
self._raise_assertion_error("Unable to connect to dashd after {}s".format(self.rpc_timeout))
|
||||
|
||||
def wait_for_cookie_credentials(self):
|
||||
"""Ensures auth cookie credentials can be read, e.g. for testing CLI with -rpcwait before RPC connection is up."""
|
||||
self.log.debug("Waiting for cookie credentials")
|
||||
# Poll at a rate of four times per second.
|
||||
poll_per_s = 4
|
||||
for _ in range(poll_per_s * self.rpc_timeout):
|
||||
try:
|
||||
get_auth_cookie(self.datadir, self.chain)
|
||||
self.log.debug("Cookie credentials successfully retrieved")
|
||||
return
|
||||
except ValueError: # cookie file not found and no rpcuser or rpcpassword; bitcoind is still starting
|
||||
pass # so we continue polling until RPC credentials are retrieved
|
||||
time.sleep(1.0 / poll_per_s)
|
||||
self._raise_assertion_error("Unable to retrieve cookie credentials after {}s".format(self.rpc_timeout))
|
||||
|
||||
def generate(self, nblocks, maxtries=1000000):
|
||||
self.log.debug("TestNode.generate() dispatches `generate` call to `generatetoaddress`")
|
||||
return self.generatetoaddress(nblocks=nblocks, address=self.get_deterministic_priv_key().address, maxtries=maxtries)
|
||||
|
Loading…
Reference in New Issue
Block a user