Skip to content

Commit 4c3a365

Browse files
authored
Merge pull request #3830 from elnosh/dry-dns-test
DRY up `end_to_end` test in dns-resolver
2 parents e1ccaaa + b7daa16 commit 4c3a365

File tree

1 file changed

+81
-106
lines changed
  • lightning-dns-resolver/src

1 file changed

+81
-106
lines changed

lightning-dns-resolver/src/lib.rs

Lines changed: 81 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ mod test {
168168
BaseMessageHandler, ChannelMessageHandler, Init, OnionMessageHandler,
169169
};
170170
use lightning::ln::peer_handler::IgnoringMessageHandler;
171+
use lightning::offers::offer::Offer;
171172
use lightning::onion_message::dns_resolution::{HumanReadableName, OMNameResolver};
172173
use lightning::onion_message::messenger::{
173174
AOnionMessenger, Destination, MessageRouter, OnionMessagePath, OnionMessenger,
@@ -365,55 +366,25 @@ mod test {
365366
assert!(resolution.2[.."bitcoin:".len()].eq_ignore_ascii_case("bitcoin:"));
366367
}
367368

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
399376
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);
407378
nodes[0]
408379
.node
409380
.pay_for_offer_from_human_readable_name(
410-
name.clone(),
381+
name,
411382
amt,
412383
payment_id,
413-
None,
384+
payer_note.clone(),
414385
retry,
415386
params,
416-
resolvers.clone(),
387+
resolvers,
417388
)
418389
.unwrap();
419390

@@ -457,7 +428,14 @@ mod test {
457428
nodes[1].node.claim_funds(our_payment_preimage);
458429
let payment_hash: PaymentHash = our_payment_preimage.into();
459430
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+
}
461439
} else {
462440
panic!();
463441
}
@@ -471,79 +449,76 @@ mod test {
471449
commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false);
472450

473451
expect_payment_sent(&nodes[0], our_payment_preimage, None, true, true);
452+
}
474453

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);
490460

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);
493462

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(),
502469
};
470+
connect_block(&nodes[0], &block);
471+
connect_block(&nodes[1], &block);
503472

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();
508475

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();
511480

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();
517482

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();
541488

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;
546505

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;
548523
}
549524
}

0 commit comments

Comments
 (0)