@@ -147,32 +147,21 @@ mod test {
147147 use super :: * ;
148148
149149 use bitcoin:: secp256k1:: { self , PublicKey , Secp256k1 } ;
150- use bitcoin:: Block ;
151150
152151 use lightning:: blinded_path:: message:: {
153152 BlindedMessagePath , MessageContext , MessageForwardNode ,
154153 } ;
155154 use lightning:: blinded_path:: NodeIdLookUp ;
156- use lightning:: events:: { Event , PaymentPurpose } ;
157- use lightning:: ln:: channelmanager:: { OptionalOfferPaymentParams , PaymentId } ;
158- use lightning:: ln:: functional_test_utils:: * ;
159- use lightning:: ln:: msgs:: {
160- BaseMessageHandler , ChannelMessageHandler , Init , OnionMessageHandler ,
161- } ;
162- use lightning:: offers:: offer:: Offer ;
155+ use lightning:: ln:: channelmanager:: PaymentId ;
156+ use lightning:: ln:: msgs:: { BaseMessageHandler , Init , OnionMessageHandler } ;
163157 use lightning:: onion_message:: dns_resolution:: { HumanReadableName , OMNameResolver } ;
164158 use lightning:: onion_message:: messenger:: {
165159 AOnionMessenger , Destination , MessageRouter , OnionMessagePath , OnionMessenger ,
166160 } ;
167- use lightning:: routing:: router:: DEFAULT_PAYMENT_DUMMY_HOPS ;
168161 use lightning:: sign:: { KeysManager , NodeSigner , ReceiveAuthKey , Recipient } ;
169162 use lightning:: types:: features:: InitFeatures ;
170- use lightning:: types:: payment:: PaymentHash ;
171163 use lightning:: util:: logger:: Logger ;
172164
173- use lightning:: expect_payment_claimed;
174- use lightning_types:: string:: UntrustedString ;
175-
176165 use std:: sync:: Mutex ;
177166 use std:: time:: { Duration , Instant , SystemTime } ;
178167
@@ -348,153 +337,4 @@ mod test {
348337 assert_eq ! ( resolution. 1 , payment_id) ;
349338 assert ! ( resolution. 2 [ .."bitcoin:" . len( ) ] . eq_ignore_ascii_case( "bitcoin:" ) ) ;
350339 }
351-
352- async fn pay_offer_flow < ' a , ' b , ' c > (
353- nodes : & [ Node < ' a , ' b , ' c > ] , resolver_messenger : & impl AOnionMessenger ,
354- resolver_id : PublicKey , payer_id : PublicKey , payee_id : PublicKey , offer : Offer ,
355- name : HumanReadableName , payment_id : PaymentId , payer_note : Option < String > ,
356- resolvers : Vec < Destination > ,
357- ) {
358- // Override contents to offer provided
359- let proof_override = & nodes[ 0 ] . node . testing_dnssec_proof_offer_resolution_override ;
360- proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , offer) ;
361- let amt = 42_000 ;
362- let mut opts = OptionalOfferPaymentParams :: default ( ) ;
363- opts. payer_note = payer_note. clone ( ) ;
364- #[ allow( deprecated) ]
365- nodes[ 0 ]
366- . node
367- . pay_for_offer_from_human_readable_name ( name, amt, payment_id, opts, resolvers)
368- . unwrap ( ) ;
369-
370- let query = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( resolver_id) . unwrap ( ) ;
371- resolver_messenger. get_om ( ) . handle_onion_message ( payer_id, & query) ;
372-
373- assert ! ( resolver_messenger. get_om( ) . next_onion_message_for_peer( payer_id) . is_none( ) ) ;
374- let start = Instant :: now ( ) ;
375- let response = loop {
376- tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
377- if let Some ( msg) = resolver_messenger. get_om ( ) . next_onion_message_for_peer ( payer_id) {
378- break msg;
379- }
380- assert ! ( start. elapsed( ) < Duration :: from_secs( 10 ) , "Resolution took too long" ) ;
381- } ;
382-
383- nodes[ 0 ] . onion_messenger . handle_onion_message ( resolver_id, & response) ;
384-
385- let invreq = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( payee_id) . unwrap ( ) ;
386- nodes[ 1 ] . onion_messenger . handle_onion_message ( payer_id, & invreq) ;
387-
388- let inv = nodes[ 1 ] . onion_messenger . next_onion_message_for_peer ( payer_id) . unwrap ( ) ;
389- nodes[ 0 ] . onion_messenger . handle_onion_message ( payee_id, & inv) ;
390-
391- check_added_monitors ( & nodes[ 0 ] , 1 ) ;
392- let updates = get_htlc_update_msgs ( & nodes[ 0 ] , & payee_id) ;
393- nodes[ 1 ] . node . handle_update_add_htlc ( payer_id, & updates. update_add_htlcs [ 0 ] ) ;
394- do_commitment_signed_dance ( & nodes[ 1 ] , & nodes[ 0 ] , & updates. commitment_signed , false , false ) ;
395-
396- for _ in 0 ..DEFAULT_PAYMENT_DUMMY_HOPS {
397- assert ! ( nodes[ 1 ] . node. needs_pending_htlc_processing( ) ) ;
398- nodes[ 1 ] . node . process_pending_htlc_forwards ( ) ;
399- }
400-
401- expect_and_process_pending_htlcs ( & nodes[ 1 ] , false ) ;
402-
403- let claimable_events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
404- assert_eq ! ( claimable_events. len( ) , 1 ) ;
405- let our_payment_preimage;
406- if let Event :: PaymentClaimable { purpose, amount_msat, .. } = & claimable_events[ 0 ] {
407- assert_eq ! ( * amount_msat, amt) ;
408- if let PaymentPurpose :: Bolt12OfferPayment {
409- payment_preimage, payment_context, ..
410- } = purpose
411- {
412- our_payment_preimage = payment_preimage. unwrap ( ) ;
413- nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
414- let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
415- expect_payment_claimed ! ( nodes[ 1 ] , payment_hash, amt) ;
416- if let Some ( note) = payer_note {
417- assert_eq ! (
418- payment_context. invoice_request. payer_note_truncated,
419- Some ( UntrustedString ( note. into( ) ) )
420- ) ;
421- } else {
422- assert_eq ! ( payment_context. invoice_request. payer_note_truncated, None ) ;
423- }
424- } else {
425- panic ! ( ) ;
426- }
427- } else {
428- panic ! ( ) ;
429- }
430-
431- check_added_monitors ( & nodes[ 1 ] , 1 ) ;
432- let mut updates = get_htlc_update_msgs ( & nodes[ 1 ] , & payer_id) ;
433- nodes[ 0 ] . node . handle_update_fulfill_htlc ( payee_id, updates. update_fulfill_htlcs . remove ( 0 ) ) ;
434- do_commitment_signed_dance ( & nodes[ 0 ] , & nodes[ 1 ] , & updates. commitment_signed , false , false ) ;
435-
436- expect_payment_sent ( & nodes[ 0 ] , our_payment_preimage, None , true , true ) ;
437- }
438-
439- #[ tokio:: test]
440- async fn end_to_end_test ( ) {
441- let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
442- let node_cfgs = create_node_cfgs_with_node_id_message_router ( 2 , & chanmon_cfgs) ;
443- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
444- let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
445-
446- create_announced_chan_between_nodes ( & nodes, 0 , 1 ) ;
447-
448- // The DNSSEC validation will only work with the current time, so set the time on the
449- // resolver.
450- let now = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) . unwrap ( ) . as_secs ( ) ;
451- let block = Block {
452- header : create_dummy_header ( nodes[ 0 ] . best_block_hash ( ) , now as u32 ) ,
453- txdata : Vec :: new ( ) ,
454- } ;
455- connect_block ( & nodes[ 0 ] , & block) ;
456- connect_block ( & nodes[ 1 ] , & block) ;
457-
458- let payer_id = nodes[ 0 ] . node . get_our_node_id ( ) ;
459- let payee_id = nodes[ 1 ] . node . get_our_node_id ( ) ;
460-
461- let ( resolver_messenger, resolver_id) = create_resolver ( ) ;
462- let init_msg = get_om_init ( ) ;
463- nodes[ 0 ] . onion_messenger . peer_connected ( resolver_id, & init_msg, true ) . unwrap ( ) ;
464- resolver_messenger. get_om ( ) . peer_connected ( payer_id, & init_msg, false ) . unwrap ( ) ;
465-
466- let name = HumanReadableName :: from_encoded ( "matt@mattcorallo.com" ) . unwrap ( ) ;
467-
468- let bs_offer = nodes[ 1 ] . node . create_offer_builder ( ) . unwrap ( ) . build ( ) . unwrap ( ) ;
469- let resolvers = vec ! [ Destination :: Node ( resolver_id) ] ;
470-
471- pay_offer_flow (
472- & nodes,
473- & resolver_messenger,
474- resolver_id,
475- payer_id,
476- payee_id,
477- bs_offer. clone ( ) ,
478- name. clone ( ) ,
479- PaymentId ( [ 42 ; 32 ] ) ,
480- None ,
481- resolvers. clone ( ) ,
482- )
483- . await ;
484-
485- // Pay offer with payer_note
486- pay_offer_flow (
487- & nodes,
488- & resolver_messenger,
489- resolver_id,
490- payer_id,
491- payee_id,
492- bs_offer,
493- name,
494- PaymentId ( [ 21 ; 32 ] ) ,
495- Some ( "foo" . into ( ) ) ,
496- resolvers,
497- )
498- . await ;
499- }
500340}
0 commit comments