@@ -958,3 +958,45 @@ fn test_zero_conf_accept_reject() {
958
958
_ => panic ! ( ) ,
959
959
}
960
960
}
961
+
962
+ #[ test]
963
+ fn test_connect_before_funding ( ) {
964
+ // Tests for a particularly dumb explicit panic that existed prior to 0.0.111 for 0conf
965
+ // channels. If we received a block while awaiting funding for 0-conf channels we'd hit an
966
+ // explicit panic when deciding if we should broadcast our channel_ready message.
967
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
968
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
969
+
970
+ let mut manually_accept_conf = test_default_channel_config ( ) ;
971
+ manually_accept_conf. manually_accept_inbound_channels = true ;
972
+
973
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf) ] ) ;
974
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
975
+
976
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100_000 , 10_001 , 42 , None ) . unwrap ( ) ;
977
+ let open_channel = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
978
+
979
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel) ;
980
+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
981
+ assert_eq ! ( events. len( ) , 1 ) ;
982
+ match events[ 0 ] {
983
+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
984
+ nodes[ 1 ] . node . accept_inbound_channel_from_trusted_peer_0conf ( & temporary_channel_id, & nodes[ 0 ] . node . get_our_node_id ( ) , 0 ) . unwrap ( ) ;
985
+ } ,
986
+ _ => panic ! ( "Unexpected event" ) ,
987
+ } ;
988
+
989
+ let mut accept_channel = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
990
+ assert_eq ! ( accept_channel. minimum_depth, 0 ) ;
991
+ nodes[ 0 ] . node . handle_accept_channel ( & nodes[ 1 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & accept_channel) ;
992
+
993
+ let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
994
+ assert_eq ! ( events. len( ) , 1 ) ;
995
+ match events[ 0 ] {
996
+ Event :: FundingGenerationReady { .. } => { } ,
997
+ _ => panic ! ( "Unexpected event" ) ,
998
+ }
999
+
1000
+ connect_blocks ( & nodes[ 0 ] , 1 ) ;
1001
+ connect_blocks ( & nodes[ 1 ] , 1 ) ;
1002
+ }
0 commit comments