Skip to content

Commit 7d92927

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 890fbe5 commit 7d92927

File tree

8 files changed

+95
-13
lines changed

8 files changed

+95
-13
lines changed

lightning/src/ln/async_signer_tests.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ fn do_test_async_raa_peer_disconnect(
596596
}
597597

598598
// Expect the RAA
599-
let (_, revoke_and_ack, commitment_signed, resend_order) =
599+
let (_, revoke_and_ack, commitment_signed, resend_order, _) =
600600
handle_chan_reestablish_msgs!(dst, src);
601601
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
602602
assert!(revoke_and_ack.is_none());
@@ -612,14 +612,14 @@ fn do_test_async_raa_peer_disconnect(
612612
dst.node.signer_unblocked(Some((src_node_id, chan_id)));
613613

614614
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
615-
let (_, revoke_and_ack, commitment_signed, resend_order) =
615+
let (_, revoke_and_ack, commitment_signed, resend_order, _) =
616616
handle_chan_reestablish_msgs!(dst, src);
617617
assert!(revoke_and_ack.is_some());
618618
assert!(commitment_signed.is_some());
619619
assert!(resend_order == RAACommitmentOrder::RevokeAndACKFirst);
620620
} else {
621621
// Make sure we don't double send the RAA.
622-
let (_, revoke_and_ack, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
622+
let (_, revoke_and_ack, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
623623
assert!(revoke_and_ack.is_none());
624624
assert!(commitment_signed.is_none());
625625
}
@@ -745,7 +745,7 @@ fn do_test_async_commitment_signature_peer_disconnect(
745745
}
746746

747747
// Expect the RAA
748-
let (_, revoke_and_ack, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
748+
let (_, revoke_and_ack, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
749749
assert!(revoke_and_ack.is_some());
750750
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
751751
assert!(commitment_signed.is_none());
@@ -758,11 +758,11 @@ fn do_test_async_commitment_signature_peer_disconnect(
758758
dst.node.signer_unblocked(Some((src_node_id, chan_id)));
759759

760760
if test_case == UnblockSignerAcrossDisconnectCase::AtEnd {
761-
let (_, _, commitment_signed, _) = handle_chan_reestablish_msgs!(dst, src);
761+
let (_, _, commitment_signed, _, _) = handle_chan_reestablish_msgs!(dst, src);
762762
assert!(commitment_signed.is_some());
763763
} else {
764764
// Make sure we don't double send the CS.
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_none());
767767
}
768768
}
@@ -877,6 +877,7 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
877877
assert!(as_resp.0.is_none());
878878
assert!(as_resp.1.is_none());
879879
assert!(as_resp.2.is_none());
880+
assert!(as_resp.4.is_none());
880881

881882
if monitor_update_failure {
882883
chanmon_cfgs[0].persister.set_update_ret(ChannelMonitorUpdateStatus::Completed);
@@ -896,6 +897,7 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
896897
assert!(as_resp.0.is_none());
897898
assert!(as_resp.1.is_none());
898899
assert!(as_resp.2.is_none());
900+
assert!(as_resp.4.is_none());
899901

900902
nodes[0].enable_channel_signer_op(&node_b_id, &chan_id, SignerOp::SignCounterpartyCommitment);
901903
nodes[0].node.signer_unblocked(Some((node_b_id, chan_id)));
@@ -912,6 +914,9 @@ fn do_test_async_commitment_signature_ordering(monitor_update_failure: bool) {
912914

913915
assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
914916

917+
assert!(as_resp.4.is_none());
918+
assert!(bs_resp.4.is_none());
919+
915920
// Now that everything is restored, get the CS + RAA and handle them.
916921
nodes[1]
917922
.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
@@ -4796,11 +4796,14 @@ macro_rules! handle_chan_reestablish_msgs {
47964796
None
47974797
};
47984798

4799-
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ }) =
4799+
let mut announcement_sigs = None; // May be now or later
4800+
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg }) =
48004801
msg_events.get(idx)
48014802
{
48024803
idx += 1;
48034804
assert_eq!(*node_id, $dst_node.node.get_our_node_id());
4805+
assert!(announcement_sigs.is_none());
4806+
announcement_sigs = Some(msg.clone());
48044807
}
48054808

48064809
let mut had_channel_update = false; // ChannelUpdate may be now or later, but not both
@@ -4859,23 +4862,33 @@ macro_rules! handle_chan_reestablish_msgs {
48594862
}
48604863
}
48614864

4865+
if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg }) =
4866+
msg_events.get(idx)
4867+
{
4868+
idx += 1;
4869+
assert_eq!(*node_id, $dst_node.node.get_our_node_id());
4870+
assert!(announcement_sigs.is_none());
4871+
announcement_sigs = Some(msg.clone());
4872+
}
4873+
48624874
if let Some(&MessageSendEvent::SendChannelUpdate { ref node_id, .. }) = msg_events.get(idx)
48634875
{
48644876
assert_eq!(*node_id, $dst_node.node.get_our_node_id());
48654877
idx += 1;
48664878
assert!(!had_channel_update);
48674879
}
48684880

4869-
assert_eq!(msg_events.len(), idx);
4881+
assert_eq!(msg_events.len(), idx, "{msg_events:?}");
48704882

4871-
(channel_ready, revoke_and_ack, commitment_update, order)
4883+
(channel_ready, revoke_and_ack, commitment_update, order, announcement_sigs)
48724884
}};
48734885
}
48744886

48754887
pub struct ReconnectArgs<'a, 'b, 'c, 'd> {
48764888
pub node_a: &'a Node<'b, 'c, 'd>,
48774889
pub node_b: &'a Node<'b, 'c, 'd>,
48784890
pub send_channel_ready: (bool, bool),
4891+
pub send_announcement_sigs: (bool, bool),
48794892
pub pending_responding_commitment_signed: (bool, bool),
48804893
/// Indicates that the pending responding commitment signed will be a dup for the recipient,
48814894
/// and no monitor update is expected
@@ -4894,6 +4907,7 @@ impl<'a, 'b, 'c, 'd> ReconnectArgs<'a, 'b, 'c, 'd> {
48944907
node_a,
48954908
node_b,
48964909
send_channel_ready: (false, false),
4910+
send_announcement_sigs: (false, false),
48974911
pending_responding_commitment_signed: (false, false),
48984912
pending_responding_commitment_signed_dup_monitor: (false, false),
48994913
pending_htlc_adds: (0, 0),
@@ -4913,6 +4927,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49134927
node_a,
49144928
node_b,
49154929
send_channel_ready,
4930+
send_announcement_sigs,
49164931
pending_htlc_adds,
49174932
pending_htlc_claims,
49184933
pending_htlc_fails,
@@ -4994,7 +5009,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
49945009
&& pending_cell_htlc_fails.1 == 0)
49955010
);
49965011

4997-
for chan_msgs in resp_1.drain(..) {
5012+
for mut chan_msgs in resp_1.drain(..) {
49985013
if send_channel_ready.0 {
49995014
node_a.node.handle_channel_ready(node_b_id, &chan_msgs.0.unwrap());
50005015
let announcement_event = node_a.node.get_and_clear_pending_msg_events();
@@ -5009,6 +5024,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50095024
} else {
50105025
assert!(chan_msgs.0.is_none());
50115026
}
5027+
if send_announcement_sigs.0 {
5028+
let announcement_sigs = chan_msgs.4.take().unwrap();
5029+
node_a.node.handle_announcement_signatures(node_b_id, &announcement_sigs);
5030+
let msg_events = node_a.node.get_and_clear_pending_msg_events();
5031+
assert_eq!(msg_events.len(), 1, "{msg_events:?}");
5032+
if let MessageSendEvent::BroadcastChannelAnnouncement { .. } = msg_events[0] {
5033+
} else {
5034+
panic!("Unexpected event! {:?}", msg_events[0]);
5035+
}
5036+
} else {
5037+
assert!(chan_msgs.4.is_none());
5038+
}
50125039
if pending_raa.0 {
50135040
assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
50145041
node_a.node.handle_revoke_and_ack(node_b_id, &chan_msgs.1.unwrap());
@@ -5073,7 +5100,7 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50735100
}
50745101
}
50755102

5076-
for chan_msgs in resp_2.drain(..) {
5103+
for mut chan_msgs in resp_2.drain(..) {
50775104
if send_channel_ready.1 {
50785105
node_b.node.handle_channel_ready(node_a_id, &chan_msgs.0.unwrap());
50795106
let announcement_event = node_b.node.get_and_clear_pending_msg_events();
@@ -5088,6 +5115,18 @@ pub fn reconnect_nodes<'a, 'b, 'c, 'd>(args: ReconnectArgs<'a, 'b, 'c, 'd>) {
50885115
} else {
50895116
assert!(chan_msgs.0.is_none());
50905117
}
5118+
if send_announcement_sigs.1 {
5119+
let announcement_sigs = chan_msgs.4.take().unwrap();
5120+
node_b.node.handle_announcement_signatures(node_a_id, &announcement_sigs);
5121+
let mut msg_events = node_b.node.get_and_clear_pending_msg_events();
5122+
assert_eq!(msg_events.len(), 1, "{msg_events:?}");
5123+
if let MessageSendEvent::BroadcastChannelAnnouncement { .. } = msg_events.remove(0) {
5124+
} else {
5125+
panic!();
5126+
}
5127+
} else {
5128+
assert!(chan_msgs.4.is_none());
5129+
}
50915130
if pending_raa.1 {
50925131
assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
50935132
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
@@ -2559,6 +2559,7 @@ pub fn test_simple_peer_disconnect() {
25592559
nodes[1].node.peer_disconnected(node_a_id);
25602560
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
25612561
reconnect_args.send_channel_ready = (true, true);
2562+
reconnect_args.send_announcement_sigs = (true, true);
25622563
reconnect_nodes(reconnect_args);
25632564

25642565
let payment_preimage_1 = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000).0;
@@ -2716,22 +2717,29 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
27162717
// received on either side, both sides will need to resend them.
27172718
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
27182719
reconnect_args.send_channel_ready = (true, true);
2720+
if simulate_broken_lnd || messages_delivered > 0 {
2721+
reconnect_args.send_announcement_sigs.0 = true;
2722+
}
2723+
reconnect_args.send_announcement_sigs.1 = true;
27192724
reconnect_args.pending_htlc_adds.1 = 1;
27202725
reconnect_nodes(reconnect_args);
27212726
} else if messages_delivered == 3 {
27222727
// nodes[0] still wants its RAA + commitment_signed
27232728
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2729+
reconnect_args.send_announcement_sigs = (true, true);
27242730
reconnect_args.pending_responding_commitment_signed.0 = true;
27252731
reconnect_args.pending_raa.0 = true;
27262732
reconnect_nodes(reconnect_args);
27272733
} else if messages_delivered == 4 {
27282734
// nodes[0] still wants its commitment_signed
27292735
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2736+
reconnect_args.send_announcement_sigs.0 = true;
27302737
reconnect_args.pending_responding_commitment_signed.0 = true;
27312738
reconnect_nodes(reconnect_args);
27322739
} else if messages_delivered == 5 {
27332740
// nodes[1] still wants its final RAA
27342741
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2742+
reconnect_args.send_announcement_sigs.0 = true;
27352743
reconnect_args.pending_raa.1 = true;
27362744
reconnect_nodes(reconnect_args);
27372745
} else if messages_delivered == 6 {
@@ -2752,7 +2760,16 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
27522760

27532761
nodes[0].node.peer_disconnected(node_b_id);
27542762
nodes[1].node.peer_disconnected(node_a_id);
2755-
reconnect_nodes(ReconnectArgs::new(&nodes[0], &nodes[1]));
2763+
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2764+
if !simulate_broken_lnd
2765+
&& (messages_delivered == 0 || (messages_delivered > 2 && messages_delivered < 6))
2766+
{
2767+
reconnect_args.send_announcement_sigs.0 = true;
2768+
}
2769+
if messages_delivered < 4 {
2770+
reconnect_args.send_announcement_sigs.1 = true;
2771+
}
2772+
reconnect_nodes(reconnect_args);
27562773

27572774
nodes[1].node.process_pending_htlc_forwards();
27582775

@@ -2850,6 +2867,10 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
28502867
nodes[1].node.peer_disconnected(node_a_id);
28512868
if messages_delivered < 2 {
28522869
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2870+
if !simulate_broken_lnd && messages_delivered == 0 {
2871+
reconnect_args.send_announcement_sigs.0 = true;
2872+
}
2873+
reconnect_args.send_announcement_sigs.1 = true;
28532874
reconnect_args.pending_htlc_claims.0 = 1;
28542875
reconnect_nodes(reconnect_args);
28552876
if messages_delivered < 1 {
@@ -2860,12 +2881,14 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
28602881
} else if messages_delivered == 2 {
28612882
// nodes[0] still wants its RAA + commitment_signed
28622883
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2884+
reconnect_args.send_announcement_sigs.1 = true;
28632885
reconnect_args.pending_responding_commitment_signed.1 = true;
28642886
reconnect_args.pending_raa.1 = true;
28652887
reconnect_nodes(reconnect_args);
28662888
} else if messages_delivered == 3 {
28672889
// nodes[0] still wants its commitment_signed
28682890
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2891+
reconnect_args.send_announcement_sigs.1 = true;
28692892
reconnect_args.pending_responding_commitment_signed.1 = true;
28702893
reconnect_nodes(reconnect_args);
28712894
} else if messages_delivered == 4 {
@@ -2885,7 +2908,15 @@ fn do_test_drop_messages_peer_disconnect(messages_delivered: u8, simulate_broken
28852908
nodes[0].node.peer_disconnected(node_b_id);
28862909
nodes[1].node.peer_disconnected(node_a_id);
28872910
}
2888-
reconnect_nodes(ReconnectArgs::new(&nodes[0], &nodes[1]));
2911+
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
2912+
if !simulate_broken_lnd {
2913+
if messages_delivered == 0 {
2914+
reconnect_args.send_announcement_sigs.0 = true;
2915+
} else if messages_delivered == 2 || messages_delivered == 3 {
2916+
reconnect_args.send_announcement_sigs.1 = true;
2917+
}
2918+
}
2919+
reconnect_nodes(reconnect_args);
28892920

28902921
if messages_delivered > 2 {
28912922
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/quiescence_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,7 @@ fn do_test_quiescence_termination_on_disconnect(reload: bool) {
755755

756756
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
757757
reconnect_args.send_channel_ready = (true, true);
758+
reconnect_args.send_announcement_sigs = (true, true);
758759
reconnect_nodes(reconnect_args);
759760

760761
send_payment(&nodes[0], &[&nodes[1]], 1_000_000);

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
}

lightning/src/ln/splicing_tests.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ fn do_test_splice_state_reset_on_disconnect(reload: bool) {
401401

402402
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
403403
reconnect_args.send_channel_ready = (true, true);
404+
reconnect_args.send_announcement_sigs = (true, true);
404405
reconnect_nodes(reconnect_args);
405406

406407
nodes[0]
@@ -457,6 +458,7 @@ fn do_test_splice_state_reset_on_disconnect(reload: bool) {
457458

458459
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
459460
reconnect_args.send_channel_ready = (true, true);
461+
reconnect_args.send_announcement_sigs = (true, true);
460462
reconnect_nodes(reconnect_args);
461463

462464
// Attempt a splice negotiation that completes, (i.e. `tx_signatures` are exchanged). Reconnecting
@@ -488,6 +490,7 @@ fn do_test_splice_state_reset_on_disconnect(reload: bool) {
488490
}
489491

490492
let mut reconnect_args = ReconnectArgs::new(&nodes[0], &nodes[1]);
493+
reconnect_args.send_announcement_sigs = (true, true);
491494
reconnect_nodes(reconnect_args);
492495

493496
mine_transaction(&nodes[0], &splice_tx);

0 commit comments

Comments
 (0)