Skip to content

Commit 908a759

Browse files
committed
Test that ChannelManager fails to deserialize if monitors are stale
1 parent 96b7c4f commit 908a759

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3839,6 +3839,13 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38393839
create_announced_chan_between_nodes(&nodes, 2, 0, InitFeatures::supported(), InitFeatures::supported());
38403840
let (_, _, channel_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 3, InitFeatures::supported(), InitFeatures::supported());
38413841

3842+
let mut node_0_stale_monitors_serialized = Vec::new();
3843+
for monitor in nodes[0].chan_monitor.simple_monitor.monitors.lock().unwrap().iter() {
3844+
let mut writer = test_utils::TestVecWriter(Vec::new());
3845+
monitor.1.write_for_disk(&mut writer).unwrap();
3846+
node_0_stale_monitors_serialized.push(writer.0);
3847+
}
3848+
38423849
let (our_payment_preimage, _) = route_payment(&nodes[2], &[&nodes[0], &nodes[1]], 1000000);
38433850

38443851
// Serialize the ChannelManager here, but the monitor we keep up-to-date
@@ -3861,6 +3868,15 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38613868
fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: 253 };
38623869
new_chan_monitor = test_utils::TestChannelMonitor::new(nodes[0].chain_monitor.clone(), nodes[0].tx_broadcaster.clone(), Arc::new(test_utils::TestLogger::new()), &fee_estimator);
38633870
nodes[0].chan_monitor = &new_chan_monitor;
3871+
3872+
let mut node_0_stale_monitors = Vec::new();
3873+
for serialized in node_0_stale_monitors_serialized.iter() {
3874+
let mut read = &serialized[..];
3875+
let (_, monitor) = <(Sha256dHash, ChannelMonitor<EnforcingChannelKeys>)>::read(&mut read, Arc::new(test_utils::TestLogger::new())).unwrap();
3876+
assert!(read.is_empty());
3877+
node_0_stale_monitors.push(monitor);
3878+
}
3879+
38643880
let mut node_0_monitors = Vec::new();
38653881
for serialized in node_0_monitors_serialized.iter() {
38663882
let mut read = &serialized[..];
@@ -3869,17 +3885,38 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38693885
node_0_monitors.push(monitor);
38703886
}
38713887

3872-
let mut nodes_0_read = &nodes_0_serialized[..];
38733888
keys_manager = test_utils::TestKeysInterface::new(&nodes[0].node_seed, Network::Testnet, Arc::new(test_utils::TestLogger::new()));
3874-
let (_, nodes_0_deserialized_tmp) = <(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
3889+
3890+
let mut nodes_0_read = &nodes_0_serialized[..];
3891+
let read_args = ChannelManagerReadArgs {
3892+
default_config: UserConfig::default(),
3893+
keys_manager: &keys_manager,
3894+
fee_estimator: &fee_estimator,
3895+
monitor: nodes[0].chan_monitor,
3896+
tx_broadcaster: nodes[0].tx_broadcaster.clone(),
3897+
logger: Arc::new(test_utils::TestLogger::new()),
3898+
channel_monitors: &mut node_0_stale_monitors.iter_mut().map(|monitor| { (monitor.get_funding_txo().unwrap(), monitor) }).collect(),
3899+
};
3900+
3901+
if let Err(msgs::DecodeError::InvalidValue) =
3902+
<(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, read_args) {
3903+
} else {
3904+
panic!("If the monitor(s) are stale, this indicates a bug and we should get an Err return");
3905+
};
3906+
3907+
let mut nodes_0_read = &nodes_0_serialized[..];
3908+
let read_args = ChannelManagerReadArgs {
38753909
default_config: UserConfig::default(),
38763910
keys_manager: &keys_manager,
38773911
fee_estimator: &fee_estimator,
38783912
monitor: nodes[0].chan_monitor,
38793913
tx_broadcaster: nodes[0].tx_broadcaster.clone(),
38803914
logger: Arc::new(test_utils::TestLogger::new()),
38813915
channel_monitors: &mut node_0_monitors.iter_mut().map(|monitor| { (monitor.get_funding_txo().unwrap(), monitor) }).collect(),
3882-
}).unwrap();
3916+
};
3917+
3918+
let (_, nodes_0_deserialized_tmp) =
3919+
<(Sha256dHash, ChannelManager<EnforcingChannelKeys, &test_utils::TestChannelMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator>)>::read(&mut nodes_0_read, read_args).unwrap();
38833920
nodes_0_deserialized = nodes_0_deserialized_tmp;
38843921
assert!(nodes_0_read.is_empty());
38853922

0 commit comments

Comments
 (0)