@@ -6209,7 +6209,7 @@ mod tests {
6209
6209
6210
6210
/// pending_htlc_adds includes both the holding cell and in-flight update_add_htlcs, whereas
6211
6211
/// for claims/fails they are separated out.
6212
- fn reconnect_nodes ( node_a : & Node , node_b : & Node , pre_all_htlcs : bool , pending_htlc_adds : ( i64 , i64 ) , pending_htlc_claims : ( usize , usize ) , pending_cell_htlc_claims : ( usize , usize ) , pending_cell_htlc_fails : ( usize , usize ) , pending_raa : ( bool , bool ) ) {
6212
+ fn reconnect_nodes ( node_a : & Node , node_b : & Node , send_funding_locked : ( bool , bool ) , pending_htlc_adds : ( i64 , i64 ) , pending_htlc_claims : ( usize , usize ) , pending_cell_htlc_claims : ( usize , usize ) , pending_cell_htlc_fails : ( usize , usize ) , pending_raa : ( bool , bool ) ) {
6213
6213
node_a. node . peer_connected ( & node_b. node . get_our_node_id ( ) ) ;
6214
6214
let reestablish_1 = get_chan_reestablish_msgs ! ( node_a, node_b) ;
6215
6215
node_b. node . peer_connected ( & node_a. node . get_our_node_id ( ) ) ;
@@ -6242,7 +6242,7 @@ mod tests {
6242
6242
( pending_htlc_adds. 1 == 0 && pending_htlc_claims. 1 == 0 && pending_cell_htlc_claims. 1 == 0 && pending_cell_htlc_fails. 1 == 0 ) ) ;
6243
6243
6244
6244
for chan_msgs in resp_1. drain ( ..) {
6245
- if pre_all_htlcs {
6245
+ if send_funding_locked . 0 {
6246
6246
node_a. node . handle_funding_locked ( & node_b. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) . unwrap ( ) ;
6247
6247
let announcement_event = node_a. node . get_and_clear_pending_msg_events ( ) ;
6248
6248
if !announcement_event. is_empty ( ) {
@@ -6299,7 +6299,7 @@ mod tests {
6299
6299
}
6300
6300
6301
6301
for chan_msgs in resp_2. drain ( ..) {
6302
- if pre_all_htlcs {
6302
+ if send_funding_locked . 1 {
6303
6303
node_b. node . handle_funding_locked ( & node_a. node . get_our_node_id ( ) , & chan_msgs. 0 . unwrap ( ) ) . unwrap ( ) ;
6304
6304
let announcement_event = node_b. node . get_and_clear_pending_msg_events ( ) ;
6305
6305
if !announcement_event. is_empty ( ) {
@@ -6363,7 +6363,7 @@ mod tests {
6363
6363
6364
6364
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6365
6365
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6366
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , true , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6366
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( true , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6367
6367
6368
6368
let payment_preimage_1 = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) [ ..] , 1000000 ) . 0 ;
6369
6369
let payment_hash_2 = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) [ ..] , 1000000 ) . 1 ;
@@ -6372,7 +6372,7 @@ mod tests {
6372
6372
6373
6373
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6374
6374
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6375
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6375
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6376
6376
6377
6377
let payment_preimage_3 = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) [ ..] , 1000000 ) . 0 ;
6378
6378
let payment_preimage_4 = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) [ ..] , 1000000 ) . 0 ;
@@ -6385,7 +6385,7 @@ mod tests {
6385
6385
claim_payment_along_route ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] , & nodes[ 2 ] ) , true , payment_preimage_3) ;
6386
6386
fail_payment_along_route ( & nodes[ 0 ] , & [ & nodes[ 1 ] , & nodes[ 2 ] ] , true , payment_hash_5) ;
6387
6387
6388
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 1 , 0 ) , ( 1 , 0 ) , ( false , false ) ) ;
6388
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 1 , 0 ) , ( 1 , 0 ) , ( false , false ) ) ;
6389
6389
{
6390
6390
let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6391
6391
assert_eq ! ( events. len( ) , 2 ) ;
@@ -6466,19 +6466,19 @@ mod tests {
6466
6466
if messages_delivered < 3 {
6467
6467
// Even if the funding_locked messages get exchanged, as long as nothing further was
6468
6468
// received on either side, both sides will need to resend them.
6469
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , true , ( 0 , 1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6469
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( true , true ) , ( 0 , 1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6470
6470
} else if messages_delivered == 3 {
6471
6471
// nodes[0] still wants its RAA + commitment_signed
6472
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( -1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( true , false ) ) ;
6472
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( -1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( true , false ) ) ;
6473
6473
} else if messages_delivered == 4 {
6474
6474
// nodes[0] still wants its commitment_signed
6475
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( -1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6475
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( -1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6476
6476
} else if messages_delivered == 5 {
6477
6477
// nodes[1] still wants its final RAA
6478
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , true ) ) ;
6478
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , true ) ) ;
6479
6479
} else if messages_delivered == 6 {
6480
6480
// Everything was delivered...
6481
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6481
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6482
6482
}
6483
6483
6484
6484
let events_1 = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
@@ -6490,7 +6490,7 @@ mod tests {
6490
6490
6491
6491
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6492
6492
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6493
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6493
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6494
6494
6495
6495
nodes[ 1 ] . node . channel_state . lock ( ) . unwrap ( ) . next_forward = Instant :: now ( ) ;
6496
6496
nodes[ 1 ] . node . process_pending_htlc_forwards ( ) ;
@@ -6564,7 +6564,7 @@ mod tests {
6564
6564
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6565
6565
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6566
6566
if messages_delivered < 2 {
6567
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6567
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 1 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6568
6568
//TODO: Deduplicate PaymentSent events, then enable this if:
6569
6569
//if messages_delivered < 1 {
6570
6570
let events_4 = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
@@ -6578,21 +6578,21 @@ mod tests {
6578
6578
//}
6579
6579
} else if messages_delivered == 2 {
6580
6580
// nodes[0] still wants its RAA + commitment_signed
6581
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , -1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , true ) ) ;
6581
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , -1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , true ) ) ;
6582
6582
} else if messages_delivered == 3 {
6583
6583
// nodes[0] still wants its commitment_signed
6584
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , -1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6584
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , -1 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6585
6585
} else if messages_delivered == 4 {
6586
6586
// nodes[1] still wants its final RAA
6587
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( true , false ) ) ;
6587
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( true , false ) ) ;
6588
6588
} else if messages_delivered == 5 {
6589
6589
// Everything was delivered...
6590
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6590
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6591
6591
}
6592
6592
6593
6593
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6594
6594
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6595
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6595
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6596
6596
6597
6597
// Channel should still work fine...
6598
6598
let payment_preimage_2 = send_along_route ( & nodes[ 0 ] , route, & [ & nodes[ 1 ] ] , 1000000 ) . 0 ;
@@ -6633,20 +6633,28 @@ mod tests {
6633
6633
_ => panic ! ( "Unexpected event" ) ,
6634
6634
}
6635
6635
6636
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6637
+
6638
+ nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6639
+ nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6640
+
6636
6641
confirm_transaction ( & nodes[ 1 ] . chain_monitor , & tx, tx. version ) ;
6637
6642
let events_2 = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6638
- assert_eq ! ( events_2. len( ) , 1 ) ;
6643
+ assert_eq ! ( events_2. len( ) , 2 ) ;
6639
6644
match events_2[ 0 ] {
6640
6645
MessageSendEvent :: SendFundingLocked { ref node_id, msg : _ } => {
6641
6646
assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
6642
6647
} ,
6643
6648
_ => panic ! ( "Unexpected event" ) ,
6644
6649
}
6650
+ match events_2[ 1 ] {
6651
+ MessageSendEvent :: SendAnnouncementSignatures { ref node_id, msg : _ } => {
6652
+ assert_eq ! ( * node_id, nodes[ 0 ] . node. get_our_node_id( ) ) ;
6653
+ } ,
6654
+ _ => panic ! ( "Unexpected event" ) ,
6655
+ }
6645
6656
6646
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , true , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6647
- nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6648
- nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6649
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , true , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6657
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( true , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6650
6658
6651
6659
// TODO: We shouldn't need to manually pass list_usable_chanels here once we support
6652
6660
// rebroadcasting announcement_signatures upon reconnect.
@@ -6849,7 +6857,7 @@ mod tests {
6849
6857
if disconnect {
6850
6858
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6851
6859
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6852
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , true , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6860
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( true , true ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6853
6861
}
6854
6862
6855
6863
* nodes[ 0 ] . chan_monitor . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
@@ -6890,7 +6898,7 @@ mod tests {
6890
6898
if disconnect {
6891
6899
nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6892
6900
nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6893
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6901
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
6894
6902
}
6895
6903
6896
6904
// ...and make sure we can force-close a TemporaryFailure channel with a PermanentFailure
@@ -7450,7 +7458,7 @@ mod tests {
7450
7458
nodes[ 0 ] . node = Arc :: new ( nodes_0_deserialized) ;
7451
7459
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
7452
7460
7453
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7461
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7454
7462
7455
7463
fail_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , our_payment_hash) ;
7456
7464
claim_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , our_payment_preimage) ;
@@ -7520,8 +7528,8 @@ mod tests {
7520
7528
nodes[ 0 ] . node = Arc :: new ( nodes_0_deserialized) ;
7521
7529
7522
7530
// nodes[1] and nodes[2] have no lost state with nodes[0]...
7523
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7524
- reconnect_nodes ( & nodes[ 0 ] , & nodes[ 2 ] , false , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7531
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 1 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7532
+ reconnect_nodes ( & nodes[ 0 ] , & nodes[ 2 ] , ( false , false ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( 0 , 0 ) , ( false , false ) ) ;
7525
7533
//... and we can even still claim the payment!
7526
7534
claim_payment ( & nodes[ 2 ] , & [ & nodes[ 0 ] , & nodes[ 1 ] ] , our_payment_preimage) ;
7527
7535
0 commit comments