Page MenuHomePhabricator

D8498.diff
No OneTemporary

D8498.diff

diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py
--- a/test/functional/test_framework/test_node.py
+++ b/test/functional/test_framework/test_node.py
@@ -22,6 +22,7 @@
import shlex
from .authproxy import JSONRPCException
+from .descriptors import descsum_create
from .messages import COIN, CTransaction, FromHex
from .util import (
MAX_NODES,
@@ -214,13 +215,13 @@
def __getattr__(self, name):
"""Dispatches any unrecognised messages to the RPC connection or a CLI instance."""
if self.use_cli:
- return getattr(self.cli, name)
+ return getattr(RPCOverloadWrapper(self.cli, True), name)
else:
assert self.rpc is not None, self._node_msg(
"Error: RPC not initialized")
assert self.rpc_connected, self._node_msg(
"Error: No RPC connection")
- return getattr(self.rpc, name)
+ return getattr(RPCOverloadWrapper(self.rpc), name)
def clear_default_args(self):
self.default_args.clear()
@@ -356,14 +357,15 @@
def get_wallet_rpc(self, wallet_name):
if self.use_cli:
- return self.cli("-rpcwallet={}".format(wallet_name))
+ return RPCOverloadWrapper(
+ self.cli("-rpcwallet={}".format(wallet_name)), True)
else:
assert self.rpc is not None, self._node_msg(
"Error: RPC not initialized")
assert self.rpc_connected, self._node_msg(
"Error: RPC not connected")
wallet_path = "wallet/{}".format(urllib.parse.quote(wallet_name))
- return self.rpc / wallet_path
+ return RPCOverloadWrapper(self.rpc / wallet_path)
def stop_node(self, expected_stderr='', wait=0):
"""Stop the node."""
@@ -748,3 +750,109 @@
return json.loads(cli_stdout, parse_float=decimal.Decimal)
except (json.JSONDecodeError, decimal.InvalidOperation):
return cli_stdout.rstrip("\n")
+
+
+class RPCOverloadWrapper():
+ def __init__(self, rpc, cli=False):
+ self.rpc = rpc
+ self.is_cli = cli
+
+ def __getattr__(self, name):
+ return getattr(self.rpc, name)
+
+ def importprivkey(self, privkey, label=None, rescan=None):
+ wallet_info = self.getwalletinfo()
+ if self.is_cli:
+ if label is None:
+ label = 'null'
+ if rescan is None:
+ rescan = 'null'
+ if 'descriptors' not in wallet_info or (
+ 'descriptors' in wallet_info and not wallet_info['descriptors']):
+ return self.__getattr__('importprivkey')(privkey, label, rescan)
+ desc = descsum_create('combo(' + privkey + ')')
+ req = [{
+ 'desc': desc,
+ 'timestamp': 0 if rescan else 'now',
+ 'label': label if label else ''
+ }]
+ import_res = self.importdescriptors(req)
+ if not import_res[0]['success']:
+ raise JSONRPCException(import_res[0]['error'])
+
+ def addmultisigaddress(self, nrequired, keys,
+ label=None):
+ wallet_info = self.getwalletinfo()
+ if self.is_cli:
+ if label is None:
+ label = 'null'
+ if 'descriptors' not in wallet_info or (
+ 'descriptors' in wallet_info and not wallet_info['descriptors']):
+ return self.__getattr__('addmultisigaddress')(
+ nrequired, keys, label)
+ cms = self.createmultisig(nrequired, keys)
+ req = [{
+ 'desc': cms['descriptor'],
+ 'timestamp': 0,
+ 'label': label if label else ''
+ }]
+ import_res = self.importdescriptors(req)
+ if not import_res[0]['success']:
+ raise JSONRPCException(import_res[0]['error'])
+ return cms
+
+ def importpubkey(self, pubkey, label=None, rescan=None):
+ wallet_info = self.getwalletinfo()
+ if self.is_cli:
+ if label is None:
+ label = 'null'
+ if rescan is None:
+ rescan = 'null'
+ if 'descriptors' not in wallet_info or (
+ 'descriptors' in wallet_info and not wallet_info['descriptors']):
+ return self.__getattr__('importpubkey')(pubkey, label, rescan)
+ desc = descsum_create('combo(' + pubkey + ')')
+ req = [{
+ 'desc': desc,
+ 'timestamp': 0 if rescan else 'now',
+ 'label': label if label else ''
+ }]
+ import_res = self.importdescriptors(req)
+ if not import_res[0]['success']:
+ raise JSONRPCException(import_res[0]['error'])
+
+ def importaddress(self, address, label=None, rescan=None, p2sh=None):
+ wallet_info = self.getwalletinfo()
+ if self.is_cli:
+ if label is None:
+ label = 'null'
+ if rescan is None:
+ rescan = 'null'
+ if p2sh is None:
+ p2sh = 'null'
+ if 'descriptors' not in wallet_info or (
+ 'descriptors' in wallet_info and not wallet_info['descriptors']):
+ return self.__getattr__('importaddress')(
+ address, label, rescan, p2sh)
+ is_hex = False
+ try:
+ int(address, 16)
+ is_hex = True
+ desc = descsum_create('raw(' + address + ')')
+ except BaseException:
+ desc = descsum_create('addr(' + address + ')')
+ reqs = [{
+ 'desc': desc,
+ 'timestamp': 0 if rescan else 'now',
+ 'label': label if label else ''
+ }]
+ if is_hex and p2sh:
+ reqs.append({
+ 'desc': descsum_create('p2sh(raw(' + address + '))'),
+ 'timestamp': 0 if rescan else 'now',
+ 'label': label if label else ''
+ })
+ import_res = self.importdescriptors(reqs)
+ for res in import_res:
+ if not res['success']:
+ raise JSONRPCException(res['error'])
diff --git a/test/functional/wallet_descriptor.py b/test/functional/wallet_descriptor.py
--- a/test/functional/wallet_descriptor.py
+++ b/test/functional/wallet_descriptor.py
@@ -63,40 +63,40 @@
self.log.info("Test disabled RPCs")
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.importprivkey,
+ recv_wrpc.rpc.importprivkey,
"cVpF924EspNh8KjYsfhgY96mmxvT6DgdWiTYMtMjuM74hJaU5psW")
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.importpubkey,
+ recv_wrpc.rpc.importpubkey,
send_wrpc.getaddressinfo(send_wrpc.getnewaddress()))
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.importaddress,
+ recv_wrpc.rpc.importaddress,
recv_wrpc.getnewaddress())
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.importmulti,
+ recv_wrpc.rpc.importmulti,
[])
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.addmultisigaddress,
+ recv_wrpc.rpc.addmultisigaddress,
1,
[recv_wrpc.getnewaddress()])
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.dumpprivkey,
+ recv_wrpc.rpc.dumpprivkey,
recv_wrpc.getnewaddress())
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.dumpwallet,
+ recv_wrpc.rpc.dumpwallet,
'wallet.dump')
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.importwallet,
+ recv_wrpc.rpc.importwallet,
'wallet.dump')
assert_raises_rpc_error(-4,
"This type of wallet does not support this command",
- recv_wrpc.sethdseed)
+ recv_wrpc.rpc.sethdseed)
self.log.info("Test encryption")
# Get the master fingerprint before encrypt

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 11:43 (16 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5571497
Default Alt Text
D8498.diff (8 KB)

Event Timeline