@@ -1277,48 +1277,17 @@ fn successful_probe_yields_event() {
12771277 create_announced_chan_between_nodes ( & nodes, 0 , 1 ) ;
12781278 create_announced_chan_between_nodes ( & nodes, 1 , 2 ) ;
12791279
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) ;
12811282
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 ( ) ;
12831284
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 ] ] ] ;
12921286
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+ send_probe_along_route ( & nodes[ 0 ] , expected_route) ;
13001288
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] ) ;
13121290
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- } ;
13221291 assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
13231292}
13241293
@@ -1423,6 +1392,94 @@ fn onchain_failed_probe_yields_event() {
14231392 assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
14241393}
14251394
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+ send_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+ send_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+
14261483#[ test]
14271484fn preflight_probes_yield_event_and_skip ( ) {
14281485 let chanmon_cfgs = create_chanmon_cfgs ( 5 ) ;
@@ -1443,7 +1500,7 @@ fn preflight_probes_yield_event_and_skip() {
14431500 // \ /
14441501 // (70k:0)- N3 -(1M:0)
14451502 //
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 ) ;
14471504 create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 30_000 , 0 ) ;
14481505 create_announced_chan_between_nodes_with_value ( & nodes, 1 , 3 , 70_000 , 0 ) ;
14491506 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() {
14521509 let mut invoice_features = Bolt11InvoiceFeatures :: empty ( ) ;
14531510 invoice_features. set_basic_mpp_optional ( ) ;
14541511
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 )
14561513 . with_bolt11_features ( invoice_features) . unwrap ( ) ;
14571514
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) ;
14591517 let res = nodes[ 0 ] . node . send_preflight_probes ( route_params, None ) . unwrap ( ) ;
14601518
1519+ let expected_route : & [ & [ & Node ] ] = & [ & [ & nodes[ 1 ] , & nodes[ 2 ] , & nodes[ 4 ] ] ] ;
1520+
14611521 // We check that only one probe was sent, the other one was skipped due to limited liquidity.
14621522 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 ) ;
14661523
1467- let ( payment_hash , payment_id ) = res . first ( ) . unwrap ( ) ;
1524+ send_probe_along_route ( & nodes [ 0 ] , expected_route ) ;
14681525
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 ( ) ) ;
14761527
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- } ;
15191528 assert ! ( !nodes[ 0 ] . node. has_pending_payments( ) ) ;
15201529}
15211530
0 commit comments