- let mut chan_0_monitor_serialized = test_utils::TestVecWriter(Vec::new());
- get_monitor!(nodes[0], chan_id).write(&mut chan_0_monitor_serialized).unwrap();
-
- let mut chan_1_monitor_serialized = test_utils::TestVecWriter(Vec::new());
-
- macro_rules! reload_node {
- ($chain_monitor: ident, $chan_manager: ident, $persister: ident) => { {
- $persister = test_utils::TestPersister::new();
- let keys_manager = &chanmon_cfgs[0].keys_manager;
- $chain_monitor = test_utils::TestChainMonitor::new(Some(nodes[0].chain_source), nodes[0].tx_broadcaster.clone(), nodes[0].logger, node_cfgs[0].fee_estimator, &$persister, keys_manager);
- nodes[0].chain_monitor = &$chain_monitor;
- let mut chan_0_monitor_read = &chan_0_monitor_serialized.0[..];
- let (_, mut chan_0_monitor) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
- &mut chan_0_monitor_read, keys_manager).unwrap();
- assert!(chan_0_monitor_read.is_empty());
-
- let mut chan_1_monitor = None;
- let mut channel_monitors = HashMap::new();
- channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
-
- if !chan_1_monitor_serialized.0.is_empty() {
- let mut chan_1_monitor_read = &chan_1_monitor_serialized.0[..];
- chan_1_monitor = Some(<(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
- &mut chan_1_monitor_read, keys_manager).unwrap().1);
- assert!(chan_1_monitor_read.is_empty());
- channel_monitors.insert(chan_1_monitor.as_ref().unwrap().get_funding_txo().0, chan_1_monitor.as_mut().unwrap());
- }
-
- let mut nodes_0_read = &nodes_0_serialized[..];
- let (_, nodes_0_deserialized_tmp) = {
- <(BlockHash, ChannelManager<&test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
- default_config: test_default_channel_config(),
- keys_manager,
- fee_estimator: node_cfgs[0].fee_estimator,
- chain_monitor: nodes[0].chain_monitor,
- tx_broadcaster: nodes[0].tx_broadcaster.clone(),
- logger: nodes[0].logger,
- channel_monitors,
- }).unwrap()
- };
- $chan_manager = nodes_0_deserialized_tmp;
- assert!(nodes_0_read.is_empty());
-
- assert_eq!(nodes[0].chain_monitor.watch_channel(chan_0_monitor.get_funding_txo().0, chan_0_monitor),
- ChannelMonitorUpdateStatus::Completed);
- if !chan_1_monitor_serialized.0.is_empty() {
- let funding_txo = chan_1_monitor.as_ref().unwrap().get_funding_txo().0;
- assert_eq!(nodes[0].chain_monitor.watch_channel(funding_txo, chan_1_monitor.unwrap()),
- ChannelMonitorUpdateStatus::Completed);
- }
- nodes[0].node = &$chan_manager;
- check_added_monitors!(nodes[0], if !chan_1_monitor_serialized.0.is_empty() { 2 } else { 1 });
-
- nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
- } }
- }