Skip to content

Commit cfb9eb9

Browse files
committed
Move some additional test macros into functions
This marginally reduces the quantity of code compiled in tests further.
1 parent d556236 commit cfb9eb9

File tree

2 files changed

+66
-73
lines changed

2 files changed

+66
-73
lines changed

lightning/src/ln/functional_test_utils.rs

+64-44
Original file line numberDiff line numberDiff line change
@@ -1555,23 +1555,30 @@ macro_rules! commitment_signed_dance {
15551555
bs_revoke_and_ack
15561556
}
15571557
};
1558-
($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, true /* return extra message */) => {
1559-
{
1560-
let (extra_msg_option, bs_revoke_and_ack) = $crate::ln::functional_test_utils::do_main_commitment_signed_dance(&$node_a, &$node_b, $fail_backwards);
1561-
$node_a.node.handle_revoke_and_ack(&$node_b.node.get_our_node_id(), &bs_revoke_and_ack);
1562-
$crate::ln::functional_test_utils::check_added_monitors(&$node_a, 1);
1563-
extra_msg_option
1564-
}
1565-
};
15661558
($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, false /* no extra message */) => {
1567-
assert!(commitment_signed_dance!($node_a, $node_b, (), $fail_backwards, true, true).is_none());
1559+
assert!($crate::ln::functional_test_utils::commitment_signed_dance_through_cp_raa(&$node_a, &$node_b, $fail_backwards).is_none());
15681560
};
15691561
($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr) => {
15701562
$crate::ln::functional_test_utils::do_commitment_signed_dance(&$node_a, &$node_b, &$commitment_signed, $fail_backwards, false);
15711563
}
15721564
}
15731565

1574-
1566+
/// Runs the commitment_signed dance after the initial commitment_signed is delivered through to
1567+
/// the initiator's `revoke_and_ack` response. i.e. [`do_main_commitment_signed_dance`] plus the
1568+
/// `revoke_and_ack` response to it.
1569+
///
1570+
/// Returns any additional message `node_b` generated in addition to the `revoke_and_ack` response.
1571+
pub fn commitment_signed_dance_through_cp_raa(node_a: &Node<'_, '_, '_>, node_b: &Node<'_, '_, '_>, fail_backwards: bool) -> Option<MessageSendEvent> {
1572+
let (extra_msg_option, bs_revoke_and_ack) = do_main_commitment_signed_dance(node_a, node_b, fail_backwards);
1573+
node_a.node.handle_revoke_and_ack(&node_b.node.get_our_node_id(), &bs_revoke_and_ack);
1574+
check_added_monitors(node_a, 1);
1575+
extra_msg_option
1576+
}
1577+
1578+
/// Does the main logic in the commitment_signed dance. After the first `commitment_signed` has
1579+
/// been delivered, this method picks up and delivers the response `revoke_and_ack` and
1580+
/// `commitment_signed`, returning the recipient's `revoke_and_ack` and any extra message it may
1581+
/// have included.
15751582
pub fn do_main_commitment_signed_dance(node_a: &Node<'_, '_, '_>, node_b: &Node<'_, '_, '_>, fail_backwards: bool) -> (Option<MessageSendEvent>, msgs::RevokeAndACK) {
15761583
let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!(node_a, node_b.node.get_our_node_id());
15771584
check_added_monitors!(node_b, 0);
@@ -1600,6 +1607,11 @@ pub fn do_main_commitment_signed_dance(node_a: &Node<'_, '_, '_>, node_b: &Node<
16001607
(extra_msg_option, bs_revoke_and_ack)
16011608
}
16021609

1610+
/// Runs a full commitment_signed dance, delivering a commitment_signed, the responding
1611+
/// `revoke_and_ack` and `commitment_signed`, and then the final `revoke_and_ack` response.
1612+
///
1613+
/// If `skip_last_step` is unset, also checks for the payment failure update for the previous hop
1614+
/// on failure or that no new messages are left over on success.
16031615
pub fn do_commitment_signed_dance(node_a: &Node<'_, '_, '_>, node_b: &Node<'_, '_, '_>, commitment_signed: &msgs::CommitmentSigned, fail_backwards: bool, skip_last_step: bool) {
16041616
check_added_monitors!(node_a, 0);
16051617
assert!(node_a.node.get_and_clear_pending_msg_events().is_empty());
@@ -1741,6 +1753,44 @@ macro_rules! expect_payment_claimed {
17411753
}
17421754
}
17431755

1756+
pub fn expect_payment_sent<CM: AChannelManager, H: NodeHolder<CM=CM>>(node: &H,
1757+
expected_payment_preimage: PaymentPreimage, expected_fee_msat_opt: Option<Option<u64>>,
1758+
expect_per_path_claims: bool,
1759+
) {
1760+
let events = node.node().get_and_clear_pending_events();
1761+
let expected_payment_hash = PaymentHash(
1762+
bitcoin::hashes::sha256::Hash::hash(&expected_payment_preimage.0).into_inner());
1763+
if expect_per_path_claims {
1764+
assert!(events.len() > 1);
1765+
} else {
1766+
assert_eq!(events.len(), 1);
1767+
}
1768+
let expected_payment_id = match events[0] {
1769+
Event::PaymentSent { ref payment_id, ref payment_preimage, ref payment_hash, ref fee_paid_msat } => {
1770+
assert_eq!(expected_payment_preimage, *payment_preimage);
1771+
assert_eq!(expected_payment_hash, *payment_hash);
1772+
if let Some(expected_fee_msat) = expected_fee_msat_opt {
1773+
assert_eq!(*fee_paid_msat, expected_fee_msat);
1774+
} else {
1775+
assert!(fee_paid_msat.is_some());
1776+
}
1777+
payment_id.unwrap()
1778+
},
1779+
_ => panic!("Unexpected event"),
1780+
};
1781+
if expect_per_path_claims {
1782+
for i in 1..events.len() {
1783+
match events[i] {
1784+
Event::PaymentPathSuccessful { payment_id, payment_hash, .. } => {
1785+
assert_eq!(payment_id, expected_payment_id);
1786+
assert_eq!(payment_hash, Some(expected_payment_hash));
1787+
},
1788+
_ => panic!("Unexpected event"),
1789+
}
1790+
}
1791+
}
1792+
}
1793+
17441794
#[cfg(test)]
17451795
#[macro_export]
17461796
macro_rules! expect_payment_sent_without_paths {
@@ -1760,40 +1810,10 @@ macro_rules! expect_payment_sent {
17601810
($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr) => {
17611811
$crate::expect_payment_sent!($node, $expected_payment_preimage, $expected_fee_msat_opt, true);
17621812
};
1763-
($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr, $expect_paths: expr) => { {
1764-
use bitcoin::hashes::Hash as _;
1765-
let events = $node.node.get_and_clear_pending_events();
1766-
let expected_payment_hash = $crate::ln::PaymentHash(
1767-
bitcoin::hashes::sha256::Hash::hash(&$expected_payment_preimage.0).into_inner());
1768-
if $expect_paths {
1769-
assert!(events.len() > 1);
1770-
} else {
1771-
assert_eq!(events.len(), 1);
1772-
}
1773-
let expected_payment_id = match events[0] {
1774-
$crate::events::Event::PaymentSent { ref payment_id, ref payment_preimage, ref payment_hash, ref fee_paid_msat } => {
1775-
assert_eq!($expected_payment_preimage, *payment_preimage);
1776-
assert_eq!(expected_payment_hash, *payment_hash);
1777-
assert!(fee_paid_msat.is_some());
1778-
if $expected_fee_msat_opt.is_some() {
1779-
assert_eq!(*fee_paid_msat, $expected_fee_msat_opt);
1780-
}
1781-
payment_id.unwrap()
1782-
},
1783-
_ => panic!("Unexpected event"),
1784-
};
1785-
if $expect_paths {
1786-
for i in 1..events.len() {
1787-
match events[i] {
1788-
$crate::events::Event::PaymentPathSuccessful { payment_id, payment_hash, .. } => {
1789-
assert_eq!(payment_id, expected_payment_id);
1790-
assert_eq!(payment_hash, Some(expected_payment_hash));
1791-
},
1792-
_ => panic!("Unexpected event"),
1793-
}
1794-
}
1795-
}
1796-
} }
1813+
($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr, $expect_paths: expr) => {
1814+
$crate::ln::functional_test_utils::expect_payment_sent(&$node, $expected_payment_preimage,
1815+
$expected_fee_msat_opt.map(|o| Some(o)), $expect_paths);
1816+
}
17971817
}
17981818

17991819
#[cfg(test)]

lightning/src/ln/functional_tests.rs

+2-29
Original file line numberDiff line numberDiff line change
@@ -4897,15 +4897,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
48974897

48984898
nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
48994899
commitment_signed_dance!(nodes[0], nodes[1], &updates.commitment_signed, false);
4900-
4901-
let events = nodes[0].node.get_and_clear_pending_events();
4902-
match events[0] {
4903-
Event::PaymentSent { ref payment_preimage, ref payment_hash, .. } => {
4904-
assert_eq!(*payment_preimage, our_payment_preimage);
4905-
assert_eq!(*payment_hash, duplicate_payment_hash);
4906-
}
4907-
_ => panic!("Unexpected event"),
4908-
}
4900+
expect_payment_sent(&nodes[0], our_payment_preimage, None, true);
49094901
}
49104902

49114903
#[test]
@@ -9481,26 +9473,7 @@ fn test_inconsistent_mpp_params() {
94819473
pass_along_path(&nodes[0], &[&nodes[2], &nodes[3]], 15_000_000, our_payment_hash, Some(our_payment_secret), events.pop().unwrap(), true, None);
94829474

94839475
do_claim_payment_along_route(&nodes[0], &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], false, our_payment_preimage);
9484-
let events = nodes[0].node.get_and_clear_pending_events();
9485-
assert_eq!(events.len(), 3);
9486-
match events[0] {
9487-
Event::PaymentSent { payment_hash, .. } => { // The payment was abandoned earlier, so the fee paid will be None
9488-
assert_eq!(payment_hash, our_payment_hash);
9489-
},
9490-
_ => panic!("Unexpected event")
9491-
}
9492-
match events[1] {
9493-
Event::PaymentPathSuccessful { payment_hash, .. } => {
9494-
assert_eq!(payment_hash.unwrap(), our_payment_hash);
9495-
},
9496-
_ => panic!("Unexpected event")
9497-
}
9498-
match events[2] {
9499-
Event::PaymentPathSuccessful { payment_hash, .. } => {
9500-
assert_eq!(payment_hash.unwrap(), our_payment_hash);
9501-
},
9502-
_ => panic!("Unexpected event")
9503-
}
9476+
expect_payment_sent(&nodes[0], our_payment_preimage, Some(None), true);
95049477
}
95059478

95069479
#[test]

0 commit comments

Comments
 (0)