X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Ftest_utils.rs;h=658e8b58eda5093bf8c0b4630d39a963c4b8dcb3;hb=4909d3cd6a05dfcba39fe08e6d8f539944c8ef66;hp=13cbde4aa1fe35c24702d277a48b310c77d08490;hpb=9faf6ca85f61058f0b4eba227b8dc848f07942e5;p=rust-lightning diff --git a/lightning/src/util/test_utils.rs b/lightning/src/util/test_utils.rs index 13cbde4a..658e8b58 100644 --- a/lightning/src/util/test_utils.rs +++ b/lightning/src/util/test_utils.rs @@ -16,7 +16,7 @@ use bitcoin::blockdata::transaction::Transaction; use bitcoin::blockdata::script::{Builder, Script}; use bitcoin::blockdata::block::Block; use bitcoin::blockdata::opcodes; -use bitcoin_hashes::sha256d::Hash as Sha256dHash; +use bitcoin::hashes::sha256d::Hash as Sha256dHash; use bitcoin::network::constants::Network; use secp256k1::{SecretKey, PublicKey}; @@ -51,6 +51,9 @@ pub struct TestChannelMonitor<'a> { pub latest_monitor_update_id: Mutex>, pub simple_monitor: channelmonitor::SimpleManyChannelMonitor, pub update_ret: Mutex>, + // 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>>, } impl<'a> TestChannelMonitor<'a> { pub fn new(chain_monitor: Arc, broadcaster: &'a chaininterface::BroadcasterInterface, logger: Arc, fee_estimator: &'a TestFeeEstimator) -> Self { @@ -59,6 +62,7 @@ impl<'a> TestChannelMonitor<'a> { latest_monitor_update_id: Mutex::new(HashMap::new()), simple_monitor: channelmonitor::SimpleManyChannelMonitor::new(chain_monitor, broadcaster, logger, fee_estimator), update_ret: Mutex::new(Ok(())), + next_update_ret: Mutex::new(None), } } } @@ -71,12 +75,15 @@ impl<'a> channelmonitor::ManyChannelMonitor for TestChanne let new_monitor = <(Sha256dHash, channelmonitor::ChannelMonitor)>::read( &mut ::std::io::Cursor::new(&w.0), Arc::new(TestLogger::new())).unwrap().1; assert!(new_monitor == monitor); - w.0.clear(); - monitor.write_for_watchtower(&mut w).unwrap(); // This at least shouldn't crash... self.latest_monitor_update_id.lock().unwrap().insert(funding_txo.to_channel_id(), (funding_txo, monitor.get_latest_update_id())); self.added_monitors.lock().unwrap().push((funding_txo, monitor)); assert!(self.simple_monitor.add_monitor(funding_txo, new_monitor).is_ok()); - self.update_ret.lock().unwrap().clone() + + let ret = self.update_ret.lock().unwrap().clone(); + if let Some(next_ret) = self.next_update_ret.lock().unwrap().take() { + *self.update_ret.lock().unwrap() = next_ret; + } + ret } fn update_monitor(&self, funding_txo: OutPoint, update: channelmonitor::ChannelMonitorUpdate) -> Result<(), channelmonitor::ChannelMonitorUpdateErr> { @@ -97,10 +104,13 @@ impl<'a> channelmonitor::ManyChannelMonitor for TestChanne let new_monitor = <(Sha256dHash, channelmonitor::ChannelMonitor)>::read( &mut ::std::io::Cursor::new(&w.0), Arc::new(TestLogger::new())).unwrap().1; assert!(new_monitor == *monitor); - w.0.clear(); - monitor.write_for_watchtower(&mut w).unwrap(); // This at least shouldn't crash... self.added_monitors.lock().unwrap().push((funding_txo, new_monitor)); - self.update_ret.lock().unwrap().clone() + + let ret = self.update_ret.lock().unwrap().clone(); + if let Some(next_ret) = self.next_update_ret.lock().unwrap().take() { + *self.update_ret.lock().unwrap() = next_ret; + } + ret } fn get_and_clear_pending_htlcs_updated(&self) -> Vec {