Skip to content

Commit 46bc7f6

Browse files
committed
f cleanup test - make it a loop and remove old XXX
1 parent 1fc26c3 commit 46bc7f6

1 file changed

Lines changed: 48 additions & 67 deletions

File tree

lightning/src/ln/offers_tests.rs

Lines changed: 48 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -2581,7 +2581,7 @@ fn no_double_pay_with_stale_channelmanager() {
25812581

25822582
#[test]
25832583
fn creates_and_pays_for_phantom_offer() {
2584-
// XXX: share expanded key
2584+
// Tests that we can pay a "phantom offer" to any participating node.
25852585
let mut chanmon_cfgs = create_chanmon_cfgs(1);
25862586
chanmon_cfgs.append(&mut create_phantom_chanmon_cfgs(2));
25872587
let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
@@ -2619,70 +2619,51 @@ fn creates_and_pays_for_phantom_offer() {
26192619
assert_eq!(b_path_count, 1);
26202620
assert_eq!(c_path_count, 1);
26212621

2622-
// First, pay via node B
2623-
let payment_id = PaymentId([1; 32]);
2624-
nodes[0].node.pay_for_offer(&offer, None, payment_id, Default::default()).unwrap();
2625-
expect_recent_payment!(nodes[0], RecentPaymentDetails::AwaitingInvoice, payment_id);
2626-
2627-
let onion_message = nodes[0].onion_messenger.next_onion_message_for_peer(node_b_id).unwrap();
2628-
let _discard = nodes[0].onion_messenger.next_onion_message_for_peer(node_c_id).unwrap();
2629-
nodes[1].onion_messenger.handle_onion_message(node_a_id, &onion_message);
2630-
2631-
let (invoice_request, _) = extract_invoice_request(&nodes[1], &onion_message);
2632-
let payment_context = PaymentContext::Bolt12Offer(Bolt12OfferContext {
2633-
offer_id: offer.id(),
2634-
invoice_request: InvoiceRequestFields {
2635-
payer_signing_pubkey: invoice_request.payer_signing_pubkey(),
2636-
quantity: None,
2637-
payer_note_truncated: None,
2638-
human_readable_name: None,
2639-
},
2640-
});
2641-
2642-
let onion_message = nodes[1].onion_messenger.next_onion_message_for_peer(node_a_id).unwrap();
2643-
nodes[0].onion_messenger.handle_onion_message(node_b_id, &onion_message);
2644-
2645-
let (invoice, _) = extract_invoice(&nodes[0], &onion_message);
2646-
assert_eq!(invoice.amount_msats(), 10_000_000);
2647-
2648-
route_bolt12_payment(&nodes[0], &[&nodes[1]], &invoice);
2649-
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Pending, payment_id);
2650-
2651-
claim_bolt12_payment(&nodes[0], &[&nodes[1]], payment_context, &invoice);
2652-
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Fulfilled, payment_id);
2653-
2654-
// Then pay again via node C
2655-
assert!(nodes[0].onion_messenger.next_onion_message_for_peer(node_b_id).is_none());
2656-
assert!(nodes[0].onion_messenger.next_onion_message_for_peer(node_c_id).is_none());
2657-
2658-
let payment_id = PaymentId([2; 32]);
2659-
nodes[0].node.pay_for_offer(&offer, None, payment_id, Default::default()).unwrap();
2660-
expect_recent_payment!(nodes[0], RecentPaymentDetails::AwaitingInvoice, payment_id);
2661-
2662-
let onion_message = nodes[0].onion_messenger.next_onion_message_for_peer(node_c_id).unwrap();
2663-
let _discard = nodes[0].onion_messenger.next_onion_message_for_peer(node_b_id).unwrap();
2664-
nodes[2].onion_messenger.handle_onion_message(node_a_id, &onion_message);
2665-
2666-
let (invoice_request, _) = extract_invoice_request(&nodes[2], &onion_message);
2667-
let payment_context = PaymentContext::Bolt12Offer(Bolt12OfferContext {
2668-
offer_id: offer.id(),
2669-
invoice_request: InvoiceRequestFields {
2670-
payer_signing_pubkey: invoice_request.payer_signing_pubkey(),
2671-
quantity: None,
2672-
payer_note_truncated: None,
2673-
human_readable_name: None,
2674-
},
2675-
});
2676-
2677-
let onion_message = nodes[2].onion_messenger.next_onion_message_for_peer(node_a_id).unwrap();
2678-
nodes[0].onion_messenger.handle_onion_message(node_c_id, &onion_message);
2679-
2680-
let (invoice, _) = extract_invoice(&nodes[0], &onion_message);
2681-
assert_eq!(invoice.amount_msats(), 10_000_000);
2682-
2683-
route_bolt12_payment(&nodes[0], &[&nodes[2]], &invoice);
2684-
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Pending, payment_id);
2685-
2686-
claim_bolt12_payment(&nodes[0], &[&nodes[2]], payment_context, &invoice);
2687-
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Fulfilled, payment_id);
2622+
// Pay twice, first via node B (the node that actually built the offer) then pay via node C
2623+
// (which won't have seen the offer until it receives the invoice_request).
2624+
for (payment_id, recipient) in [([1; 32], &nodes[1]), ([2; 32], &nodes[2])] {
2625+
let payment_id = PaymentId(payment_id);
2626+
nodes[0].node.pay_for_offer(&offer, None, payment_id, Default::default()).unwrap();
2627+
expect_recent_payment!(nodes[0], RecentPaymentDetails::AwaitingInvoice, payment_id);
2628+
2629+
let recipient_id = recipient.node.get_our_node_id();
2630+
let non_recipient_id = if node_b_id == recipient_id {
2631+
node_c_id
2632+
} else {
2633+
node_b_id
2634+
};
2635+
2636+
let onion_message =
2637+
nodes[0].onion_messenger.next_onion_message_for_peer(recipient_id).unwrap();
2638+
let _discard =
2639+
nodes[0].onion_messenger.next_onion_message_for_peer(non_recipient_id).unwrap();
2640+
recipient.onion_messenger.handle_onion_message(node_a_id, &onion_message);
2641+
2642+
let (invoice_request, _) = extract_invoice_request(&recipient, &onion_message);
2643+
let payment_context = PaymentContext::Bolt12Offer(Bolt12OfferContext {
2644+
offer_id: offer.id(),
2645+
invoice_request: InvoiceRequestFields {
2646+
payer_signing_pubkey: invoice_request.payer_signing_pubkey(),
2647+
quantity: None,
2648+
payer_note_truncated: None,
2649+
human_readable_name: None,
2650+
},
2651+
});
2652+
2653+
let onion_message =
2654+
recipient.onion_messenger.next_onion_message_for_peer(node_a_id).unwrap();
2655+
nodes[0].onion_messenger.handle_onion_message(recipient_id, &onion_message);
2656+
2657+
let (invoice, _) = extract_invoice(&nodes[0], &onion_message);
2658+
assert_eq!(invoice.amount_msats(), 10_000_000);
2659+
2660+
route_bolt12_payment(&nodes[0], &[recipient], &invoice);
2661+
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Pending, payment_id);
2662+
2663+
claim_bolt12_payment(&nodes[0], &[recipient], payment_context, &invoice);
2664+
expect_recent_payment!(&nodes[0], RecentPaymentDetails::Fulfilled, payment_id);
2665+
2666+
assert!(nodes[0].onion_messenger.next_onion_message_for_peer(node_b_id).is_none());
2667+
assert!(nodes[0].onion_messenger.next_onion_message_for_peer(node_c_id).is_none());
2668+
}
26882669
}

0 commit comments

Comments
 (0)