@@ -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