@@ -9603,3 +9603,30 @@ fn test_max_dust_htlc_exposure() {
96039603 do_test_max_dust_htlc_exposure ( false , ExposureEvent :: AtUpdateFeeOutbound , false ) ;
96049604 do_test_max_dust_htlc_exposure ( false , ExposureEvent :: AtUpdateFeeOutbound , true ) ;
96059605}
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