Skip to content

Commit 19dd248

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 bbb05ee commit 19dd248

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
@@ -1467,27 +1467,61 @@ macro_rules! check_closed_broadcast {
14671467
}
14681468
}
14691469

1470+
#[derive(Default)]
1471+
pub struct ExpectedCloseEvent {
1472+
pub channel_capacity_sats: Option<u64>,
1473+
pub channel_id: Option<ChannelId>,
1474+
pub counterparty_node_id: Option<PublicKey>,
1475+
pub discard_funding: bool,
1476+
pub reason: Option<ClosureReason>,
1477+
}
1478+
1479+
/// Check that multiple channel closing events have been issued.
1480+
pub fn check_closed_events(node: &Node, expected_close_events: &[ExpectedCloseEvent]) {
1481+
let closed_events_count = expected_close_events.len();
1482+
let discard_events_count = expected_close_events.iter().filter(|e| e.discard_funding).count();
1483+
let events = node.node.get_and_clear_pending_events();
1484+
assert_eq!(events.len(), closed_events_count + discard_events_count, "{:?}", events);
1485+
for expected_event in expected_close_events {
1486+
assert!(events.iter().any(|e| matches!(
1487+
e,
1488+
Event::ChannelClosed {
1489+
channel_id,
1490+
reason,
1491+
counterparty_node_id,
1492+
channel_capacity_sats,
1493+
..
1494+
} if (
1495+
expected_event.channel_id.map(|expected| *channel_id == expected).unwrap_or(true) &&
1496+
expected_event.reason.as_ref().map(|expected| reason == expected).unwrap_or(true) &&
1497+
expected_event.counterparty_node_id.map(|expected| *counterparty_node_id == Some(expected)).unwrap_or(true) &&
1498+
expected_event.channel_capacity_sats.map(|expected| *channel_capacity_sats == Some(expected)).unwrap_or(true)
1499+
)
1500+
)));
1501+
}
1502+
assert_eq!(events.iter().filter(|e| matches!(
1503+
e,
1504+
Event::DiscardFunding { .. },
1505+
)).count(), discard_events_count);
1506+
}
1507+
14701508
/// Check that a channel's closing channel events has been issued
14711509
pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool,
14721510
expected_counterparty_node_ids: &[PublicKey], expected_channel_capacity: u64) {
1473-
let events = node.node.get_and_clear_pending_events();
1474-
assert_eq!(events.len(), events_count, "{:?}", events);
1475-
let mut issues_discard_funding = false;
1476-
for event in events {
1477-
match event {
1478-
Event::ChannelClosed { ref reason, counterparty_node_id,
1479-
channel_capacity_sats, .. } => {
1480-
assert_eq!(*reason, expected_reason);
1481-
assert!(expected_counterparty_node_ids.iter().any(|id| id == &counterparty_node_id.unwrap()));
1482-
assert_eq!(channel_capacity_sats.unwrap(), expected_channel_capacity);
1483-
},
1484-
Event::DiscardFunding { .. } => {
1485-
issues_discard_funding = true;
1486-
}
1487-
_ => panic!("Unexpected event"),
1488-
}
1489-
}
1490-
assert_eq!(is_check_discard_funding, issues_discard_funding);
1511+
let expected_events_count = if is_check_discard_funding {
1512+
2 * expected_counterparty_node_ids.len()
1513+
} else {
1514+
expected_counterparty_node_ids.len()
1515+
};
1516+
assert_eq!(events_count, expected_events_count);
1517+
let expected_close_events = expected_counterparty_node_ids.iter().map(|node_id| ExpectedCloseEvent {
1518+
channel_capacity_sats: Some(expected_channel_capacity),
1519+
channel_id: None,
1520+
counterparty_node_id: Some(*node_id),
1521+
discard_funding: is_check_discard_funding,
1522+
reason: Some(expected_reason.clone()),
1523+
}).collect::<Vec<_>>();
1524+
check_closed_events(node, expected_close_events.as_slice());
14911525
}
14921526

14931527
/// 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)