@@ -114,19 +114,9 @@ fn mpp_retry() {
114
114
115
115
// Add the HTLC along the first hop.
116
116
let fail_path_msgs_1 = remove_first_msg_event_to_node ( & nodes[ 2 ] . node . get_our_node_id ( ) , & mut events) ;
117
- let ( update_add, commitment_signed) = match fail_path_msgs_1 {
118
- MessageSendEvent :: UpdateHTLCs { node_id : _, updates : msgs:: CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
119
- assert_eq ! ( update_add_htlcs. len( ) , 1 ) ;
120
- assert ! ( update_fail_htlcs. is_empty( ) ) ;
121
- assert ! ( update_fulfill_htlcs. is_empty( ) ) ;
122
- assert ! ( update_fail_malformed_htlcs. is_empty( ) ) ;
123
- assert ! ( update_fee. is_none( ) ) ;
124
- ( update_add_htlcs[ 0 ] . clone ( ) , commitment_signed. clone ( ) )
125
- } ,
126
- _ => panic ! ( "Unexpected event" ) ,
127
- } ;
128
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & update_add) ;
129
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 0 ] , commitment_signed, false ) ;
117
+ let send_event = SendEvent :: from_event ( fail_path_msgs_1) ;
118
+ nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & send_event. msgs [ 0 ] ) ;
119
+ commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 0 ] , & send_event. commitment_msg, false ) ;
130
120
131
121
// Attempt to forward the payment and complete the 2nd path's failure.
132
122
expect_pending_htlcs_forwardable ! ( & nodes[ 2 ] ) ;
@@ -225,25 +215,9 @@ fn mpp_retry_overpay() {
225
215
226
216
// Add the HTLC along the first hop.
227
217
let fail_path_msgs_1 = remove_first_msg_event_to_node ( & nodes[ 2 ] . node . get_our_node_id ( ) , & mut events) ;
228
- let ( update_add, commitment_signed) = match fail_path_msgs_1 {
229
- MessageSendEvent :: UpdateHTLCs {
230
- node_id : _,
231
- updates : msgs:: CommitmentUpdate {
232
- ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs,
233
- ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed
234
- }
235
- } => {
236
- assert_eq ! ( update_add_htlcs. len( ) , 1 ) ;
237
- assert ! ( update_fail_htlcs. is_empty( ) ) ;
238
- assert ! ( update_fulfill_htlcs. is_empty( ) ) ;
239
- assert ! ( update_fail_malformed_htlcs. is_empty( ) ) ;
240
- assert ! ( update_fee. is_none( ) ) ;
241
- ( update_add_htlcs[ 0 ] . clone ( ) , commitment_signed. clone ( ) )
242
- } ,
243
- _ => panic ! ( "Unexpected event" ) ,
244
- } ;
245
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & update_add) ;
246
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 0 ] , commitment_signed, false ) ;
218
+ let send_event = SendEvent :: from_event ( fail_path_msgs_1) ;
219
+ nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & send_event. msgs [ 0 ] ) ;
220
+ commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 0 ] , & send_event. commitment_msg, false ) ;
247
221
248
222
// Attempt to forward the payment and complete the 2nd path's failure.
249
223
expect_pending_htlcs_forwardable ! ( & nodes[ 2 ] ) ;
@@ -279,6 +253,7 @@ fn mpp_retry_overpay() {
279
253
280
254
route. paths . remove ( 0 ) ;
281
255
route_params. final_value_msat -= first_path_value;
256
+ route. route_params . as_mut ( ) . map ( |p| p. final_value_msat -= first_path_value) ;
282
257
route_params. payment_params . previously_failed_channels . push ( chan_4_update. contents . short_channel_id ) ;
283
258
284
259
// Check the remaining max total routing fee for the second attempt accounts only for 1_000 msat
@@ -2421,10 +2396,11 @@ fn auto_retry_partial_failure() {
2421
2396
let payment_params = PaymentParameters :: from_node_id ( nodes[ 1 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
2422
2397
. with_expiry_time ( payment_expiry_secs as u64 )
2423
2398
. with_bolt11_features ( invoice_features) . unwrap ( ) ;
2399
+
2400
+ // Configure the initial send path
2424
2401
let mut route_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat) ;
2425
2402
route_params. max_total_routing_fee_msat = None ;
2426
2403
2427
- // Configure the initial send, retry1 and retry2's paths.
2428
2404
let send_route = Route {
2429
2405
paths : vec ! [
2430
2406
Path { hops: vec![ RouteHop {
@@ -2448,6 +2424,14 @@ fn auto_retry_partial_failure() {
2448
2424
] ,
2449
2425
route_params : Some ( route_params. clone ( ) ) ,
2450
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
+
2451
2435
let retry_1_route = Route {
2452
2436
paths : vec ! [
2453
2437
Path { hops: vec![ RouteHop {
@@ -2469,8 +2453,16 @@ fn auto_retry_partial_failure() {
2469
2453
maybe_announced_channel: true ,
2470
2454
} ] , blinded_tail: None } ,
2471
2455
] ,
2472
- route_params : Some ( route_params . clone ( ) ) ,
2456
+ route_params : Some ( retry_1_params . clone ( ) ) ,
2473
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
+
2474
2466
let retry_2_route = Route {
2475
2467
paths : vec ! [
2476
2468
Path { hops: vec![ RouteHop {
@@ -2483,20 +2475,8 @@ fn auto_retry_partial_failure() {
2483
2475
maybe_announced_channel: true ,
2484
2476
} ] , blinded_tail: None } ,
2485
2477
] ,
2486
- route_params : Some ( route_params . clone ( ) ) ,
2478
+ route_params : Some ( retry_2_params . clone ( ) ) ,
2487
2479
} ;
2488
- nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( send_route) ) ;
2489
- let mut payment_params = route_params. payment_params . clone ( ) ;
2490
- payment_params. previously_failed_channels . push ( chan_2_id) ;
2491
-
2492
- let mut retry_1_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 2 ) ;
2493
- retry_1_params. max_total_routing_fee_msat = None ;
2494
- nodes[ 0 ] . router . expect_find_route ( retry_1_params, Ok ( retry_1_route) ) ;
2495
-
2496
- let mut payment_params = route_params. payment_params . clone ( ) ;
2497
- payment_params. previously_failed_channels . push ( chan_3_id) ;
2498
- let mut retry_2_params = RouteParameters :: from_payment_params_and_value ( payment_params, amt_msat / 4 ) ;
2499
- retry_2_params. max_total_routing_fee_msat = None ;
2500
2480
nodes[ 0 ] . router . expect_find_route ( retry_2_params, Ok ( retry_2_route) ) ;
2501
2481
2502
2482
// Send a payment that will partially fail on send, then partially fail on retry, then succeed.
@@ -2756,10 +2736,9 @@ fn retry_multi_path_single_failed_payment() {
2756
2736
let mut pay_params = route. route_params . clone ( ) . unwrap ( ) . payment_params ;
2757
2737
pay_params. previously_failed_channels . push ( chans[ 1 ] . short_channel_id . unwrap ( ) ) ;
2758
2738
2759
- // Note that the second request here requests the amount we originally failed to send,
2760
- // not the amount remaining on the full payment, which should be changed.
2761
- let mut retry_params = RouteParameters :: from_payment_params_and_value ( pay_params, 100_000_001 ) ;
2739
+ let mut retry_params = RouteParameters :: from_payment_params_and_value ( pay_params, 100_000_000 ) ;
2762
2740
retry_params. max_total_routing_fee_msat = None ;
2741
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat = 100_000_000 ;
2763
2742
nodes[ 0 ] . router . expect_find_route ( retry_params, Ok ( route. clone ( ) ) ) ;
2764
2743
2765
2744
{
@@ -2943,9 +2922,7 @@ fn no_extra_retries_on_back_to_back_fail() {
2943
2922
maybe_announced_channel: true ,
2944
2923
} ] , blinded_tail: None }
2945
2924
] ,
2946
- route_params : Some ( RouteParameters :: from_payment_params_and_value (
2947
- PaymentParameters :: from_node_id ( nodes[ 2 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
2948
- 100_000_000 ) ) ,
2925
+ route_params : Some ( route_params. clone ( ) ) ,
2949
2926
} ;
2950
2927
route. route_params . as_mut ( ) . unwrap ( ) . max_total_routing_fee_msat = None ;
2951
2928
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
@@ -3149,18 +3126,18 @@ fn test_simple_partial_retry() {
3149
3126
maybe_announced_channel: true ,
3150
3127
} ] , blinded_tail: None }
3151
3128
] ,
3152
- route_params : Some ( RouteParameters :: from_payment_params_and_value (
3153
- PaymentParameters :: from_node_id ( nodes[ 2 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
3154
- 100_000_000 ) ) ,
3129
+ route_params : Some ( route_params. clone ( ) ) ,
3155
3130
} ;
3156
- route . route_params . as_mut ( ) . unwrap ( ) . max_total_routing_fee_msat = None ;
3131
+
3157
3132
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
3133
+
3158
3134
let mut second_payment_params = route_params. payment_params . clone ( ) ;
3159
3135
second_payment_params. previously_failed_channels = vec ! [ chan_2_scid] ;
3160
3136
// On retry, we'll only be asked for one path (or 100k sats)
3161
3137
route. paths . remove ( 0 ) ;
3162
3138
let mut retry_params = RouteParameters :: from_payment_params_and_value ( second_payment_params, amt_msat / 2 ) ;
3163
3139
retry_params. max_total_routing_fee_msat = None ;
3140
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat = amt_msat / 2 ;
3164
3141
nodes[ 0 ] . router . expect_find_route ( retry_params, Ok ( route. clone ( ) ) ) ;
3165
3142
3166
3143
nodes[ 0 ] . node . send_payment ( payment_hash, RecipientOnionFields :: secret_only ( payment_secret) ,
@@ -3320,11 +3297,7 @@ fn test_threaded_payment_retries() {
3320
3297
maybe_announced_channel: true ,
3321
3298
} ] , blinded_tail: None }
3322
3299
] ,
3323
- route_params : Some ( RouteParameters {
3324
- payment_params : PaymentParameters :: from_node_id ( nodes[ 1 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV ) ,
3325
- final_value_msat : amt_msat - amt_msat / 1000 ,
3326
- max_total_routing_fee_msat : Some ( 500_000 ) ,
3327
- } ) ,
3300
+ route_params : Some ( route_params. clone ( ) ) ,
3328
3301
} ;
3329
3302
nodes[ 0 ] . router . expect_find_route ( route_params. clone ( ) , Ok ( route. clone ( ) ) ) ;
3330
3303
@@ -3343,6 +3316,7 @@ fn test_threaded_payment_retries() {
3343
3316
3344
3317
// from here on out, the retry `RouteParameters` amount will be amt/1000
3345
3318
route_params. final_value_msat /= 1000 ;
3319
+ route. route_params . as_mut ( ) . unwrap ( ) . final_value_msat /= 1000 ;
3346
3320
route. paths . pop ( ) ;
3347
3321
3348
3322
let end_time = Instant :: now ( ) + Duration :: from_secs ( 1 ) ;
0 commit comments