@@ -2674,6 +2674,14 @@ pub struct ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
26742674 pub expected_min_htlc_overpay : Vec < u32 > ,
26752675 pub skip_last : bool ,
26762676 pub payment_preimage : PaymentPreimage ,
2677+ // Allow forwarding nodes to have taken 1 msat more fee than expected based on the downstream
2678+ // fulfill amount.
2679+ //
2680+ // Necessary because our test utils calculate the expected fee for an intermediate node based on
2681+ // the amount was claimed in their downstream peer's fulfill, but blinded intermediate nodes
2682+ // calculate their fee based on the inbound amount from their upstream peer, causing a difference
2683+ // in rounding.
2684+ pub allow_1_msat_fee_overpay : bool ,
26772685}
26782686
26792687impl < ' a , ' b , ' c , ' d > ClaimAlongRouteArgs < ' a , ' b , ' c , ' d > {
@@ -2684,6 +2692,7 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
26842692 Self {
26852693 origin_node, expected_paths, expected_extra_fees : vec ! [ 0 ; expected_paths. len( ) ] ,
26862694 expected_min_htlc_overpay : vec ! [ 0 ; expected_paths. len( ) ] , skip_last : false , payment_preimage,
2695+ allow_1_msat_fee_overpay : false ,
26872696 }
26882697 }
26892698 pub fn skip_last ( mut self , skip_last : bool ) -> Self {
@@ -2698,12 +2707,16 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
26982707 self . expected_min_htlc_overpay = extra_fees;
26992708 self
27002709 }
2710+ pub fn allow_1_msat_fee_overpay ( mut self ) -> Self {
2711+ self . allow_1_msat_fee_overpay = true ;
2712+ self
2713+ }
27012714}
27022715
27032716pub fn pass_claimed_payment_along_route < ' a , ' b , ' c , ' d > ( args : ClaimAlongRouteArgs ) -> u64 {
27042717 let ClaimAlongRouteArgs {
27052718 origin_node, expected_paths, expected_extra_fees, expected_min_htlc_overpay, skip_last,
2706- payment_preimage : our_payment_preimage
2719+ payment_preimage : our_payment_preimage, allow_1_msat_fee_overpay ,
27072720 } = args;
27082721 let claim_event = expected_paths[ 0 ] . last ( ) . unwrap ( ) . node . get_and_clear_pending_events ( ) ;
27092722 assert_eq ! ( claim_event. len( ) , 1 ) ;
@@ -2823,10 +2836,10 @@ pub fn pass_claimed_payment_along_route<'a, 'b, 'c, 'd>(args: ClaimAlongRouteArg
28232836 }
28242837 let mut events = $node. node. get_and_clear_pending_events( ) ;
28252838 assert_eq!( events. len( ) , 1 ) ;
2826- expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2827- Some ( fee as u64 ) , expected_extra_fee, false , false , false ) ;
2828- expected_total_fee_msat += fee as u64 ;
2829- fwd_amt_msat += fee as u64 ;
2839+ let actual_fee = expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2840+ Some ( fee as u64 ) , expected_extra_fee, false , false , allow_1_msat_fee_overpay ) ;
2841+ expected_total_fee_msat += actual_fee . unwrap ( ) ;
2842+ fwd_amt_msat += actual_fee . unwrap ( ) ;
28302843 check_added_monitors!( $node, 1 ) ;
28312844 let new_next_msgs = if $new_msgs {
28322845 let events = $node. node. get_and_clear_pending_msg_events( ) ;
0 commit comments