@@ -182,6 +182,7 @@ mod test {
182
182
commitment_signed_dance, expect_payment_claimed, expect_pending_htlcs_forwardable,
183
183
get_htlc_update_msgs,
184
184
} ;
185
+ use lightning_types:: string:: UntrustedString ;
185
186
186
187
use std:: ops:: Deref ;
187
188
use std:: sync:: Mutex ;
@@ -396,7 +397,7 @@ mod test {
396
397
// When we get the proof back, override its contents to an offer from nodes[1]
397
398
let bs_offer = nodes[ 1 ] . node . create_offer_builder ( None ) . unwrap ( ) . build ( ) . unwrap ( ) ;
398
399
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 ( ) ) ;
400
401
401
402
let payment_id = PaymentId ( [ 42 ; 32 ] ) ;
402
403
let resolvers = vec ! [ Destination :: Node ( resolver_id) ] ;
@@ -405,7 +406,86 @@ mod test {
405
406
let params = RouteParametersConfig :: default ( ) ;
406
407
nodes[ 0 ]
407
408
. 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
+ )
409
489
. unwrap ( ) ;
410
490
411
491
let query = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( resolver_id) . unwrap ( ) ;
@@ -440,11 +520,18 @@ mod test {
440
520
let our_payment_preimage;
441
521
if let Event :: PaymentClaimable { purpose, amount_msat, .. } = & claimable_events[ 0 ] {
442
522
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
+ {
444
527
our_payment_preimage = payment_preimage. unwrap ( ) ;
445
528
nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
446
529
let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
447
530
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
+ ) ;
448
535
} else {
449
536
panic ! ( ) ;
450
537
}
0 commit comments