@@ -3916,12 +3916,13 @@ fn test_manager_serialize_deserialize_events() {
3916
3916
let nodes_0_deserialized: ChannelManager < EnforcingChannelKeys , & test_utils:: TestChannelMonitor , & test_utils:: TestBroadcaster , & test_utils:: TestKeysInterface , & test_utils:: TestFeeEstimator > ;
3917
3917
let mut nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
3918
3918
3919
- let channel_value = 100000 ;
3920
- let push_msat = 10001 ;
3921
- let a_flags = InitFeatures :: known ( ) ;
3922
- let b_flags = InitFeatures :: known ( ) ;
3923
- let node_a = nodes. pop ( ) . unwrap ( ) ;
3924
- let node_b = nodes. pop ( ) . unwrap ( ) ;
3919
+ // Start creating the channel, but stop right before broadcasting the event message FundingBroadcastSafe
3920
+ let channel_value = 100000 ;
3921
+ let push_msat = 10001 ;
3922
+ let a_flags = InitFeatures :: known ( ) ;
3923
+ let b_flags = InitFeatures :: known ( ) ;
3924
+ let node_a = nodes. pop ( ) . unwrap ( ) ;
3925
+ let node_b = nodes. pop ( ) . unwrap ( ) ;
3925
3926
node_a. node . create_channel ( node_b. node . get_our_node_id ( ) , channel_value, push_msat, 42 , None ) . unwrap ( ) ;
3926
3927
node_b. node . handle_open_channel ( & node_a. node . get_our_node_id ( ) , a_flags, & get_event_msg ! ( node_a, MessageSendEvent :: SendOpenChannel , node_b. node. get_our_node_id( ) ) ) ;
3927
3928
node_a. node . handle_accept_channel ( & node_b. node . get_our_node_id ( ) , b_flags, & get_event_msg ! ( node_b, MessageSendEvent :: SendAcceptChannel , node_a. node. get_our_node_id( ) ) ) ;
@@ -3947,9 +3948,10 @@ fn test_manager_serialize_deserialize_events() {
3947
3948
added_monitors. clear ( ) ;
3948
3949
}
3949
3950
3950
- nodes. push ( node_a) ;
3951
- nodes. push ( node_b) ;
3951
+ nodes. push ( node_a) ;
3952
+ nodes. push ( node_b) ;
3952
3953
3954
+ // Start the de/seriailization process mid-channel creation to check that the channel manager will hold onto events that are serialized
3953
3955
let nodes_0_serialized = nodes[ 0 ] . node . encode ( ) ;
3954
3956
let mut chan_0_monitor_serialized = test_utils:: TestVecWriter ( Vec :: new ( ) ) ;
3955
3957
nodes[ 0 ] . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) . iter ( ) . next ( ) . unwrap ( ) . 1 . write_for_disk ( & mut chan_0_monitor_serialized) . unwrap ( ) ;
@@ -3979,12 +3981,13 @@ fn test_manager_serialize_deserialize_events() {
3979
3981
} ;
3980
3982
nodes_0_deserialized = nodes_0_deserialized_tmp;
3981
3983
assert ! ( nodes_0_read. is_empty( ) ) ;
3982
-
3984
+
3983
3985
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
3984
3986
3985
3987
assert ! ( nodes[ 0 ] . chan_monitor. add_monitor( chan_0_monitor. get_funding_txo( ) , chan_0_monitor) . is_ok( ) ) ;
3986
3988
nodes[ 0 ] . node = & nodes_0_deserialized;
3987
3989
3990
+ // After deserializing, make sure the FundingBroadcastSafe event is still held by the channel manager
3988
3991
let events_4 = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
3989
3992
assert_eq ! ( events_4. len( ) , 1 ) ;
3990
3993
match events_4[ 0 ] {
@@ -3994,6 +3997,8 @@ fn test_manager_serialize_deserialize_events() {
3994
3997
} ,
3995
3998
_ => panic ! ( "Unexpected event" ) ,
3996
3999
} ;
4000
+
4001
+ // Make sure the channel is functioning as thought the de/serialization never happened
3997
4002
nodes[ 0 ] . block_notifier . register_listener ( nodes[ 0 ] . node ) ;
3998
4003
assert_eq ! ( nodes[ 0 ] . node. list_channels( ) . len( ) , 1 ) ;
3999
4004
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
0 commit comments