@@ -2649,6 +2649,14 @@ pub struct ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2649
2649
pub expected_min_htlc_overpay : Vec < u32 > ,
2650
2650
pub skip_last : bool ,
2651
2651
pub payment_preimage : PaymentPreimage ,
2652
+ // Allow forwarding nodes to have taken 1 msat more fee than expected based on the downstream
2653
+ // fulfill amount.
2654
+ //
2655
+ // Necessary because our test utils calculate the expected fee for an intermediate node based on
2656
+ // the amount was claimed in their downstream peer's fulfill, but blinded intermediate nodes
2657
+ // calculate their fee based on the inbound amount from their upstream peer, causing a difference
2658
+ // in rounding.
2659
+ pub allow_1_msat_fee_overpay : bool ,
2652
2660
}
2653
2661
2654
2662
impl < ' a , ' b , ' c , ' d > ClaimAlongRouteArgs < ' a , ' b , ' c , ' d > {
@@ -2659,6 +2667,7 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2659
2667
Self {
2660
2668
origin_node, expected_paths, expected_extra_fees : vec ! [ 0 ; expected_paths. len( ) ] ,
2661
2669
expected_min_htlc_overpay : vec ! [ 0 ; expected_paths. len( ) ] , skip_last : false , payment_preimage,
2670
+ allow_1_msat_fee_overpay : false ,
2662
2671
}
2663
2672
}
2664
2673
pub fn skip_last ( mut self , skip_last : bool ) -> Self {
@@ -2673,12 +2682,16 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2673
2682
self . expected_min_htlc_overpay = extra_fees;
2674
2683
self
2675
2684
}
2685
+ pub fn allow_1_msat_fee_overpay ( mut self ) -> Self {
2686
+ self . allow_1_msat_fee_overpay = true ;
2687
+ self
2688
+ }
2676
2689
}
2677
2690
2678
2691
pub fn pass_claimed_payment_along_route < ' a , ' b , ' c , ' d > ( args : ClaimAlongRouteArgs ) -> u64 {
2679
2692
let ClaimAlongRouteArgs {
2680
2693
origin_node, expected_paths, expected_extra_fees, expected_min_htlc_overpay, skip_last,
2681
- payment_preimage : our_payment_preimage
2694
+ payment_preimage : our_payment_preimage, allow_1_msat_fee_overpay ,
2682
2695
} = args;
2683
2696
let claim_event = expected_paths[ 0 ] . last ( ) . unwrap ( ) . node . get_and_clear_pending_events ( ) ;
2684
2697
assert_eq ! ( claim_event. len( ) , 1 ) ;
@@ -2798,10 +2811,10 @@ pub fn pass_claimed_payment_along_route<'a, 'b, 'c, 'd>(args: ClaimAlongRouteArg
2798
2811
}
2799
2812
let mut events = $node. node. get_and_clear_pending_events( ) ;
2800
2813
assert_eq!( events. len( ) , 1 ) ;
2801
- expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2802
- Some ( fee as u64 ) , expected_extra_fee, false , false , false ) ;
2803
- expected_total_fee_msat += fee as u64 ;
2804
- fwd_amt_msat += fee as u64 ;
2814
+ let actual_fee = expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2815
+ Some ( fee as u64 ) , expected_extra_fee, false , false , allow_1_msat_fee_overpay ) ;
2816
+ expected_total_fee_msat += actual_fee . unwrap ( ) ;
2817
+ fwd_amt_msat += actual_fee . unwrap ( ) ;
2805
2818
check_added_monitors!( $node, 1 ) ;
2806
2819
let new_next_msgs = if $new_msgs {
2807
2820
let events = $node. node. get_and_clear_pending_msg_events( ) ;
0 commit comments