@@ -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-
221197def 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