Skip to content

Commit 09f8aba

Browse files
committed
Move private channel and short-conf tests to new module
1 parent 3fe76e6 commit 09f8aba

File tree

3 files changed

+243
-208
lines changed

3 files changed

+243
-208
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 208 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, PaymentId, RAAC
2323
use ln::channel::{Channel, ChannelError};
2424
use ln::{chan_utils, onion_utils};
2525
use ln::chan_utils::{htlc_success_tx_weight, htlc_timeout_tx_weight, HTLCOutputInCommitment};
26-
use routing::network_graph::RoutingFees;
27-
use routing::router::{PaymentParameters, Route, RouteHop, RouteHint, RouteHintHop, RouteParameters, find_route, get_route};
26+
use routing::router::{PaymentParameters, Route, RouteHop, RouteParameters, find_route, get_route};
2827
use ln::features::{ChannelFeatures, InitFeatures, InvoiceFeatures, NodeFeatures};
2928
use ln::msgs;
3029
use ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, ErrorAction};
@@ -463,88 +462,6 @@ fn test_multi_flight_update_fee() {
463462
check_added_monitors!(nodes[1], 1);
464463
}
465464

466-
fn do_test_1_conf_open(connect_style: ConnectStyle) {
467-
// Previously, if the minium_depth config was set to 1, we'd never send a funding_locked. This
468-
// tests that we properly send one in that case.
469-
let mut alice_config = UserConfig::default();
470-
alice_config.own_channel_config.minimum_depth = 1;
471-
alice_config.channel_options.announced_channel = true;
472-
alice_config.peer_channel_config_limits.force_announced_channel_preference = false;
473-
let mut bob_config = UserConfig::default();
474-
bob_config.own_channel_config.minimum_depth = 1;
475-
bob_config.channel_options.announced_channel = true;
476-
bob_config.peer_channel_config_limits.force_announced_channel_preference = false;
477-
let chanmon_cfgs = create_chanmon_cfgs(2);
478-
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
479-
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(alice_config), Some(bob_config)]);
480-
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
481-
*nodes[0].connect_style.borrow_mut() = connect_style;
482-
483-
let tx = create_chan_between_nodes_with_value_init(&nodes[0], &nodes[1], 100000, 10001, InitFeatures::known(), InitFeatures::known());
484-
mine_transaction(&nodes[1], &tx);
485-
nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id()));
486-
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
487-
488-
mine_transaction(&nodes[0], &tx);
489-
let as_msg_events = nodes[0].node.get_and_clear_pending_msg_events();
490-
assert_eq!(as_msg_events.len(), 2);
491-
let as_funding_locked = if let MessageSendEvent::SendFundingLocked { ref node_id, ref msg } = as_msg_events[0] {
492-
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
493-
msg.clone()
494-
} else { panic!("Unexpected event"); };
495-
if let MessageSendEvent::SendChannelUpdate { ref node_id, msg: _ } = as_msg_events[1] {
496-
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
497-
} else { panic!("Unexpected event"); }
498-
499-
nodes[1].node.handle_funding_locked(&nodes[0].node.get_our_node_id(), &as_funding_locked);
500-
let bs_msg_events = nodes[1].node.get_and_clear_pending_msg_events();
501-
assert_eq!(bs_msg_events.len(), 1);
502-
if let MessageSendEvent::SendChannelUpdate { ref node_id, msg: _ } = bs_msg_events[0] {
503-
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
504-
} else { panic!("Unexpected event"); }
505-
506-
send_payment(&nodes[0], &[&nodes[1]], 100_000);
507-
508-
// After 6 confirmations, as required by the spec, we'll send announcement_signatures and
509-
// broadcast the channel_announcement (but not before exactly 6 confirmations).
510-
connect_blocks(&nodes[0], 4);
511-
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
512-
connect_blocks(&nodes[0], 1);
513-
nodes[1].node.handle_announcement_signatures(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendAnnouncementSignatures, nodes[1].node.get_our_node_id()));
514-
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
515-
516-
connect_blocks(&nodes[1], 5);
517-
let bs_announce_events = nodes[1].node.get_and_clear_pending_msg_events();
518-
assert_eq!(bs_announce_events.len(), 2);
519-
let bs_announcement_sigs = if let MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } = bs_announce_events[0] {
520-
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
521-
msg.clone()
522-
} else { panic!("Unexpected event"); };
523-
let (bs_announcement, bs_update) = if let MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } = bs_announce_events[1] {
524-
(msg.clone(), update_msg.clone())
525-
} else { panic!("Unexpected event"); };
526-
527-
nodes[0].node.handle_announcement_signatures(&nodes[1].node.get_our_node_id(), &bs_announcement_sigs);
528-
let as_announce_events = nodes[0].node.get_and_clear_pending_msg_events();
529-
assert_eq!(as_announce_events.len(), 1);
530-
let (announcement, as_update) = if let MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } = as_announce_events[0] {
531-
(msg.clone(), update_msg.clone())
532-
} else { panic!("Unexpected event"); };
533-
assert_eq!(announcement, bs_announcement);
534-
535-
for node in nodes {
536-
assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
537-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
538-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
539-
}
540-
}
541-
#[test]
542-
fn test_1_conf_open() {
543-
do_test_1_conf_open(ConnectStyle::BestBlockFirst);
544-
do_test_1_conf_open(ConnectStyle::TransactionsFirst);
545-
do_test_1_conf_open(ConnectStyle::FullBlockViaListen);
546-
}
547-
548465
fn do_test_sanity_on_in_flight_opens(steps: u8) {
549466
// Previously, we had issues deserializing channels when we hadn't connected the first block
550467
// after creation. To catch that and similar issues, we lean on the Node::drop impl to test
@@ -7569,130 +7486,6 @@ fn test_announce_disable_channels() {
75697486
assert!(chans_disabled.is_empty());
75707487
}
75717488

7572-
#[test]
7573-
fn test_priv_forwarding_rejection() {
7574-
// If we have a private channel with outbound liquidity, and
7575-
// UserConfig::accept_forwards_to_priv_channels is set to false, we should reject any attempts
7576-
// to forward through that channel.
7577-
let chanmon_cfgs = create_chanmon_cfgs(3);
7578-
let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
7579-
let mut no_announce_cfg = test_default_channel_config();
7580-
no_announce_cfg.accept_forwards_to_priv_channels = false;
7581-
let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, Some(no_announce_cfg), None]);
7582-
let persister: test_utils::TestPersister;
7583-
let new_chain_monitor: test_utils::TestChainMonitor;
7584-
let nodes_1_deserialized: ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>;
7585-
let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
7586-
7587-
let chan_id_1 = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 500_000_000, InitFeatures::known(), InitFeatures::known()).2;
7588-
let chan_id_2 = create_unannounced_chan_between_nodes_with_value(&nodes, 1, 2, 1_000_000, 500_000_000, InitFeatures::known(), InitFeatures::known()).0.channel_id;
7589-
7590-
// We should always be able to forward through nodes[1] as long as its out through a public
7591-
// channel:
7592-
send_payment(&nodes[2], &[&nodes[1], &nodes[0]], 10_000);
7593-
7594-
// ... however, if we send to nodes[2], we will have to pass the private channel from nodes[1]
7595-
// to nodes[2], which should be rejected:
7596-
let route_hint = RouteHint(vec![RouteHintHop {
7597-
src_node_id: nodes[1].node.get_our_node_id(),
7598-
short_channel_id: nodes[2].node.list_channels()[0].short_channel_id.unwrap(),
7599-
fees: RoutingFees { base_msat: 1000, proportional_millionths: 0 },
7600-
cltv_expiry_delta: MIN_CLTV_EXPIRY_DELTA,
7601-
htlc_minimum_msat: None,
7602-
htlc_maximum_msat: None,
7603-
}]);
7604-
let last_hops = vec![route_hint];
7605-
let (route, our_payment_hash, our_payment_preimage, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], last_hops, 10_000, TEST_FINAL_CLTV);
7606-
7607-
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
7608-
check_added_monitors!(nodes[0], 1);
7609-
let payment_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
7610-
nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
7611-
commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true);
7612-
7613-
let htlc_fail_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
7614-
assert!(htlc_fail_updates.update_add_htlcs.is_empty());
7615-
assert_eq!(htlc_fail_updates.update_fail_htlcs.len(), 1);
7616-
assert!(htlc_fail_updates.update_fail_malformed_htlcs.is_empty());
7617-
assert!(htlc_fail_updates.update_fee.is_none());
7618-
7619-
nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &htlc_fail_updates.update_fail_htlcs[0]);
7620-
commitment_signed_dance!(nodes[0], nodes[1], htlc_fail_updates.commitment_signed, true, true);
7621-
expect_payment_failed_with_update!(nodes[0], our_payment_hash, false, nodes[2].node.list_channels()[0].short_channel_id.unwrap(), true);
7622-
7623-
// Now disconnect nodes[1] from its peers and restart with accept_forwards_to_priv_channels set
7624-
// to true. Sadly there is currently no way to change it at runtime.
7625-
7626-
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
7627-
nodes[2].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
7628-
7629-
let nodes_1_serialized = nodes[1].node.encode();
7630-
let mut monitor_a_serialized = test_utils::TestVecWriter(Vec::new());
7631-
let mut monitor_b_serialized = test_utils::TestVecWriter(Vec::new());
7632-
get_monitor!(nodes[1], chan_id_1).write(&mut monitor_a_serialized).unwrap();
7633-
get_monitor!(nodes[1], chan_id_2).write(&mut monitor_b_serialized).unwrap();
7634-
7635-
persister = test_utils::TestPersister::new();
7636-
let keys_manager = &chanmon_cfgs[1].keys_manager;
7637-
new_chain_monitor = test_utils::TestChainMonitor::new(Some(nodes[1].chain_source), nodes[1].tx_broadcaster.clone(), nodes[1].logger, node_cfgs[1].fee_estimator, &persister, keys_manager);
7638-
nodes[1].chain_monitor = &new_chain_monitor;
7639-
7640-
let mut monitor_a_read = &monitor_a_serialized.0[..];
7641-
let mut monitor_b_read = &monitor_b_serialized.0[..];
7642-
let (_, mut monitor_a) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(&mut monitor_a_read, keys_manager).unwrap();
7643-
let (_, mut monitor_b) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(&mut monitor_b_read, keys_manager).unwrap();
7644-
assert!(monitor_a_read.is_empty());
7645-
assert!(monitor_b_read.is_empty());
7646-
7647-
no_announce_cfg.accept_forwards_to_priv_channels = true;
7648-
7649-
let mut nodes_1_read = &nodes_1_serialized[..];
7650-
let (_, nodes_1_deserialized_tmp) = {
7651-
let mut channel_monitors = HashMap::new();
7652-
channel_monitors.insert(monitor_a.get_funding_txo().0, &mut monitor_a);
7653-
channel_monitors.insert(monitor_b.get_funding_txo().0, &mut monitor_b);
7654-
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_1_read, ChannelManagerReadArgs {
7655-
default_config: no_announce_cfg,
7656-
keys_manager,
7657-
fee_estimator: node_cfgs[1].fee_estimator,
7658-
chain_monitor: nodes[1].chain_monitor,
7659-
tx_broadcaster: nodes[1].tx_broadcaster.clone(),
7660-
logger: nodes[1].logger,
7661-
channel_monitors,
7662-
}).unwrap()
7663-
};
7664-
assert!(nodes_1_read.is_empty());
7665-
nodes_1_deserialized = nodes_1_deserialized_tmp;
7666-
7667-
assert!(nodes[1].chain_monitor.watch_channel(monitor_a.get_funding_txo().0, monitor_a).is_ok());
7668-
assert!(nodes[1].chain_monitor.watch_channel(monitor_b.get_funding_txo().0, monitor_b).is_ok());
7669-
check_added_monitors!(nodes[1], 2);
7670-
nodes[1].node = &nodes_1_deserialized;
7671-
7672-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
7673-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
7674-
let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
7675-
let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
7676-
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
7677-
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
7678-
get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
7679-
get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[0].node.get_our_node_id());
7680-
7681-
nodes[1].node.peer_connected(&nodes[2].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
7682-
nodes[2].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
7683-
let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[2].node.get_our_node_id());
7684-
let cs_reestablish = get_event_msg!(nodes[2], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
7685-
nodes[2].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
7686-
nodes[1].node.handle_channel_reestablish(&nodes[2].node.get_our_node_id(), &cs_reestablish);
7687-
get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[2].node.get_our_node_id());
7688-
get_event_msg!(nodes[2], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
7689-
7690-
nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret)).unwrap();
7691-
check_added_monitors!(nodes[0], 1);
7692-
pass_along_route(&nodes[0], &[&[&nodes[1], &nodes[2]]], 10_000, our_payment_hash, our_payment_secret);
7693-
claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], our_payment_preimage);
7694-
}
7695-
76967489
#[test]
76977490
fn test_bump_penalty_txn_on_revoked_commitment() {
76987491
// In case of penalty txn with too low feerates for getting into mempools, RBF-bump them to be sure

lightning/src/ln/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ mod functional_tests;
5454
mod payment_tests;
5555
#[cfg(test)]
5656
#[allow(unused_mut)]
57+
mod priv_short_conf_tests;
58+
#[cfg(test)]
59+
#[allow(unused_mut)]
5760
mod chanmon_update_fail_tests;
5861
#[cfg(test)]
5962
#[allow(unused_mut)]

0 commit comments

Comments
 (0)