Skip to content

Commit 4c8eccc

Browse files
committed
test: add tests for outputs argument to bumpfee/psbtbumpfee
1 parent c0ebb98 commit 4c8eccc

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

test/functional/wallet_bumpfee.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def run_test(self):
8181

8282
self.log.info("Running tests")
8383
dest_address = peer_node.getnewaddress()
84-
for mode in ["default", "fee_rate"]:
84+
for mode in ["default", "fee_rate", "new_outputs"]:
8585
test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address)
8686
self.test_invalid_parameters(rbf_node, peer_node, dest_address)
8787
test_segwit_bumpfee_succeeds(self, rbf_node, dest_address)
@@ -157,6 +157,14 @@ def test_invalid_parameters(self, rbf_node, peer_node, dest_address):
157157
assert_raises_rpc_error(-8, 'Invalid estimate_mode parameter, must be one of: "unset", "economical", "conservative"',
158158
rbf_node.bumpfee, rbfid, {"estimate_mode": mode})
159159

160+
self.log.info("Test invalid outputs values")
161+
assert_raises_rpc_error(-8, "Invalid parameter, output argument cannot be an empty array",
162+
rbf_node.bumpfee, rbfid, {"outputs": []})
163+
assert_raises_rpc_error(-8, "Invalid parameter, duplicated address: " + dest_address,
164+
rbf_node.bumpfee, rbfid, {"outputs": [{dest_address: 0.1}, {dest_address: 0.2}]})
165+
assert_raises_rpc_error(-8, "Invalid parameter, duplicate key: data",
166+
rbf_node.bumpfee, rbfid, {"outputs": [{"data": "deadbeef"}, {"data": "deadbeef"}]})
167+
160168
self.clear_mempool()
161169

162170

@@ -169,6 +177,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
169177
if mode == "fee_rate":
170178
bumped_psbt = rbf_node.psbtbumpfee(rbfid, {"fee_rate": str(NORMAL)})
171179
bumped_tx = rbf_node.bumpfee(rbfid, {"fee_rate": NORMAL})
180+
elif mode == "new_outputs":
181+
new_address = peer_node.getnewaddress()
182+
bumped_psbt = rbf_node.psbtbumpfee(rbfid, {"outputs": {new_address: 0.0003}})
183+
bumped_tx = rbf_node.bumpfee(rbfid, {"outputs": {new_address: 0.0003}})
172184
else:
173185
bumped_psbt = rbf_node.psbtbumpfee(rbfid)
174186
bumped_tx = rbf_node.bumpfee(rbfid)
@@ -192,6 +204,10 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
192204
bumpedwtx = rbf_node.gettransaction(bumped_tx["txid"])
193205
assert_equal(oldwtx["replaced_by_txid"], bumped_tx["txid"])
194206
assert_equal(bumpedwtx["replaces_txid"], rbfid)
207+
# if this is a new_outputs test, check that outputs were indeed replaced
208+
if mode == "new_outputs":
209+
assert len(bumpedwtx["details"]) == 1
210+
assert bumpedwtx["details"][0]["address"] == new_address
195211
self.clear_mempool()
196212

197213

@@ -628,12 +644,14 @@ def get_change_address(tx):
628644
self.clear_mempool()
629645

630646

631-
def spend_one_input(node, dest_address, change_size=Decimal("0.00049000")):
647+
def spend_one_input(node, dest_address, change_size=Decimal("0.00049000"), data=None):
632648
tx_input = dict(
633649
sequence=MAX_BIP125_RBF_SEQUENCE, **next(u for u in node.listunspent() if u["amount"] == Decimal("0.00100000")))
634650
destinations = {dest_address: Decimal("0.00050000")}
635651
if change_size > 0:
636652
destinations[node.getrawchangeaddress()] = change_size
653+
if data:
654+
destinations['data'] = data
637655
rawtx = node.createrawtransaction([tx_input], destinations)
638656
signedtx = node.signrawtransactionwithwallet(rawtx)
639657
txid = node.sendrawtransaction(signedtx["hex"])

0 commit comments

Comments
 (0)