Skip to content

Commit 203be70

Browse files
Struct-ify test util pass_along_path args.
Lays groundwork to make pass_along_path easier to adapt without changing a million callsites.
1 parent 2c22055 commit 203be70

File tree

3 files changed

+78
-8
lines changed

3 files changed

+78
-8
lines changed

lightning/src/ln/functional_test_utils.rs

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,7 +2472,60 @@ fn fail_payment_along_path<'a, 'b, 'c>(expected_path: &[&Node<'a, 'b, 'c>]) {
24722472
}
24732473
}
24742474

2475-
pub fn do_pass_along_path<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_path: &[&Node<'a, 'b, 'c>], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: Option<PaymentSecret>, ev: MessageSendEvent, payment_claimable_expected: bool, clear_recipient_events: bool, expected_preimage: Option<PaymentPreimage>, is_probe: bool) -> Option<Event> {
2475+
pub struct PassAlongPathArgs<'a, 'b, 'c, 'd> {
2476+
pub origin_node: &'a Node<'b, 'c, 'd>,
2477+
pub expected_path: &'a [&'a Node<'b, 'c, 'd>],
2478+
pub recv_value: u64,
2479+
pub payment_hash: PaymentHash,
2480+
pub payment_secret: Option<PaymentSecret>,
2481+
pub event: MessageSendEvent,
2482+
pub payment_claimable_expected: bool,
2483+
pub clear_recipient_events: bool,
2484+
pub expected_preimage: Option<PaymentPreimage>,
2485+
pub is_probe: bool,
2486+
}
2487+
2488+
impl<'a, 'b, 'c, 'd> PassAlongPathArgs<'a, 'b, 'c, 'd> {
2489+
pub fn new(
2490+
origin_node: &'a Node<'b, 'c, 'd>, expected_path: &'a [&'a Node<'b, 'c, 'd>], recv_value: u64,
2491+
payment_hash: PaymentHash, event: MessageSendEvent,
2492+
) -> Self {
2493+
Self {
2494+
origin_node, expected_path, recv_value, payment_hash, payment_secret: None, event,
2495+
payment_claimable_expected: true, clear_recipient_events: true, expected_preimage: None,
2496+
is_probe: false,
2497+
}
2498+
}
2499+
pub fn without_clearing_recipient_events(mut self) -> Self {
2500+
self.clear_recipient_events = false;
2501+
self
2502+
}
2503+
pub fn is_probe(mut self) -> Self {
2504+
self.payment_claimable_expected = false;
2505+
self.is_probe = true;
2506+
self
2507+
}
2508+
pub fn without_claimable_event(mut self) -> Self {
2509+
self.payment_claimable_expected = false;
2510+
self
2511+
}
2512+
pub fn with_payment_secret(mut self, payment_secret: PaymentSecret) -> Self {
2513+
self.payment_secret = Some(payment_secret);
2514+
self
2515+
}
2516+
pub fn with_payment_preimage(mut self, payment_preimage: PaymentPreimage) -> Self {
2517+
self.expected_preimage = Some(payment_preimage);
2518+
self
2519+
}
2520+
}
2521+
2522+
pub fn do_pass_along_path<'a, 'b, 'c>(args: PassAlongPathArgs) -> Option<Event> {
2523+
let PassAlongPathArgs {
2524+
origin_node, expected_path, recv_value, payment_hash: our_payment_hash,
2525+
payment_secret: our_payment_secret, event: ev, payment_claimable_expected,
2526+
clear_recipient_events, expected_preimage, is_probe
2527+
} = args;
2528+
24762529
let mut payment_event = SendEvent::from_event(ev);
24772530
let mut prev_node = origin_node;
24782531
let mut event = None;
@@ -2539,7 +2592,17 @@ pub fn do_pass_along_path<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_p
25392592
}
25402593

25412594
pub fn pass_along_path<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_path: &[&Node<'a, 'b, 'c>], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: Option<PaymentSecret>, ev: MessageSendEvent, payment_claimable_expected: bool, expected_preimage: Option<PaymentPreimage>) -> Option<Event> {
2542-
do_pass_along_path(origin_node, expected_path, recv_value, our_payment_hash, our_payment_secret, ev, payment_claimable_expected, true, expected_preimage, false)
2595+
let mut args = PassAlongPathArgs::new(origin_node, expected_path, recv_value, our_payment_hash, ev);
2596+
if !payment_claimable_expected {
2597+
args = args.without_claimable_event();
2598+
}
2599+
if let Some(payment_secret) = our_payment_secret {
2600+
args = args.with_payment_secret(payment_secret);
2601+
}
2602+
if let Some(payment_preimage) = expected_preimage {
2603+
args = args.with_payment_preimage(payment_preimage);
2604+
}
2605+
do_pass_along_path(args)
25432606
}
25442607

25452608
pub fn send_probe_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&[&Node<'a, 'b, 'c>]]) {
@@ -2551,7 +2614,10 @@ pub fn send_probe_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expect
25512614
for path in expected_route.iter() {
25522615
let ev = remove_first_msg_event_to_node(&path[0].node.get_our_node_id(), &mut events);
25532616

2554-
do_pass_along_path(origin_node, path, 0, PaymentHash([0_u8; 32]), None, ev, false, false, None, true);
2617+
do_pass_along_path(PassAlongPathArgs::new(origin_node, path, 0, PaymentHash([0_u8; 32]), ev)
2618+
.is_probe()
2619+
.without_clearing_recipient_events());
2620+
25552621
let nodes_to_fail_payment: Vec<_> = vec![origin_node].into_iter().chain(path.iter().cloned()).collect();
25562622

25572623
fail_payment_along_path(nodes_to_fail_payment.as_slice());

lightning/src/ln/offers_tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ fn route_bolt12_payment<'a, 'b, 'c>(
112112
// invoice contains the payment_hash but it was encrypted inside an onion message.
113113
let amount_msats = invoice.amount_msats();
114114
let payment_hash = invoice.payment_hash();
115-
do_pass_along_path(
116-
node, path, amount_msats, payment_hash, None, ev, false, false, None, false
117-
);
115+
let args = PassAlongPathArgs::new(node, path, amount_msats, payment_hash, ev)
116+
.without_clearing_recipient_events();
117+
do_pass_along_path(args);
118118
}
119119

120120
fn claim_bolt12_payment<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, path: &[&Node<'a, 'b, 'c>]) {

lightning/src/ln/reload_tests.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -823,8 +823,12 @@ fn do_test_partial_claim_before_restart(persist_both_monitors: bool) {
823823
assert_eq!(send_events.len(), 2);
824824
let node_1_msgs = remove_first_msg_event_to_node(&nodes[1].node.get_our_node_id(), &mut send_events);
825825
let node_2_msgs = remove_first_msg_event_to_node(&nodes[2].node.get_our_node_id(), &mut send_events);
826-
do_pass_along_path(&nodes[0], &[&nodes[1], &nodes[3]], 15_000_000, payment_hash, Some(payment_secret), node_1_msgs, true, false, None, false);
827-
do_pass_along_path(&nodes[0], &[&nodes[2], &nodes[3]], 15_000_000, payment_hash, Some(payment_secret), node_2_msgs, true, false, None, false);
826+
do_pass_along_path(PassAlongPathArgs::new(&nodes[0],&[&nodes[1], &nodes[3]], 15_000_000, payment_hash, node_1_msgs)
827+
.with_payment_secret(payment_secret)
828+
.without_clearing_recipient_events());
829+
do_pass_along_path(PassAlongPathArgs::new(&nodes[0], &[&nodes[2], &nodes[3]], 15_000_000, payment_hash, node_2_msgs)
830+
.with_payment_secret(payment_secret)
831+
.without_clearing_recipient_events());
828832

829833
// Now that we have an MPP payment pending, get the latest encoded copies of nodes[3]'s
830834
// monitors and ChannelManager, for use later, if we don't want to persist both monitors.

0 commit comments

Comments
 (0)