Skip to content

Commit 0649f82

Browse files
committed
Capture announcement signatures resend in reconnection tests
We'll use this in the next commit to test the resend logic for `announcement_signatures` when reestablishing a channel that had a pending splice become locked.
1 parent f3f4010 commit 0649f82

File tree

6 files changed

+91
-13
lines changed

6 files changed

+91
-13
lines changed

lightning/src/ln/async_signer_tests.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ fn do_test_async_raa_peer_disconnect(
600600
}
601601

602602
// Expect the RAA
603-
let (_, revoke_and_ack, commitment_signed, resend_order) =
603+
let (_, revoke_and_ack, commitment_signed, resend_order, _) =
604604
handle_chan_reestablish_msgs!(dst, src);
605605
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
606606
assert!(revoke_and_ack.is_none());
@@ -616,14 +616,14 @@ fn do_test_async_raa_peer_disconnect(
616616
dst.node.signer_unblocked(Some((src_node_id, chan_id)));
617617

618618
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
619-
let (_, revoke_and_ack, commitment_signed, resend_order) =
619+
let (_, revoke_and_ack, commitment_signed, resend_order, _) =
620620
handle_chan_reestablish_msgs!(dst, src);
621621
assert!(revoke_and_ack.is_some());
622622
assert!(commitment_signed.is_some());
623623
assert!(resend_order == RAACommitmentOrder::RevokeAndACKFirst);
624624
} else {
625625
// Make sure we don't double send the RAA.
626-
let (_, revoke_and_ack, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
626+
let (_, revoke_and_ack, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
627627
assert!(revoke_and_ack.is_none());
628628
assert!(commitment_signed.is_none());
629629
}
@@ -749,7 +749,7 @@ fn do_test_async_commitment_signature_peer_disconnect(
749749
}
750750

751751
// Expect the RAA
752-
let (_, revoke_and_ack, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
752+
let (_, revoke_and_ack, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
753753
assert!(revoke_and_ack.is_some());
754754
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
755755
assert!(commitment_signed.is_none());
@@ -762,11 +762,11 @@ fn do_test_async_commitment_signature_peer_disconnect(
762762
dst.node.signer_unblocked(Some((src_node_id, chan_id)));
763763

764764
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
765-
let (_, _, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
765+
let (_, _, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
766766
assert!(commitment_signed.is_some());
767767
} else {
768768
// Make sure we don't double send the CS.
769-
let (_, _, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
769+
let (_, _, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
770770
assert!(commitment_signed.is_none());
771771
}
772772
}
@@ -881,6 +881,7 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
881881
assert!(as_resp.0.is_none());
882882
assert!(as_resp.1.is_none());
883883
assert!(as_resp.2.is_none());
884+
assert!(as_resp.4.is_none());
884885

885886
if monitor_update_failure {
886887
chanmon_cfgs[0].persister.set_update_ret(ChannelMonitorUpdateStatus::Completed);
@@ -900,6 +901,7 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
900901
assert!(as_resp.0.is_none());
901902
assert!(as_resp.1.is_none());
902903
assert!(as_resp.2.is_none());
904+
assert!(as_resp.4.is_none());
903905

904906
nodes[0].enable_channel_signer_op(&node_b_id, &chan_id, SignerOp::SignCounterpartyCommitment);
905907
nodes[0].node.signer_unblocked(Some((node_b_id, chan_id)));
@@ -916,6 +918,9 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
916918

917919
assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
918920

921+
assert!(as_resp.4.is_none());
922+
assert!(bs_resp.4.is_none());
923+
919924
// Now that everything is restored, get the CS + RAA and handle them.
920925
nodes[1]
921926
.node

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
206206
nodes[1].node.peer_disconnected(node_a_id);
207207
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
208208
reconnect_args.send_channel_ready = (true, true);
209+
reconnect_args.send_announcement_sigs = (true, true);
209210
reconnect_nodes(reconnect_args);
210211
}
211212

lightning/src/ln/functional_test_utils.rs

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4771,11 +4771,14 @@ macro_rules! handle_chan_reestablish_msgs {
47714771
None
47724772
};
47734773

4774-
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ }) =
4774+
let mut announcement_sigs = None; // May be now or later
4775+
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg }) =
47754776
msg_events.get(idx)
47764777
{
47774778
idx += 1;
47784779
assert_eq!(*node_id, $dst_node.node.get_our_node_id());
4780+
assert!(announcement_sigs.is_none());
4781+
announcement_sigs = Some(msg.clone());
47794782
}
47804783

47814784
let mut had_channel_update = false; // ChannelUpdate may be now or later, but not both
@@ -4841,16 +4844,26 @@ macro_rules! handle_chan_reestablish_msgs {
48414844
assert!(!had_channel_update);
48424845
}
48434846

4844-
assert_eq!(msg_events.len(), idx);
4847+
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg }) =
4848+
msg_events.get(idx)
4849+
{
4850+
idx += 1;
4851+
assert_eq!(*node_id, $dst_node.node.get_our_node_id());
4852+
assert!(announcement_sigs.is_none());
4853+
announcement_sigs = Some(msg.clone());
4854+
}
4855+
4856+
assert_eq!(msg_events.len(), idx, "{msg_events:?}");
48454857

4846-
(channel_ready, revoke_and_ack, commitment_update, order)
4858+
(channel_ready, revoke_and_ack, commitment_update, order, announcement_sigs)
48474859
}};
48484860
}
48494861

48504862
pub struct ReconnectArgs<'a, 'b, 'c, 'd> {
48514863
pub node_a: &'a Node<'b, 'c, 'd>,
48524864
pub node_b: &'a Node<'b, 'c, 'd>,
48534865
pub send_channel_ready: (bool, bool),
4866+
pub send_announcement_sigs: (bool, bool),
48544867
pub pending_responding_commitment_signed: (bool, bool),
48554868
/// Indicates that the pending responding commitment signed will be a dup for the recipient,
48564869
/// and no monitor update is expected
@@ -4869,6 +4882,7 @@ impl<'a, 'b, 'c, 'd> ReconnectArgs<'a, 'b, 'c, 'd> {
48694882
node_a,
48704883
node_b,
48714884
send_channel_ready: (false, false),
4885+
send_announcement_sigs: (false, false),
48724886
pending_responding_commitment_signed: (false, false),
48734887
pending_responding_commitment_signed_dup_monitor: (false, false),
48744888
pending_htlc_adds: (0, 0),
@@ -4888,6 +4902,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
48884902
node_a,
48894903
node_b,
48904904
send_channel_ready,
4905+
send_announcement_sigs,
48914906
pending_htlc_adds,
48924907
pending_htlc_claims,
48934908
pending_htlc_fails,
@@ -4969,7 +4984,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49694984
&& pending_cell_htlc_fails.1 == 0)
49704985
);
49714986

4972-
for chan_msgs in resp_1.drain(..) {
4987+
for mut chan_msgs in resp_1.drain(..) {
49734988
if send_channel_ready.0 {
49744989
node_a.node.handle_channel_ready(node_b_id, &chan_msgs.0.unwrap());
49754990
let announcement_event = node_a.node.get_and_clear_pending_msg_events();
@@ -4984,6 +4999,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49844999
} else {
49855000
assert!(chan_msgs.0.is_none());
49865001
}
5002+
if send_announcement_sigs.0 {
5003+
let announcement_sigs = chan_msgs.4.take().unwrap();
5004+
node_a.node.handle_announcement_signatures(node_b_id, &announcement_sigs);
5005+
let msg_events = node_a.node.get_and_clear_pending_msg_events();
5006+
assert_eq!(msg_events.len(), 1, "{msg_events:?}");
5007+
if let MessageSendEvent::BroadcastChannelAnnouncement { .. } = msg_events[0] {
5008+
} else {
5009+
panic!("Unexpected event! {:?}", msg_events[0]);
5010+
}
5011+
} else {
5012+
assert!(chan_msgs.4.is_none());
5013+
}
49875014
if pending_raa.0 {
49885015
assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
49895016
node_a.node.handle_revoke_and_ack(node_b_id, &chan_msgs.1.unwrap());
@@ -5048,7 +5075,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50485075
}
50495076
}
50505077

5051-
for chan_msgs in resp_2.drain(..) {
5078+
for mut chan_msgs in resp_2.drain(..) {
50525079
if send_channel_ready.1 {
50535080
node_b.node.handle_channel_ready(node_a_id, &chan_msgs.0.unwrap());
50545081
let announcement_event = node_b.node.get_and_clear_pending_msg_events();
@@ -5063,6 +5090,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50635090
} else {
50645091
assert!(chan_msgs.0.is_none());
50655092
}
5093+
if send_announcement_sigs.1 {
5094+
let announcement_sigs = chan_msgs.4.take().unwrap();
5095+
node_b.node.handle_announcement_signatures(node_a_id, &announcement_sigs);
5096+
let mut msg_events = node_b.node.get_and_clear_pending_msg_events();
5097+
assert_eq!(msg_events.len(), 1, "{msg_events:?}");
5098+
if let MessageSendEvent::BroadcastChannelAnnouncement { .. } = msg_events.remove(0) {
5099+
} else {
5100+
panic!();
5101+
}
5102+
} else {
5103+
assert!(chan_msgs.4.is_none());
5104+
}
50665105
if pending_raa.1 {
50675106
assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
50685107
node_b.node.handle_revoke_and_ack(node_a_id, &chan_msgs.1.unwrap());

lightning/src/ln/functional_tests.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2588,6 +2588,7 @@ pub fn test_simple_peer_disconnect() {
25882588
nodes[1].node.peer_disconnected(node_a_id);
25892589
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
25902590
reconnect_args.send_channel_ready = (true, true);
2591+
reconnect_args.send_announcement_sigs = (true, true);
25912592
reconnect_nodes(reconnect_args);
25922593

25932594
let payment_preimage_1 = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000).0;
@@ -2745,22 +2746,29 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
27452746
// received on either side, both sides will need to resend them.
27462747
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
27472748
reconnect_args.send_channel_ready = (true, true);
2749+
if simulate_broken_lnd || messages_delivered > 0 {
2750+
reconnect_args.send_announcement_sigs.0 = true;
2751+
}
2752+
reconnect_args.send_announcement_sigs.1 = true;
27482753
reconnect_args.pending_htlc_adds.1 = 1;
27492754
reconnect_nodes(reconnect_args);
27502755
} else if messages_delivered == 3 {
27512756
// nodes[0] still wants its RAA + commitment_signed
27522757
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2758+
reconnect_args.send_announcement_sigs = (true, true);
27532759
reconnect_args.pending_responding_commitment_signed.0 = true;
27542760
reconnect_args.pending_raa.0 = true;
27552761
reconnect_nodes(reconnect_args);
27562762
} else if messages_delivered == 4 {
27572763
// nodes[0] still wants its commitment_signed
27582764
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2765+
reconnect_args.send_announcement_sigs.0 = true;
27592766
reconnect_args.pending_responding_commitment_signed.0 = true;
27602767
reconnect_nodes(reconnect_args);
27612768
} else if messages_delivered == 5 {
27622769
// nodes[1] still wants its final RAA
27632770
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2771+
reconnect_args.send_announcement_sigs.0 = true;
27642772
reconnect_args.pending_raa.1 = true;
27652773
reconnect_nodes(reconnect_args);
27662774
} else if messages_delivered == 6 {
@@ -2781,7 +2789,16 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
27812789

27822790
nodes[0].node.peer_disconnected(node_b_id);
27832791
nodes[1].node.peer_disconnected(node_a_id);
2784-
reconnect_nodes(ReconnectArgs::new(&nodes[0], &nodes[1]));
2792+
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2793+
if !simulate_broken_lnd
2794+
&& (messages_delivered == 0 || (messages_delivered > 2 && messages_delivered < 6))
2795+
{
2796+
reconnect_args.send_announcement_sigs.0 = true;
2797+
}
2798+
if messages_delivered < 4 {
2799+
reconnect_args.send_announcement_sigs.1 = true;
2800+
}
2801+
reconnect_nodes(reconnect_args);
27852802

27862803
nodes[1].node.process_pending_htlc_forwards();
27872804

@@ -2879,6 +2896,10 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
28792896
nodes[1].node.peer_disconnected(node_a_id);
28802897
if messages_delivered < 2 {
28812898
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2899+
if !simulate_broken_lnd && messages_delivered == 0 {
2900+
reconnect_args.send_announcement_sigs.0 = true;
2901+
}
2902+
reconnect_args.send_announcement_sigs.1 = true;
28822903
reconnect_args.pending_htlc_claims.0 = 1;
28832904
reconnect_nodes(reconnect_args);
28842905
if messages_delivered < 1 {
@@ -2889,12 +2910,14 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
28892910
} else if messages_delivered == 2 {
28902911
// nodes[0] still wants its RAA + commitment_signed
28912912
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2913+
reconnect_args.send_announcement_sigs.1 = true;
28922914
reconnect_args.pending_responding_commitment_signed.1 = true;
28932915
reconnect_args.pending_raa.1 = true;
28942916
reconnect_nodes(reconnect_args);
28952917
} else if messages_delivered == 3 {
28962918
// nodes[0] still wants its commitment_signed
28972919
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2920+
reconnect_args.send_announcement_sigs.1 = true;
28982921
reconnect_args.pending_responding_commitment_signed.1 = true;
28992922
reconnect_nodes(reconnect_args);
29002923
} else if messages_delivered == 4 {
@@ -2914,7 +2937,15 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
29142937
nodes[0].node.peer_disconnected(node_b_id);
29152938
nodes[1].node.peer_disconnected(node_a_id);
29162939
}
2917-
reconnect_nodes(ReconnectArgs::new(&nodes[0], &nodes[1]));
2940+
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2941+
if !simulate_broken_lnd {
2942+
if messages_delivered == 0 {
2943+
reconnect_args.send_announcement_sigs.0 = true;
2944+
} else if messages_delivered == 2 || messages_delivered == 3 {
2945+
reconnect_args.send_announcement_sigs.1 = true;
2946+
}
2947+
}
2948+
reconnect_nodes(reconnect_args);
29182949

29192950
if messages_delivered > 2 {
29202951
expect_payment_path_successful!(nodes[0]);

lightning/src/ln/payment_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4858,6 +4858,7 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) {
48584858
}
48594859
let mut reconnect_args = ReconnectArgs::new(&nodes[2], &nodes[3]);
48604860
reconnect_args.send_channel_ready = (true, true);
4861+
reconnect_args.send_announcement_sigs = (true, true);
48614862
reconnect_nodes(reconnect_args);
48624863

48634864
// Create a new channel between C and D as A will refuse to retry on the existing one because

lightning/src/ln/reorg_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_
333333
// generate an error message we can handle below.
334334
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
335335
reconnect_args.send_channel_ready = (true, true);
336+
reconnect_args.send_announcement_sigs = (true, true);
336337
reconnect_nodes(reconnect_args);
337338
}
338339
}

0 commit comments

Comments
 (0)