@@ -9603,3 +9603,30 @@ fn test_max_dust_htlc_exposure() {
9603
9603
do_test_max_dust_htlc_exposure ( false , ExposureEvent :: AtUpdateFeeOutbound , false ) ;
9604
9604
do_test_max_dust_htlc_exposure ( false , ExposureEvent :: AtUpdateFeeOutbound , true ) ;
9605
9605
}
9606
+
9607
+ #[ test]
9608
+ fn test_fee_spikes_force_close ( ) {
9609
+
9610
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
9611
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
9612
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
9613
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
9614
+
9615
+ create_announced_chan_between_nodes ( & nodes, 0 , 1 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
9616
+
9617
+ // Route a payment above default `fulfilled_htlc_high_exposure`
9618
+ let payment_preimage = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , 10_000_000 ) . 0 ;
9619
+ nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
9620
+ nodes[ 1 ] . node . claim_funds ( payment_preimage) ;
9621
+ // Increase feerate * 2, above default `spikes_force_close_rate`
9622
+ {
9623
+ let mut feerate_lock = chanmon_cfgs[ 1 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
9624
+ * feerate_lock += * feerate_lock;
9625
+ }
9626
+ // Confirms a block to trigger force-close.
9627
+ connect_blocks ( & nodes[ 1 ] , 1 ) ;
9628
+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
9629
+ check_closed_broadcast ! ( nodes[ 1 ] , true ) . unwrap ( ) ;
9630
+ check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: CommitmentTxConfirmed ) ;
9631
+ check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
9632
+ }
0 commit comments