@@ -15,9 +15,10 @@ use chain::{ChannelMonitorUpdateErr, Confirm, Listen, Watch};
1515use chain:: channelmonitor:: { ANTI_REORG_DELAY , ChannelMonitor , LATENCY_GRACE_PERIOD_BLOCKS } ;
1616use chain:: transaction:: OutPoint ;
1717use ln:: channelmanager:: { BREAKDOWN_TIMEOUT , ChannelManager , ChannelManagerReadArgs , PaymentId , PaymentSendFailure } ;
18- use ln:: features:: InitFeatures ;
18+ use ln:: features:: { InitFeatures , InvoiceFeatures } ;
1919use ln:: msgs;
2020use ln:: msgs:: ChannelMessageHandler ;
21+ use routing:: router:: { Payee , get_route} ;
2122use util:: events:: { ClosureReason , Event , MessageSendEvent , MessageSendEventsProvider } ;
2223use util:: test_utils;
2324use util:: errors:: APIError ;
@@ -706,3 +707,34 @@ fn test_fulfill_restart_failure() {
706707 // it had already considered the payment fulfilled, and now they just got free money.
707708 assert ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
708709}
710+
711+ #[ test]
712+ fn get_ldk_payment_preimage ( ) {
713+ // Ensure that `ChannelManager::get_payment_preimage` can successfully be used to claim a payment.
714+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
715+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
716+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
717+ let mut nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
718+ create_announced_chan_between_nodes ( & nodes, 0 , 1 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
719+
720+ let amt_msat = 60_000 ;
721+ let expiry_secs = 60 * 60 ;
722+ let ( payment_hash, payment_secret) = nodes[ 1 ] . node . create_inbound_payment ( Some ( amt_msat) , expiry_secs) . unwrap ( ) ;
723+
724+ let payee = Payee :: from_node_id ( nodes[ 1 ] . node . get_our_node_id ( ) )
725+ . with_features ( InvoiceFeatures :: known ( ) ) ;
726+ let scorer = test_utils:: TestScorer :: with_fixed_penalty ( 0 ) ;
727+ let route = get_route (
728+ & nodes[ 0 ] . node . get_our_node_id ( ) , & payee, & nodes[ 0 ] . network_graph ,
729+ Some ( & nodes[ 0 ] . node . list_usable_channels ( ) . iter ( ) . collect :: < Vec < _ > > ( ) ) ,
730+ amt_msat, TEST_FINAL_CLTV , nodes[ 0 ] . logger , & scorer) . unwrap ( ) ;
731+ let _payment_id = nodes[ 0 ] . node . send_payment ( & route, payment_hash, & Some ( payment_secret) ) . unwrap ( ) ;
732+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
733+
734+ // Make sure to use `get_payment_preimage`
735+ let payment_preimage = nodes[ 1 ] . node . get_payment_preimage ( payment_hash, payment_secret) . unwrap ( ) ;
736+ let mut events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
737+ assert_eq ! ( events. len( ) , 1 ) ;
738+ pass_along_path ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , amt_msat, payment_hash, Some ( payment_secret) , events. pop ( ) . unwrap ( ) , true , Some ( payment_preimage) ) ;
739+ claim_payment_along_route ( & nodes[ 0 ] , & [ & [ & nodes[ 1 ] ] ] , false , payment_preimage) ;
740+ }
0 commit comments