Skip to content

Commit

Permalink
Introduce test for retry_tick_occurred
Browse files Browse the repository at this point in the history
  • Loading branch information
shaavan committed Apr 29, 2024
1 parent 7c4dd75 commit 9cc86bc
Showing 1 changed file with 28 additions and 6 deletions.
34 changes: 28 additions & 6 deletions lightning/src/ln/offers_tests.rs
Expand Up @@ -526,11 +526,7 @@ fn creates_and_pays_for_refund_using_two_hop_blinded_path() {
expect_recent_payment!(david, RecentPaymentDetails::Fulfilled, payment_id);
}

/// Checks that an offer can be paid through a one-hop blinded path and that ephemeral pubkeys are
/// used rather than exposing a node's pubkey. However, the node's pubkey is still used as the
/// introduction node of the blinded path.
#[test]
fn creates_and_pays_for_offer_using_one_hop_blinded_path() {
fn do_creates_and_pays_for_offer_using_one_hop_blinded_path(with_retry_tick_occurred: bool) {
let chanmon_cfgs = create_chanmon_cfgs(2);
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
Expand All @@ -557,7 +553,14 @@ fn creates_and_pays_for_offer_using_one_hop_blinded_path() {
bob.node.pay_for_offer(&offer, None, None, None, payment_id, Retry::Attempts(0), None).unwrap();
expect_recent_payment!(bob, RecentPaymentDetails::AwaitingInvoice, payment_id);

let onion_message = bob.onion_messenger.next_onion_message_for_peer(alice_id).unwrap();
let mut onion_message = bob.onion_messenger.next_onion_message_for_peer(alice_id).unwrap();

// Simulating a scenario where the original onion_message is lost before reaching Alice.
// However, the retry_timer_tick mechanism ensures regeneration of the onion_message.
if with_retry_tick_occurred {
bob.node.retry_tick_occurred();
onion_message = bob.onion_messenger.next_onion_message_for_peer(alice_id).unwrap();
}
alice.onion_messenger.handle_onion_message(&bob_id, &onion_message);

let (invoice_request, reply_path) = extract_invoice_request(alice, &onion_message);
Expand All @@ -578,6 +581,15 @@ fn creates_and_pays_for_offer_using_one_hop_blinded_path() {
let onion_message = alice.onion_messenger.next_onion_message_for_peer(bob_id).unwrap();
bob.onion_messenger.handle_onion_message(&alice_id, &onion_message);

if with_retry_tick_occurred {
// We expect no more OffersMessage to be enqueued by this point, after the retry tick has occurred.
bob.node.retry_tick_occurred();
let result = bob.onion_messenger.next_onion_message_for_peer(alice_id);
match result {
Some(_) => panic!("Unexpected message enqueued after retry tick."),
None => assert!(true),
}
}
let invoice = extract_invoice(bob, &onion_message);
assert_eq!(invoice.amount_msats(), 10_000_000);
assert_ne!(invoice.signing_pubkey(), alice_id);
Expand All @@ -593,6 +605,16 @@ fn creates_and_pays_for_offer_using_one_hop_blinded_path() {
expect_recent_payment!(bob, RecentPaymentDetails::Fulfilled, payment_id);
}


/// Checks that an offer can be paid through a one-hop blinded path and that ephemeral pubkeys are
/// used rather than exposing a node's pubkey. However, the node's pubkey is still used as the
/// introduction node of the blinded path.
#[test]
fn creates_and_pays_for_offer_using_one_hop_blinded_path() {
do_creates_and_pays_for_offer_using_one_hop_blinded_path(false);
do_creates_and_pays_for_offer_using_one_hop_blinded_path(true);
}

/// Checks that a refund can be paid through a one-hop blinded path and that ephemeral pubkeys are
/// used rather than exposing a node's pubkey. However, the node's pubkey is still used as the
/// introduction node of the blinded path.
Expand Down

0 comments on commit 9cc86bc

Please sign in to comment.