Revert "Merge pull request #819 from TheBlueMatt/2021-03-810-rebased"
[rust-lightning] / lightning / src / util / test_utils.rs
index d29a55f12010cfb3a057c959248e31de841a7482..ea110023823242c0e3ae5999e353db8c7c61f1b1 100644 (file)
@@ -82,9 +82,13 @@ pub struct TestChainMonitor<'a> {
        pub chain_monitor: chainmonitor::ChainMonitor<EnforcingSigner, &'a TestChainSource, &'a chaininterface::BroadcasterInterface, &'a TestFeeEstimator, &'a TestLogger, &'a channelmonitor::Persist<EnforcingSigner>>,
        pub keys_manager: &'a TestKeysInterface,
        pub update_ret: Mutex<Option<Result<(), channelmonitor::ChannelMonitorUpdateErr>>>,
-       // If this is set to Some(), after the next return, we'll always return this until update_ret
-       // is changed:
+       /// If this is set to Some(), after the next return, we'll always return this until update_ret
+       /// is changed:
        pub next_update_ret: Mutex<Option<Result<(), channelmonitor::ChannelMonitorUpdateErr>>>,
+       /// If this is set to Some(), the next update_channel call (not watch_channel) must be a
+       /// ChannelForceClosed event for the given channel_id with should_broadcast set to the given
+       /// boolean.
+       pub expect_channel_force_closed: Mutex<Option<([u8; 32], bool)>>,
 }
 impl<'a> TestChainMonitor<'a> {
        pub fn new(chain_source: Option<&'a TestChainSource>, broadcaster: &'a chaininterface::BroadcasterInterface, logger: &'a TestLogger, fee_estimator: &'a TestFeeEstimator, persister: &'a channelmonitor::Persist<EnforcingSigner>, keys_manager: &'a TestKeysInterface) -> Self {
@@ -95,6 +99,7 @@ impl<'a> TestChainMonitor<'a> {
                        keys_manager,
                        update_ret: Mutex::new(None),
                        next_update_ret: Mutex::new(None),
+                       expect_channel_force_closed: Mutex::new(None),
                }
        }
 }
@@ -104,7 +109,7 @@ impl<'a> chain::Watch<EnforcingSigner> for TestChainMonitor<'a> {
                // to a watchtower and disk...
                let mut w = TestVecWriter(Vec::new());
                monitor.write(&mut w).unwrap();
-               let new_monitor = <(Option<BlockHash>, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(
+               let new_monitor = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(
                        &mut ::std::io::Cursor::new(&w.0), self.keys_manager).unwrap().1;
                assert!(new_monitor == monitor);
                self.latest_monitor_update_id.lock().unwrap().insert(funding_txo.to_channel_id(), (funding_txo, monitor.get_latest_update_id()));
@@ -129,6 +134,14 @@ impl<'a> chain::Watch<EnforcingSigner> for TestChainMonitor<'a> {
                assert!(channelmonitor::ChannelMonitorUpdate::read(
                                &mut ::std::io::Cursor::new(&w.0)).unwrap() == update);
 
+               if let Some(exp) = self.expect_channel_force_closed.lock().unwrap().take() {
+                       assert_eq!(funding_txo.to_channel_id(), exp.0);
+                       assert_eq!(update.updates.len(), 1);
+                       if let channelmonitor::ChannelMonitorUpdateStep::ChannelForceClosed { should_broadcast } = update.updates[0] {
+                               assert_eq!(should_broadcast, exp.1);
+                       } else { panic!(); }
+               }
+
                self.latest_monitor_update_id.lock().unwrap().insert(funding_txo.to_channel_id(), (funding_txo, update.update_id));
                let update_res = self.chain_monitor.update_channel(funding_txo, update);
                // At every point where we get a monitor update, we should be able to send a useful monitor
@@ -137,7 +150,7 @@ impl<'a> chain::Watch<EnforcingSigner> for TestChainMonitor<'a> {
                let monitor = monitors.get(&funding_txo).unwrap();
                w.0.clear();
                monitor.write(&mut w).unwrap();
-               let new_monitor = <(Option<BlockHash>, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(
+               let new_monitor = <(BlockHash, channelmonitor::ChannelMonitor<EnforcingSigner>)>::read(
                        &mut ::std::io::Cursor::new(&w.0), self.keys_manager).unwrap().1;
                assert!(new_monitor == *monitor);
                self.added_monitors.lock().unwrap().push((funding_txo, new_monitor));