@@ -3807,15 +3807,7 @@ fn test_funding_peer_disconnect() {
3807
3807
3808
3808
confirm_transaction ( & nodes[ 0 ] , & tx) ;
3809
3809
let events_1 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3810
- let chan_id;
3811
- assert_eq ! ( events_1. len( ) , 1 ) ;
3812
- match events_1[ 0 ] {
3813
- MessageSendEvent :: SendFundingLocked { ref node_id, ref msg } => {
3814
- assert_eq ! ( * node_id, nodes[ 1 ] . node. get_our_node_id( ) ) ;
3815
- chan_id = msg. channel_id ;
3816
- } ,
3817
- _ => panic ! ( "Unexpected event" ) ,
3818
- }
3810
+ assert ! ( events_1. is_empty( ) ) ;
3819
3811
3820
3812
reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
3821
3813
@@ -3824,53 +3816,107 @@ fn test_funding_peer_disconnect() {
3824
3816
3825
3817
confirm_transaction ( & nodes[ 1 ] , & tx) ;
3826
3818
let events_2 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
3827
- assert_eq ! ( events_2. len( ) , 2 ) ;
3828
- let funding_locked = match events_2[ 0 ] {
3819
+ assert ! ( events_2. is_empty( ) ) ;
3820
+
3821
+ nodes[ 0 ] . node . peer_connected ( & nodes[ 1 ] . node . get_our_node_id ( ) , & msgs:: Init { features : InitFeatures :: empty ( ) } ) ;
3822
+ let as_reestablish = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendChannelReestablish , nodes[ 1 ] . node. get_our_node_id( ) ) ;
3823
+ nodes[ 1 ] . node . peer_connected ( & nodes[ 0 ] . node . get_our_node_id ( ) , & msgs:: Init { features : InitFeatures :: empty ( ) } ) ;
3824
+ let bs_reestablish = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendChannelReestablish , nodes[ 0 ] . node. get_our_node_id( ) ) ;
3825
+
3826
+ // nodes[0] hasn't yet received a funding_locked, so it only sends that on reconnect.
3827
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_reestablish) ;
3828
+ let events_3 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3829
+ assert_eq ! ( events_3. len( ) , 1 ) ;
3830
+ let as_funding_locked = match events_3[ 0 ] {
3831
+ MessageSendEvent :: SendFundingLocked { ref node_id, ref msg } => {
3832
+ assert_eq ! ( * node_id, nodes[ 1 ] . node. get_our_node_id( ) ) ;
3833
+ msg. clone ( )
3834
+ } ,
3835
+ _ => panic ! ( "Unexpected event {:?}" , events_3[ 0 ] ) ,
3836
+ } ;
3837
+
3838
+ // nodes[1] received nodes[0]'s funding_locked on the first reconnect above, so it should send
3839
+ // announcement_signatures as well as channel_update.
3840
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_reestablish) ;
3841
+ let events_4 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
3842
+ assert_eq ! ( events_4. len( ) , 3 ) ;
3843
+ let chan_id;
3844
+ let bs_funding_locked = match events_4[ 0 ] {
3829
3845
MessageSendEvent :: SendFundingLocked { ref node_id, ref msg } => {
3830
3846
assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
3847
+ chan_id = msg. channel_id ;
3831
3848
msg. clone ( )
3832
3849
} ,
3833
- _ => panic ! ( "Unexpected event" ) ,
3850
+ _ => panic ! ( "Unexpected event {:?}" , events_4 [ 0 ] ) ,
3834
3851
} ;
3835
- let bs_announcement_sigs = match events_2 [ 1 ] {
3852
+ let bs_announcement_sigs = match events_4 [ 1 ] {
3836
3853
MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } => {
3837
3854
assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
3838
3855
msg. clone ( )
3839
3856
} ,
3840
- _ => panic ! ( "Unexpected event" ) ,
3857
+ _ => panic ! ( "Unexpected event {:?}" , events_4 [ 1 ] ) ,
3841
3858
} ;
3859
+ match events_4[ 2 ] {
3860
+ MessageSendEvent :: SendChannelUpdate { ref node_id, msg : _ } => {
3861
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
3862
+ } ,
3863
+ _ => panic ! ( "Unexpected event {:?}" , events_4[ 2 ] ) ,
3864
+ }
3842
3865
3843
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( true , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
3866
+ // Re-deliver nodes[0]'s funding_locked, which nodes[1] can safely ignore. It currently
3867
+ // generates a duplicative announcement_signatures
3868
+ nodes[ 1 ] . node . handle_funding_locked ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_funding_locked) ;
3869
+ let events_5 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
3870
+ assert_eq ! ( events_5. len( ) , 1 ) ;
3871
+ match events_5[ 0 ] {
3872
+ MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } => {
3873
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
3874
+ assert_eq ! ( * msg, bs_announcement_sigs) ;
3875
+ } ,
3876
+ _ => panic ! ( "Unexpected event {:?}" , events_5[ 0 ] ) ,
3877
+ } ;
3844
3878
3845
- nodes[ 0 ] . node . handle_funding_locked ( & nodes[ 1 ] . node . get_our_node_id ( ) , & funding_locked) ;
3846
- nodes[ 0 ] . node . handle_announcement_signatures ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_announcement_sigs) ;
3847
- let events_3 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3848
- assert_eq ! ( events_3. len( ) , 2 ) ;
3849
- let as_announcement_sigs = match events_3[ 0 ] {
3879
+ // When we deliver nodes[1]'s funding_locked, however, nodes[0] will generate its
3880
+ // announcement_signatures.
3881
+ nodes[ 0 ] . node . handle_funding_locked ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_funding_locked) ;
3882
+ let events_6 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3883
+ assert_eq ! ( events_6. len( ) , 1 ) ;
3884
+ let as_announcement_sigs = match events_6[ 0 ] {
3850
3885
MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } => {
3851
3886
assert_eq ! ( * node_id, nodes[ 1 ] . node. get_our_node_id( ) ) ;
3852
3887
msg. clone ( )
3853
3888
} ,
3854
- _ => panic ! ( "Unexpected event" ) ,
3889
+ _ => panic ! ( "Unexpected event {:?}" , events_6 [ 0 ] ) ,
3855
3890
} ;
3856
- let ( as_announcement, as_update) = match events_3[ 1 ] {
3891
+
3892
+ // When we deliver nodes[1]'s announcement_signatures to nodes[0], nodes[0] should immediately
3893
+ // broadcast the channel announcement globally, as well as re-send its (now-public)
3894
+ // channel_update.
3895
+ nodes[ 0 ] . node . handle_announcement_signatures ( & nodes[ 1 ] . node . get_our_node_id ( ) , & bs_announcement_sigs) ;
3896
+ let events_7 = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3897
+ assert_eq ! ( events_7. len( ) , 1 ) ;
3898
+ let ( chan_announcement, as_update) = match events_7[ 0 ] {
3857
3899
MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3858
3900
( msg. clone ( ) , update_msg. clone ( ) )
3859
3901
} ,
3860
- _ => panic ! ( "Unexpected event" ) ,
3902
+ _ => panic ! ( "Unexpected event {:?}" , events_7 [ 0 ] ) ,
3861
3903
} ;
3862
3904
3905
+ // Finally, deliver nodes[0]'s announcement_signatures to nodes[1] and make sure it creates the
3906
+ // same channel_announcement.
3863
3907
nodes[ 1 ] . node . handle_announcement_signatures ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_announcement_sigs) ;
3864
- let events_4 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
3865
- assert_eq ! ( events_4 . len( ) , 1 ) ;
3866
- let ( _ , bs_update) = match events_4 [ 0 ] {
3908
+ let events_8 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
3909
+ assert_eq ! ( events_8 . len( ) , 1 ) ;
3910
+ let bs_update = match events_8 [ 0 ] {
3867
3911
MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3868
- ( msg. clone ( ) , update_msg. clone ( ) )
3912
+ assert_eq ! ( * msg, chan_announcement) ;
3913
+ update_msg. clone ( )
3869
3914
} ,
3870
- _ => panic ! ( "Unexpected event" ) ,
3915
+ _ => panic ! ( "Unexpected event {:?}" , events_8 [ 0 ] ) ,
3871
3916
} ;
3872
3917
3873
- nodes[ 0 ] . net_graph_msg_handler . handle_channel_announcement ( & as_announcement) . unwrap ( ) ;
3918
+ // Provide the channel announcement and public updates to the network graph
3919
+ nodes[ 0 ] . net_graph_msg_handler . handle_channel_announcement ( & chan_announcement) . unwrap ( ) ;
3874
3920
nodes[ 0 ] . net_graph_msg_handler . handle_channel_update ( & bs_update) . unwrap ( ) ;
3875
3921
nodes[ 0 ] . net_graph_msg_handler . handle_channel_update ( & as_update) . unwrap ( ) ;
3876
3922
@@ -3918,14 +3964,14 @@ fn test_funding_peer_disconnect() {
3918
3964
3919
3965
reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
3920
3966
3921
- // as_announcement should be re-generated exactly by broadcast_node_announcement.
3967
+ // The channel announcement should be re-generated exactly by broadcast_node_announcement.
3922
3968
nodes[ 0 ] . node . broadcast_node_announcement ( [ 0 , 0 , 0 ] , [ 0 ; 32 ] , Vec :: new ( ) ) ;
3923
3969
let msgs = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
3924
3970
let mut found_announcement = false ;
3925
3971
for event in msgs. iter ( ) {
3926
3972
match event {
3927
3973
MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, .. } => {
3928
- if * msg == as_announcement { found_announcement = true ; }
3974
+ if * msg == chan_announcement { found_announcement = true ; }
3929
3975
} ,
3930
3976
MessageSendEvent :: BroadcastNodeAnnouncement { .. } => { } ,
3931
3977
_ => panic ! ( "Unexpected event" ) ,
0 commit comments