Skip to content

Commit c5fd434

Browse files
committed
test: explicit fee rates with invalid amounts
1 parent ea6f76b commit c5fd434

File tree

5 files changed

+26
-7
lines changed

5 files changed

+26
-7
lines changed

test/functional/rpc_fundrawtransaction.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,8 +768,9 @@ def test_option_feerate(self):
768768
node.fundrawtransaction, rawtx, {param: -1, "add_inputs": True})
769769
assert_raises_rpc_error(-3, "Amount is not a number or string",
770770
node.fundrawtransaction, rawtx, {param: {"foo": "bar"}, "add_inputs": True})
771-
assert_raises_rpc_error(-3, "Invalid amount",
772-
node.fundrawtransaction, rawtx, {param: "", "add_inputs": True})
771+
# Test fee rate values that don't pass fixed-point parsing checks.
772+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
773+
assert_raises_rpc_error(-3, "Invalid amount", node.fundrawtransaction, rawtx, {param: invalid_value, "add_inputs": True})
773774

774775
self.log.info("Test min fee rate checks are bypassed with fundrawtxn, e.g. a fee_rate under 1 sat/vB is allowed")
775776
node.fundrawtransaction(rawtx, {"fee_rate": 0.99999999, "add_inputs": True})

test/functional/rpc_psbt.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,10 @@ def run_test(self):
212212
self.nodes[1].walletcreatefundedpsbt, inputs, outputs, 0, {param: -1, "add_inputs": True})
213213
assert_raises_rpc_error(-3, "Amount is not a number or string",
214214
self.nodes[1].walletcreatefundedpsbt, inputs, outputs, 0, {param: {"foo": "bar"}, "add_inputs": True})
215-
assert_raises_rpc_error(-3, "Invalid amount",
216-
self.nodes[1].walletcreatefundedpsbt, inputs, outputs, 0, {param: "", "add_inputs": True})
215+
# Test fee rate values that don't pass fixed-point parsing checks.
216+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
217+
assert_raises_rpc_error(-3, "Invalid amount",
218+
self.nodes[1].walletcreatefundedpsbt, inputs, outputs, 0, {param: invalid_value, "add_inputs": True})
217219

218220
self.log.info("- raises RPC error if both feeRate and fee_rate are passed")
219221
assert_raises_rpc_error(-8, "Cannot specify both fee_rate (sat/vB) and feeRate (BTC/kvB)",

test/functional/wallet_basic.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,15 @@ def run_test(self):
266266
assert_raises_rpc_error(-6, "Fee rate (0.999 sat/vB) is lower than the minimum fee rate setting (1.000 sat/vB)",
267267
self.nodes[2].sendmany, amounts={address: 10}, fee_rate=0.99999999)
268268

269-
self.log.info("Test sendmany raises if fee_rate of 0 or -1 is passed")
269+
self.log.info("Test sendmany raises if an invalid fee_rate is passed")
270270
# Test fee_rate with zero values.
271271
msg = "Fee rate (0.000 sat/vB) is lower than the minimum fee rate setting (1.000 sat/vB)"
272272
for zero_value in [0, 0.000, 0.00000000, "0", "0.000", "0.00000000"]:
273273
assert_raises_rpc_error(-6, msg, self.nodes[2].sendmany, amounts={address: 1}, fee_rate=zero_value)
274+
msg = "Invalid amount"
275+
# Test fee_rate values that don't pass fixed-point parsing checks.
276+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
277+
assert_raises_rpc_error(-3, msg, self.nodes[2].sendmany, amounts={address: 1.0}, fee_rate=invalid_value)
274278
# Test fee_rate out of range (negative number).
275279
assert_raises_rpc_error(-3, OUT_OF_RANGE, self.nodes[2].sendmany, amounts={address: 10}, fee_rate=-1)
276280

@@ -452,11 +456,15 @@ def run_test(self):
452456
assert_raises_rpc_error(-6, "Fee rate (0.999 sat/vB) is lower than the minimum fee rate setting (1.000 sat/vB)",
453457
self.nodes[2].sendtoaddress, address=address, amount=1, fee_rate=0.99999999)
454458

455-
self.log.info("Test sendtoaddress raises if fee_rate of 0 or -1 is passed")
459+
self.log.info("Test sendtoaddress raises if an invalid fee_rate is passed")
456460
# Test fee_rate with zero values.
457461
msg = "Fee rate (0.000 sat/vB) is lower than the minimum fee rate setting (1.000 sat/vB)"
458462
for zero_value in [0, 0.000, 0.00000000, "0", "0.000", "0.00000000"]:
459463
assert_raises_rpc_error(-6, msg, self.nodes[2].sendtoaddress, address=address, amount=1, fee_rate=zero_value)
464+
msg = "Invalid amount"
465+
# Test fee_rate values that don't pass fixed-point parsing checks.
466+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
467+
assert_raises_rpc_error(-3, msg, self.nodes[2].sendtoaddress, address=address, amount=1.0, fee_rate=invalid_value)
460468
# Test fee_rate out of range (negative number).
461469
assert_raises_rpc_error(-3, OUT_OF_RANGE, self.nodes[2].sendtoaddress, address=address, amount=1.0, fee_rate=-1)
462470

test/functional/wallet_bumpfee.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,14 @@ def test_invalid_parameters(self, rbf_node, peer_node, dest_address):
116116
msg = "Insufficient total fee 0.00"
117117
for zero_value in [0, 0.000, 0.00000000, "0", "0.000", "0.00000000"]:
118118
assert_raises_rpc_error(-8, msg, rbf_node.bumpfee, rbfid, {"fee_rate": zero_value})
119+
msg = "Invalid amount"
120+
# Test fee_rate values that don't pass fixed-point parsing checks.
121+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
122+
assert_raises_rpc_error(-3, msg, rbf_node.bumpfee, rbfid, {"fee_rate": invalid_value})
119123
# Test fee_rate out of range (negative number).
120124
assert_raises_rpc_error(-3, "Amount out of range", rbf_node.bumpfee, rbfid, {"fee_rate": -1})
121125
for value in [{"foo": "bar"}, True]:
122126
assert_raises_rpc_error(-3, "Amount is not a number or string", rbf_node.bumpfee, rbfid, {"fee_rate": value})
123-
assert_raises_rpc_error(-3, "Invalid amount", rbf_node.bumpfee, rbfid, {"fee_rate": ""})
124127

125128
self.log.info("Test explicit fee rate raises RPC error if both fee_rate and conf_target are passed")
126129
assert_raises_rpc_error(-8, "Cannot specify both conf_target and fee_rate. Please provide either a confirmation "

test/functional/wallet_send.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,11 @@ def run_test(self):
360360
for zero_value in [0, 0.000, 0.00000000, "0", "0.000", "0.00000000"]:
361361
self.test_send(from_wallet=w0, to_wallet=w1, amount=1, fee_rate=zero_value, expect_error=(-4, msg))
362362
self.test_send(from_wallet=w0, to_wallet=w1, amount=1, arg_fee_rate=zero_value, expect_error=(-4, msg))
363+
msg = "Invalid amount"
364+
# Test fee_rate values that don't pass fixed-point parsing checks.
365+
for invalid_value in ["", 0.000000001, 1e-09, 1.111111111, 1111111111111111, "31.999999999999999999999"]:
366+
self.test_send(from_wallet=w0, to_wallet=w1, amount=1, fee_rate=invalid_value, expect_error=(-3, msg))
367+
self.test_send(from_wallet=w0, to_wallet=w1, amount=1, arg_fee_rate=invalid_value, expect_error=(-3, msg))
363368

364369
# TODO: Return hex if fee rate is below -maxmempool
365370
# res = self.test_send(from_wallet=w0, to_wallet=w1, amount=1, conf_target=0.1, estimate_mode="sat/b", add_to_wallet=False)

0 commit comments

Comments
 (0)