From fa48be3ba443d2436f754265b86331f84b866130 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Mon, 28 Apr 2025 10:59:07 +0200 Subject: [PATCH] test: Force named args for RPCOverloadWrapper optional args This can avoid bugs and makes the test code easier to read, because the order of positional args does not have to be known or assumed. --- test/functional/rpc_psbt.py | 8 ++++---- test/functional/test_framework/test_node.py | 18 +++++++++--------- test/functional/wallet_address_types.py | 2 +- test/functional/wallet_fundrawtransaction.py | 2 +- test/functional/wallet_labels.py | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/test/functional/rpc_psbt.py b/test/functional/rpc_psbt.py index 8f672f23074..deb519803cf 100755 --- a/test/functional/rpc_psbt.py +++ b/test/functional/rpc_psbt.py @@ -111,7 +111,7 @@ class PSBTTest(BitcoinTestFramework): # Mine a transaction that credits the offline address offline_addr = offline_node.getnewaddress(address_type="bech32m") online_addr = w2.getnewaddress(address_type="bech32m") - wonline.importaddress(offline_addr, "", False) + wonline.importaddress(offline_addr, label="", rescan=False) mining_wallet = mining_node.get_wallet_rpc(self.default_wallet_name) mining_wallet.sendtoaddress(address=offline_addr, amount=1.0) self.generate(mining_node, nblocks=1, sync_fun=lambda: self.sync_all([online_node, mining_node])) @@ -312,9 +312,9 @@ class PSBTTest(BitcoinTestFramework): wmulti = self.nodes[2].get_wallet_rpc('wmulti') # Create all the addresses - p2sh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], "", "legacy")['address'] - p2wsh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], "", "bech32")['address'] - p2sh_p2wsh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], "", "p2sh-segwit")['address'] + p2sh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], label="", address_type="legacy")["address"] + p2wsh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], label="", address_type="bech32")["address"] + p2sh_p2wsh = wmulti.addmultisigaddress(2, [pubkey0, pubkey1, pubkey2], label="", address_type="p2sh-segwit")["address"] p2wpkh = self.nodes[1].getnewaddress("", "bech32") p2pkh = self.nodes[1].getnewaddress("", "legacy") p2sh_p2wpkh = self.nodes[1].getnewaddress("", "p2sh-segwit") diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py index 30b9c37be46..9f0baaccca2 100755 --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -931,7 +931,7 @@ class RPCOverloadWrapper(): def __getattr__(self, name): return getattr(self.rpc, name) - def importprivkey(self, privkey, label=None, rescan=None): + def importprivkey(self, privkey, *, label=None, rescan=None): wallet_info = self.getwalletinfo() if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']): return self.__getattr__('importprivkey')(privkey, label, rescan) @@ -939,13 +939,13 @@ class RPCOverloadWrapper(): req = [{ 'desc': desc, 'timestamp': 0 if rescan else 'now', - 'label': label if label else '' + '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, address_type=None): + def addmultisigaddress(self, nrequired, keys, *, label=None, address_type=None): wallet_info = self.getwalletinfo() if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']): return self.__getattr__('addmultisigaddress')(nrequired, keys, label, address_type) @@ -953,14 +953,14 @@ class RPCOverloadWrapper(): req = [{ 'desc': cms['descriptor'], 'timestamp': 0, - 'label': label if label else '' + '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): + def importpubkey(self, pubkey, *, label=None, rescan=None): wallet_info = self.getwalletinfo() if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']): return self.__getattr__('importpubkey')(pubkey, label, rescan) @@ -968,13 +968,13 @@ class RPCOverloadWrapper(): req = [{ 'desc': desc, 'timestamp': 0 if rescan else 'now', - 'label': label if label else '' + '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): + def importaddress(self, address, *, label=None, rescan=None, p2sh=None): wallet_info = self.getwalletinfo() if 'descriptors' not in wallet_info or ('descriptors' in wallet_info and not wallet_info['descriptors']): return self.__getattr__('importaddress')(address, label, rescan, p2sh) @@ -988,13 +988,13 @@ class RPCOverloadWrapper(): reqs = [{ 'desc': desc, 'timestamp': 0 if rescan else 'now', - 'label': label if label else '' + '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 '' + 'label': label if label else '', }) import_res = self.importdescriptors(reqs) for res in import_res: diff --git a/test/functional/wallet_address_types.py b/test/functional/wallet_address_types.py index 27adb155951..d8c2aab36de 100755 --- a/test/functional/wallet_address_types.py +++ b/test/functional/wallet_address_types.py @@ -344,7 +344,7 @@ class AddressTypeTest(BitcoinTestFramework): self.test_address(3, self.nodes[3].getrawchangeaddress(), multisig=False, typ='bech32') self.log.info('test invalid address type arguments') - assert_raises_rpc_error(-5, "Unknown address type ''", self.nodes[3].addmultisigaddress, 2, [compressed_1, compressed_2], None, '') + assert_raises_rpc_error(-5, "Unknown address type ''", self.nodes[3].addmultisigaddress, 2, [compressed_1, compressed_2], address_type="") assert_raises_rpc_error(-5, "Unknown address type ''", self.nodes[3].getnewaddress, None, '') assert_raises_rpc_error(-5, "Unknown address type ''", self.nodes[3].getrawchangeaddress, '') assert_raises_rpc_error(-5, "Unknown address type 'bech23'", self.nodes[3].getrawchangeaddress, 'bech23') diff --git a/test/functional/wallet_fundrawtransaction.py b/test/functional/wallet_fundrawtransaction.py index 1339f9e28c3..aeaa8e54622 100755 --- a/test/functional/wallet_fundrawtransaction.py +++ b/test/functional/wallet_fundrawtransaction.py @@ -192,7 +192,7 @@ class RawTransactionsTest(BitcoinTestFramework): watchonly_address = self.nodes[0].getnewaddress() watchonly_pubkey = self.nodes[0].getaddressinfo(watchonly_address)["pubkey"] self.watchonly_amount = Decimal(200) - wwatch.importpubkey(watchonly_pubkey, "", True) + wwatch.importpubkey(watchonly_pubkey, label="", rescan=True) self.watchonly_utxo = self.create_outpoints(self.nodes[0], outputs=[{watchonly_address: self.watchonly_amount}])[0] # Lock UTXO so nodes[0] doesn't accidentally spend it diff --git a/test/functional/wallet_labels.py b/test/functional/wallet_labels.py index fb26b87a648..800f3ad7c40 100755 --- a/test/functional/wallet_labels.py +++ b/test/functional/wallet_labels.py @@ -49,7 +49,7 @@ class WalletLabelsTest(BitcoinTestFramework): assert_equal(response[0]['error']['message'], "Invalid label name") for rpc_call in rpc_calls: - assert_raises_rpc_error(-11, "Invalid label name", *rpc_call, "*") + assert_raises_rpc_error(-11, "Invalid label name", *rpc_call, label="*") def run_test(self): # Check that there's no UTXO on the node