@@ -1277,48 +1277,17 @@ fn successful_probe_yields_event() {
1277
1277
create_announced_chan_between_nodes ( & nodes, 0 , 1 ) ;
1278
1278
create_announced_chan_between_nodes ( & nodes, 1 , 2 ) ;
1279
1279
1280
- let ( route, _, _, _) = get_route_and_payment_hash ! ( & nodes[ 0 ] , nodes[ 2 ] , 100_000 ) ;
1280
+ let recv_value = 100_000 ;
1281
+ let ( route, payment_hash, _, _) = get_route_and_payment_hash ! ( & nodes[ 0 ] , nodes[ 2 ] , recv_value) ;
1281
1282
1282
- let ( payment_hash , payment_id ) = nodes[ 0 ] . node . send_probe ( route. paths [ 0 ] . clone ( ) ) . unwrap ( ) ;
1283
+ let res = nodes[ 0 ] . node . send_probe ( route. paths [ 0 ] . clone ( ) ) . unwrap ( ) ;
1283
1284
1284
- // node[0] -- update_add_htlcs -> node[1]
1285
- check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1286
- let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1287
- let probe_event = SendEvent :: from_commitment_update ( nodes[ 1 ] . node . get_our_node_id ( ) , updates) ;
1288
- nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1289
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1290
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , probe_event. commitment_msg, false ) ;
1291
- expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
1285
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] ] ] ;
1292
1286
1293
- // node[1] -- update_add_htlcs -> node[2]
1294
- check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
1295
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 2 ] . node. get_our_node_id( ) ) ;
1296
- let probe_event = SendEvent :: from_commitment_update ( nodes[ 1 ] . node . get_our_node_id ( ) , updates) ;
1297
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1298
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1299
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , probe_event. commitment_msg, true , true ) ;
1287
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1300
1288
1301
- // node[1] <- update_fail_htlcs -- node[2]
1302
- let updates = get_htlc_update_msgs ! ( nodes[ 2 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1303
- nodes[ 1 ] . node . handle_update_fail_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1304
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1305
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 2 ] , updates. commitment_signed, true ) ;
1306
-
1307
- // node[0] <- update_fail_htlcs -- node[1]
1308
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1309
- nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1310
- check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
1311
- commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
1289
+ expect_probe_successful_events ( & nodes[ 0 ] , vec ! [ res] ) ;
1312
1290
1313
- let mut events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
1314
- assert_eq ! ( events. len( ) , 1 ) ;
1315
- match events. drain ( ..) . next ( ) . unwrap ( ) {
1316
- crate :: events:: Event :: ProbeSuccessful { payment_id : ev_pid, payment_hash : ev_ph, .. } => {
1317
- assert_eq ! ( payment_id, ev_pid) ;
1318
- assert_eq ! ( payment_hash, ev_ph) ;
1319
- } ,
1320
- _ => panic ! ( ) ,
1321
- } ;
1322
1291
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1323
1292
}
1324
1293
@@ -1423,6 +1392,94 @@ fn onchain_failed_probe_yields_event() {
1423
1392
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1424
1393
}
1425
1394
1395
+ #[ test]
1396
+ fn preflight_probes_yield_event_skip_private_hop ( ) {
1397
+ let chanmon_cfgs = create_chanmon_cfgs ( 5 ) ;
1398
+ let node_cfgs = create_node_cfgs ( 5 , & chanmon_cfgs) ;
1399
+
1400
+ // We alleviate the HTLC max-in-flight limit, as otherwise we'd always be limited through that.
1401
+ let mut no_htlc_limit_config = test_default_channel_config ( ) ;
1402
+ no_htlc_limit_config. channel_handshake_config . max_inbound_htlc_value_in_flight_percent_of_channel = 100 ;
1403
+
1404
+ let user_configs = std:: iter:: repeat ( no_htlc_limit_config) . take ( 5 ) . map ( |c| Some ( c) ) . collect :: < Vec < Option < UserConfig > > > ( ) ;
1405
+ let node_chanmgrs = create_node_chanmgrs ( 5 , & node_cfgs, & user_configs) ;
1406
+ let nodes = create_network ( 5 , & node_cfgs, & node_chanmgrs) ;
1407
+
1408
+ // Setup channel topology:
1409
+ // N0 -(1M:0)- N1 -(1M:0)- N2 -(70k:0)- N3 -(50k:0)- N4
1410
+
1411
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1_000_000 , 0 ) ;
1412
+ create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 1_000_000 , 0 ) ;
1413
+ create_announced_chan_between_nodes_with_value ( & nodes, 2 , 3 , 70_000 , 0 ) ;
1414
+ create_unannounced_chan_between_nodes_with_value ( & nodes, 3 , 4 , 50_000 , 0 ) ;
1415
+
1416
+ let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1417
+ invoice_features. set_basic_mpp_optional ( ) ;
1418
+
1419
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 3 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1420
+ . with_bolt11_features ( invoice_features) . unwrap ( ) ;
1421
+
1422
+ let recv_value = 50_000_000 ;
1423
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, recv_value) ;
1424
+ let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1425
+
1426
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] , & nodes[ 3 ] ] ] ;
1427
+
1428
+ assert_eq ! ( res. len( ) , expected_route. len( ) ) ;
1429
+
1430
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1431
+
1432
+ expect_probe_successful_events ( & nodes[ 0 ] , res. clone ( ) ) ;
1433
+
1434
+ assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1435
+ }
1436
+
1437
+ #[ test]
1438
+ fn preflight_probes_yield_event ( ) {
1439
+ let chanmon_cfgs = create_chanmon_cfgs ( 4 ) ;
1440
+ let node_cfgs = create_node_cfgs ( 4 , & chanmon_cfgs) ;
1441
+
1442
+ // We alleviate the HTLC max-in-flight limit, as otherwise we'd always be limited through that.
1443
+ let mut no_htlc_limit_config = test_default_channel_config ( ) ;
1444
+ no_htlc_limit_config. channel_handshake_config . max_inbound_htlc_value_in_flight_percent_of_channel = 100 ;
1445
+
1446
+ let user_configs = std:: iter:: repeat ( no_htlc_limit_config) . take ( 4 ) . map ( |c| Some ( c) ) . collect :: < Vec < Option < UserConfig > > > ( ) ;
1447
+ let node_chanmgrs = create_node_chanmgrs ( 4 , & node_cfgs, & user_configs) ;
1448
+ let nodes = create_network ( 4 , & node_cfgs, & node_chanmgrs) ;
1449
+
1450
+ // Setup channel topology:
1451
+ // (1M:0)- N1 -(30k:0)
1452
+ // / \
1453
+ // N0 N4
1454
+ // \ /
1455
+ // (1M:0)- N2 -(70k:0)
1456
+ //
1457
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1_000_000 , 0 ) ;
1458
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 2 , 1_000_000 , 0 ) ;
1459
+ create_announced_chan_between_nodes_with_value ( & nodes, 1 , 3 , 30_000 , 0 ) ;
1460
+ create_announced_chan_between_nodes_with_value ( & nodes, 2 , 3 , 70_000 , 0 ) ;
1461
+
1462
+ let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1463
+ invoice_features. set_basic_mpp_optional ( ) ;
1464
+
1465
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 3 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1466
+ . with_bolt11_features ( invoice_features) . unwrap ( ) ;
1467
+
1468
+ let recv_value = 50_000_000 ;
1469
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, recv_value) ;
1470
+ let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1471
+
1472
+ let expected_route: & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 3 ] ] , & [ & nodes[ 2 ] , & nodes[ 3 ] ] ] ;
1473
+
1474
+ assert_eq ! ( res. len( ) , expected_route. len( ) ) ;
1475
+
1476
+ pass_probe_along_route ( & nodes[ 0 ] , expected_route) ;
1477
+
1478
+ expect_probe_successful_events ( & nodes[ 0 ] , res. clone ( ) ) ;
1479
+
1480
+ assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1481
+ }
1482
+
1426
1483
#[ test]
1427
1484
fn preflight_probes_yield_event_and_skip ( ) {
1428
1485
let chanmon_cfgs = create_chanmon_cfgs ( 5 ) ;
@@ -1443,7 +1500,7 @@ fn preflight_probes_yield_event_and_skip() {
1443
1500
// \ /
1444
1501
// (70k:0)- N3 -(1M:0)
1445
1502
//
1446
- let first_chan_update = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100_000 , 0 ) . 0 ;
1503
+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100_000 , 0 ) ;
1447
1504
create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 30_000 , 0 ) ;
1448
1505
create_announced_chan_between_nodes_with_value ( & nodes, 1 , 3 , 70_000 , 0 ) ;
1449
1506
create_announced_chan_between_nodes_with_value ( & nodes, 2 , 4 , 1_000_000 , 0 ) ;
@@ -1452,70 +1509,22 @@ fn preflight_probes_yield_event_and_skip() {
1452
1509
let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
1453
1510
invoice_features. set_basic_mpp_optional ( ) ;
1454
1511
1455
- let mut payment_params = PaymentParameters :: from_node_id ( nodes[ 4 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1512
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 4 ] . node . get_our_node_id ( ) , TEST_FINAL_CLTV )
1456
1513
. with_bolt11_features ( invoice_features) . unwrap ( ) ;
1457
1514
1458
- let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, 80_000_000 ) ;
1515
+ let recv_value = 80_000_000 ;
1516
+ let route_params = RouteParameters :: from_payment_params_and_value ( payment_params, recv_value) ;
1459
1517
let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
1460
1518
1519
+ let expected_route : & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] , & nodes[ 4 ] ] ] ;
1520
+
1461
1521
// We check that only one probe was sent, the other one was skipped due to limited liquidity.
1462
1522
assert_eq ! ( res. len( ) , 1 ) ;
1463
- let log_msg = format ! ( "Skipped sending payment probe to avoid putting channel {} under the liquidity limit." ,
1464
- first_chan_update. contents. short_channel_id) ;
1465
- node_cfgs[ 0 ] . logger . assert_log_contains ( "lightning::ln::channelmanager" , & log_msg, 1 ) ;
1466
1523
1467
- let ( payment_hash , payment_id ) = res . first ( ) . unwrap ( ) ;
1524
+ pass_probe_along_route ( & nodes [ 0 ] , expected_route ) ;
1468
1525
1469
- // node[0] -- update_add_htlcs -> node[1]
1470
- check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1471
- let probe_event = SendEvent :: from_node ( & nodes[ 0 ] ) ;
1472
- nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1473
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1474
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , probe_event. commitment_msg, false ) ;
1475
- expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
1526
+ expect_probe_successful_events ( & nodes[ 0 ] , res. clone ( ) ) ;
1476
1527
1477
- // node[1] -- update_add_htlcs -> node[2]
1478
- check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
1479
- let probe_event = SendEvent :: from_node ( & nodes[ 1 ] ) ;
1480
- nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1481
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1482
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 1 ] , probe_event. commitment_msg, false ) ;
1483
- expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ;
1484
-
1485
- // node[2] -- update_add_htlcs -> node[4]
1486
- check_added_monitors ! ( nodes[ 2 ] , 1 ) ;
1487
- let probe_event = SendEvent :: from_node ( & nodes[ 2 ] ) ;
1488
- nodes[ 4 ] . node . handle_update_add_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & probe_event. msgs [ 0 ] ) ;
1489
- check_added_monitors ! ( nodes[ 4 ] , 0 ) ;
1490
- commitment_signed_dance ! ( nodes[ 4 ] , nodes[ 2 ] , probe_event. commitment_msg, true , true ) ;
1491
-
1492
- // node[2] <- update_fail_htlcs -- node[4]
1493
- let updates = get_htlc_update_msgs ! ( nodes[ 4 ] , nodes[ 2 ] . node. get_our_node_id( ) ) ;
1494
- nodes[ 2 ] . node . handle_update_fail_htlc ( & nodes[ 4 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1495
- check_added_monitors ! ( nodes[ 2 ] , 0 ) ;
1496
- commitment_signed_dance ! ( nodes[ 2 ] , nodes[ 4 ] , updates. commitment_signed, true ) ;
1497
-
1498
- // node[1] <- update_fail_htlcs -- node[2]
1499
- let updates = get_htlc_update_msgs ! ( nodes[ 2 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1500
- nodes[ 1 ] . node . handle_update_fail_htlc ( & nodes[ 2 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1501
- check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
1502
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 2 ] , updates. commitment_signed, true ) ;
1503
-
1504
- // node[0] <- update_fail_htlcs -- node[1]
1505
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1506
- nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & updates. update_fail_htlcs [ 0 ] ) ;
1507
- check_added_monitors ! ( nodes[ 0 ] , 0 ) ;
1508
- commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
1509
-
1510
- let mut events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
1511
- assert_eq ! ( events. len( ) , 1 ) ;
1512
- match events. drain ( ..) . next ( ) . unwrap ( ) {
1513
- crate :: events:: Event :: ProbeSuccessful { payment_id : ev_pid, payment_hash : ev_ph, .. } => {
1514
- assert_eq ! ( * payment_id, ev_pid) ;
1515
- assert_eq ! ( * payment_hash, ev_ph) ;
1516
- } ,
1517
- _ => panic ! ( ) ,
1518
- } ;
1519
1528
assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
1520
1529
}
1521
1530
0 commit comments