@@ -168,6 +168,7 @@ mod test {
168
168
BaseMessageHandler , ChannelMessageHandler , Init , OnionMessageHandler ,
169
169
} ;
170
170
use lightning:: ln:: peer_handler:: IgnoringMessageHandler ;
171
+ use lightning:: offers:: offer:: Offer ;
171
172
use lightning:: onion_message:: dns_resolution:: { HumanReadableName , OMNameResolver } ;
172
173
use lightning:: onion_message:: messenger:: {
173
174
AOnionMessenger , Destination , MessageRouter , OnionMessagePath , OnionMessenger ,
@@ -365,55 +366,25 @@ mod test {
365
366
assert ! ( resolution. 2 [ .."bitcoin:" . len( ) ] . eq_ignore_ascii_case( "bitcoin:" ) ) ;
366
367
}
367
368
368
- #[ tokio:: test]
369
- async fn end_to_end_test ( ) {
370
- let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
371
- let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
372
- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
373
- let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
374
-
375
- create_announced_chan_between_nodes ( & nodes, 0 , 1 ) ;
376
-
377
- // The DNSSEC validation will only work with the current time, so set the time on the
378
- // resolver.
379
- let now = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) . unwrap ( ) . as_secs ( ) ;
380
- let block = Block {
381
- header : create_dummy_header ( nodes[ 0 ] . best_block_hash ( ) , now as u32 ) ,
382
- txdata : Vec :: new ( ) ,
383
- } ;
384
- connect_block ( & nodes[ 0 ] , & block) ;
385
- connect_block ( & nodes[ 1 ] , & block) ;
386
-
387
- let payer_id = nodes[ 0 ] . node . get_our_node_id ( ) ;
388
- let payee_id = nodes[ 1 ] . node . get_our_node_id ( ) ;
389
-
390
- let ( resolver_messenger, resolver_id) = create_resolver ( ) ;
391
- let init_msg = get_om_init ( ) ;
392
- nodes[ 0 ] . onion_messenger . peer_connected ( resolver_id, & init_msg, true ) . unwrap ( ) ;
393
- resolver_messenger. get_om ( ) . peer_connected ( payer_id, & init_msg, false ) . unwrap ( ) ;
394
-
395
- let name =
HumanReadableName :: from_encoded ( "[email protected] " ) . unwrap ( ) ;
396
-
397
- // When we get the proof back, override its contents to an offer from nodes[1]
398
- let bs_offer = nodes[ 1 ] . node . create_offer_builder ( None ) . unwrap ( ) . build ( ) . unwrap ( ) ;
369
+ async fn pay_offer_flow < ' a , ' b , ' c > (
370
+ nodes : & [ Node < ' a , ' b , ' c > ] , resolver_messenger : & impl AOnionMessenger ,
371
+ resolver_id : PublicKey , payer_id : PublicKey , payee_id : PublicKey , offer : Offer ,
372
+ name : HumanReadableName , amt : u64 , payment_id : PaymentId , payer_note : Option < String > ,
373
+ retry : Retry , params : RouteParametersConfig , resolvers : Vec < Destination > ,
374
+ ) {
375
+ // Override contents to offer provided
399
376
let proof_override = & nodes[ 0 ] . node . testing_dnssec_proof_offer_resolution_override ;
400
- proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , bs_offer. clone ( ) ) ;
401
-
402
- let payment_id = PaymentId ( [ 42 ; 32 ] ) ;
403
- let resolvers = vec ! [ Destination :: Node ( resolver_id) ] ;
404
- let retry = Retry :: Attempts ( 0 ) ;
405
- let amt = 42_000 ;
406
- let params = RouteParametersConfig :: default ( ) ;
377
+ proof_override. lock ( ) . unwrap ( ) . insert ( name. clone ( ) , offer) ;
407
378
nodes[ 0 ]
408
379
. node
409
380
. pay_for_offer_from_human_readable_name (
410
- name. clone ( ) ,
381
+ name,
411
382
amt,
412
383
payment_id,
413
- None ,
384
+ payer_note . clone ( ) ,
414
385
retry,
415
386
params,
416
- resolvers. clone ( ) ,
387
+ resolvers,
417
388
)
418
389
. unwrap ( ) ;
419
390
@@ -457,7 +428,14 @@ mod test {
457
428
nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
458
429
let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
459
430
expect_payment_claimed ! ( nodes[ 1 ] , payment_hash, amt) ;
460
- assert_eq ! ( payment_context. invoice_request. payer_note_truncated, None ) ;
431
+ if let Some ( note) = payer_note {
432
+ assert_eq ! (
433
+ payment_context. invoice_request. payer_note_truncated,
434
+ Some ( UntrustedString ( note. into( ) ) )
435
+ ) ;
436
+ } else {
437
+ assert_eq ! ( payment_context. invoice_request. payer_note_truncated, None ) ;
438
+ }
461
439
} else {
462
440
panic ! ( ) ;
463
441
}
@@ -471,79 +449,76 @@ mod test {
471
449
commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
472
450
473
451
expect_payment_sent ( & nodes[ 0 ] , our_payment_preimage, None , true , true ) ;
452
+ }
474
453
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
- )
489
- . unwrap ( ) ;
454
+ #[ tokio:: test]
455
+ async fn end_to_end_test ( ) {
456
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
457
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
458
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
459
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
490
460
491
- let query = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( resolver_id) . unwrap ( ) ;
492
- resolver_messenger. get_om ( ) . handle_onion_message ( payer_id, & query) ;
461
+ create_announced_chan_between_nodes ( & nodes, 0 , 1 ) ;
493
462
494
- assert ! ( resolver_messenger. get_om( ) . next_onion_message_for_peer( payer_id) . is_none( ) ) ;
495
- let start = Instant :: now ( ) ;
496
- let response = loop {
497
- tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ;
498
- if let Some ( msg) = resolver_messenger. get_om ( ) . next_onion_message_for_peer ( payer_id) {
499
- break msg;
500
- }
501
- assert ! ( start. elapsed( ) < Duration :: from_secs( 10 ) , "Resolution took too long" ) ;
463
+ // The DNSSEC validation will only work with the current time, so set the time on the
464
+ // resolver.
465
+ let now = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) . unwrap ( ) . as_secs ( ) ;
466
+ let block = Block {
467
+ header : create_dummy_header ( nodes[ 0 ] . best_block_hash ( ) , now as u32 ) ,
468
+ txdata : Vec :: new ( ) ,
502
469
} ;
470
+ connect_block ( & nodes[ 0 ] , & block) ;
471
+ connect_block ( & nodes[ 1 ] , & block) ;
503
472
504
- nodes[ 0 ] . onion_messenger . handle_onion_message ( resolver_id, & response) ;
505
-
506
- let invreq = nodes[ 0 ] . onion_messenger . next_onion_message_for_peer ( payee_id) . unwrap ( ) ;
507
- nodes[ 1 ] . onion_messenger . handle_onion_message ( payer_id, & invreq) ;
473
+ let payer_id = nodes[ 0 ] . node . get_our_node_id ( ) ;
474
+ let payee_id = nodes[ 1 ] . node . get_our_node_id ( ) ;
508
475
509
- let inv = nodes[ 1 ] . onion_messenger . next_onion_message_for_peer ( payer_id) . unwrap ( ) ;
510
- nodes[ 0 ] . onion_messenger . handle_onion_message ( payee_id, & inv) ;
476
+ let ( resolver_messenger, resolver_id) = create_resolver ( ) ;
477
+ let init_msg = get_om_init ( ) ;
478
+ nodes[ 0 ] . onion_messenger . peer_connected ( resolver_id, & init_msg, true ) . unwrap ( ) ;
479
+ resolver_messenger. get_om ( ) . peer_connected ( payer_id, & init_msg, false ) . unwrap ( ) ;
511
480
512
- check_added_monitors ( & nodes[ 0 ] , 1 ) ;
513
- let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , payee_id) ;
514
- nodes[ 1 ] . node . handle_update_add_htlc ( payer_id, & updates. update_add_htlcs [ 0 ] ) ;
515
- commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , updates. commitment_signed, false ) ;
516
- expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
481
+ let name =
HumanReadableName :: from_encoded ( "[email protected] " ) . unwrap ( ) ;
517
482
518
- let claimable_events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
519
- assert_eq ! ( claimable_events. len( ) , 1 ) ;
520
- let our_payment_preimage;
521
- if let Event :: PaymentClaimable { purpose, amount_msat, .. } = & claimable_events[ 0 ] {
522
- assert_eq ! ( * amount_msat, amt) ;
523
- if let PaymentPurpose :: Bolt12OfferPayment {
524
- payment_preimage, payment_context, ..
525
- } = purpose
526
- {
527
- our_payment_preimage = payment_preimage. unwrap ( ) ;
528
- nodes[ 1 ] . node . claim_funds ( our_payment_preimage) ;
529
- let payment_hash: PaymentHash = our_payment_preimage. into ( ) ;
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
- ) ;
535
- } else {
536
- panic ! ( ) ;
537
- }
538
- } else {
539
- panic ! ( ) ;
540
- }
483
+ let bs_offer = nodes[ 1 ] . node . create_offer_builder ( None ) . unwrap ( ) . build ( ) . unwrap ( ) ;
484
+ let resolvers = vec ! [ Destination :: Node ( resolver_id) ] ;
485
+ let retry = Retry :: Attempts ( 0 ) ;
486
+ let amt = 42_000 ;
487
+ let params = RouteParametersConfig :: default ( ) ;
541
488
542
- check_added_monitors ( & nodes[ 1 ] , 1 ) ;
543
- let updates = get_htlc_update_msgs ! ( nodes[ 1 ] , payer_id) ;
544
- nodes[ 0 ] . node . handle_update_fulfill_htlc ( payee_id, & updates. update_fulfill_htlcs [ 0 ] ) ;
545
- commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates. commitment_signed, false ) ;
489
+ pay_offer_flow (
490
+ & nodes,
491
+ & resolver_messenger,
492
+ resolver_id,
493
+ payer_id,
494
+ payee_id,
495
+ bs_offer. clone ( ) ,
496
+ name. clone ( ) ,
497
+ amt,
498
+ PaymentId ( [ 42 ; 32 ] ) ,
499
+ None ,
500
+ retry,
501
+ params,
502
+ resolvers. clone ( ) ,
503
+ )
504
+ . await ;
546
505
547
- expect_payment_sent ( & nodes[ 0 ] , our_payment_preimage, None , true , true ) ;
506
+ // Pay offer with payer_note
507
+ pay_offer_flow (
508
+ & nodes,
509
+ & resolver_messenger,
510
+ resolver_id,
511
+ payer_id,
512
+ payee_id,
513
+ bs_offer,
514
+ name,
515
+ amt,
516
+ PaymentId ( [ 21 ; 32 ] ) ,
517
+ Some ( "foo" . into ( ) ) ,
518
+ retry,
519
+ params,
520
+ resolvers,
521
+ )
522
+ . await ;
548
523
}
549
524
}
0 commit comments