Skip to content

Commit 8c175f5

Browse files
Add duplicate temporary_channel_id for 2 peers test
1 parent 0eb74ec commit 8c175f5

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8511,6 +8511,56 @@ fn test_onchain_htlc_settlement_after_close() {
85118511
do_test_onchain_htlc_settlement_after_close(false, false);
85128512
}
85138513

8514+
#[test]
8515+
fn test_duplicate_temporary_channel_id_from_different_peers() {
8516+
// Tests that we can accept two different `OpenChannel` requests with the same
8517+
// `temporary_channel_id`, as long as they are from different peers.
8518+
let chanmon_cfgs = create_chanmon_cfgs(3);
8519+
let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
8520+
let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
8521+
let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
8522+
8523+
// Create an first channel channel
8524+
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 100000, 10001, 42, None).unwrap();
8525+
let mut open_chan_msg_chan_1_0 = get_event_msg!(nodes[1], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
8526+
8527+
// Create an second channel
8528+
nodes[2].node.create_channel(nodes[0].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
8529+
let mut open_chan_msg_chan_2_0 = get_event_msg!(nodes[2], MessageSendEvent::SendOpenChannel, nodes[0].node.get_our_node_id());
8530+
8531+
// Modify the `OpenChannel` from `nodes[2]` to `nodes[0]` to ensure that it uses the same
8532+
// `temporary_channel_id` as the `OpenChannel` from nodes[1] to nodes[0].
8533+
open_chan_msg_chan_2_0.temporary_channel_id = open_chan_msg_chan_1_0.temporary_channel_id;
8534+
8535+
// Assert that `nodes[0]` can accept both `OpenChannel` requests, even though they use the same
8536+
// `temporary_channel_id` as they are from different peers.
8537+
nodes[0].node.handle_open_channel(&nodes[1].node.get_our_node_id(), channelmanager::provided_init_features(), &open_chan_msg_chan_1_0);
8538+
{
8539+
let events = nodes[0].node.get_and_clear_pending_msg_events();
8540+
assert_eq!(events.len(), 1);
8541+
match &events[0] {
8542+
MessageSendEvent::SendAcceptChannel { node_id, msg } => {
8543+
assert_eq!(node_id, &nodes[1].node.get_our_node_id());
8544+
assert_eq!(msg.temporary_channel_id, open_chan_msg_chan_1_0.temporary_channel_id);
8545+
},
8546+
_ => panic!("Unexpected event"),
8547+
}
8548+
}
8549+
8550+
nodes[0].node.handle_open_channel(&nodes[2].node.get_our_node_id(), channelmanager::provided_init_features(), &open_chan_msg_chan_2_0);
8551+
{
8552+
let events = nodes[0].node.get_and_clear_pending_msg_events();
8553+
assert_eq!(events.len(), 1);
8554+
match &events[0] {
8555+
MessageSendEvent::SendAcceptChannel { node_id, msg } => {
8556+
assert_eq!(node_id, &nodes[2].node.get_our_node_id());
8557+
assert_eq!(msg.temporary_channel_id, open_chan_msg_chan_1_0.temporary_channel_id);
8558+
},
8559+
_ => panic!("Unexpected event"),
8560+
}
8561+
}
8562+
}
8563+
85148564
#[test]
85158565
fn test_duplicate_chan_id() {
85168566
// Test that if a given peer tries to open a channel with the same channel_id as one that is

0 commit comments

Comments
 (0)