@@ -8300,6 +8300,207 @@ fn test_override_0msat_htlc_minimum() {
8300
8300
assert_eq!(res.htlc_minimum_msat, 1);
8301
8301
}
8302
8302
8303
+ #[test]
8304
+ fn test_manually_accept_inbound_channel_request() {
8305
+ let mut manually_accept_conf = UserConfig::default();
8306
+ manually_accept_conf.manually_accept_inbound_channels = true;
8307
+ let chanmon_cfgs = create_chanmon_cfgs(2);
8308
+ let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
8309
+ let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
8310
+ let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
8311
+
8312
+ nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
8313
+ let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8314
+
8315
+ nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &res);
8316
+
8317
+ // Assert that `nodes[1]` has no `MessageSendEvent::SendAcceptChannel` in `msg_events` before
8318
+ // accepting the inbound channel request.
8319
+ assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
8320
+
8321
+ let events = nodes[1].node.get_and_clear_pending_events();
8322
+ match events[0] {
8323
+ Event::OpenChannelRequest { temporary_channel_id, .. } => {
8324
+ nodes[1].node.accept_inbound_channel(&temporary_channel_id).unwrap();
8325
+ }
8326
+ _ => panic!("Unexpected event"),
8327
+ }
8328
+
8329
+ let accept_msg_ev = nodes[1].node.get_and_clear_pending_msg_events();
8330
+ assert_eq!(accept_msg_ev.len(), 1);
8331
+
8332
+ match accept_msg_ev[0] {
8333
+ MessageSendEvent::SendAcceptChannel { ref node_id, .. } => {
8334
+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
8335
+ }
8336
+ _ => panic!("Unexpected event"),
8337
+ }
8338
+ }
8339
+
8340
+ #[test]
8341
+ fn test_manually_reject_inbound_channel_request() {
8342
+ let mut manually_accept_conf = UserConfig::default();
8343
+ manually_accept_conf.manually_accept_inbound_channels = true;
8344
+ let chanmon_cfgs = create_chanmon_cfgs(2);
8345
+ let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
8346
+ let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
8347
+ let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
8348
+
8349
+ nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
8350
+ let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8351
+
8352
+ nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &res);
8353
+
8354
+ // Assert that `nodes[1]` has no `MessageSendEvent::SendAcceptChannel` in `msg_events` before
8355
+ // rejecting the inbound channel request.
8356
+ assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
8357
+
8358
+ let events = nodes[1].node.get_and_clear_pending_events();
8359
+ match events[0] {
8360
+ Event::OpenChannelRequest { temporary_channel_id, .. } => {
8361
+ nodes[1].node.force_close_channel(&temporary_channel_id).unwrap();
8362
+ }
8363
+ _ => panic!("Unexpected event"),
8364
+ }
8365
+
8366
+ let close_msg_ev = nodes[1].node.get_and_clear_pending_msg_events();
8367
+ assert_eq!(close_msg_ev.len(), 1);
8368
+
8369
+ match close_msg_ev[0] {
8370
+ MessageSendEvent::HandleError { ref node_id, .. } => {
8371
+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
8372
+ }
8373
+ _ => panic!("Unexpected event"),
8374
+ }
8375
+ check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
8376
+ }
8377
+
8378
+ #[test]
8379
+ fn test_reject_funding_before_inbound_channel_accepted() {
8380
+ // This tests that when `UserConfig::manually_accept_inbound_channels` is set to true, inbound
8381
+ // channels must to be manually accepted through `ChannelManager::accept_inbound_channel` by
8382
+ // the node operator before the counterparty sends a `FundingCreated` message. If a
8383
+ // `FundingCreated` message is received before the channel is accepted, it should be rejected
8384
+ // and the channel should be closed.
8385
+ let mut manually_accept_conf = UserConfig::default();
8386
+ manually_accept_conf.manually_accept_inbound_channels = true;
8387
+ let chanmon_cfgs = create_chanmon_cfgs(2);
8388
+ let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
8389
+ let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
8390
+ let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
8391
+
8392
+ nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
8393
+ let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8394
+ let temp_channel_id = res.temporary_channel_id;
8395
+
8396
+ nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &res);
8397
+
8398
+ // Assert that `nodes[1]` has no `MessageSendEvent::SendAcceptChannel` in the `msg_events`.
8399
+ assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
8400
+
8401
+ // Clear the `Event::OpenChannelRequest` event without responding to the request.
8402
+ nodes[1].node.get_and_clear_pending_events();
8403
+
8404
+ // Get the `AcceptChannel` message of `nodes[1]` without calling
8405
+ // `ChannelManager::accept_inbound_channel`, which generates a
8406
+ // `MessageSendEvent::SendAcceptChannel` event. The message is passed to `nodes[0]`
8407
+ // `handle_accept_channel`, which is required in order for `create_funding_transaction` to
8408
+ // succeed when `nodes[0]` is passed to it.
8409
+ {
8410
+ let mut lock;
8411
+ let channel = get_channel_ref!(&nodes[1], lock, temp_channel_id);
8412
+ let accept_chan_msg = channel.get_accept_channel_message();
8413
+ nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::known(), &accept_chan_msg);
8414
+ }
8415
+
8416
+ let (temporary_channel_id, tx, _) = create_funding_transaction(&nodes[0], 100000, 42);
8417
+
8418
+ nodes[0].node.funding_transaction_generated(&temporary_channel_id, tx.clone()).unwrap();
8419
+ let funding_created_msg = get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id());
8420
+
8421
+ // The `funding_created_msg` should be rejected by `nodes[1]` as it hasn't accepted the channel
8422
+ nodes[1].node.handle_funding_created(&nodes[0].node.get_our_node_id(), &funding_created_msg);
8423
+
8424
+ let close_msg_ev = nodes[1].node.get_and_clear_pending_msg_events();
8425
+ assert_eq!(close_msg_ev.len(), 1);
8426
+
8427
+ let expected_err = "FundingCreated message received before the channel was accepted";
8428
+ match close_msg_ev[0] {
8429
+ MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, ref node_id, } => {
8430
+ assert_eq!(msg.channel_id, temp_channel_id);
8431
+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
8432
+ assert_eq!(msg.data, expected_err);
8433
+ }
8434
+ _ => panic!("Unexpected event"),
8435
+ }
8436
+
8437
+ check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: expected_err.to_string() });
8438
+ }
8439
+
8440
+ #[test]
8441
+ fn test_can_not_accept_inbound_channel_twice() {
8442
+ let mut manually_accept_conf = UserConfig::default();
8443
+ manually_accept_conf.manually_accept_inbound_channels = true;
8444
+ let chanmon_cfgs = create_chanmon_cfgs(2);
8445
+ let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
8446
+ let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, Some(manually_accept_conf.clone())]);
8447
+ let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
8448
+
8449
+ nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 42, Some(manually_accept_conf)).unwrap();
8450
+ let res = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
8451
+
8452
+ nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &res);
8453
+
8454
+ // Assert that `nodes[1]` has no `MessageSendEvent::SendAcceptChannel` in `msg_events` before
8455
+ // accepting the inbound channel request.
8456
+ assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
8457
+
8458
+ let events = nodes[1].node.get_and_clear_pending_events();
8459
+ match events[0] {
8460
+ Event::OpenChannelRequest { temporary_channel_id, .. } => {
8461
+ nodes[1].node.accept_inbound_channel(&temporary_channel_id).unwrap();
8462
+ let api_res = nodes[1].node.accept_inbound_channel(&temporary_channel_id);
8463
+ match api_res {
8464
+ Err(APIError::APIMisuseError { err }) => {
8465
+ assert_eq!(err, "The channel isn't currently awaiting to be accepted.");
8466
+ },
8467
+ Ok(_) => panic!("Channel shouldn't be possible to be accepted twice"),
8468
+ Err(_) => panic!("Unexpected Error"),
8469
+ }
8470
+ }
8471
+ _ => panic!("Unexpected event"),
8472
+ }
8473
+
8474
+ // Ensure that the channel wasn't closed after attempting to accept it twice.
8475
+ let accept_msg_ev = nodes[1].node.get_and_clear_pending_msg_events();
8476
+ assert_eq!(accept_msg_ev.len(), 1);
8477
+
8478
+ match accept_msg_ev[0] {
8479
+ MessageSendEvent::SendAcceptChannel { ref node_id, .. } => {
8480
+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
8481
+ }
8482
+ _ => panic!("Unexpected event"),
8483
+ }
8484
+ }
8485
+
8486
+ #[test]
8487
+ fn test_can_not_accept_unknown_inbound_channel() {
8488
+ let chanmon_cfg = create_chanmon_cfgs(1);
8489
+ let node_cfg = create_node_cfgs(1, &chanmon_cfg);
8490
+ let node_chanmgr = create_node_chanmgrs(1, &node_cfg, &[None]);
8491
+ let node = create_network(1, &node_cfg, &node_chanmgr)[0].node;
8492
+
8493
+ let unknown_channel_id = [0; 32];
8494
+ let api_res = node.accept_inbound_channel(&unknown_channel_id);
8495
+ match api_res {
8496
+ Err(APIError::ChannelUnavailable { err }) => {
8497
+ assert_eq!(err, "Can't accept a channel that doesn't exist");
8498
+ },
8499
+ Ok(_) => panic!("It shouldn't be possible to accept an unkown channel"),
8500
+ Err(_) => panic!("Unexpected Error"),
8501
+ }
8502
+ }
8503
+
8303
8504
#[test]
8304
8505
fn test_simple_mpp() {
8305
8506
// Simple test of sending a multi-path payment.
0 commit comments