@@ -15,9 +15,10 @@ use chain::{ChannelMonitorUpdateErr, Confirm, Listen, Watch};
15
15
use chain:: channelmonitor:: { ANTI_REORG_DELAY , ChannelMonitor , LATENCY_GRACE_PERIOD_BLOCKS } ;
16
16
use chain:: transaction:: OutPoint ;
17
17
use ln:: channelmanager:: { BREAKDOWN_TIMEOUT , ChannelManager , ChannelManagerReadArgs , PaymentId , PaymentSendFailure } ;
18
- use ln:: features:: InitFeatures ;
18
+ use ln:: features:: { InitFeatures , InvoiceFeatures } ;
19
19
use ln:: msgs;
20
20
use ln:: msgs:: ChannelMessageHandler ;
21
+ use routing:: router:: { Payee , get_route} ;
21
22
use util:: events:: { ClosureReason , Event , MessageSendEvent , MessageSendEventsProvider } ;
22
23
use util:: test_utils;
23
24
use util:: errors:: APIError ;
@@ -706,3 +707,34 @@ fn test_fulfill_restart_failure() {
706
707
// it had already considered the payment fulfilled, and now they just got free money.
707
708
assert ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
708
709
}
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