@@ -7541,6 +7541,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
7541
7541
mod tests {
7542
7542
use bitcoin:: hashes:: Hash ;
7543
7543
use bitcoin:: hashes:: sha256:: Hash as Sha256 ;
7544
+ use bitcoin:: hashes:: hex:: FromHex ;
7545
+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
7546
+ use bitcoin:: secp256k1:: ecdsa:: Signature ;
7547
+ use bitcoin:: secp256k1:: ffi:: Signature as FFISignature ;
7548
+ use bitcoin:: blockdata:: script:: Script ;
7549
+ use bitcoin:: Txid ;
7544
7550
use core:: time:: Duration ;
7545
7551
use core:: sync:: atomic:: Ordering ;
7546
7552
use ln:: { PaymentPreimage , PaymentHash , PaymentSecret } ;
@@ -7549,7 +7555,7 @@ mod tests {
7549
7555
use ln:: features:: InitFeatures ;
7550
7556
use ln:: functional_test_utils:: * ;
7551
7557
use ln:: msgs;
7552
- use ln:: msgs:: ChannelMessageHandler ;
7558
+ use ln:: msgs:: { ChannelMessageHandler , OptionalField } ;
7553
7559
use routing:: router:: { PaymentParameters , RouteParameters , find_route} ;
7554
7560
use util:: errors:: APIError ;
7555
7561
use util:: events:: { Event , MessageSendEvent , MessageSendEventsProvider , ClosureReason } ;
@@ -8154,6 +8160,211 @@ mod tests {
8154
8160
check_closed_event ! ( nodes[ 0 ] , 1 , ClosureReason :: CooperativeClosure ) ;
8155
8161
check_closed_event ! ( nodes[ 1 ] , 1 , ClosureReason :: CooperativeClosure ) ;
8156
8162
}
8163
+
8164
+ 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 ] ) {
8165
+ let close_msg_ev = node. node . get_and_clear_pending_msg_events ( ) ;
8166
+ let expected_error_str = format ! ( "Can't find a peer with a node_id matching the passed counterparty_node_id {}" , closing_node_id) ;
8167
+ match close_msg_ev[ 0 ] {
8168
+ MessageSendEvent :: HandleError {
8169
+ ref node_id, action : msgs:: ErrorAction :: SendErrorMessage {
8170
+ msg : msgs:: ErrorMessage { ref channel_id, ref data }
8171
+ }
8172
+ } => {
8173
+ assert_eq ! ( * node_id, closing_node_id) ;
8174
+ assert_eq ! ( * data, expected_error_str) ;
8175
+ assert_eq ! ( * channel_id, closed_channel_id) ;
8176
+ }
8177
+ _ => panic ! ( "Unexpected event" ) ,
8178
+ }
8179
+ }
8180
+
8181
+ fn check_unkown_peer_error < T > ( res_err : Result < T , APIError > , expected_public_key : PublicKey ) {
8182
+ match res_err {
8183
+ Err ( APIError :: APIMisuseError { err } ) => {
8184
+ assert_eq ! ( err, format!( "Can't find a peer with a node_id matching the passed counterparty_node_id {}" , expected_public_key) ) ;
8185
+ } ,
8186
+ Ok ( _) => panic ! ( "Unexpected Ok" ) ,
8187
+ Err ( _) => panic ! ( "Unexpected Error" ) ,
8188
+ }
8189
+ }
8190
+
8191
+ #[ test]
8192
+ fn test_api_calls_with_unkown_counterparty_node ( ) {
8193
+ // Tests that our API functions and message handlers that expects a `counterparty_node_id`
8194
+ // as input, behaves as expected if the `counterparty_node_id` is an unkown peer in the
8195
+ // `ChannelManager::per_peer_state` map.
8196
+ let chanmon_cfg = create_chanmon_cfgs ( 2 ) ;
8197
+ let node_cfg = create_node_cfgs ( 2 , & chanmon_cfg) ;
8198
+ let node_chanmgr = create_node_chanmgrs ( 2 , & node_cfg, & [ None , None ] ) ;
8199
+ let nodes = create_network ( 2 , & node_cfg, & node_chanmgr) ;
8200
+
8201
+ // Boilerplate code to produce `open_channel` and `accept_channel` msgs more densly than
8202
+ // creating dummy ones.
8203
+ nodes[ 0 ] . node . create_channel ( nodes[ 1 ] . node . get_our_node_id ( ) , 1_000_000 , 500_000_000 , 42 , None ) . unwrap ( ) ;
8204
+ let open_channel_msg = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendOpenChannel , nodes[ 1 ] . node. get_our_node_id( ) ) ;
8205
+ nodes[ 1 ] . node . handle_open_channel ( & nodes[ 0 ] . node . get_our_node_id ( ) , InitFeatures :: known ( ) , & open_channel_msg) ;
8206
+ let accept_channel_msg = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendAcceptChannel , nodes[ 0 ] . node. get_our_node_id( ) ) ;
8207
+
8208
+ // Dummy values
8209
+ let channel_id = [ 4 ; 32 ] ;
8210
+ let signature = Signature :: from ( unsafe { FFISignature :: new ( ) } ) ;
8211
+ let unkown_public_key = PublicKey :: from_secret_key ( & Secp256k1 :: signing_only ( ) , & SecretKey :: from_slice ( & [ 42 ; 32 ] ) . unwrap ( ) ) ;
8212
+
8213
+ // Dummy msgs
8214
+ let funding_created_msg = msgs:: FundingCreated {
8215
+ temporary_channel_id : open_channel_msg. temporary_channel_id ,
8216
+ funding_txid : Txid :: from_hex ( "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) ,
8217
+ funding_output_index : 0 ,
8218
+ signature : signature,
8219
+ } ;
8220
+
8221
+ let funding_signed_msg = msgs:: FundingSigned {
8222
+ channel_id : channel_id,
8223
+ signature : signature,
8224
+ } ;
8225
+
8226
+ let channel_ready_msg = msgs:: ChannelReady {
8227
+ channel_id : channel_id,
8228
+ next_per_commitment_point : unkown_public_key,
8229
+ short_channel_id_alias : None ,
8230
+ } ;
8231
+
8232
+ let announcement_signatures_msg = msgs:: AnnouncementSignatures {
8233
+ channel_id : channel_id,
8234
+ short_channel_id : 0 ,
8235
+ node_signature : signature,
8236
+ bitcoin_signature : signature,
8237
+ } ;
8238
+
8239
+ let channel_reestablish_msg = msgs:: ChannelReestablish {
8240
+ channel_id : channel_id,
8241
+ next_local_commitment_number : 0 ,
8242
+ next_remote_commitment_number : 0 ,
8243
+ data_loss_protect : OptionalField :: Absent ,
8244
+ } ;
8245
+
8246
+ let closing_signed_msg = msgs:: ClosingSigned {
8247
+ channel_id : channel_id,
8248
+ fee_satoshis : 1000 ,
8249
+ signature : signature,
8250
+ fee_range : None ,
8251
+ } ;
8252
+
8253
+ let shutdown_msg = msgs:: Shutdown {
8254
+ channel_id : channel_id,
8255
+ scriptpubkey : Script :: new ( ) ,
8256
+ } ;
8257
+
8258
+ let onion_routing_packet = msgs:: OnionPacket {
8259
+ version : 255 ,
8260
+ public_key : Ok ( unkown_public_key) ,
8261
+ hop_data : [ 1 ; 20 * 65 ] ,
8262
+ hmac : [ 2 ; 32 ]
8263
+ } ;
8264
+
8265
+ let update_add_htlc_msg = msgs:: UpdateAddHTLC {
8266
+ channel_id : channel_id,
8267
+ htlc_id : 0 ,
8268
+ amount_msat : 1000000 ,
8269
+ payment_hash : PaymentHash ( [ 1 ; 32 ] ) ,
8270
+ cltv_expiry : 821716 ,
8271
+ onion_routing_packet
8272
+ } ;
8273
+
8274
+ let commitment_signed_msg = msgs:: CommitmentSigned {
8275
+ channel_id : channel_id,
8276
+ signature : signature,
8277
+ htlc_signatures : Vec :: new ( ) ,
8278
+ } ;
8279
+
8280
+ let update_fee_msg = msgs:: UpdateFee {
8281
+ channel_id : channel_id,
8282
+ feerate_per_kw : 1000 ,
8283
+ } ;
8284
+
8285
+ let malformed_update_msg = msgs:: UpdateFailMalformedHTLC {
8286
+ channel_id : channel_id,
8287
+ htlc_id : 0 ,
8288
+ sha256_of_onion : [ 1 ; 32 ] ,
8289
+ failure_code : 0x8000 ,
8290
+ } ;
8291
+
8292
+ let fulfill_update_msg = msgs:: UpdateFulfillHTLC {
8293
+ channel_id : channel_id,
8294
+ htlc_id : 0 ,
8295
+ payment_preimage : PaymentPreimage ( [ 1 ; 32 ] ) ,
8296
+ } ;
8297
+
8298
+ let fail_update_msg = msgs:: UpdateFailHTLC {
8299
+ channel_id : channel_id,
8300
+ htlc_id : 0 ,
8301
+ reason : msgs:: OnionErrorPacket { data : Vec :: new ( ) } ,
8302
+ } ;
8303
+
8304
+ let revoke_and_ack_msg = msgs:: RevokeAndACK {
8305
+ channel_id : channel_id,
8306
+ per_commitment_secret : [ 1 ; 32 ] ,
8307
+ next_per_commitment_point : unkown_public_key,
8308
+ } ;
8309
+
8310
+ // Test the API functions and message handlers.
8311
+ check_unkown_peer_error ( nodes[ 0 ] . node . create_channel ( unkown_public_key, 1_000_000 , 500_000_000 , 42 , None ) , unkown_public_key) ;
8312
+
8313
+ nodes[ 1 ] . node . handle_open_channel ( & unkown_public_key, InitFeatures :: known ( ) , & open_channel_msg) ;
8314
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8315
+
8316
+ nodes[ 0 ] . node . handle_accept_channel ( & unkown_public_key, InitFeatures :: known ( ) , & accept_channel_msg) ;
8317
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8318
+
8319
+ check_unkown_peer_error ( nodes[ 0 ] . node . accept_inbound_channel ( & open_channel_msg. temporary_channel_id , & unkown_public_key, 42 ) , unkown_public_key) ;
8320
+ nodes[ 1 ] . node . handle_funding_created ( & unkown_public_key, & funding_created_msg) ;
8321
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, open_channel_msg. temporary_channel_id ) ;
8322
+
8323
+ nodes[ 0 ] . node . handle_funding_signed ( & unkown_public_key, & funding_signed_msg) ;
8324
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8325
+
8326
+ nodes[ 0 ] . node . handle_channel_ready ( & unkown_public_key, & channel_ready_msg) ;
8327
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8328
+
8329
+ nodes[ 1 ] . node . handle_announcement_signatures ( & unkown_public_key, & announcement_signatures_msg) ;
8330
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8331
+
8332
+ check_unkown_peer_error ( nodes[ 0 ] . node . close_channel ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8333
+
8334
+ check_unkown_peer_error ( nodes[ 0 ] . node . force_close_broadcasting_latest_txn ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8335
+
8336
+ check_unkown_peer_error ( nodes[ 0 ] . node . force_close_without_broadcasting_txn ( & channel_id, & unkown_public_key) , unkown_public_key) ;
8337
+
8338
+ nodes[ 0 ] . node . handle_shutdown ( & unkown_public_key, & InitFeatures :: known ( ) , & shutdown_msg) ;
8339
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8340
+
8341
+ nodes[ 1 ] . node . handle_closing_signed ( & unkown_public_key, & closing_signed_msg) ;
8342
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8343
+
8344
+ nodes[ 0 ] . node . handle_channel_reestablish ( & unkown_public_key, & channel_reestablish_msg) ;
8345
+ check_unkown_peer_msg_event ( & nodes[ 0 ] , unkown_public_key, channel_id) ;
8346
+
8347
+ nodes[ 1 ] . node . handle_update_add_htlc ( & unkown_public_key, & update_add_htlc_msg) ;
8348
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8349
+
8350
+ nodes[ 1 ] . node . handle_commitment_signed ( & unkown_public_key, & commitment_signed_msg) ;
8351
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8352
+
8353
+ nodes[ 1 ] . node . handle_update_fail_malformed_htlc ( & unkown_public_key, & malformed_update_msg) ;
8354
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8355
+
8356
+ nodes[ 1 ] . node . handle_update_fail_htlc ( & unkown_public_key, & fail_update_msg) ;
8357
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8358
+
8359
+ nodes[ 1 ] . node . handle_update_fulfill_htlc ( & unkown_public_key, & fulfill_update_msg) ;
8360
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8361
+
8362
+ nodes[ 1 ] . node . handle_revoke_and_ack ( & unkown_public_key, & revoke_and_ack_msg) ;
8363
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8364
+
8365
+ nodes[ 1 ] . node . handle_update_fee ( & unkown_public_key, & update_fee_msg) ;
8366
+ check_unkown_peer_msg_event ( & nodes[ 1 ] , unkown_public_key, channel_id) ;
8367
+ }
8157
8368
}
8158
8369
8159
8370
#[ cfg( all( any( test, feature = "_test_utils" ) , feature = "_bench_unstable" ) ) ]
0 commit comments