@@ -8174,6 +8174,79 @@ fn test_override_0msat_htlc_minimum() {
81748174 assert_eq ! ( res. htlc_minimum_msat, 1 ) ;
81758175}
81768176
8177+ #[ test]
8178+ fn test_manually_accept_inbound_channel_request ( ) {
8179+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8180+ manually_accept_conf. manually_accept_inbound_channels = true ;
8181+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8182+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8183+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8184+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8185+
8186+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8187+ let mut res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8188+
8189+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8190+
8191+ // Assert that node[1] has no MessageSendEvent::SendAcceptChannel in the msg_events before accepting the inbound request
8192+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8193+
8194+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8195+ match events[ 0 ] {
8196+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
8197+ nodes[ 1 ] . node . accept_inbound_channel ( & temporary_channel_id) . unwrap ( ) ;
8198+ }
8199+ _ => panic ! ( "Unexpected event" ) ,
8200+ }
8201+
8202+ let accept_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8203+ assert_eq ! ( accept_msg_ev. len( ) , 1 ) ;
8204+
8205+ match accept_msg_ev[ 0 ] {
8206+ MessageSendEvent :: SendAcceptChannel { ref node_id, .. } => {
8207+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8208+ }
8209+ _ => panic ! ( "Unexpected event" ) ,
8210+ }
8211+ }
8212+
8213+ #[ test]
8214+ fn test_manually_reject_inbound_channel_request ( ) {
8215+ let mut manually_accept_conf = UserConfig :: default ( ) ;
8216+ manually_accept_conf. manually_accept_inbound_channels = true ;
8217+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8218+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8219+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , Some ( manually_accept_conf. clone ( ) ) ] ) ;
8220+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8221+
8222+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 100000 , 10001 , 42 , Some ( manually_accept_conf) ) . unwrap ( ) ;
8223+ let mut res = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8224+
8225+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & res) ;
8226+
8227+ // Assert that node[1] has no MessageSendEvent::SendAcceptChannel in the msg_events before rejecting the inbound request
8228+ assert ! ( nodes[ 1 ] . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
8229+
8230+ let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
8231+ match events[ 0 ] {
8232+ Event :: OpenChannelRequest { temporary_channel_id, .. } => {
8233+ nodes[ 1 ] . node . force_close_channel ( & temporary_channel_id) . unwrap ( ) ;
8234+ }
8235+ _ => panic ! ( "Unexpected event" ) ,
8236+ }
8237+
8238+ let close_msg_ev = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
8239+ assert_eq ! ( close_msg_ev. len( ) , 1 ) ;
8240+
8241+ match close_msg_ev[ 0 ] {
8242+ MessageSendEvent :: HandleError { ref node_id, .. } => {
8243+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
8244+ }
8245+ _ => panic ! ( "Unexpected event" ) ,
8246+ }
8247+ check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: HolderForceClosed ) ;
8248+ }
8249+
81778250#[ test]
81788251fn test_simple_mpp ( ) {
81798252 // Simple test of sending a multi-path payment.
0 commit comments