Skip to content

Commit 2d8eba8

Browse files
committed
wallet: combine redundant bumpfee invalid params and args tests
might be best reviewed with: git show COMMIT_HASH -w --color-moved=dimmed-zebra
1 parent 1697a40 commit 2d8eba8

File tree

1 file changed

+51
-75
lines changed

1 file changed

+51
-75
lines changed

test/functional/wallet_bumpfee.py

Lines changed: 51 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,9 @@ def run_test(self):
7878

7979
self.log.info("Running tests")
8080
dest_address = peer_node.getnewaddress()
81-
self.test_invalid_parameters(rbf_node, dest_address)
8281
for mode in ["default", "fee_rate", BTC_MODE, SAT_MODE]:
8382
test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address)
84-
test_feerate_args(self, rbf_node, peer_node, dest_address)
83+
self.test_invalid_parameters(rbf_node, peer_node, dest_address)
8584
test_segwit_bumpfee_succeeds(self, rbf_node, dest_address)
8685
test_nonrbf_bumpfee_fails(self, peer_node, dest_address)
8786
test_notmine_bumpfee_fails(self, rbf_node, peer_node, dest_address)
@@ -100,28 +99,56 @@ def run_test(self):
10099
test_small_output_with_feerate_succeeds(self, rbf_node, dest_address)
101100
test_no_more_inputs_fails(self, rbf_node, dest_address)
102101

103-
def test_invalid_parameters(self, node, dest_address):
104-
txid = spend_one_input(node, dest_address)
105-
# invalid estimate mode
106-
assert_raises_rpc_error(-8, "Invalid estimate_mode parameter", node.bumpfee, txid, {
107-
"estimate_mode": "moo",
108-
})
109-
assert_raises_rpc_error(-3, "Expected type string", node.bumpfee, txid, {
110-
"estimate_mode": 38,
111-
})
112-
assert_raises_rpc_error(-3, "Expected type string", node.bumpfee, txid, {
113-
"estimate_mode": {
114-
"foo": "bar",
115-
},
116-
})
117-
assert_raises_rpc_error(-8, "Invalid estimate_mode parameter", node.bumpfee, txid, {
118-
"estimate_mode": Decimal("3.141592"),
119-
})
120-
# confTarget and conf_target
121-
assert_raises_rpc_error(-8, "confTarget and conf_target options should not both be set", node.bumpfee, txid, {
122-
"confTarget": 123,
123-
"conf_target": 456,
124-
})
102+
def test_invalid_parameters(self, rbf_node, peer_node, dest_address):
103+
self.log.info('Test invalid parameters')
104+
rbfid = spend_one_input(rbf_node, dest_address)
105+
self.sync_mempools((rbf_node, peer_node))
106+
assert rbfid in rbf_node.getrawmempool() and rbfid in peer_node.getrawmempool()
107+
108+
assert_raises_rpc_error(-3, "Unexpected key totalFee", rbf_node.bumpfee, rbfid, {"totalFee": NORMAL})
109+
assert_raises_rpc_error(-4, "is too high (cannot be higher than", rbf_node.bumpfee, rbfid, {"fee_rate": TOO_HIGH})
110+
111+
# For each fee mode, bumping to just above minrelay should fail to increase the total fee enough.
112+
for options in [{"fee_rate": INSUFFICIENT}, {"conf_target": INSUFFICIENT, "estimate_mode": BTC_MODE}, {"conf_target": 1, "estimate_mode": SAT_MODE}]:
113+
assert_raises_rpc_error(-8, "Insufficient total fee", rbf_node.bumpfee, rbfid, options)
114+
115+
self.log.info("Test explicit fee rate raises RPC error if estimate_mode is passed without a conf_target")
116+
for unit, fee_rate in {"SAT/B": 100, "BTC/KB": NORMAL}.items():
117+
assert_raises_rpc_error(-8, "Selected estimate_mode {} requires a fee rate to be specified in conf_target".format(unit),
118+
rbf_node.bumpfee, rbfid, {"fee_rate": fee_rate, "estimate_mode": unit})
119+
120+
self.log.info("Test explicit fee rate raises RPC error if both fee_rate and conf_target are passed")
121+
error_both = "Cannot specify both conf_target and fee_rate. Please provide either a confirmation " \
122+
"target in blocks for automatic fee estimation, or an explicit fee rate."
123+
assert_raises_rpc_error(-8, error_both, rbf_node.bumpfee, rbfid, {"conf_target": NORMAL, "fee_rate": NORMAL})
124+
125+
self.log.info("Test invalid conf_target settings")
126+
assert_raises_rpc_error(-8, "confTarget and conf_target options should not both be set",
127+
rbf_node.bumpfee, rbfid, {"confTarget": 123, "conf_target": 456})
128+
for field in ["confTarget", "conf_target"]:
129+
assert_raises_rpc_error(-4, "is too high (cannot be higher than -maxtxfee",
130+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": BTC_MODE, "conf_target": 2009}))
131+
assert_raises_rpc_error(-4, "is too high (cannot be higher than -maxtxfee",
132+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": SAT_MODE, "conf_target": 2009 * 10000}))
133+
134+
self.log.info("Test invalid estimate_mode settings")
135+
for k, v in {"number": 42, "object": {"foo": "bar"}}.items():
136+
assert_raises_rpc_error(-3, "Expected type string for estimate_mode, got {}".format(k),
137+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": v, "fee_rate": NORMAL}))
138+
for mode in ["foo", Decimal("3.141592")]:
139+
assert_raises_rpc_error(-8, "Invalid estimate_mode parameter",
140+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": NORMAL}))
141+
142+
self.log.info("Test invalid fee_rate settings")
143+
for mode in ["unset", "economical", "conservative", BTC_MODE, SAT_MODE]:
144+
self.log.debug("{}".format(mode))
145+
for k, v in {"string": "", "object": {"foo": "bar"}}.items():
146+
assert_raises_rpc_error(-3, "Expected type number for fee_rate, got {}".format(k),
147+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": v}))
148+
assert_raises_rpc_error(-3, "Amount out of range",
149+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": -1}))
150+
assert_raises_rpc_error(-8, "Invalid fee_rate 0.00000000 BTC/kB (must be greater than 0)",
151+
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": 0}))
125152
self.clear_mempool()
126153

127154

@@ -167,57 +194,6 @@ def test_simple_bumpfee_succeeds(self, mode, rbf_node, peer_node, dest_address):
167194
self.clear_mempool()
168195

169196

170-
def test_feerate_args(self, rbf_node, peer_node, dest_address):
171-
self.log.info('Test fee_rate args')
172-
rbfid = spend_one_input(rbf_node, dest_address)
173-
self.sync_mempools((rbf_node, peer_node))
174-
assert rbfid in rbf_node.getrawmempool() and rbfid in peer_node.getrawmempool()
175-
176-
assert_raises_rpc_error(-3, "Unexpected key totalFee", rbf_node.bumpfee, rbfid, {"totalFee": NORMAL})
177-
178-
# For each fee mode, bumping to just above minrelay should fail to increase the total fee enough.
179-
for options in [{"fee_rate": INSUFFICIENT}, {"conf_target": INSUFFICIENT, "estimate_mode": BTC_MODE}, {"conf_target": 1, "estimate_mode": SAT_MODE}]:
180-
assert_raises_rpc_error(-8, "Insufficient total fee", rbf_node.bumpfee, rbfid, options)
181-
assert_raises_rpc_error(-3, "Amount out of range", rbf_node.bumpfee, rbfid, {"fee_rate": -1})
182-
assert_raises_rpc_error(-4, "is too high (cannot be higher than", rbf_node.bumpfee, rbfid, {"fee_rate": TOO_HIGH})
183-
184-
self.log.info("Test explicit fee rate raises RPC error if estimate_mode is passed without a conf_target")
185-
for unit, fee_rate in {"SAT/B": 10, "BTC/KB": NORMAL}.items():
186-
assert_raises_rpc_error(-8, "Selected estimate_mode {} requires a fee rate to be specified in conf_target".format(unit),
187-
rbf_node.bumpfee, rbfid, {"fee_rate": fee_rate, "estimate_mode": unit})
188-
189-
self.log.info("Test explicit fee rate raises RPC error if both fee_rate and conf_target are passed")
190-
error_both = "Cannot specify both conf_target and fee_rate. Please provide either a confirmation " \
191-
"target in blocks for automatic fee estimation, or an explicit fee rate."
192-
assert_raises_rpc_error(-8, error_both, rbf_node.bumpfee, rbfid, {"conf_target": NORMAL, "fee_rate": NORMAL})
193-
194-
self.log.info("Test invalid conf_target settings")
195-
for field in ["confTarget", "conf_target"]:
196-
assert_raises_rpc_error(-8, error_both, rbf_node.bumpfee, rbfid, {field: 1, "fee_rate": NORMAL})
197-
too_high = "is too high (cannot be higher than -maxtxfee"
198-
assert_raises_rpc_error(-4, too_high, lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": BTC_MODE, "conf_target": 2009}))
199-
assert_raises_rpc_error(-4, too_high, lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": SAT_MODE, "conf_target": 2009 * 10000}))
200-
201-
self.log.info("Test invalid estimate_mode settings")
202-
for k, v in {"number": 42, "object": {"foo": "bar"}}.items():
203-
assert_raises_rpc_error(-3, "Expected type string for estimate_mode, got {}".format(k),
204-
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": v, "fee_rate": NORMAL}))
205-
for mode in ["foo", Decimal("3.141592")]:
206-
assert_raises_rpc_error(-8, "Invalid estimate_mode parameter",
207-
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": NORMAL}))
208-
209-
self.log.info("Test invalid fee_rate settings")
210-
for mode in ["unset", "economical", "conservative", BTC_MODE, SAT_MODE]:
211-
self.log.debug("{}".format(mode))
212-
for k, v in {"string": "", "object": {"foo": "bar"}}.items():
213-
assert_raises_rpc_error(-3, "Expected type number for fee_rate, got {}".format(k),
214-
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": v}))
215-
assert_raises_rpc_error(-3, "Amount out of range",
216-
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": -1}))
217-
assert_raises_rpc_error(-8, "Invalid fee_rate 0.00000000 BTC/kB (must be greater than 0)",
218-
lambda: rbf_node.bumpfee(rbfid, {"estimate_mode": mode, "fee_rate": 0}))
219-
self.clear_mempool()
220-
221197
def test_segwit_bumpfee_succeeds(self, rbf_node, dest_address):
222198
self.log.info('Test that segwit-sourcing bumpfee works')
223199
# Create a transaction with segwit output, then create an RBF transaction

0 commit comments

Comments
 (0)