@@ -958,3 +958,45 @@ fn test_zero_conf_accept_reject() {
958958 _ => panic ! ( ) ,
959959 }
960960}
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