@@ -3175,7 +3175,7 @@ impl<'a, R : ::std::io::Read> ReadableArgs<R, ChannelManagerReadArgs<'a>> for (S
31753175mod tests {
31763176 use chain:: chaininterface;
31773177 use chain:: transaction:: OutPoint ;
3178- use chain:: chaininterface:: ChainListener ;
3178+ use chain:: chaininterface:: { ChainListener , ChainWatchInterface } ;
31793179 use chain:: keysinterface:: KeysInterface ;
31803180 use chain:: keysinterface;
31813181 use ln:: channelmanager:: { ChannelManager , ChannelManagerReadArgs , OnionKeys , PaymentFailReason , RAACommitmentOrder } ;
@@ -6869,6 +6869,68 @@ mod tests {
68696869 }
68706870 }
68716871
6872+ #[ test]
6873+ fn test_no_txn_manager_serialize_deserialize ( ) {
6874+ let mut nodes = create_network ( 2 ) ;
6875+
6876+ let tx = create_chan_between_nodes_with_value_init ( & nodes[ 0 ] , & nodes[ 1 ] , 100000 , 10001 ) ;
6877+
6878+ nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6879+
6880+ let nodes_0_serialized = nodes[ 0 ] . node . encode ( ) ;
6881+ let mut chan_0_monitor_serialized = VecWriter ( Vec :: new ( ) ) ;
6882+ nodes[ 0 ] . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) . iter ( ) . next ( ) . unwrap ( ) . 1 . write_for_disk ( & mut chan_0_monitor_serialized) . unwrap ( ) ;
6883+
6884+ nodes[ 0 ] . chan_monitor = Arc :: new ( test_utils:: TestChannelMonitor :: new ( nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . tx_broadcaster . clone ( ) ) ) ;
6885+ let mut chan_0_monitor_read = & chan_0_monitor_serialized. 0 [ ..] ;
6886+ let ( _, chan_0_monitor) = <( Sha256dHash , ChannelMonitor ) >:: read ( & mut chan_0_monitor_read, Arc :: new ( test_utils:: TestLogger :: new ( ) ) ) . unwrap ( ) ;
6887+ assert ! ( chan_0_monitor_read. is_empty( ) ) ;
6888+
6889+ let mut nodes_0_read = & nodes_0_serialized[ ..] ;
6890+ let keys_manager = Arc :: new ( keysinterface:: KeysManager :: new ( & nodes[ 0 ] . node_seed , Network :: Testnet , Arc :: new ( test_utils:: TestLogger :: new ( ) ) ) ) ;
6891+ let ( _, nodes_0_deserialized) = {
6892+ let mut channel_monitors = HashMap :: new ( ) ;
6893+ channel_monitors. insert ( chan_0_monitor. get_funding_txo ( ) . unwrap ( ) , & chan_0_monitor) ;
6894+ <( Sha256dHash , ChannelManager ) >:: read ( & mut nodes_0_read, ChannelManagerReadArgs {
6895+ keys_manager,
6896+ fee_estimator : Arc :: new ( test_utils:: TestFeeEstimator { sat_per_kw : 253 } ) ,
6897+ monitor : nodes[ 0 ] . chan_monitor . clone ( ) ,
6898+ chain_monitor : nodes[ 0 ] . chain_monitor . clone ( ) ,
6899+ tx_broadcaster : nodes[ 0 ] . tx_broadcaster . clone ( ) ,
6900+ logger : Arc :: new ( test_utils:: TestLogger :: new ( ) ) ,
6901+ channel_monitors : & channel_monitors,
6902+ } ) . unwrap ( )
6903+ } ;
6904+ assert ! ( nodes_0_read. is_empty( ) ) ;
6905+
6906+ assert ! ( nodes[ 0 ] . chan_monitor. add_update_monitor( chan_0_monitor. get_funding_txo( ) . unwrap( ) , chan_0_monitor) . is_ok( ) ) ;
6907+ nodes[ 0 ] . node = Arc :: new ( nodes_0_deserialized) ;
6908+ let nodes_0_as_listener: Arc < ChainListener > = nodes[ 0 ] . node . clone ( ) ;
6909+ nodes[ 0 ] . chain_monitor . register_listener ( Arc :: downgrade ( & nodes_0_as_listener) ) ;
6910+ assert_eq ! ( nodes[ 0 ] . node. list_channels( ) . len( ) , 1 ) ;
6911+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
6912+
6913+ nodes[ 0 ] . node . peer_connected ( & nodes[ 1 ] . node . get_our_node_id ( ) ) ;
6914+ let reestablish_1 = get_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6915+ nodes[ 1 ] . node . peer_connected ( & nodes[ 0 ] . node . get_our_node_id ( ) ) ;
6916+ let reestablish_2 = get_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6917+
6918+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 0 ] ) . unwrap ( ) ;
6919+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
6920+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 0 ] ) . unwrap ( ) ;
6921+ assert ! ( nodes[ 0 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
6922+
6923+ let ( funding_locked, _) = create_chan_between_nodes_with_value_confirm ( & nodes[ 0 ] , & nodes[ 1 ] , & tx) ;
6924+ let ( announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b ( & nodes[ 0 ] , & nodes[ 1 ] , & funding_locked) ;
6925+ for node in nodes. iter ( ) {
6926+ assert ! ( node. router. handle_channel_announcement( & announcement) . unwrap( ) ) ;
6927+ node. router . handle_channel_update ( & as_update) . unwrap ( ) ;
6928+ node. router . handle_channel_update ( & bs_update) . unwrap ( ) ;
6929+ }
6930+
6931+ send_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 1000000 ) ;
6932+ }
6933+
68726934 #[ test]
68736935 fn test_simple_manager_serialize_deserialize ( ) {
68746936 let mut nodes = create_network ( 2 ) ;
0 commit comments