Skip to content

Commit a2b46b5

Browse files
committed
Refactor check_closed_event for multiple events
The check_closed_event function verified closure events against multiple counterparty nodes, but only a single closure reason and channel capacity. This commit introduces a check_closed_events function to verify events against descriptions of each expected event, and refactors check_closed_event in function of check_closed_events.
1 parent 46dab8f commit a2b46b5

File tree

2 files changed

+77
-59
lines changed

2 files changed

+77
-59
lines changed

lightning/src/ln/functional_test_utils.rs

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,27 +1478,61 @@ macro_rules! check_closed_broadcast {
14781478
}
14791479
}
14801480

1481+
#[derive(Default)]
1482+
pub struct ExpectedCloseEvent {
1483+
pub channel_capacity_sats: Option<u64>,
1484+
pub channel_id: Option<ChannelId>,
1485+
pub counterparty_node_id: Option<PublicKey>,
1486+
pub discard_funding: bool,
1487+
pub reason: Option<ClosureReason>,
1488+
}
1489+
1490+
/// Check that multiple channel closing events have been issued.
1491+
pub fn check_closed_events(node: &Node, expected_close_events: &[ExpectedCloseEvent]) {
1492+
let closed_events_count = expected_close_events.len();
1493+
let discard_events_count = expected_close_events.iter().filter(|e| e.discard_funding).count();
1494+
let events = node.node.get_and_clear_pending_events();
1495+
assert_eq!(events.len(), closed_events_count + discard_events_count, "{:?}", events);
1496+
for expected_event in expected_close_events {
1497+
assert!(events.iter().any(|e| matches!(
1498+
e,
1499+
Event::ChannelClosed {
1500+
channel_id,
1501+
reason,
1502+
counterparty_node_id,
1503+
channel_capacity_sats,
1504+
..
1505+
} if (
1506+
expected_event.channel_id.map(|expected| *channel_id == expected).unwrap_or(true) &&
1507+
expected_event.reason.as_ref().map(|expected| reason == expected).unwrap_or(true) &&
1508+
expected_event.counterparty_node_id.map(|expected| *counterparty_node_id == Some(expected)).unwrap_or(true) &&
1509+
expected_event.channel_capacity_sats.map(|expected| *channel_capacity_sats == Some(expected)).unwrap_or(true)
1510+
)
1511+
)));
1512+
}
1513+
assert_eq!(events.iter().filter(|e| matches!(
1514+
e,
1515+
Event::DiscardFunding { .. },
1516+
)).count(), discard_events_count);
1517+
}
1518+
14811519
/// Check that a channel's closing channel events has been issued
14821520
pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool,
14831521
expected_counterparty_node_ids: &[PublicKey], expected_channel_capacity: u64) {
1484-
let events = node.node.get_and_clear_pending_events();
1485-
assert_eq!(events.len(), events_count, "{:?}", events);
1486-
let mut issues_discard_funding = false;
1487-
for event in events {
1488-
match event {
1489-
Event::ChannelClosed { ref reason, counterparty_node_id,
1490-
channel_capacity_sats, .. } => {
1491-
assert_eq!(*reason, expected_reason);
1492-
assert!(expected_counterparty_node_ids.iter().any(|id| id == &counterparty_node_id.unwrap()));
1493-
assert_eq!(channel_capacity_sats.unwrap(), expected_channel_capacity);
1494-
},
1495-
Event::DiscardFunding { .. } => {
1496-
issues_discard_funding = true;
1497-
}
1498-
_ => panic!("Unexpected event"),
1499-
}
1500-
}
1501-
assert_eq!(is_check_discard_funding, issues_discard_funding);
1522+
let expected_events_count = if is_check_discard_funding {
1523+
2 * expected_counterparty_node_ids.len()
1524+
} else {
1525+
expected_counterparty_node_ids.len()
1526+
};
1527+
assert_eq!(events_count, expected_events_count);
1528+
let expected_close_events = expected_counterparty_node_ids.iter().map(|node_id| ExpectedCloseEvent {
1529+
channel_capacity_sats: Some(expected_channel_capacity),
1530+
channel_id: None,
1531+
counterparty_node_id: Some(*node_id),
1532+
discard_funding: is_check_discard_funding,
1533+
reason: Some(expected_reason.clone()),
1534+
}).collect::<Vec<_>>();
1535+
check_closed_events(node, expected_close_events.as_slice());
15021536
}
15031537

15041538
/// Check that a channel's closing channel events has been issued

lightning/src/ln/functional_tests.rs

Lines changed: 25 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8653,7 +8653,7 @@ fn test_pre_lockin_no_chan_closed_update() {
86538653
nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msgs::ErrorMessage { channel_id, data: "Hi".to_owned() });
86548654
assert!(nodes[0].chain_monitor.added_monitors.lock().unwrap().is_empty());
86558655
check_closed_event!(nodes[0], 2, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("Hi".to_string()) }, true,
8656-
[nodes[1].node.get_our_node_id(); 2], 100000);
8656+
[nodes[1].node.get_our_node_id()], 100000);
86578657
}
86588658

86598659
#[test]
@@ -10498,26 +10498,18 @@ fn test_disconnect_in_funding_batch() {
1049810498
// The channels in the batch will close immediately.
1049910499
let channel_id_1 = OutPoint { txid: tx.txid(), index: 0 }.to_channel_id();
1050010500
let channel_id_2 = OutPoint { txid: tx.txid(), index: 1 }.to_channel_id();
10501-
let events = nodes[0].node.get_and_clear_pending_events();
10502-
assert_eq!(events.len(), 4);
10503-
assert!(events.iter().any(|e| matches!(
10504-
e,
10505-
Event::ChannelClosed {
10506-
channel_id,
10507-
..
10508-
} if channel_id == &channel_id_1
10509-
)));
10510-
assert!(events.iter().any(|e| matches!(
10511-
e,
10512-
Event::ChannelClosed {
10513-
channel_id,
10514-
..
10515-
} if channel_id == &channel_id_2
10516-
)));
10517-
assert_eq!(events.iter().filter(|e| matches!(
10518-
e,
10519-
Event::DiscardFunding { .. },
10520-
)).count(), 2);
10501+
check_closed_events(&nodes[0], &[
10502+
ExpectedCloseEvent {
10503+
channel_id: Some(channel_id_1),
10504+
discard_funding: true,
10505+
..Default::default()
10506+
},
10507+
ExpectedCloseEvent {
10508+
channel_id: Some(channel_id_2),
10509+
discard_funding: true,
10510+
..Default::default()
10511+
},
10512+
]);
1052110513

1052210514
// The monitor should become closed.
1052310515
check_added_monitors(&nodes[0], 1);
@@ -10601,26 +10593,18 @@ fn test_batch_funding_close_after_funding_signed() {
1060110593
}
1060210594

1060310595
// All channels in the batch should close immediately.
10604-
let events = nodes[0].node.get_and_clear_pending_events();
10605-
assert_eq!(events.len(), 4);
10606-
assert!(events.iter().any(|e| matches!(
10607-
e,
10608-
Event::ChannelClosed {
10609-
channel_id,
10610-
..
10611-
} if channel_id == &channel_id_1
10612-
)));
10613-
assert!(events.iter().any(|e| matches!(
10614-
e,
10615-
Event::ChannelClosed {
10616-
channel_id,
10617-
..
10618-
} if channel_id == &channel_id_2
10619-
)));
10620-
assert_eq!(events.iter().filter(|e| matches!(
10621-
e,
10622-
Event::DiscardFunding { .. },
10623-
)).count(), 2);
10596+
check_closed_events(&nodes[0], &[
10597+
ExpectedCloseEvent {
10598+
channel_id: Some(channel_id_1),
10599+
discard_funding: true,
10600+
..Default::default()
10601+
},
10602+
ExpectedCloseEvent {
10603+
channel_id: Some(channel_id_2),
10604+
discard_funding: true,
10605+
..Default::default()
10606+
},
10607+
]);
1062410608

1062510609
// Ensure the channels don't exist anymore.
1062610610
assert!(nodes[0].node.list_channels().is_empty());

0 commit comments

Comments
 (0)