@@ -7478,17 +7478,24 @@ where
7478
7478
mod tests {
7479
7479
use bitcoin:: hashes:: Hash ;
7480
7480
use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
7481
+ use bitcoin:: hashes:: hex:: FromHex ;
7482
+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
7483
+ use bitcoin:: secp256k1:: ecdsa:: Signature ;
7484
+ use bitcoin:: secp256k1:: ffi:: Signature as FFISignature ;
7485
+ use bitcoin:: blockdata:: script:: Script ;
7486
+ use bitcoin:: Txid ;
7481
7487
use core:: time:: Duration ;
7482
7488
use core:: sync:: atomic:: Ordering ;
7483
7489
use crate :: ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
7484
- use crate :: ln:: channelmanager:: { self , inbound_payment, PaymentId , PaymentSendFailure } ;
7490
+ use crate :: ln:: channelmanager:: { self , inbound_payment, PaymentId , PaymentSendFailure , InterceptId } ;
7485
7491
use crate :: ln:: functional_test_utils:: * ;
7486
7492
use crate :: ln:: msgs;
7487
- use crate :: ln:: msgs:: ChannelMessageHandler ;
7493
+ use crate :: ln:: msgs:: { ChannelMessageHandler , OptionalField } ;
7488
7494
use crate :: routing:: router:: { PaymentParameters , RouteParameters , find_route} ;
7489
7495
use crate :: util:: errors:: APIError ;
7490
7496
use crate :: util:: events:: { Event , HTLCDestination , MessageSendEvent , MessageSendEventsProvider , ClosureReason } ;
7491
7497
use crate :: util:: test_utils;
7498
+ use crate :: util:: config:: ChannelConfig ;
7492
7499
use crate :: chain:: keysinterface:: { EntropySource , KeysInterface } ;
7493
7500
7494
7501
#[ test]
@@ -8049,6 +8056,226 @@ mod tests {
8049
8056
check_closed_event ! ( nodes[ 0 ] , 1 , ClosureReason :: CooperativeClosure ) ;
8050
8057
check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: CooperativeClosure ) ;
8051
8058
}
8059
+
8060
+ 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 ] ) {
8061
+ let close_msg_ev = node. node . get_and_clear_pending_msg_events ( ) ;
8062
+ let expected_error_str = format ! ( "Can't find a peer matching the passed counterparty node_id {}" , closing_node_id) ;
8063
+ match close_msg_ev[ 0 ] {
8064
+ MessageSendEvent :: HandleError {
8065
+ ref node_id, action : msgs:: ErrorAction :: SendErrorMessage {
8066
+ msg : msgs:: ErrorMessage { ref channel_id, ref data }
8067
+ }
8068
+ } => {
8069
+ assert_eq ! ( * node_id, closing_node_id) ;
8070
+ assert_eq ! ( * data, expected_error_str) ;
8071
+ assert_eq ! ( * channel_id, closed_channel_id) ;
8072
+ }
8073
+ _ => panic ! ( "Unexpected event" ) ,
8074
+ }
8075
+ }
8076
+
8077
+ fn check_not_connected_to_peer_error < T > ( res_err : Result < T , APIError > , expected_public_key : PublicKey ) {
8078
+ let expected_message = format ! ( "Not connected to node: {}" , expected_public_key) ;
8079
+ check_api_misuse_error_message ( expected_message, res_err)
8080
+ }
8081
+
8082
+ fn check_unkown_peer_error < T > ( res_err : Result < T , APIError > , expected_public_key : PublicKey ) {
8083
+ let expected_message = format ! ( "Can't find a peer matching the passed counterparty node_id {}" , expected_public_key) ;
8084
+ check_api_misuse_error_message ( expected_message, res_err)
8085
+ }
8086
+
8087
+ fn check_api_misuse_error_message < T > ( expected_err_message : String , res_err : Result < T , APIError > ) {
8088
+ match res_err {
8089
+ Err ( APIError :: APIMisuseError { err } ) => {
8090
+ assert_eq ! ( err, expected_err_message) ;
8091
+ } ,
8092
+ Ok ( _) => panic ! ( "Unexpected Ok" ) ,
8093
+ Err ( _) => panic ! ( "Unexpected Error" ) ,
8094
+ }
8095
+ }
8096
+
8097
+ #[ test]
8098
+ fn test_api_calls_with_unkown_counterparty_node ( ) {
8099
+ // Tests that our API functions and message handlers that expects a `counterparty_node_id`
8100
+ // as input, behaves as expected if the `counterparty_node_id` is an unkown peer in the
8101
+ // `ChannelManager::per_peer_state` map.
8102
+ let chanmon_cfg = create_chanmon_cfgs ( 2 ) ;
8103
+ let node_cfg = create_node_cfgs ( 2 , & chanmon_cfg) ;
8104
+ let node_chanmgr = create_node_chanmgrs ( 2 , & node_cfg, & [ None , None ] ) ;
8105
+ let nodes = create_network ( 2 , & node_cfg, & node_chanmgr) ;
8106
+
8107
+ // Boilerplate code to produce `open_channel` and `accept_channel` msgs more densly than
8108
+ // creating dummy ones.
8109
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 1_000_000 , 500_000_000 , 42 , None ) . unwrap ( ) ;
8110
+ let open_channel_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8111
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , channelmanager:: provided_init_features ( ) , & open_channel_msg) ;
8112
+ let accept_channel_msg = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
8113
+
8114
+ // Dummy values
8115
+ let channel_id = [ 4 ; 32 ] ;
8116
+ let signature = Signature :: from ( unsafe { FFISignature :: new ( ) } ) ;
8117
+ let unkown_public_key = PublicKey :: from_secret_key ( & Secp256k1 :: signing_only ( ) , & SecretKey :: from_slice ( & [ 42 ; 32 ] ) . unwrap ( ) ) ;
8118
+ let intercept_id = InterceptId ( [ 0 ; 32 ] ) ;
8119
+
8120
+ // Dummy msgs
8121
+ let funding_created_msg = msgs:: FundingCreated {
8122
+ temporary_channel_id : open_channel_msg. temporary_channel_id ,
8123
+ funding_txid : Txid :: from_hex ( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) ,
8124
+ funding_output_index : 0 ,
8125
+ signature : signature,
8126
+ } ;
8127
+
8128
+ let funding_signed_msg = msgs:: FundingSigned {
8129
+ channel_id : channel_id,
8130
+ signature : signature,
8131
+ } ;
8132
+
8133
+ let channel_ready_msg = msgs:: ChannelReady {
8134
+ channel_id : channel_id,
8135
+ next_per_commitment_point : unkown_public_key,
8136
+ short_channel_id_alias : None ,
8137
+ } ;
8138
+
8139
+ let announcement_signatures_msg = msgs:: AnnouncementSignatures {
8140
+ channel_id : channel_id,
8141
+ short_channel_id : 0 ,
8142
+ node_signature : signature,
8143
+ bitcoin_signature : signature,
8144
+ } ;
8145
+
8146
+ let channel_reestablish_msg = msgs:: ChannelReestablish {
8147
+ channel_id : channel_id,
8148
+ next_local_commitment_number : 0 ,
8149
+ next_remote_commitment_number : 0 ,
8150
+ data_loss_protect : OptionalField :: Absent ,
8151
+ } ;
8152
+
8153
+ let closing_signed_msg = msgs:: ClosingSigned {
8154
+ channel_id : channel_id,
8155
+ fee_satoshis : 1000 ,
8156
+ signature : signature,
8157
+ fee_range : None ,
8158
+ } ;
8159
+
8160
+ let shutdown_msg = msgs:: Shutdown {
8161
+ channel_id : channel_id,
8162
+ scriptpubkey : Script :: new ( ) ,
8163
+ } ;
8164
+
8165
+ let onion_routing_packet = msgs:: OnionPacket {
8166
+ version : 255 ,
8167
+ public_key : Ok ( unkown_public_key) ,
8168
+ hop_data : [ 1 ; 20 * 65 ] ,
8169
+ hmac : [ 2 ; 32 ]
8170
+ } ;
8171
+
8172
+ let update_add_htlc_msg = msgs:: UpdateAddHTLC {
8173
+ channel_id : channel_id,
8174
+ htlc_id : 0 ,
8175
+ amount_msat : 1000000 ,
8176
+ payment_hash : PaymentHash ( [ 1 ; 32 ] ) ,
8177
+ cltv_expiry : 821716 ,
8178
+ onion_routing_packet
8179
+ } ;
8180
+
8181
+ let commitment_signed_msg = msgs:: CommitmentSigned {
8182
+ channel_id : channel_id,
8183
+ signature : signature,
8184
+ htlc_signatures : Vec :: new ( ) ,
8185
+ } ;
8186
+
8187
+ let update_fee_msg = msgs:: UpdateFee {
8188
+ channel_id : channel_id,
8189
+ feerate_per_kw : 1000 ,
8190
+ } ;
8191
+
8192
+ let malformed_update_msg = msgs:: UpdateFailMalformedHTLC {
8193
+ channel_id : channel_id,
8194
+ htlc_id : 0 ,
8195
+ sha256_of_onion : [ 1 ; 32 ] ,
8196
+ failure_code : 0x8000 ,
8197
+ } ;
8198
+
8199
+ let fulfill_update_msg = msgs:: UpdateFulfillHTLC {
8200
+ channel_id : channel_id,
8201
+ htlc_id : 0 ,
8202
+ payment_preimage : PaymentPreimage ( [ 1 ; 32 ] ) ,
8203
+ } ;
8204
+
8205
+ let fail_update_msg = msgs:: UpdateFailHTLC {
8206
+ channel_id : channel_id,
8207
+ htlc_id : 0 ,
8208
+ reason : msgs:: OnionErrorPacket { data : Vec :: new ( ) } ,
8209
+ } ;
8210
+
8211
+ let revoke_and_ack_msg = msgs:: RevokeAndACK {
8212
+ channel_id : channel_id,
8213
+ per_commitment_secret : [ 1 ; 32 ] ,
8214
+ next_per_commitment_point : unkown_public_key,
8215
+ } ;
8216
+
8217
+ // Test the API functions and message handlers.
8218
+ check_not_connected_to_peer_error ( nodes[ 0 ] . node . create_channel ( unkown_public_key, 1_000_000 , 500_000_000 , 42 , None ) , unkown_public_key) ;
8219
+
8220
+ nodes[ 1 ] . node . handle_open_channel ( & unkown_public_key, channelmanager:: provided_init_features ( ) , & open_channel_msg) ;
8221
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8222
+
8223
+ nodes[ 0 ] . node . handle_accept_channel ( & unkown_public_key, channelmanager:: provided_init_features ( ) , & accept_channel_msg) ;
8224
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8225
+
8226
+ check_unkown_peer_error ( nodes[ 0 ] . node . accept_inbound_channel ( & open_channel_msg. temporary_channel_id , & unkown_public_key, 42 ) , unkown_public_key) ;
8227
+ nodes[ 1 ] . node . handle_funding_created ( & unkown_public_key, & funding_created_msg) ;
8228
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8229
+
8230
+ nodes[ 0 ] . node . handle_funding_signed ( & unkown_public_key, & funding_signed_msg) ;
8231
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8232
+
8233
+ nodes[ 0 ] . node . handle_channel_ready ( & unkown_public_key, & channel_ready_msg) ;
8234
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8235
+
8236
+ nodes[ 1 ] . node . handle_announcement_signatures ( & unkown_public_key, & announcement_signatures_msg) ;
8237
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8238
+
8239
+ check_unkown_peer_error ( nodes[ 0 ] . node . close_channel ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8240
+
8241
+ check_unkown_peer_error ( nodes[ 0 ] . node . force_close_broadcasting_latest_txn ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8242
+
8243
+ check_unkown_peer_error ( nodes[ 0 ] . node . force_close_without_broadcasting_txn ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8244
+
8245
+ check_unkown_peer_error ( nodes[ 0 ] . node . forward_intercepted_htlc ( intercept_id, & channel_id, unkown_public_key, 1_000_000 ) , unkown_public_key) ;
8246
+
8247
+ check_unkown_peer_error ( nodes[ 0 ] . node . update_channel_config ( & unkown_public_key, & [ channel_id] , & ChannelConfig :: default ( ) ) , unkown_public_key) ;
8248
+
8249
+ nodes[ 0 ] . node . handle_shutdown ( & unkown_public_key, & channelmanager:: provided_init_features ( ) , & shutdown_msg) ;
8250
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8251
+
8252
+ nodes[ 1 ] . node . handle_closing_signed ( & unkown_public_key, & closing_signed_msg) ;
8253
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8254
+
8255
+ nodes[ 0 ] . node . handle_channel_reestablish ( & unkown_public_key, & channel_reestablish_msg) ;
8256
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8257
+
8258
+ nodes[ 1 ] . node . handle_update_add_htlc ( & unkown_public_key, & update_add_htlc_msg) ;
8259
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8260
+
8261
+ nodes[ 1 ] . node . handle_commitment_signed ( & unkown_public_key, & commitment_signed_msg) ;
8262
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8263
+
8264
+ nodes[ 1 ] . node . handle_update_fail_malformed_htlc ( & unkown_public_key, & malformed_update_msg) ;
8265
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8266
+
8267
+ nodes[ 1 ] . node . handle_update_fail_htlc ( & unkown_public_key, & fail_update_msg) ;
8268
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8269
+
8270
+ nodes[ 1 ] . node . handle_update_fulfill_htlc ( & unkown_public_key, & fulfill_update_msg) ;
8271
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8272
+
8273
+ nodes[ 1 ] . node . handle_revoke_and_ack ( & unkown_public_key, & revoke_and_ack_msg) ;
8274
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8275
+
8276
+ nodes[ 1 ] . node . handle_update_fee ( & unkown_public_key, & update_fee_msg) ;
8277
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8278
+ }
8052
8279
}
8053
8280
8054
8281
#[ cfg( all( any( test, feature = "_test_utils" ) , feature = "_bench_unstable" ) ) ]
0 commit comments