@@ -2614,6 +2614,54 @@ mod tests {
2614
2614
}
2615
2615
}
2616
2616
2617
+ macro_rules! commitment_signed_dance {
2618
+ ( $node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr) => {
2619
+ {
2620
+ {
2621
+ let added_monitors = $node_a. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2622
+ assert!( added_monitors. is_empty( ) ) ;
2623
+ }
2624
+ let ( as_revoke_and_ack, as_commitment_signed) = $node_a. node. handle_commitment_signed( & $node_b. node. get_our_node_id( ) , & $commitment_signed) . unwrap( ) ;
2625
+ {
2626
+ let mut added_monitors = $node_a. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2627
+ assert_eq!( added_monitors. len( ) , 1 ) ;
2628
+ added_monitors. clear( ) ;
2629
+ }
2630
+ {
2631
+ let added_monitors = $node_b. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2632
+ assert!( added_monitors. is_empty( ) ) ;
2633
+ }
2634
+ assert!( $node_b. node. handle_revoke_and_ack( & $node_a. node. get_our_node_id( ) , & as_revoke_and_ack) . unwrap( ) . is_none( ) ) ;
2635
+ {
2636
+ let mut added_monitors = $node_b. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2637
+ assert_eq!( added_monitors. len( ) , 1 ) ;
2638
+ added_monitors. clear( ) ;
2639
+ }
2640
+ let ( bs_revoke_and_ack, bs_none) = $node_b. node. handle_commitment_signed( & $node_a. node. get_our_node_id( ) , & as_commitment_signed. unwrap( ) ) . unwrap( ) ;
2641
+ assert!( bs_none. is_none( ) ) ;
2642
+ {
2643
+ let mut added_monitors = $node_b. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2644
+ assert_eq!( added_monitors. len( ) , 1 ) ;
2645
+ added_monitors. clear( ) ;
2646
+ }
2647
+ if $fail_backwards {
2648
+ assert!( $node_a. node. get_and_clear_pending_events( ) . is_empty( ) ) ;
2649
+ }
2650
+ assert!( $node_a. node. handle_revoke_and_ack( & $node_b. node. get_our_node_id( ) , & bs_revoke_and_ack) . unwrap( ) . is_none( ) ) ;
2651
+ {
2652
+ let mut added_monitors = $node_a. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2653
+ if $fail_backwards {
2654
+ assert_eq!( added_monitors. len( ) , 2 ) ;
2655
+ assert!( added_monitors[ 0 ] . 0 != added_monitors[ 1 ] . 0 ) ;
2656
+ } else {
2657
+ assert_eq!( added_monitors. len( ) , 1 ) ;
2658
+ }
2659
+ added_monitors. clear( ) ;
2660
+ }
2661
+ }
2662
+ }
2663
+ }
2664
+
2617
2665
fn send_along_route ( origin_node : & Node , route : Route , expected_route : & [ & Node ] , recv_value : u64 ) -> ( [ u8 ; 32 ] , [ u8 ; 32 ] ) {
2618
2666
let our_payment_preimage = [ * origin_node. network_payment_count . borrow ( ) ; 32 ] ;
2619
2667
* origin_node. network_payment_count . borrow_mut ( ) += 1 ;
@@ -2648,26 +2696,7 @@ mod tests {
2648
2696
assert_eq ! ( added_monitors. len( ) , 0 ) ;
2649
2697
}
2650
2698
2651
- let revoke_and_ack = node. node . handle_commitment_signed ( & prev_node. node . get_our_node_id ( ) , & payment_event. commitment_msg ) . unwrap ( ) ;
2652
- {
2653
- let mut added_monitors = node. chan_monitor . added_monitors . lock ( ) . unwrap ( ) ;
2654
- assert_eq ! ( added_monitors. len( ) , 1 ) ;
2655
- added_monitors. clear ( ) ;
2656
- }
2657
- assert ! ( prev_node. node. handle_revoke_and_ack( & node. node. get_our_node_id( ) , & revoke_and_ack. 0 ) . unwrap( ) . is_none( ) ) ;
2658
- let prev_revoke_and_ack = prev_node. node . handle_commitment_signed ( & node. node . get_our_node_id ( ) , & revoke_and_ack. 1 . unwrap ( ) ) . unwrap ( ) ;
2659
- {
2660
- let mut added_monitors = prev_node. chan_monitor . added_monitors . lock ( ) . unwrap ( ) ;
2661
- assert_eq ! ( added_monitors. len( ) , 2 ) ;
2662
- added_monitors. clear ( ) ;
2663
- }
2664
- assert ! ( node. node. handle_revoke_and_ack( & prev_node. node. get_our_node_id( ) , & prev_revoke_and_ack. 0 ) . unwrap( ) . is_none( ) ) ;
2665
- assert ! ( prev_revoke_and_ack. 1 . is_none( ) ) ;
2666
- {
2667
- let mut added_monitors = node. chan_monitor . added_monitors . lock ( ) . unwrap ( ) ;
2668
- assert_eq ! ( added_monitors. len( ) , 1 ) ;
2669
- added_monitors. clear ( ) ;
2670
- }
2699
+ commitment_signed_dance ! ( node, prev_node, payment_event. commitment_msg, false ) ;
2671
2700
2672
2701
let events_1 = node. node . get_and_clear_pending_events ( ) ;
2673
2702
assert_eq ! ( events_1. len( ) , 1 ) ;
@@ -2727,26 +2756,7 @@ mod tests {
2727
2756
}
2728
2757
added_monitors. clear( ) ;
2729
2758
}
2730
- let revoke_and_commit = $node. node. handle_commitment_signed( & $prev_node. node. get_our_node_id( ) , & next_msgs. as_ref( ) . unwrap( ) . 1 ) . unwrap( ) ;
2731
- {
2732
- let mut added_monitors = $node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2733
- assert_eq!( added_monitors. len( ) , 1 ) ;
2734
- added_monitors. clear( ) ;
2735
- }
2736
- assert!( $prev_node. node. handle_revoke_and_ack( & $node. node. get_our_node_id( ) , & revoke_and_commit. 0 ) . unwrap( ) . is_none( ) ) ;
2737
- let revoke_and_ack = $prev_node. node. handle_commitment_signed( & $node. node. get_our_node_id( ) , & revoke_and_commit. 1 . unwrap( ) ) . unwrap( ) ;
2738
- assert!( revoke_and_ack. 1 . is_none( ) ) ;
2739
- {
2740
- let mut added_monitors = $prev_node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2741
- assert_eq!( added_monitors. len( ) , 2 ) ;
2742
- added_monitors. clear( ) ;
2743
- }
2744
- assert!( $node. node. handle_revoke_and_ack( & $prev_node. node. get_our_node_id( ) , & revoke_and_ack. 0 ) . unwrap( ) . is_none( ) ) ;
2745
- {
2746
- let mut added_monitors = $node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2747
- assert_eq!( added_monitors. len( ) , 1 ) ;
2748
- added_monitors. clear( ) ;
2749
- }
2759
+ commitment_signed_dance!( $node, $prev_node, next_msgs. as_ref( ) . unwrap( ) . 1 , false ) ;
2750
2760
}
2751
2761
}
2752
2762
}
@@ -2843,38 +2853,7 @@ mod tests {
2843
2853
( $node: expr, $prev_node: expr, $last_node: expr) => {
2844
2854
{
2845
2855
$node. node. handle_update_fail_htlc( & $prev_node. node. get_our_node_id( ) , & next_msgs. as_ref( ) . unwrap( ) . 0 ) . unwrap( ) ;
2846
- let revoke_and_commit = $node. node. handle_commitment_signed( & $prev_node. node. get_our_node_id( ) , & next_msgs. as_ref( ) . unwrap( ) . 1 ) . unwrap( ) ;
2847
-
2848
- {
2849
- let mut added_monitors = $node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2850
- assert_eq!( added_monitors. len( ) , 1 ) ;
2851
- added_monitors. clear( ) ;
2852
- }
2853
- assert!( $prev_node. node. handle_revoke_and_ack( & $node. node. get_our_node_id( ) , & revoke_and_commit. 0 ) . unwrap( ) . is_none( ) ) ;
2854
- {
2855
- let mut added_monitors = $prev_node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2856
- assert_eq!( added_monitors. len( ) , 1 ) ;
2857
- added_monitors. clear( ) ;
2858
- }
2859
- let revoke_and_ack = $prev_node. node. handle_commitment_signed( & $node. node. get_our_node_id( ) , & revoke_and_commit. 1 . unwrap( ) ) . unwrap( ) ;
2860
- {
2861
- let mut added_monitors = $prev_node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2862
- assert_eq!( added_monitors. len( ) , 1 ) ;
2863
- added_monitors. clear( ) ;
2864
- }
2865
- assert!( revoke_and_ack. 1 . is_none( ) ) ;
2866
- assert!( $node. node. get_and_clear_pending_events( ) . is_empty( ) ) ;
2867
- assert!( $node. node. handle_revoke_and_ack( & $prev_node. node. get_our_node_id( ) , & revoke_and_ack. 0 ) . unwrap( ) . is_none( ) ) ;
2868
- {
2869
- let mut added_monitors = $node. chan_monitor. added_monitors. lock( ) . unwrap( ) ;
2870
- if $last_node {
2871
- assert_eq!( added_monitors. len( ) , 1 ) ;
2872
- } else {
2873
- assert_eq!( added_monitors. len( ) , 2 ) ;
2874
- assert!( added_monitors[ 0 ] . 0 != added_monitors[ 1 ] . 0 ) ;
2875
- }
2876
- added_monitors. clear( ) ;
2877
- }
2856
+ commitment_signed_dance!( $node, $prev_node, next_msgs. as_ref( ) . unwrap( ) . 1 , !$last_node) ;
2878
2857
}
2879
2858
}
2880
2859
}
0 commit comments