mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge #20448: RPC/Wallet: unloadwallet: Allow specifying wallet_name param matching RPC endpoint wallet
89bdad5b25ae4ac03a486f729a5b58ae6f21946d RPC/Wallet: unloadwallet: Allow specifying wallet_name param matching RPC endpoint (Luke Dashjr) Pull request description: Allow specifying the `wallet_name` param to `unloadwallet` on RPC wallet endpoints, so long as it matches the endpoint wallet. ACKs for top commit: jonatack: ACK 89bdad5b25ae4ac03a486f729a5b58ae6f21946d MarcoFalke: review ACK 89bdad5b25ae4ac03a486f729a5b58ae6f21946d Tree-SHA512: efb399c33f7b5596870a26a8680f453ca47aa7a6db4e550f9435d13044f1c4bad0ae11e8f0205213409d08b75c4188c3be782e54aafab1f65b97eb8cf5c252a9
This commit is contained in:
parent
8fee13ef70
commit
8b4982bc0b
@ -2961,7 +2961,7 @@ static UniValue unloadwallet(const JSONRPCRequest& request)
|
|||||||
"Unloads the wallet referenced by the request endpoint otherwise unloads the wallet specified in the argument.\n"
|
"Unloads the wallet referenced by the request endpoint otherwise unloads the wallet specified in the argument.\n"
|
||||||
"Specifying the wallet name on a wallet endpoint is invalid.",
|
"Specifying the wallet name on a wallet endpoint is invalid.",
|
||||||
{
|
{
|
||||||
{"wallet_name", RPCArg::Type::STR, /* default */ "the wallet name from the RPC endpoint", "The name of the wallet to unload. Must be provided in the RPC endpoint or this parameter (but not both)."},
|
{"wallet_name", RPCArg::Type::STR, /* default */ "the wallet name from the RPC endpoint", "The name of the wallet to unload. If provided both here and in the RPC endpoint, the two must be identical."},
|
||||||
{"load_on_startup", RPCArg::Type::BOOL, /* default */ "null", "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."},
|
{"load_on_startup", RPCArg::Type::BOOL, /* default */ "null", "Save wallet name to persistent settings and load on startup. True to add wallet to startup list, false to remove, null to leave unchanged."},
|
||||||
},
|
},
|
||||||
RPCResult{RPCResult::Type::OBJ, "", "", {
|
RPCResult{RPCResult::Type::OBJ, "", "", {
|
||||||
@ -2975,8 +2975,8 @@ static UniValue unloadwallet(const JSONRPCRequest& request)
|
|||||||
|
|
||||||
std::string wallet_name;
|
std::string wallet_name;
|
||||||
if (GetWalletNameFromJSONRPCRequest(request, wallet_name)) {
|
if (GetWalletNameFromJSONRPCRequest(request, wallet_name)) {
|
||||||
if (!request.params[0].isNull()) {
|
if (!(request.params[0].isNull() || request.params[0].get_str() == wallet_name)) {
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Both the RPC endpoint wallet and wallet_name parameter were provided (only one allowed)");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "RPC endpoint wallet and wallet_name parameter specify different wallets");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wallet_name = request.params[0].get_str();
|
wallet_name = request.params[0].get_str();
|
||||||
|
@ -339,13 +339,18 @@ class MultiWalletTest(BitcoinTestFramework):
|
|||||||
assert_raises_rpc_error(-1, "JSON value is not a string as expected", self.nodes[0].unloadwallet)
|
assert_raises_rpc_error(-1, "JSON value is not a string as expected", self.nodes[0].unloadwallet)
|
||||||
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", self.nodes[0].unloadwallet, "dummy")
|
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", self.nodes[0].unloadwallet, "dummy")
|
||||||
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", node.get_wallet_rpc("dummy").unloadwallet)
|
assert_raises_rpc_error(-18, "Requested wallet does not exist or is not loaded", node.get_wallet_rpc("dummy").unloadwallet)
|
||||||
assert_raises_rpc_error(-8, "Both the RPC endpoint wallet and wallet_name parameter were provided (only one allowed)", w1.unloadwallet, "w2"),
|
assert_raises_rpc_error(-8, "RPC endpoint wallet and wallet_name parameter specify different wallets", w1.unloadwallet, "w2"),
|
||||||
assert_raises_rpc_error(-8, "Both the RPC endpoint wallet and wallet_name parameter were provided (only one allowed)", w1.unloadwallet, "w1"),
|
|
||||||
|
|
||||||
# Successfully unload the specified wallet name
|
# Successfully unload the specified wallet name
|
||||||
self.nodes[0].unloadwallet("w1")
|
self.nodes[0].unloadwallet("w1")
|
||||||
assert 'w1' not in self.nodes[0].listwallets()
|
assert 'w1' not in self.nodes[0].listwallets()
|
||||||
|
|
||||||
|
# Unload w1 again, this time providing the wallet name twice
|
||||||
|
self.nodes[0].loadwallet("w1")
|
||||||
|
assert 'w1' in self.nodes[0].listwallets()
|
||||||
|
w1.unloadwallet("w1")
|
||||||
|
assert 'w1' not in self.nodes[0].listwallets()
|
||||||
|
|
||||||
# Successfully unload the wallet referenced by the request endpoint
|
# Successfully unload the wallet referenced by the request endpoint
|
||||||
# Also ensure unload works during walletpassphrase timeout
|
# Also ensure unload works during walletpassphrase timeout
|
||||||
w2.encryptwallet('test')
|
w2.encryptwallet('test')
|
||||||
|
Loading…
Reference in New Issue
Block a user