@@ -253,6 +253,7 @@ fn mpp_retry_overpay() {
253
253
254
254
route. paths . remove ( 0 ) ;
255
255
route_params. final_value_msat -= first_path_value;
256
+ route. route_params . as_mut ( ) . map ( |p| p. final_value_msat -= first_path_value) ;
256
257
route_params. payment_params . previously_failed_channels . push ( chan_4_update. contents . short_channel_id ) ;
257
258
258
259
// Check the remaining max total routing fee for the second attempt accounts only for 1_000 msat
@@ -2395,10 +2396,11 @@ fn auto_retry_partial_failure() {
2395
2396
let payment_params = PaymentParameters :: from_node_id ( nodes[ 1 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
2396
2397
. with_expiry_time ( payment_expiry_secs as u64 )
2397
2398
. with_bolt11_features ( invoice_features) . unwrap ( ) ;
2399
+
2400
+ // Configure the initial send path
2398
2401
let mut route_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat) ;
2399
2402
route_params. max_total_routing_fee_msat = None ;
2400
2403
2401
- // Configure the initial send, retry1 and retry2's paths.
2402
2404
let send_route = Route {
2403
2405
paths : vec ! [
2404
2406
Path { hops: vec![ RouteHop {
@@ -2422,6 +2424,14 @@ fn auto_retry_partial_failure() {
2422
2424
] ,
2423
2425
route_params : Some ( route_params. clone ( ) ) ,
2424
2426
} ;
2427
+ nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( send_route) ) ;
2428
+
2429
+ // Configure the retry1 paths
2430
+ let mut payment_params = route_params. payment_params . clone ( ) ;
2431
+ payment_params. previously_failed_channels . push ( chan_2_id) ;
2432
+ let mut retry_1_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 2 ) ;
2433
+ retry_1_params. max_total_routing_fee_msat = None ;
2434
+
2425
2435
let retry_1_route = Route {
2426
2436
paths : vec ! [
2427
2437
Path { hops: vec![ RouteHop {
@@ -2443,8 +2453,16 @@ fn auto_retry_partial_failure() {
2443
2453
maybe_announced_channel: true ,
2444
2454
} ] , blinded_tail: None } ,
2445
2455
] ,
2446
- route_params : Some ( route_params . clone ( ) ) ,
2456
+ route_params : Some ( retry_1_params . clone ( ) ) ,
2447
2457
} ;
2458
+ nodes[ 0 ] . router . expect_find_route ( retry_1_params. clone ( ) , Ok ( retry_1_route) ) ;
2459
+
2460
+ // Configure the retry2 path
2461
+ let mut payment_params = retry_1_params. payment_params . clone ( ) ;
2462
+ payment_params. previously_failed_channels . push ( chan_3_id) ;
2463
+ let mut retry_2_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 4 ) ;
2464
+ retry_2_params. max_total_routing_fee_msat = None ;
2465
+
2448
2466
let retry_2_route = Route {
2449
2467
paths : vec ! [
2450
2468
Path { hops: vec![ RouteHop {
@@ -2457,20 +2475,8 @@ fn auto_retry_partial_failure() {
2457
2475
maybe_announced_channel: true ,
2458
2476
} ] , blinded_tail: None } ,
2459
2477
] ,
2460
- route_params : Some ( route_params . clone ( ) ) ,
2478
+ route_params : Some ( retry_2_params . clone ( ) ) ,
2461
2479
} ;
2462
- nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( send_route) ) ;
2463
- let mut payment_params = route_params. payment_params . clone ( ) ;
2464
- payment_params. previously_failed_channels . push ( chan_2_id) ;
2465
-
2466
- let mut retry_1_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 2 ) ;
2467
- retry_1_params. max_total_routing_fee_msat = None ;
2468
- nodes[ 0 ] . router . expect_find_route ( retry_1_params, Ok ( retry_1_route) ) ;
2469
-
2470
- let mut payment_params = route_params. payment_params . clone ( ) ;
2471
- payment_params. previously_failed_channels . push ( chan_3_id) ;
2472
- let mut retry_2_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 4 ) ;
2473
- retry_2_params. max_total_routing_fee_msat = None ;
2474
2480
nodes[ 0 ] . router . expect_find_route ( retry_2_params, Ok ( retry_2_route) ) ;
2475
2481
2476
2482
// Send a payment that will partially fail on send, then partially fail on retry, then succeed.
@@ -2734,6 +2740,7 @@ fn retry_multi_path_single_failed_payment() {
2734
2740
// not the amount remaining on the full payment, which should be changed.
2735
2741
let mut retry_params = RouteParameters :: from_payment_params_and_value ( pay_params, 100_000_001 ) ;
2736
2742
retry_params. max_total_routing_fee_msat = None ;
2743
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat = 100_000_000 ;
2737
2744
nodes[ 0 ] . router . expect_find_route ( retry_params, Ok ( route. clone ( ) ) ) ;
2738
2745
2739
2746
{
@@ -2917,9 +2924,7 @@ fn no_extra_retries_on_back_to_back_fail() {
2917
2924
maybe_announced_channel: true ,
2918
2925
} ] , blinded_tail: None }
2919
2926
] ,
2920
- route_params : Some ( RouteParameters :: from_payment_params_and_value (
2921
- PaymentParameters :: from_node_id ( nodes[ 2 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
2922
- 100_000_000 ) ) ,
2927
+ route_params : Some ( route_params. clone ( ) ) ,
2923
2928
} ;
2924
2929
route. route_params . as_mut ( ) . unwrap ( ) . max_total_routing_fee_msat = None ;
2925
2930
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
@@ -3123,18 +3128,18 @@ fn test_simple_partial_retry() {
3123
3128
maybe_announced_channel: true ,
3124
3129
} ] , blinded_tail: None }
3125
3130
] ,
3126
- route_params : Some ( RouteParameters :: from_payment_params_and_value (
3127
- PaymentParameters :: from_node_id ( nodes[ 2 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
3128
- 100_000_000 ) ) ,
3131
+ route_params : Some ( route_params. clone ( ) ) ,
3129
3132
} ;
3130
- route . route_params . as_mut ( ) . unwrap ( ) . max_total_routing_fee_msat = None ;
3133
+
3131
3134
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
3135
+
3132
3136
let mut second_payment_params = route_params. payment_params . clone ( ) ;
3133
3137
second_payment_params. previously_failed_channels = vec ! [ chan_2_scid] ;
3134
3138
// On retry, we'll only be asked for one path (or 100k sats)
3135
3139
route. paths . remove ( 0 ) ;
3136
3140
let mut retry_params = RouteParameters :: from_payment_params_and_value ( second_payment_params, amt_msat / 2 ) ;
3137
3141
retry_params. max_total_routing_fee_msat = None ;
3142
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat = amt_msat / 2 ;
3138
3143
nodes[ 0 ] . router . expect_find_route ( retry_params, Ok ( route. clone ( ) ) ) ;
3139
3144
3140
3145
nodes[ 0 ] . node . send_payment ( payment_hash, RecipientOnionFields :: secret_only ( payment_secret) ,
@@ -3294,11 +3299,7 @@ fn test_threaded_payment_retries() {
3294
3299
maybe_announced_channel: true ,
3295
3300
} ] , blinded_tail: None }
3296
3301
] ,
3297
- route_params : Some ( RouteParameters {
3298
- payment_params : PaymentParameters :: from_node_id ( nodes[ 1 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
3299
- final_value_msat : amt_msat - amt_msat / 1000 ,
3300
- max_total_routing_fee_msat : Some ( 500_000 ) ,
3301
- } ) ,
3302
+ route_params : Some ( route_params. clone ( ) ) ,
3302
3303
} ;
3303
3304
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
3304
3305
@@ -3317,6 +3318,7 @@ fn test_threaded_payment_retries() {
3317
3318
3318
3319
// from here on out, the retry `RouteParameters` amount will be amt/1000
3319
3320
route_params. final_value_msat /= 1000 ;
3321
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat /= 1000 ;
3320
3322
route. paths . pop ( ) ;
3321
3323
3322
3324
let end_time = Instant :: now ( ) + Duration :: from_secs ( 1 ) ;
0 commit comments