Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13711342
D8498.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
D8498.diff
View Options
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
Details
Attached
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)
Attached To
D8498: tests: Add RPCOverloadWrapper which overloads some disabled RPCs
Event Timeline
Log In to Comment