@@ -182,6 +182,7 @@ mod test {
182182 commitment_signed_dance, expect_payment_claimed, expect_pending_htlcs_forwardable,
183183 get_htlc_update_msgs,
184184 } ;
185+ use lightning_types:: string:: UntrustedString ;
185186
186187 use std:: ops:: Deref ;
187188 use std:: sync:: Mutex ;
@@ -396,7 +397,7 @@ mod test {
396397 // When we get the proof back, override its contents to an offer from nodes[1]
397398 let bs_offer = nodes[ 1 ] . node . create_offer_builder ( None ) . unwrap ( ) . build ( ) . unwrap ( ) ;
398399 let proof_override = & nodes[ 0 ] . node . testing_dnssec_proof_offer_resolution_override ;
399- proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , bs_offer) ;
400+ proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , bs_offer. clone ( ) ) ;
400401
401402 let payment_id = PaymentId ( [ 42 ; 32 ] ) ;
402403 let resolvers = vec ! [ Destination :: Node ( resolver_id) ] ;
@@ -405,7 +406,86 @@ mod test {
405406 let params = RouteParametersConfig :: default ( ) ;
406407 nodes[ 0 ]
407408 . node
408- . pay_for_offer_from_human_readable_name ( name, amt, payment_id, retry, params, resolvers)
409+ . pay_for_offer_from_human_readable_name (
410+ name. clone ( ) ,
411+ amt,
412+ payment_id,
413+ None ,
414+ retry,
415+ params,
416+ resolvers. clone ( ) ,
417+ )
418+ . unwrap ( ) ;
419+
420+ let query = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( resolver_id) . unwrap ( ) ;
421+ resolver_messenger. get_om ( ) . handle_onion_message ( payer_id, & query) ;
422+
423+ assert ! ( resolver_messenger. get_om( ) . next_onion_message_for_peer( payer_id) . is_none( ) ) ;
424+ let start = Instant :: now ( ) ;
425+ let response = loop {
426+ tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
427+ if let Some ( msg) = resolver_messenger. get_om ( ) . next_onion_message_for_peer ( payer_id) {
428+ break msg;
429+ }
430+ assert ! ( start. elapsed( ) < Duration :: from_secs( 10 ) , "Resolution took too long" ) ;
431+ } ;
432+
433+ nodes[ 0 ] . onion_messenger . handle_onion_message ( resolver_id, & response) ;
434+
435+ let invreq = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( payee_id) . unwrap ( ) ;
436+ nodes[ 1 ] . onion_messenger . handle_onion_message ( payer_id, & invreq) ;
437+
438+ let inv = nodes[ 1 ] . onion_messenger . next_onion_message_for_peer ( payer_id) . unwrap ( ) ;
439+ nodes[ 0 ] . onion_messenger . handle_onion_message ( payee_id, & inv) ;
440+
441+ check_added_monitors ( & nodes[ 0 ] , 1 ) ;
442+ let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , payee_id) ;
443+ nodes[ 1 ] . node . handle_update_add_htlc ( payer_id, & updates. update_add_htlcs [ 0 ] ) ;
444+ commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , updates. commitment_signed, false ) ;
445+ expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
446+
447+ let claimable_events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
448+ assert_eq ! ( claimable_events. len( ) , 1 ) ;
449+ let our_payment_preimage;
450+ if let Event :: PaymentClaimable { purpose, amount_msat, .. } = & claimable_events[ 0 ] {
451+ assert_eq ! ( * amount_msat, amt) ;
452+ if let PaymentPurpose :: Bolt12OfferPayment {
453+ payment_preimage, payment_context, ..
454+ } = purpose
455+ {
456+ our_payment_preimage = payment_preimage. unwrap ( ) ;
457+ nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
458+ let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
459+ expect_payment_claimed ! ( nodes[ 1 ] , payment_hash, amt) ;
460+ assert_eq ! ( payment_context. invoice_request. payer_note_truncated, None ) ;
461+ } else {
462+ panic ! ( ) ;
463+ }
464+ } else {
465+ panic ! ( ) ;
466+ }
467+
468+ check_added_monitors ( & nodes[ 1 ] , 1 ) ;
469+ let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , payer_id) ;
470+ nodes[ 0 ] . node . handle_update_fulfill_htlc ( payee_id, & updates. update_fulfill_htlcs [ 0 ] ) ;
471+ commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
472+
473+ expect_payment_sent ( & nodes[ 0 ] , our_payment_preimage, None , true , true ) ;
474+
475+ // Pay offer with payer_note
476+ let proof_override = & nodes[ 0 ] . node . testing_dnssec_proof_offer_resolution_override ;
477+ proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , bs_offer) ;
478+ nodes[ 0 ]
479+ . node
480+ . pay_for_offer_from_human_readable_name (
481+ name,
482+ amt,
483+ PaymentId ( [ 21 ; 32 ] ) ,
484+ Some ( "foo" . into ( ) ) ,
485+ retry,
486+ params,
487+ resolvers,
488+ )
409489 . unwrap ( ) ;
410490
411491 let query = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( resolver_id) . unwrap ( ) ;
@@ -440,11 +520,18 @@ mod test {
440520 let our_payment_preimage;
441521 if let Event :: PaymentClaimable { purpose, amount_msat, .. } = & claimable_events[ 0 ] {
442522 assert_eq ! ( * amount_msat, amt) ;
443- if let PaymentPurpose :: Bolt12OfferPayment { payment_preimage, .. } = purpose {
523+ if let PaymentPurpose :: Bolt12OfferPayment {
524+ payment_preimage, payment_context, ..
525+ } = purpose
526+ {
444527 our_payment_preimage = payment_preimage. unwrap ( ) ;
445528 nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
446529 let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
447530 expect_payment_claimed ! ( nodes[ 1 ] , payment_hash, amt) ;
531+ assert_eq ! (
532+ payment_context. invoice_request. payer_note_truncated,
533+ Some ( UntrustedString ( "foo" . into( ) ) )
534+ ) ;
448535 } else {
449536 panic ! ( ) ;
450537 }
0 commit comments