Skip to content

Commit 588f490

Browse files
committed
ln/refactor: add helper test function for channel type downgrade
Useful for the commits that follow where we add more downgrade tests.
1 parent 7b62ea4 commit 588f490

File tree

1 file changed

+40
-23
lines changed

1 file changed

+40
-23
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15210,13 +15210,16 @@ mod tests {
1521015210
use crate::routing::router::{find_route, PaymentParameters, RouteParameters};
1521115211
use crate::sign::EntropySource;
1521215212
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
15213-
use crate::util::config::{ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate};
15213+
use crate::util::config::{
15214+
ChannelConfig, ChannelConfigUpdate, ChannelHandshakeConfigUpdate, UserConfig,
15215+
};
1521415216
use crate::util::errors::APIError;
1521515217
use crate::util::ser::Writeable;
1521615218
use crate::util::test_utils;
1521715219
use bitcoin::secp256k1::ecdh::SharedSecret;
1521815220
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
1521915221
use core::sync::atomic::Ordering;
15222+
use lightning_types::features::ChannelTypeFeatures;
1522015223

1522115224
#[test]
1522215225
#[rustfmt::skip]
@@ -16349,42 +16352,56 @@ mod tests {
1634916352
}
1635016353

1635116354
#[test]
16352-
#[rustfmt::skip]
16353-
fn test_anchors_zero_fee_htlc_tx_fallback() {
16355+
fn test_anchors_zero_fee_htlc_tx_downgrade() {
1635416356
// Tests that if both nodes support anchors, but the remote node does not want to accept
1635516357
// anchor channels at the moment, an error it sent to the local node such that it can retry
1635616358
// the channel without the anchors feature.
16359+
let mut initiator_cfg = test_default_channel_config();
16360+
initiator_cfg.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16361+
16362+
let mut receiver_cfg = test_default_channel_config();
16363+
receiver_cfg.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16364+
receiver_cfg.manually_accept_inbound_channels = true;
16365+
16366+
let start_type = ChannelTypeFeatures::anchors_zero_htlc_fee_and_dependencies();
16367+
let end_type = ChannelTypeFeatures::only_static_remote_key();
16368+
do_test_channel_type_downgrade(initiator_cfg, receiver_cfg, start_type, vec![end_type]);
16369+
}
16370+
16371+
#[rustfmt::skip]
16372+
fn do_test_channel_type_downgrade(initiator_cfg: UserConfig, acceptor_cfg: UserConfig,
16373+
start_type: ChannelTypeFeatures, downgrade_types: Vec<ChannelTypeFeatures>) {
1635716374
let chanmon_cfgs = create_chanmon_cfgs(2);
1635816375
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
16359-
let mut anchors_config = test_default_channel_config();
16360-
anchors_config.channel_handshake_config.negotiate_anchors_zero_fee_htlc_tx = true;
16361-
anchors_config.manually_accept_inbound_channels = true;
16362-
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(anchors_config.clone()), Some(anchors_config.clone())]);
16376+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(initiator_cfg), Some(acceptor_cfg)]);
1636316377
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1636416378
let error_message = "Channel force-closed";
1636516379

1636616380
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 0, None, None).unwrap();
16367-
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16368-
assert!(open_channel_msg.common_fields.channel_type.as_ref().unwrap().supports_anchors_zero_fee_htlc_tx());
16381+
let mut open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16382+
assert_eq!(open_channel_msg.common_fields.channel_type.as_ref().unwrap(), &start_type);
1636916383

16370-
nodes[1].node.handle_open_channel(nodes[0].node.get_our_node_id(), &open_channel_msg);
16371-
let events = nodes[1].node.get_and_clear_pending_events();
16372-
match events[0] {
16373-
Event::OpenChannelRequest { temporary_channel_id, .. } => {
16374-
nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
16384+
for downgrade_type in downgrade_types {
16385+
nodes[1].node.handle_open_channel(nodes[0].node.get_our_node_id(), &open_channel_msg);
16386+
let events = nodes[1].node.get_and_clear_pending_events();
16387+
match events[0] {
16388+
Event::OpenChannelRequest { temporary_channel_id, .. } => {
16389+
nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
16390+
}
16391+
_ => panic!("Unexpected event"),
1637516392
}
16376-
_ => panic!("Unexpected event"),
16377-
}
1637816393

16379-
let error_msg = get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id());
16380-
nodes[0].node.handle_error(nodes[1].node.get_our_node_id(), &error_msg);
16394+
let error_msg = get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id());
16395+
nodes[0].node.handle_error(nodes[1].node.get_our_node_id(), &error_msg);
1638116396

16382-
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16383-
assert!(!open_channel_msg.common_fields.channel_type.unwrap().supports_anchors_zero_fee_htlc_tx());
16397+
open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
16398+
let channel_type = open_channel_msg.common_fields.channel_type.as_ref().unwrap();
16399+
assert_eq!(channel_type, &downgrade_type);
1638416400

16385-
// Since nodes[1] should not have accepted the channel, it should
16386-
// not have generated any events.
16387-
assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
16401+
// Since nodes[1] should not have accepted the channel, it should
16402+
// not have generated any events.
16403+
assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
16404+
}
1638816405
}
1638916406

1639016407
#[test]

0 commit comments

Comments
 (0)