mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
Merge #19455: rpc generate: print useful help and error message
f0aa8aeea5a183ea44a877255d12db7732f2e0a8 test: add rpc_generate functional test (Jon Atack) 92d94ffb8d07cc0d2665c901de5903a3a90d5fd0 rpc: print useful help and error message for generate (Jon Atack) 8d32d2011d3f4e1d9e587d6f80dfa4a3e9f9393d test: consider generate covered in _get_uncovered_rpc_commands() (Jon Atack) Pull request description: This was a requested follow-up to #19133 and #17700 to alleviate confusion and head-scratching by people following tutorials that use `generate`. See https://github.com/bitcoin/bitcoin/pull/19455#issuecomment-668172916 below, https://github.com/bitcoin/bitcoin/pull/19133#issuecomment-636860943 and https://github.com/bitcoin/bitcoin/pull/17700#issuecomment-566159096. before ``` $ bitcoin-cli help generate help: unknown command: generate $ bitcoin-cli generate error code: -32601 error message: Method not found ``` after ``` $ bitcoin-cli help generate generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. $ bitcoin-cli generate error code: -32601 error message: generate ( nblocks maxtries ) has been replaced by the -generate cli option. Refer to -help for more information. ``` In the general help it remains hidden, as requested by laanwj. ``` $ bitcoin-cli help == Generating == generateblock "output" ["rawtx/txid",...] generatetoaddress nblocks "address" ( maxtries ) generatetodescriptor num_blocks "descriptor" ( maxtries ) ``` ACKs for top commit: adamjonas: utACK f0aa8aeea5a183ea44a877255d12db7732f2e0a8 pinheadmz: ACK f0aa8aeea5a183ea44a877255d12db7732f2e0a8 Tree-SHA512: d083652589ad3e8228c733455245001db22397559c3946e7e573cf9bd01c46e9e88b72d934728ec7f4361436ae4c74adb8f579670b09f479011924357e729af5
This commit is contained in:
parent
41c35fd8dc
commit
860d31f504
@ -421,6 +421,18 @@ static UniValue generateblock(const JSONRPCRequest& request)
|
|||||||
}
|
}
|
||||||
#endif // ENABLE_MINER
|
#endif // ENABLE_MINER
|
||||||
|
|
||||||
|
static UniValue generate(const JSONRPCRequest& request)
|
||||||
|
{
|
||||||
|
return RPCHelpMan{"generate", "has been replaced by the -generate cli option. Refer to -help for more information.", {}, {}, RPCExamples{""}, [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue {
|
||||||
|
|
||||||
|
if (request.fHelp) {
|
||||||
|
throw std::runtime_error(self.ToString());
|
||||||
|
} else {
|
||||||
|
throw JSONRPCError(RPC_METHOD_NOT_FOUND, self.ToString());
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
static UniValue getmininginfo(const JSONRPCRequest& request)
|
static UniValue getmininginfo(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
RPCHelpMan{"getmininginfo",
|
RPCHelpMan{"getmininginfo",
|
||||||
@ -1279,6 +1291,7 @@ static const CRPCCommand commands[] =
|
|||||||
{ "util", "estimatesmartfee", &estimatesmartfee, {"conf_target", "estimate_mode"} },
|
{ "util", "estimatesmartfee", &estimatesmartfee, {"conf_target", "estimate_mode"} },
|
||||||
|
|
||||||
{ "hidden", "estimaterawfee", &estimaterawfee, {"conf_target", "threshold"} },
|
{ "hidden", "estimaterawfee", &estimaterawfee, {"conf_target", "threshold"} },
|
||||||
|
{ "hidden", "generate", &generate, {} },
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
for (const auto& c : commands) {
|
for (const auto& c : commands) {
|
||||||
|
35
test/functional/rpc_generate.py
Executable file
35
test/functional/rpc_generate.py
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2020 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 generate RPC."""
|
||||||
|
|
||||||
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
|
from test_framework.util import (
|
||||||
|
assert_equal,
|
||||||
|
assert_raises_rpc_error,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RPCGenerateTest(BitcoinTestFramework):
|
||||||
|
def set_test_params(self):
|
||||||
|
self.num_nodes = 1
|
||||||
|
|
||||||
|
def run_test(self):
|
||||||
|
message = (
|
||||||
|
"generate ( nblocks maxtries ) has been replaced by the -generate "
|
||||||
|
"cli option. Refer to -help for more information."
|
||||||
|
)
|
||||||
|
|
||||||
|
self.log.info("Test rpc generate raises with message to use cli option")
|
||||||
|
assert_raises_rpc_error(-32601, message, self.nodes[0].rpc.generate)
|
||||||
|
|
||||||
|
self.log.info("Test rpc generate help prints message to use cli option")
|
||||||
|
assert_equal(message, self.nodes[0].help("generate"))
|
||||||
|
|
||||||
|
self.log.info("Test rpc generate is a hidden command not discoverable in general help")
|
||||||
|
assert message not in self.nodes[0].help()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
RPCGenerateTest().main()
|
@ -243,6 +243,7 @@ BASE_SCRIPTS = [
|
|||||||
'p2p_eviction.py',
|
'p2p_eviction.py',
|
||||||
'rpc_signmessage.py',
|
'rpc_signmessage.py',
|
||||||
'rpc_generateblock.py',
|
'rpc_generateblock.py',
|
||||||
|
'rpc_generate.py',
|
||||||
'wallet_balance.py',
|
'wallet_balance.py',
|
||||||
'wallet_balance.py --descriptors',
|
'wallet_balance.py --descriptors',
|
||||||
'feature_nulldummy.py',
|
'feature_nulldummy.py',
|
||||||
@ -816,14 +817,16 @@ class RPCCoverage():
|
|||||||
Return a set of currently untested RPC commands.
|
Return a set of currently untested RPC commands.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# This is shared from `test/functional/test-framework/coverage.py`
|
# This is shared from `test/functional/test_framework/coverage.py`
|
||||||
reference_filename = 'rpc_interface.txt'
|
reference_filename = 'rpc_interface.txt'
|
||||||
coverage_file_prefix = 'coverage.'
|
coverage_file_prefix = 'coverage.'
|
||||||
|
|
||||||
coverage_ref_filename = os.path.join(self.dir, reference_filename)
|
coverage_ref_filename = os.path.join(self.dir, reference_filename)
|
||||||
coverage_filenames = set()
|
coverage_filenames = set()
|
||||||
all_cmds = set()
|
all_cmds = set()
|
||||||
covered_cmds = set()
|
# Consider RPC generate covered, because it is overloaded in
|
||||||
|
# test_framework/test_node.py and not seen by the coverage check.
|
||||||
|
covered_cmds = set({'generate'})
|
||||||
|
|
||||||
if not os.path.isfile(coverage_ref_filename):
|
if not os.path.isfile(coverage_ref_filename):
|
||||||
raise RuntimeError("No coverage reference found")
|
raise RuntimeError("No coverage reference found")
|
||||||
|
Loading…
Reference in New Issue
Block a user