Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ChannelManager::accept_inbound_channel error handling #2953

Merged
merged 2 commits into from
Mar 21, 2024

Conversation

dunxen
Copy link
Contributor

@dunxen dunxen commented Mar 20, 2024

Fixes #2941.

@TheBlueMatt TheBlueMatt added this to the 0.0.122 milestone Mar 20, 2024
Copy link
Collaborator

@TheBlueMatt TheBlueMatt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, LGTM.

lightning/src/ln/channelmanager.rs Outdated Show resolved Hide resolved
Copy link
Contributor

@G8XSU G8XSU left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm!

lightning/src/ln/channelmanager.rs Show resolved Hide resolved
@dunxen
Copy link
Contributor Author

dunxen commented Mar 21, 2024

I know it's probably not ideal but I chose functional_tests.rs for now to move the test to as none of the other files made sense to pollute, but created an issue for moving tests out of channelmanager.rs (#2958). We could probably also review functional_tests.rs at some stage to thin that out too.

Change diff
$ git diff-tree -U1 7dbe57e 3206d1f
diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs
index b2b4e76d..825d4507 100644
--- a/lightning/src/ln/channelmanager.rs
+++ b/lightning/src/ln/channelmanager.rs
@@ -6129,3 +6129,3 @@ where
                                match handle_error!(self, Result::<(), MsgHandleErrInternal>::Err(err), *counterparty_node_id) {
-                                       Ok(_) => unreachable!("`handle_error` only returns Err"),
+                                       Ok(_) => unreachable!("`handle_error` only returns Err as we've passed in an Err"),
                                        Err(e) => {
@@ -6135,3 +6135,3 @@ where
                        }
-                   Ok(mut channel) => {
+                       Ok(mut channel) => {
                                if accept_0conf {
@@ -6182,3 +6182,3 @@ where
                                Ok(())
-                   },
+                       },
                }
@@ -12559,35 +12559,2 @@ mod tests {

-       #[test]
-       fn test_accept_inbound_channel_errors_queued() {
-               // For manually accepted inbound channels, tests that a close error is correctly handled
-               // and the channel fails for the initiator.
-               let mut config0 = test_default_channel_config();
-               let mut config1 = config0.clone();
-               config1.channel_handshake_limits.their_to_self_delay = 1000;
-               config1.manually_accept_inbound_channels = true;
-               config0.channel_handshake_config.our_to_self_delay = 2000;
-
-               let chanmon_cfgs = create_chanmon_cfgs(2);
-               let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
-               let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(config0), Some(config1)]);
-               let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
-
-               nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 42, None, None).unwrap();
-               let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
-
-               nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
-               let events = nodes[1].node.get_and_clear_pending_events();
-               match events[0] {
-                       Event::OpenChannelRequest { temporary_channel_id, .. } => {
-                               match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23) {
-                                       Err(APIError::ChannelUnavailable { err: _ }) => (),
-                                       _ => panic!(),
-                               }
-                       }
-                       _ => panic!("Unexpected event"),
-               }
-               assert_eq!(get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id()).channel_id,
-                       open_channel_msg.common_fields.temporary_channel_id);
-       }
-
        #[test]
diff --git a/lightning/src/ln/functional_tests.rs b/lightning/src/ln/functional_tests.rs
index c5ea582b..92ddc01d 100644
--- a/lightning/src/ln/functional_tests.rs
+++ b/lightning/src/ln/functional_tests.rs
@@ -10985 +10985,34 @@ fn test_funding_and_commitment_tx_confirm_same_block() {
 }
+
+#[test]
+fn test_accept_inbound_channel_errors_queued() {
+       // For manually accepted inbound channels, tests that a close error is correctly handled
+       // and the channel fails for the initiator.
+       let mut config0 = test_default_channel_config();
+       let mut config1 = config0.clone();
+       config1.channel_handshake_limits.their_to_self_delay = 1000;
+       config1.manually_accept_inbound_channels = true;
+       config0.channel_handshake_config.our_to_self_delay = 2000;
+
+       let chanmon_cfgs = create_chanmon_cfgs(2);
+       let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
+       let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(config0), Some(config1)]);
+       let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
+
+       nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 42, None, None).unwrap();
+       let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
+
+       nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), &open_channel_msg);
+       let events = nodes[1].node.get_and_clear_pending_events();
+       match events[0] {
+               Event::OpenChannelRequest { temporary_channel_id, .. } => {
+                       match nodes[1].node.accept_inbound_channel(&temporary_channel_id, &nodes[0].node.get_our_node_id(), 23) {
+                               Err(APIError::ChannelUnavailable { err: _ }) => (),
+                               _ => panic!(),
+                       }
+               }
+               _ => panic!("Unexpected event"),
+       }
+       assert_eq!(get_err_msg(&nodes[1], &nodes[0].node.get_our_node_id()).channel_id,
+               open_channel_msg.common_fields.temporary_channel_id);
+}

@codecov-commenter
Copy link

Codecov Report

Attention: Patch coverage is 96.47059% with 3 lines in your changes are missing coverage. Please review.

Project coverage is 89.62%. Comparing base (0cc0858) to head (3206d1f).
Report is 8 commits behind head on main.

Files Patch % Lines
lightning/src/ln/functional_tests.rs 92.85% 2 Missing ⚠️
lightning/src/ln/channelmanager.rs 98.24% 1 Missing ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2953      +/-   ##
==========================================
+ Coverage   89.23%   89.62%   +0.38%     
==========================================
  Files         117      118       +1     
  Lines       95545   100078    +4533     
  Branches    95545   100078    +4533     
==========================================
+ Hits        85260    89695    +4435     
- Misses       7799     7872      +73     
- Partials     2486     2511      +25     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@G8XSU G8XSU merged commit 9ca2280 into lightningdevkit:main Mar 21, 2024
13 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Errors not being handled during ChannelManager::accept_inbound_channel
4 participants