Skip to content

Commit b4fdb87

Browse files
authored
Merge pull request #1471 from ViktorTigerstrom/2022-05-test-disconnected-before-funding-broadcasted
Add test coverage for `ClosureReason::DisconnectedPeer`
2 parents 6587607 + 7f0aa93 commit b4fdb87

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3489,6 +3489,47 @@ fn test_dup_events_on_peer_disconnect() {
34893489
expect_payment_path_successful!(nodes[0]);
34903490
}
34913491

3492+
#[test]
3493+
fn test_peer_disconnected_before_funding_broadcasted() {
3494+
// Test that channels are closed with `ClosureReason::DisconnectedPeer` if the peer disconnects
3495+
// before the funding transaction has been broadcasted.
3496+
let chanmon_cfgs = create_chanmon_cfgs(2);
3497+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
3498+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
3499+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
3500+
3501+
// Open a channel between `nodes[0]` and `nodes[1]`, for which the funding transaction is never
3502+
// broadcasted, even though it's created by `nodes[0]`.
3503+
let expected_temporary_channel_id = nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 1_000_000, 500_000_000, 42, None).unwrap();
3504+
let open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
3505+
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &open_channel);
3506+
let accept_channel = get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id());
3507+
nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::known(), &accept_channel);
3508+
3509+
let (temporary_channel_id, tx, _funding_output) = create_funding_transaction(&nodes[0], 1_000_000, 42);
3510+
assert_eq!(temporary_channel_id, expected_temporary_channel_id);
3511+
3512+
assert!(nodes[0].node.funding_transaction_generated(&temporary_channel_id, tx.clone()).is_ok());
3513+
3514+
let funding_created_msg = get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id());
3515+
assert_eq!(funding_created_msg.temporary_channel_id, expected_temporary_channel_id);
3516+
3517+
// Even though the funding transaction is created by `nodes[0]`, the `FundingCreated` msg is
3518+
// never sent to `nodes[1]`, and therefore the tx is never signed by either party nor
3519+
// broadcasted.
3520+
{
3521+
assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 0);
3522+
}
3523+
3524+
// Ensure that the channel is closed with `ClosureReason::DisconnectedPeer` when the peers are
3525+
// disconnected before the funding transaction was broadcasted.
3526+
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
3527+
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
3528+
3529+
check_closed_event!(nodes[0], 1, ClosureReason::DisconnectedPeer);
3530+
check_closed_event!(nodes[1], 1, ClosureReason::DisconnectedPeer);
3531+
}
3532+
34923533
#[test]
34933534
fn test_simple_peer_disconnect() {
34943535
// Test that we can reconnect when there are no lost messages

0 commit comments

Comments
 (0)