Skip to content

Commit ba2980e

Browse files
committed
Refactor check_closed_event
1 parent 454705a commit ba2980e

File tree

2 files changed

+83
-60
lines changed

2 files changed

+83
-60
lines changed

lightning/src/ln/functional_test_utils.rs

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,27 +1467,66 @@ macro_rules! check_closed_broadcast {
14671467
}
14681468
}
14691469

1470-
/// Check that a channel's closing channel events has been issued
1471-
pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool,
1472-
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"),
1470+
pub struct ExpectedCloseEvent {
1471+
pub channel_capacity_sats: Option<u64>,
1472+
pub channel_id: Option<ChannelId>,
1473+
pub counterparty_node_id: Option<PublicKey>,
1474+
pub discard_funding: bool,
1475+
pub reason: Option<ClosureReason>,
1476+
}
1477+
1478+
impl Default for ExpectedCloseEvent {
1479+
fn default() -> Self {
1480+
Self {
1481+
channel_capacity_sats: None,
1482+
channel_id: None,
1483+
counterparty_node_id: None,
1484+
discard_funding: false,
1485+
reason: None,
14881486
}
14891487
}
1490-
assert_eq!(is_check_discard_funding, issues_discard_funding);
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+
1519+
/// Check that a channel's closing channel events has been issued
1520+
pub fn check_closed_event(node: &Node, _events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool,
1521+
expected_counterparty_node_ids: &[PublicKey], expected_channel_capacity: u64) {
1522+
let expected_close_events = expected_counterparty_node_ids.iter().map(|node_id| ExpectedCloseEvent {
1523+
channel_capacity_sats: Some(expected_channel_capacity),
1524+
channel_id: None,
1525+
counterparty_node_id: Some(*node_id),
1526+
discard_funding: is_check_discard_funding,
1527+
reason: Some(expected_reason.clone()),
1528+
}).collect::<Vec<_>>();
1529+
check_closed_events(node, expected_close_events.as_slice());
14911530
}
14921531

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