2017-08-24 22:01:16 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# Copyright (c) 2017 The Bitcoin Core developers
|
|
|
|
# Distributed under the MIT software license, see the accompanying
|
|
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
2019-09-26 15:50:24 +02:00
|
|
|
"""Test dash-cli"""
|
2017-08-24 22:01:16 +02:00
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
2017-09-07 01:43:16 +02:00
|
|
|
from test_framework.util import assert_equal, assert_raises_process_error, get_auth_cookie
|
2017-08-24 22:01:16 +02:00
|
|
|
|
2023-04-16 09:18:51 +02:00
|
|
|
# The block reward of coinbaseoutput.nValue (500) DASH/block matures after
|
|
|
|
# COINBASE_MATURITY (100) blocks. Therefore, after mining 101 blocks we expect
|
|
|
|
# node 0 to have a balance of (BLOCKS - COINBASE_MATURITY) * 500 DASH/block.
|
|
|
|
BLOCKS = 101
|
|
|
|
BALANCE = (BLOCKS - 100) * 500
|
|
|
|
|
2017-08-24 22:01:16 +02:00
|
|
|
class TestBitcoinCli(BitcoinTestFramework):
|
|
|
|
|
2017-09-02 00:44:05 +02:00
|
|
|
def set_test_params(self):
|
2017-08-24 22:01:16 +02:00
|
|
|
self.setup_clean_chain = True
|
|
|
|
self.num_nodes = 1
|
|
|
|
|
Merge #17497: test: skip tests when utils haven't been compiled
a67352161c68fea9764cc31aff199f112d8572c6 test: skip tool_wallet test when bitcoin-wallet isn't compiled (fanquake)
e9277baed64e1d4054a102e40b39a9aed7839c2f test: skip wallet_listreceivedby test when the cli isn't compiled (fanquake)
621d398750d9f5ce3e7ec75ccb160b3534dcc436 test: skip bitcoin_cli test when the cli isn't compiled (fanquake)
Pull request description:
Don't try and run the `interface_bitcoin_cli.py` test when `bitcoin-cli` isn't available.
```bash
stdout:
2019-11-17T01:51:41.623000Z TestFramework (INFO): Initializing test directory /var/folders/z2/cn877pxd3czdfh47mfkmbwgm0000gn/T/test_runner_₿_🏃_20191116_205141/interface_bitcoin_cli_0
2019-11-17T01:51:41.890000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
File "/Users/michael/github/bitcoin/test/functional/test_framework/test_framework.py", line 111, in main
self.run_test()
File "/Users/michael/github/bitcoin/test/functional/interface_bitcoin_cli.py", line 18, in run_test
cli_response = self.nodes[0].cli("-version").send_cli()
File "/Users/michael/github/bitcoin/test/functional/test_framework/test_node.py", line 528, in send_cli
process = subprocess.Popen(p_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
File "/Users/michael/.pyenv/versions/3.5.6/lib/python3.5/subprocess.py", line 676, in __init__
restore_signals, start_new_session)
File "/Users/michael/.pyenv/versions/3.5.6/lib/python3.5/subprocess.py", line 1289, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/github/bitcoin/src/bitcoin-cli'
```
Top commit has no ACKs.
Tree-SHA512: de27513a615d9d21271a0948e012c3209351e7374efd19bfa1bb9cda77e8fffe15d99e3424e4dbfa8cf826084f8af1670726f4703bd2b6093e7d37df4bea64f0
2019-11-19 16:11:27 +01:00
|
|
|
def skip_test_if_missing_module(self):
|
|
|
|
self.skip_if_no_cli()
|
|
|
|
|
2017-08-24 22:01:16 +02:00
|
|
|
def run_test(self):
|
|
|
|
"""Main test logic"""
|
2023-04-16 09:18:51 +02:00
|
|
|
self.nodes[0].generate(BLOCKS)
|
2017-08-24 22:01:16 +02:00
|
|
|
|
2018-07-20 23:23:22 +02:00
|
|
|
cli_response = self.nodes[0].cli("-version").send_cli()
|
2019-04-26 14:16:36 +02:00
|
|
|
assert "{} RPC client version".format(self.config['environment']['PACKAGE_NAME']) in cli_response
|
2018-07-20 23:23:22 +02:00
|
|
|
|
2018-10-20 03:44:39 +02:00
|
|
|
self.log.info("Compare responses from getwalletinfo RPC and `dash-cli getwalletinfo`")
|
2018-10-08 06:39:53 +02:00
|
|
|
if self.is_wallet_compiled():
|
2023-02-14 09:48:36 +01:00
|
|
|
self.nodes[0].createwallet(self.default_wallet_name)
|
2018-10-08 06:39:53 +02:00
|
|
|
cli_response = self.nodes[0].cli.getwalletinfo()
|
|
|
|
rpc_response = self.nodes[0].getwalletinfo()
|
|
|
|
assert_equal(cli_response, rpc_response)
|
2019-09-24 01:33:31 +02:00
|
|
|
|
2019-09-26 15:50:24 +02:00
|
|
|
self.log.info("Compare responses from getblockchaininfo RPC and `dash-cli getblockchaininfo`")
|
2017-09-07 01:43:16 +02:00
|
|
|
cli_response = self.nodes[0].cli.getblockchaininfo()
|
|
|
|
rpc_response = self.nodes[0].getblockchaininfo()
|
|
|
|
assert_equal(cli_response, rpc_response)
|
|
|
|
|
2021-01-22 15:58:07 +01:00
|
|
|
user, password = get_auth_cookie(self.nodes[0].datadir, self.chain)
|
2017-09-07 01:43:16 +02:00
|
|
|
|
|
|
|
self.log.info("Test -stdinrpcpass option")
|
2023-04-16 09:18:51 +02:00
|
|
|
assert_equal(BLOCKS, self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input=password).getblockcount())
|
2018-03-20 09:36:14 +01:00
|
|
|
assert_raises_process_error(1, "Incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % user, '-stdinrpcpass', input="foo").echo)
|
2017-08-24 22:01:16 +02:00
|
|
|
|
2017-09-07 01:43:16 +02:00
|
|
|
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())
|
2018-03-20 09:36:14 +01:00
|
|
|
assert_raises_process_error(1, "Incorrect rpcuser or rpcpassword", self.nodes[0].cli('-rpcuser=%s' % 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)
|
|
|
|
|
|
|
|
self.log.info("Test connecting with non-existing RPC cookie file")
|
|
|
|
assert_raises_process_error(1, "Could not locate RPC credentials", self.nodes[0].cli('-rpccookiefile=does-not-exist', '-rpcpassword=').echo)
|
2017-08-24 22:01:16 +02:00
|
|
|
|
2017-11-18 12:05:27 +01:00
|
|
|
self.log.info("Make sure that -getinfo with arguments fails")
|
|
|
|
assert_raises_process_error(1, "-getinfo takes no arguments", self.nodes[0].cli('-getinfo').help)
|
|
|
|
|
2023-04-16 09:18:51 +02:00
|
|
|
self.log.info("Test that -getinfo returns the expected network and blockchain info")
|
2018-01-24 14:49:33 +01:00
|
|
|
cli_get_info = self.nodes[0].cli('-getinfo').send_cli()
|
2017-09-28 08:33:12 +02:00
|
|
|
network_info = self.nodes[0].getnetworkinfo()
|
|
|
|
blockchain_info = self.nodes[0].getblockchaininfo()
|
|
|
|
|
|
|
|
assert_equal(cli_get_info['version'], network_info['version'])
|
|
|
|
assert_equal(cli_get_info['blocks'], blockchain_info['blocks'])
|
|
|
|
assert_equal(cli_get_info['timeoffset'], network_info['timeoffset'])
|
|
|
|
assert_equal(cli_get_info['connections'], network_info['connections'])
|
|
|
|
assert_equal(cli_get_info['proxy'], network_info['networks'][0]['proxy'])
|
|
|
|
assert_equal(cli_get_info['difficulty'], blockchain_info['difficulty'])
|
2019-03-11 15:26:38 +01:00
|
|
|
assert_equal(cli_get_info['chain'], blockchain_info['chain'])
|
2018-10-08 06:39:53 +02:00
|
|
|
if self.is_wallet_compiled():
|
2023-04-16 09:18:51 +02:00
|
|
|
self.log.info("Test that -getinfo returns the expected wallet info")
|
|
|
|
assert_equal(cli_get_info['balance'], BALANCE)
|
|
|
|
wallet_info = self.nodes[0].getwalletinfo()
|
2019-03-11 15:28:41 +01:00
|
|
|
assert_equal(cli_get_info['coinjoin_balance'], wallet_info['coinjoin_balance'])
|
2018-10-08 06:39:53 +02:00
|
|
|
assert_equal(cli_get_info['keypoolsize'], wallet_info['keypoolsize'])
|
|
|
|
assert_equal(cli_get_info['paytxfee'], wallet_info['paytxfee'])
|
|
|
|
assert_equal(cli_get_info['relayfee'], network_info['relayfee'])
|
|
|
|
# unlocked_until is not tested because the wallet is not encrypted
|
2023-04-16 09:18:51 +02:00
|
|
|
else:
|
|
|
|
self.log.info("*** Wallet not compiled; -getinfo wallet tests skipped")
|
2018-10-08 06:39:53 +02:00
|
|
|
|
2017-09-28 08:33:12 +02:00
|
|
|
|
2017-08-24 22:01:16 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
TestBitcoinCli().main()
|