@@ -30,9 +30,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
3030use bitcoin:: hash_types:: { BlockHash , WPubkeyHash } ;
3131
3232use lightning:: chain;
33- use lightning:: chain:: Confirm ;
34- use lightning:: chain:: chainmonitor;
35- use lightning:: chain:: channelmonitor;
33+ use lightning:: chain:: { chainmonitor, channelmonitor, Confirm , Watch } ;
3634use lightning:: chain:: channelmonitor:: { ChannelMonitor , ChannelMonitorUpdateErr , MonitorEvent } ;
3735use lightning:: chain:: transaction:: OutPoint ;
3836use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
@@ -48,7 +46,6 @@ use lightning::util::logger::Logger;
4846use lightning:: util:: config:: UserConfig ;
4947use lightning:: util:: events:: { EventsProvider , MessageSendEventsProvider } ;
5048use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
51- use lightning:: util:: test_utils:: OnlyReadsKeysInterface ;
5249use lightning:: routing:: router:: { Route , RouteHop } ;
5350
5451
@@ -91,6 +88,7 @@ impl Writer for VecWriter {
9188
9289struct TestChainMonitor {
9390 pub logger : Arc < dyn Logger > ,
91+ pub keys : Arc < KeyProvider > ,
9492 pub chain_monitor : Arc < chainmonitor:: ChainMonitor < EnforcingSigner , Arc < dyn chain:: Filter > , Arc < TestBroadcaster > , Arc < FuzzEstimator > , Arc < dyn Logger > , Arc < TestPersister > > > ,
9593 pub update_ret : Mutex < Result < ( ) , channelmonitor:: ChannelMonitorUpdateErr > > ,
9694 // If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
@@ -102,10 +100,11 @@ struct TestChainMonitor {
102100 pub should_update_manager : atomic:: AtomicBool ,
103101}
104102impl TestChainMonitor {
105- pub fn new ( broadcaster : Arc < TestBroadcaster > , logger : Arc < dyn Logger > , feeest : Arc < FuzzEstimator > , persister : Arc < TestPersister > ) -> Self {
103+ pub fn new ( broadcaster : Arc < TestBroadcaster > , logger : Arc < dyn Logger > , feeest : Arc < FuzzEstimator > , persister : Arc < TestPersister > , keys : Arc < KeyProvider > ) -> Self {
106104 Self {
107105 chain_monitor : Arc :: new ( chainmonitor:: ChainMonitor :: new ( None , broadcaster, logger. clone ( ) , feeest, persister) ) ,
108106 logger,
107+ keys,
109108 update_ret : Mutex :: new ( Ok ( ( ) ) ) ,
110109 latest_monitors : Mutex :: new ( HashMap :: new ( ) ) ,
111110 should_update_manager : atomic:: AtomicBool :: new ( false ) ,
@@ -131,12 +130,13 @@ impl chain::Watch<EnforcingSigner> for TestChainMonitor {
131130 hash_map:: Entry :: Vacant ( _) => panic ! ( "Didn't have monitor on update call" ) ,
132131 } ;
133132 let deserialized_monitor = <( BlockHash , channelmonitor:: ChannelMonitor < EnforcingSigner > ) >::
134- read ( & mut Cursor :: new ( & map_entry. get ( ) . 1 ) , & OnlyReadsKeysInterface { } ) . unwrap ( ) . 1 ;
133+ read ( & mut Cursor :: new ( & map_entry. get ( ) . 1 ) , & * self . keys ) . unwrap ( ) . 1 ;
135134 deserialized_monitor. update_monitor ( & update, & & TestBroadcaster { } , & & FuzzEstimator { } , & self . logger ) . unwrap ( ) ;
136135 let mut ser = VecWriter ( Vec :: new ( ) ) ;
137136 deserialized_monitor. write ( & mut ser) . unwrap ( ) ;
138137 map_entry. insert ( ( update. update_id , ser. 0 ) ) ;
139138 self . should_update_manager . store ( true , atomic:: Ordering :: Relaxed ) ;
139+ assert ! ( self . chain_monitor. update_channel( funding_txo, update) . is_ok( ) ) ;
140140 self . update_ret . lock ( ) . unwrap ( ) . clone ( )
141141 }
142142
@@ -332,9 +332,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
332332 macro_rules! make_node {
333333 ( $node_id: expr) => { {
334334 let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
335- let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) ) ) ;
336-
337335 let keys_manager = Arc :: new( KeyProvider { node_id: $node_id, rand_bytes_id: atomic:: AtomicU8 :: new( 0 ) , revoked_commitments: Mutex :: new( HashMap :: new( ) ) } ) ;
336+ let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone( & keys_manager) ) ) ;
337+
338338 let mut config = UserConfig :: default ( ) ;
339339 config. channel_options. fee_proportional_millionths = 0 ;
340340 config. channel_options. announced_channel = true ;
@@ -352,7 +352,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
352352 ( $ser: expr, $node_id: expr, $old_monitors: expr, $keys_manager: expr) => { {
353353 let keys_manager = Arc :: clone( & $keys_manager) ;
354354 let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
355- let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) ) ) ;
355+ let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone ( & $keys_manager ) ) ) ;
356356
357357 let mut config = UserConfig :: default ( ) ;
358358 config. channel_options. fee_proportional_millionths = 0 ;
@@ -361,7 +361,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
361361 let mut monitors = HashMap :: new( ) ;
362362 let mut old_monitors = $old_monitors. latest_monitors. lock( ) . unwrap( ) ;
363363 for ( outpoint, ( update_id, monitor_ser) ) in old_monitors. drain( ) {
364- monitors. insert( outpoint, <( BlockHash , ChannelMonitor <EnforcingSigner >) >:: read( & mut Cursor :: new( & monitor_ser) , & OnlyReadsKeysInterface { } ) . expect( "Failed to read monitor" ) . 1 ) ;
364+ monitors. insert( outpoint, <( BlockHash , ChannelMonitor <EnforcingSigner >) >:: read( & mut Cursor :: new( & monitor_ser) , & * $keys_manager ) . expect( "Failed to read monitor" ) . 1 ) ;
365365 chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( outpoint, ( update_id, monitor_ser) ) ;
366366 }
367367 let mut monitor_refs = HashMap :: new( ) ;
@@ -379,7 +379,11 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
379379 channel_monitors: monitor_refs,
380380 } ;
381381
382- ( <( BlockHash , ChanMan ) >:: read( & mut Cursor :: new( & $ser. 0 ) , read_args) . expect( "Failed to read manager" ) . 1 , chain_monitor)
382+ let res = ( <( BlockHash , ChanMan ) >:: read( & mut Cursor :: new( & $ser. 0 ) , read_args) . expect( "Failed to read manager" ) . 1 , chain_monitor. clone( ) ) ;
383+ for ( funding_txo, mon) in monitors. drain( ) {
384+ assert!( chain_monitor. chain_monitor. watch_channel( funding_txo, mon) . is_ok( ) ) ;
385+ }
386+ res
383387 } }
384388 }
385389
0 commit comments