@@ -3175,7 +3175,7 @@ impl<'a, R : ::std::io::Read> ReadableArgs<R, ChannelManagerReadArgs<'a>> for (S
3175
3175
mod tests {
3176
3176
use chain:: chaininterface;
3177
3177
use chain:: transaction:: OutPoint ;
3178
- use chain:: chaininterface:: ChainListener ;
3178
+ use chain:: chaininterface:: { ChainListener , ChainWatchInterface } ;
3179
3179
use chain:: keysinterface:: KeysInterface ;
3180
3180
use chain:: keysinterface;
3181
3181
use ln:: channelmanager:: { ChannelManager , ChannelManagerReadArgs , OnionKeys , PaymentFailReason , RAACommitmentOrder } ;
@@ -6869,6 +6869,68 @@ mod tests {
6869
6869
}
6870
6870
}
6871
6871
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
+
6872
6934
#[ test]
6873
6935
fn test_simple_manager_serialize_deserialize ( ) {
6874
6936
let mut nodes = create_network ( 2 ) ;
0 commit comments