@@ -3839,6 +3839,13 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38393839 create_announced_chan_between_nodes ( & nodes, 2 , 0 , InitFeatures :: supported ( ) , InitFeatures :: supported ( ) ) ;
38403840 let ( _, _, channel_id, funding_tx) = create_announced_chan_between_nodes ( & nodes, 0 , 3 , InitFeatures :: supported ( ) , InitFeatures :: supported ( ) ) ;
38413841
3842+ let mut node_0_stale_monitors_serialized = Vec :: new ( ) ;
3843+ for monitor in nodes[ 0 ] . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) . iter ( ) {
3844+ let mut writer = test_utils:: TestVecWriter ( Vec :: new ( ) ) ;
3845+ monitor. 1 . write_for_disk ( & mut writer) . unwrap ( ) ;
3846+ node_0_stale_monitors_serialized. push ( writer. 0 ) ;
3847+ }
3848+
38423849 let ( our_payment_preimage, _) = route_payment ( & nodes[ 2 ] , & [ & nodes[ 0 ] , & nodes[ 1 ] ] , 1000000 ) ;
38433850
38443851 // Serialize the ChannelManager here, but the monitor we keep up-to-date
@@ -3861,6 +3868,15 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38613868 fee_estimator = test_utils:: TestFeeEstimator { sat_per_kw : 253 } ;
38623869 new_chan_monitor = test_utils:: TestChannelMonitor :: new ( nodes[ 0 ] . chain_monitor . clone ( ) , nodes[ 0 ] . tx_broadcaster . clone ( ) , Arc :: new ( test_utils:: TestLogger :: new ( ) ) , & fee_estimator) ;
38633870 nodes[ 0 ] . chan_monitor = & new_chan_monitor;
3871+
3872+ let mut node_0_stale_monitors = Vec :: new ( ) ;
3873+ for serialized in node_0_stale_monitors_serialized. iter ( ) {
3874+ let mut read = & serialized[ ..] ;
3875+ let ( _, monitor) = <( Sha256dHash , ChannelMonitor < EnforcingChannelKeys > ) >:: read ( & mut read, Arc :: new ( test_utils:: TestLogger :: new ( ) ) ) . unwrap ( ) ;
3876+ assert ! ( read. is_empty( ) ) ;
3877+ node_0_stale_monitors. push ( monitor) ;
3878+ }
3879+
38643880 let mut node_0_monitors = Vec :: new ( ) ;
38653881 for serialized in node_0_monitors_serialized. iter ( ) {
38663882 let mut read = & serialized[ ..] ;
@@ -3869,17 +3885,38 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
38693885 node_0_monitors. push ( monitor) ;
38703886 }
38713887
3872- let mut nodes_0_read = & nodes_0_serialized[ ..] ;
38733888 keys_manager = test_utils:: TestKeysInterface :: new ( & nodes[ 0 ] . node_seed , Network :: Testnet , Arc :: new ( test_utils:: TestLogger :: new ( ) ) ) ;
3874- let ( _, nodes_0_deserialized_tmp) = <( Sha256dHash , ChannelManager < EnforcingChannelKeys , & test_utils:: TestChannelMonitor , & test_utils:: TestBroadcaster , & test_utils:: TestKeysInterface , & test_utils:: TestFeeEstimator > ) >:: read ( & mut nodes_0_read, ChannelManagerReadArgs {
3889+
3890+ let mut nodes_0_read = & nodes_0_serialized[ ..] ;
3891+ let read_args = ChannelManagerReadArgs {
3892+ default_config : UserConfig :: default ( ) ,
3893+ keys_manager : & keys_manager,
3894+ fee_estimator : & fee_estimator,
3895+ monitor : nodes[ 0 ] . chan_monitor ,
3896+ tx_broadcaster : nodes[ 0 ] . tx_broadcaster . clone ( ) ,
3897+ logger : Arc :: new ( test_utils:: TestLogger :: new ( ) ) ,
3898+ channel_monitors : & mut node_0_stale_monitors. iter_mut ( ) . map ( |monitor| { ( monitor. get_funding_txo ( ) . unwrap ( ) , monitor) } ) . collect ( ) ,
3899+ } ;
3900+
3901+ if let Err ( msgs:: DecodeError :: InvalidValue ) =
3902+ <( Sha256dHash , ChannelManager < EnforcingChannelKeys , & test_utils:: TestChannelMonitor , & test_utils:: TestBroadcaster , & test_utils:: TestKeysInterface , & test_utils:: TestFeeEstimator > ) >:: read ( & mut nodes_0_read, read_args) {
3903+ } else {
3904+ panic ! ( "If the monitor(s) are stale, this indicates a bug and we should get an Err return" ) ;
3905+ } ;
3906+
3907+ let mut nodes_0_read = & nodes_0_serialized[ ..] ;
3908+ let read_args = ChannelManagerReadArgs {
38753909 default_config : UserConfig :: default ( ) ,
38763910 keys_manager : & keys_manager,
38773911 fee_estimator : & fee_estimator,
38783912 monitor : nodes[ 0 ] . chan_monitor ,
38793913 tx_broadcaster : nodes[ 0 ] . tx_broadcaster . clone ( ) ,
38803914 logger : Arc :: new ( test_utils:: TestLogger :: new ( ) ) ,
38813915 channel_monitors : & mut node_0_monitors. iter_mut ( ) . map ( |monitor| { ( monitor. get_funding_txo ( ) . unwrap ( ) , monitor) } ) . collect ( ) ,
3882- } ) . unwrap ( ) ;
3916+ } ;
3917+
3918+ let ( _, nodes_0_deserialized_tmp) =
3919+ <( Sha256dHash , ChannelManager < EnforcingChannelKeys , & test_utils:: TestChannelMonitor , & test_utils:: TestBroadcaster , & test_utils:: TestKeysInterface , & test_utils:: TestFeeEstimator > ) >:: read ( & mut nodes_0_read, read_args) . unwrap ( ) ;
38833920 nodes_0_deserialized = nodes_0_deserialized_tmp;
38843921 assert ! ( nodes_0_read. is_empty( ) ) ;
38853922
0 commit comments