@@ -7363,6 +7363,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
7363
7363
mod tests {
7364
7364
use bitcoin:: hashes:: Hash ;
7365
7365
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 ;
7366
7372
use core:: time:: Duration ;
7367
7373
use core:: sync:: atomic:: Ordering ;
7368
7374
use ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
@@ -7371,7 +7377,7 @@ mod tests {
7371
7377
use ln:: features:: InitFeatures ;
7372
7378
use ln:: functional_test_utils:: * ;
7373
7379
use ln:: msgs;
7374
- use ln:: msgs:: ChannelMessageHandler ;
7380
+ use ln:: msgs:: { ChannelMessageHandler , OptionalField } ;
7375
7381
use routing:: router:: { PaymentParameters , RouteParameters , find_route} ;
7376
7382
use util:: errors:: APIError ;
7377
7383
use util:: events:: { Event , MessageSendEvent , MessageSendEventsProvider } ;
@@ -7980,6 +7986,209 @@ mod tests {
7980
7986
nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
7981
7987
nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
7982
7988
}
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
+ }
7983
8192
}
7984
8193
7985
8194
#[ cfg( all( any( test, feature = "_test_utils" ) , feature = "_bench_unstable" ) ) ]
0 commit comments