@@ -7363,6 +7363,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
73637363mod tests {
73647364 use bitcoin:: hashes:: Hash ;
73657365 use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
7366+ use bitcoin:: hashes:: hex:: FromHex ;
7367+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
7368+ use bitcoin:: secp256k1:: ecdsa:: Signature ;
7369+ use bitcoin:: secp256k1:: ffi:: Signature as FFISignature ;
7370+ use bitcoin:: blockdata:: script:: Script ;
7371+ use bitcoin:: Txid ;
73667372 use core:: time:: Duration ;
73677373 use core:: sync:: atomic:: Ordering ;
73687374 use ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
@@ -7371,7 +7377,7 @@ mod tests {
73717377 use ln:: features:: InitFeatures ;
73727378 use ln:: functional_test_utils:: * ;
73737379 use ln:: msgs;
7374- use ln:: msgs:: ChannelMessageHandler ;
7380+ use ln:: msgs:: { ChannelMessageHandler , OptionalField } ;
73757381 use routing:: router:: { PaymentParameters , RouteParameters , find_route} ;
73767382 use util:: errors:: APIError ;
73777383 use util:: events:: { Event , MessageSendEvent , MessageSendEventsProvider } ;
@@ -7980,6 +7986,209 @@ mod tests {
79807986 nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
79817987 nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
79827988 }
7989+
7990+ fn check_unkown_peer_msg_event < ' a , ' b : ' a , ' c : ' b > ( node : & Node < ' a , ' b , ' c > , closing_node_id : PublicKey , closed_channel_id : [ u8 ; 32 ] ) {
7991+ let close_msg_ev = node. node . get_and_clear_pending_msg_events ( ) ;
7992+ let expected_error_str = format ! ( "Can't find a peer with a node_id matching the passed counterparty_node_id {}" , closing_node_id) ;
7993+ match close_msg_ev[ 0 ] {
7994+ MessageSendEvent :: HandleError {
7995+ ref node_id, action : msgs:: ErrorAction :: SendErrorMessage {
7996+ msg : msgs:: ErrorMessage { ref channel_id, ref data }
7997+ }
7998+ } => {
7999+ assert_eq ! ( * node_id, closing_node_id) ;
8000+ assert_eq ! ( * data, expected_error_str) ;
8001+ assert_eq ! ( * channel_id, closed_channel_id) ;
8002+ }
8003+ _ => panic ! ( "Unexpected event" ) ,
8004+ }
8005+ }
8006+
8007+ fn check_unkown_peer_error < T > ( res_err : Result < T , APIError > , expected_public_key : PublicKey ) {
8008+ match res_err {
8009+ Err ( APIError :: APIMisuseError { err } ) => {
8010+ assert_eq ! ( err, format!( "Can't find a peer with a node_id matching the passed counterparty_node_id {}" , expected_public_key) ) ;
8011+ } ,
8012+ Ok ( _) => panic ! ( "Unexpected Ok" ) ,
8013+ Err ( _) => panic ! ( "Unexpected Error" ) ,
8014+ }
8015+ }
8016+
8017+ #[ test]
8018+ fn test_api_calls_with_unkown_counterparty_node ( ) {
8019+ // Tests that our API functions and message handlers that expects a `counterparty_node_id`
8020+ // as input, behaves as expected if the `counterparty_node_id` is an unkown peer in the
8021+ // `ChannelManager::per_peer_state` map.
8022+ let chanmon_cfg = create_chanmon_cfgs ( 2 ) ;
8023+ let node_cfg = create_node_cfgs ( 2 , & chanmon_cfg) ;
8024+ let node_chanmgr = create_node_chanmgrs ( 2 , & node_cfg, & [ None , None ] ) ;
8025+ let nodes = create_network ( 2 , & node_cfg, & node_chanmgr) ;
8026+
8027+ // Boilerplate code to produce `open_channel` and `accept_channel` msgs more densly than
8028+ // creating dummy ones.
8029+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 1_000_000 , 500_000_000 , 42 , None ) . unwrap ( ) ;
8030+ let open_channel_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8031+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel_msg) ;
8032+ let accept_channel_msg = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
8033+
8034+ // Dummy values
8035+ let channel_id = [ 4 ; 32 ] ;
8036+ let signature = Signature :: from ( unsafe { FFISignature :: new ( ) } ) ;
8037+ let unkown_public_key = PublicKey :: from_secret_key ( & Secp256k1 :: signing_only ( ) , & SecretKey :: from_slice ( & [ 42 ; 32 ] ) . unwrap ( ) ) ;
8038+
8039+ // Dummy msgs
8040+ let funding_created_msg = msgs:: FundingCreated {
8041+ temporary_channel_id : open_channel_msg. temporary_channel_id ,
8042+ funding_txid : Txid :: from_hex ( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) ,
8043+ funding_output_index : 0 ,
8044+ signature : signature,
8045+ } ;
8046+
8047+ let funding_signed_msg = msgs:: FundingSigned {
8048+ channel_id : channel_id,
8049+ signature : signature,
8050+ } ;
8051+
8052+ let channel_ready_msg = msgs:: ChannelReady {
8053+ channel_id : channel_id,
8054+ next_per_commitment_point : unkown_public_key,
8055+ short_channel_id_alias : None ,
8056+ } ;
8057+
8058+ let announcement_signatures_msg = msgs:: AnnouncementSignatures {
8059+ channel_id : channel_id,
8060+ short_channel_id : 0 ,
8061+ node_signature : signature,
8062+ bitcoin_signature : signature,
8063+ } ;
8064+
8065+ let channel_reestablish_msg = msgs:: ChannelReestablish {
8066+ channel_id : channel_id,
8067+ next_local_commitment_number : 0 ,
8068+ next_remote_commitment_number : 0 ,
8069+ data_loss_protect : OptionalField :: Absent ,
8070+ } ;
8071+
8072+ let closing_signed_msg = msgs:: ClosingSigned {
8073+ channel_id : channel_id,
8074+ fee_satoshis : 1000 ,
8075+ signature : signature,
8076+ fee_range : None ,
8077+ } ;
8078+
8079+ let shutdown_msg = msgs:: Shutdown {
8080+ channel_id : channel_id,
8081+ scriptpubkey : Script :: new ( ) ,
8082+ } ;
8083+
8084+ let onion_routing_packet = msgs:: OnionPacket {
8085+ version : 255 ,
8086+ public_key : Ok ( unkown_public_key) ,
8087+ hop_data : [ 1 ; 20 * 65 ] ,
8088+ hmac : [ 2 ; 32 ]
8089+ } ;
8090+
8091+ let update_add_htlc_msg = msgs:: UpdateAddHTLC {
8092+ channel_id : channel_id,
8093+ htlc_id : 0 ,
8094+ amount_msat : 1000000 ,
8095+ payment_hash : PaymentHash ( [ 1 ; 32 ] ) ,
8096+ cltv_expiry : 821716 ,
8097+ onion_routing_packet
8098+ } ;
8099+
8100+ let commitment_signed_msg = msgs:: CommitmentSigned {
8101+ channel_id : channel_id,
8102+ signature : signature,
8103+ htlc_signatures : Vec :: new ( ) ,
8104+ } ;
8105+
8106+ let update_fee_msg = msgs:: UpdateFee {
8107+ channel_id : channel_id,
8108+ feerate_per_kw : 1000 ,
8109+ } ;
8110+
8111+ let malformed_update_msg = msgs:: UpdateFailMalformedHTLC {
8112+ channel_id : channel_id,
8113+ htlc_id : 0 ,
8114+ sha256_of_onion : [ 1 ; 32 ] ,
8115+ failure_code : 0x8000 ,
8116+ } ;
8117+
8118+ let fulfill_update_msg = msgs:: UpdateFulfillHTLC {
8119+ channel_id : channel_id,
8120+ htlc_id : 0 ,
8121+ payment_preimage : PaymentPreimage ( [ 1 ; 32 ] ) ,
8122+ } ;
8123+
8124+ let fail_update_msg = msgs:: UpdateFailHTLC {
8125+ channel_id : channel_id,
8126+ htlc_id : 0 ,
8127+ reason : msgs:: OnionErrorPacket { data : Vec :: new ( ) } ,
8128+ } ;
8129+
8130+ let revoke_and_ack_msg = msgs:: RevokeAndACK {
8131+ channel_id : channel_id,
8132+ per_commitment_secret : [ 1 ; 32 ] ,
8133+ next_per_commitment_point : unkown_public_key,
8134+ } ;
8135+
8136+ // Test the API functions and message handlers.
8137+ check_unkown_peer_error ( nodes[ 0 ] . node . create_channel ( unkown_public_key, 1_000_000 , 500_000_000 , 42 , None ) , unkown_public_key) ;
8138+
8139+ nodes[ 1 ] . node . handle_open_channel ( & unkown_public_key, InitFeatures :: known ( ) , & open_channel_msg) ;
8140+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8141+
8142+ nodes[ 0 ] . node . handle_accept_channel ( & unkown_public_key, InitFeatures :: known ( ) , & accept_channel_msg) ;
8143+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8144+
8145+ check_unkown_peer_error ( nodes[ 0 ] . node . accept_inbound_channel ( & open_channel_msg. temporary_channel_id , & unkown_public_key, 42 ) , unkown_public_key) ;
8146+ nodes[ 1 ] . node . handle_funding_created ( & unkown_public_key, & funding_created_msg) ;
8147+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8148+
8149+ nodes[ 0 ] . node . handle_funding_signed ( & unkown_public_key, & funding_signed_msg) ;
8150+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8151+
8152+ nodes[ 0 ] . node . handle_channel_ready ( & unkown_public_key, & channel_ready_msg) ;
8153+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8154+
8155+ nodes[ 1 ] . node . handle_announcement_signatures ( & unkown_public_key, & announcement_signatures_msg) ;
8156+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8157+
8158+ check_unkown_peer_error ( nodes[ 0 ] . node . close_channel ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8159+
8160+ check_unkown_peer_error ( nodes[ 0 ] . node . force_close_channel ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8161+
8162+ nodes[ 0 ] . node . handle_shutdown ( & unkown_public_key, & InitFeatures :: known ( ) , & shutdown_msg) ;
8163+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8164+
8165+ nodes[ 1 ] . node . handle_closing_signed ( & unkown_public_key, & closing_signed_msg) ;
8166+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8167+
8168+ nodes[ 0 ] . node . handle_channel_reestablish ( & unkown_public_key, & channel_reestablish_msg) ;
8169+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8170+
8171+ nodes[ 1 ] . node . handle_update_add_htlc ( & unkown_public_key, & update_add_htlc_msg) ;
8172+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8173+
8174+ nodes[ 1 ] . node . handle_commitment_signed ( & unkown_public_key, & commitment_signed_msg) ;
8175+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8176+
8177+ nodes[ 1 ] . node . handle_update_fail_malformed_htlc ( & unkown_public_key, & malformed_update_msg) ;
8178+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8179+
8180+ nodes[ 1 ] . node . handle_update_fail_htlc ( & unkown_public_key, & fail_update_msg) ;
8181+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8182+
8183+ nodes[ 1 ] . node . handle_update_fulfill_htlc ( & unkown_public_key, & fulfill_update_msg) ;
8184+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8185+
8186+ nodes[ 1 ] . node . handle_revoke_and_ack ( & unkown_public_key, & revoke_and_ack_msg) ;
8187+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8188+
8189+ nodes[ 1 ] . node . handle_update_fee ( & unkown_public_key, & update_fee_msg) ;
8190+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8191+ }
79838192}
79848193
79858194#[ cfg( all( any( test, feature = "_test_utils" ) , feature = "_bench_unstable" ) ) ]
0 commit comments