@@ -1161,46 +1161,14 @@ fn successful_probe_yields_event() {
1161
1161
1162
1162
let ( route, _, _, _) = get_route_and_payment_hash ! ( & nodes[ 0 ] , nodes[ 2 ] , 100_000 ) ;
1163
1163
1164
- let ( payment_hash , payment_id ) = nodes[ 0 ] . node . send_probe ( route. paths [ 0 ] . clone ( ) ) . unwrap ( ) ;
1164
+ let res = nodes[ 0 ] . node . send_probe ( route. paths [ 0 ] . clone ( ) ) . unwrap ( ) ;
1165
1165
1166
- // node[0] -- update_add_htlcs -> node[1]
1167
- check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1168
- let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1169
- let probe_event = SendEvent :: from_commitment_update ( nodes[ 1 ] . node . get_our_node_id ( ) , updates) ;
1170
- nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1171
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1172
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , probe_event. commitment_msg, false ) ;
1173
- expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
1166
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] ] ] ;
1174
1167
1175
- // node[1] -- update_add_htlcs -> node[2]
1176
- check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
1177
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 2 ] . node. get_our_node_id( ) ) ;
1178
- let probe_event = SendEvent :: from_commitment_update ( nodes[ 1 ] . node . get_our_node_id ( ) , updates) ;
1179
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1180
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1181
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , probe_event. commitment_msg, true , true ) ;
1168
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1182
1169
1183
- // node[1] <- update_fail_htlcs -- node[2]
1184
- let updates = get_htlc_update_msgs ! ( nodes[ 2 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1185
- nodes[ 1 ] . node . handle_update_fail_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1186
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1187
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 2 ] , updates. commitment_signed, true ) ;
1170
+ expect_probe_successful_events ( & nodes[ 0 ] , vec ! [ res] ) ;
1188
1171
1189
- // node[0] <- update_fail_htlcs -- node[1]
1190
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1191
- nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1192
- check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
1193
- commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
1194
-
1195
- let mut events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
1196
- assert_eq ! ( events. len( ) , 1 ) ;
1197
- match events. drain ( ..) . next ( ) . unwrap ( ) {
1198
- crate :: events:: Event :: ProbeSuccessful { payment_id : ev_pid, payment_hash : ev_ph, .. } => {
1199
- assert_eq ! ( payment_id, ev_pid) ;
1200
- assert_eq ! ( payment_hash, ev_ph) ;
1201
- } ,
1202
- _ => panic ! ( ) ,
1203
- } ;
1204
1172
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1205
1173
}
1206
1174
@@ -1305,6 +1273,92 @@ fn onchain_failed_probe_yields_event() {
1305
1273
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1306
1274
}
1307
1275
1276
+ #[ test]
1277
+ fn preflight_probes_yield_event_skip_private_hop ( ) {
1278
+ let chanmon_cfgs = create_chanmon_cfgs ( 5 ) ;
1279
+ let node_cfgs = create_node_cfgs ( 5 , & chanmon_cfgs) ;
1280
+
1281
+ // We alleviate the HTLC max-in-flight limit, as otherwise we'd always be limited through that.
1282
+ let mut no_htlc_limit_config = test_default_channel_config ( ) ;
1283
+ no_htlc_limit_config. channel_handshake_config . max_inbound_htlc_value_in_flight_percent_of_channel = 100 ;
1284
+
1285
+ let user_configs = std:: iter:: repeat ( no_htlc_limit_config) . take ( 5 ) . map ( |c| Some ( c) ) . collect :: < Vec < Option < UserConfig > > > ( ) ;
1286
+ let node_chanmgrs = create_node_chanmgrs ( 5 , & node_cfgs, & user_configs) ;
1287
+ let nodes = create_network ( 5 , & node_cfgs, & node_chanmgrs) ;
1288
+
1289
+ // Setup channel topology:
1290
+ // N0 <-(1M:0)-> N1 <-(1M:0)-> N2 <-(70k:0)-> N3 <-(50k:0)-> N4
1291
+
1292
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1_000_000 , 0 ) ;
1293
+ create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 1_000_000 , 0 ) ;
1294
+ create_announced_chan_between_nodes_with_value ( & nodes, 2 , 3 , 70_000 , 0 ) ;
1295
+ create_unannounced_chan_between_nodes_with_value ( & nodes, 3 , 4 , 50_000 , 0 ) ;
1296
+
1297
+ let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1298
+ invoice_features. set_basic_mpp_optional ( ) ;
1299
+
1300
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 3 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1301
+ . with_bolt11_features ( invoice_features) . unwrap ( ) ;
1302
+
1303
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, 50_000_000 ) ;
1304
+ let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1305
+
1306
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] , & nodes[ 3 ] ] ] ;
1307
+
1308
+ assert_eq ! ( res. len( ) , expected_route. len( ) ) ;
1309
+
1310
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1311
+
1312
+ expect_probe_successful_events ( & nodes[ 0 ] , res) ;
1313
+
1314
+ assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1315
+ }
1316
+
1317
+ #[ test]
1318
+ fn preflight_probes_yield_event ( ) {
1319
+ let chanmon_cfgs = create_chanmon_cfgs ( 4 ) ;
1320
+ let node_cfgs = create_node_cfgs ( 4 , & chanmon_cfgs) ;
1321
+
1322
+ // We alleviate the HTLC max-in-flight limit, as otherwise we'd always be limited through that.
1323
+ let mut no_htlc_limit_config = test_default_channel_config ( ) ;
1324
+ no_htlc_limit_config. channel_handshake_config . max_inbound_htlc_value_in_flight_percent_of_channel = 100 ;
1325
+
1326
+ let user_configs = std:: iter:: repeat ( no_htlc_limit_config) . take ( 4 ) . map ( |c| Some ( c) ) . collect :: < Vec < Option < UserConfig > > > ( ) ;
1327
+ let node_chanmgrs = create_node_chanmgrs ( 4 , & node_cfgs, & user_configs) ;
1328
+ let nodes = create_network ( 4 , & node_cfgs, & node_chanmgrs) ;
1329
+
1330
+ // Setup channel topology:
1331
+ // (1M:0)- N1 -(30k:0)
1332
+ // / \
1333
+ // N0 N4
1334
+ // \ /
1335
+ // (1M:0)- N2 -(70k:0)
1336
+ //
1337
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1_000_000 , 0 ) ;
1338
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 2 , 1_000_000 , 0 ) ;
1339
+ create_announced_chan_between_nodes_with_value ( & nodes, 1 , 3 , 30_000 , 0 ) ;
1340
+ create_announced_chan_between_nodes_with_value ( & nodes, 2 , 3 , 70_000 , 0 ) ;
1341
+
1342
+ let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1343
+ invoice_features. set_basic_mpp_optional ( ) ;
1344
+
1345
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 3 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1346
+ . with_bolt11_features ( invoice_features) . unwrap ( ) ;
1347
+
1348
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, 50_000_000 ) ;
1349
+ let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1350
+
1351
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 3 ] ] , & [ & nodes[ 2 ] , & nodes[ 3 ] ] ] ;
1352
+
1353
+ assert_eq ! ( res. len( ) , expected_route. len( ) ) ;
1354
+
1355
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1356
+
1357
+ expect_probe_successful_events ( & nodes[ 0 ] , res) ;
1358
+
1359
+ assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1360
+ }
1361
+
1308
1362
#[ test]
1309
1363
fn preflight_probes_yield_event_and_skip ( ) {
1310
1364
let chanmon_cfgs = create_chanmon_cfgs ( 5 ) ;
@@ -1325,7 +1379,7 @@ fn preflight_probes_yield_event_and_skip() {
1325
1379
// \ /
1326
1380
// (70k:0)- N3 -(1M:0)
1327
1381
//
1328
- let first_chan_update = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100_000 , 0 ) . 0 ;
1382
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100_000 , 0 ) ;
1329
1383
create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 30_000 , 0 ) ;
1330
1384
create_announced_chan_between_nodes_with_value ( & nodes, 1 , 3 , 70_000 , 0 ) ;
1331
1385
create_announced_chan_between_nodes_with_value ( & nodes, 2 , 4 , 1_000_000 , 0 ) ;
@@ -1334,70 +1388,21 @@ fn preflight_probes_yield_event_and_skip() {
1334
1388
let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1335
1389
invoice_features. set_basic_mpp_optional ( ) ;
1336
1390
1337
- let mut payment_params = PaymentParameters :: from_node_id ( nodes[ 4 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1391
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 4 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1338
1392
. with_bolt11_features ( invoice_features) . unwrap ( ) ;
1339
1393
1340
- let route_params = RouteParameters { payment_params, final_value_msat : 80_000_000 } ;
1394
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, 80_000_000 ) ;
1341
1395
let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1342
1396
1397
+ let expected_route : & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] , & nodes[ 4 ] ] ] ;
1398
+
1343
1399
// We check that only one probe was sent, the other one was skipped due to limited liquidity.
1344
1400
assert_eq ! ( res. len( ) , 1 ) ;
1345
- let log_msg = format ! ( "Skipped sending payment probe to avoid putting channel {} under the liquidity limit." ,
1346
- first_chan_update. contents. short_channel_id) ;
1347
- node_cfgs[ 0 ] . logger . assert_log_contains ( "lightning::ln::channelmanager" , & log_msg, 1 ) ;
1348
1401
1349
- let ( payment_hash , payment_id ) = res . first ( ) . unwrap ( ) ;
1402
+ pass_probe_along_route ( & nodes [ 0 ] , expected_route ) ;
1350
1403
1351
- // node[0] -- update_add_htlcs -> node[1]
1352
- check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1353
- let probe_event = SendEvent :: from_node ( & nodes[ 0 ] ) ;
1354
- nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1355
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1356
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , probe_event. commitment_msg, false ) ;
1357
- expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
1404
+ expect_probe_successful_events ( & nodes[ 0 ] , res) ;
1358
1405
1359
- // node[1] -- update_add_htlcs -> node[2]
1360
- check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
1361
- let probe_event = SendEvent :: from_node ( & nodes[ 1 ] ) ;
1362
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1363
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1364
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , probe_event. commitment_msg, false ) ;
1365
- expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ;
1366
-
1367
- // node[2] -- update_add_htlcs -> node[4]
1368
- check_added_monitors ! ( nodes[ 2 ] , 1 ) ;
1369
- let probe_event = SendEvent :: from_node ( & nodes[ 2 ] ) ;
1370
- nodes[ 4 ] . node . handle_update_add_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1371
- check_added_monitors ! ( nodes[ 4 ] , 0 ) ;
1372
- commitment_signed_dance ! ( nodes[ 4 ] , nodes[ 2 ] , probe_event. commitment_msg, true , true ) ;
1373
-
1374
- // node[2] <- update_fail_htlcs -- node[4]
1375
- let updates = get_htlc_update_msgs ! ( nodes[ 4 ] , nodes[ 2 ] . node. get_our_node_id( ) ) ;
1376
- nodes[ 2 ] . node . handle_update_fail_htlc ( & nodes[ 4 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1377
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1378
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 4 ] , updates. commitment_signed, true ) ;
1379
-
1380
- // node[1] <- update_fail_htlcs -- node[2]
1381
- let updates = get_htlc_update_msgs ! ( nodes[ 2 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1382
- nodes[ 1 ] . node . handle_update_fail_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1383
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1384
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 2 ] , updates. commitment_signed, true ) ;
1385
-
1386
- // node[0] <- update_fail_htlcs -- node[1]
1387
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1388
- nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1389
- check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
1390
- commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
1391
-
1392
- let mut events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
1393
- assert_eq ! ( events. len( ) , 1 ) ;
1394
- match events. drain ( ..) . next ( ) . unwrap ( ) {
1395
- crate :: events:: Event :: ProbeSuccessful { payment_id : ev_pid, payment_hash : ev_ph, .. } => {
1396
- assert_eq ! ( * payment_id, ev_pid) ;
1397
- assert_eq ! ( * payment_hash, ev_ph) ;
1398
- } ,
1399
- _ => panic ! ( ) ,
1400
- } ;
1401
1406
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1402
1407
}
1403
1408
0 commit comments