@@ -834,3 +834,48 @@ fn test_closing_signed_reinit_timeout() {
834
834
do_test_closing_signed_reinit_timeout ( TimeoutStep :: AfterClosingSigned ) ;
835
835
do_test_closing_signed_reinit_timeout ( TimeoutStep :: NoTimeout ) ;
836
836
}
837
+
838
+ fn do_simple_legacy_shutdown_test ( high_initiator_fee : bool ) {
839
+ // A simpe test of the legacy shutdown fee negotiation logic.
840
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
841
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
842
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
843
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
844
+
845
+ let chan = create_announced_chan_between_nodes ( & nodes, 0 , 1 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
846
+
847
+ if high_initiator_fee {
848
+ // If high_initiator_fee is set, set nodes[0]'s feerate significantly higher. This
849
+ // shouldn't impact the flow at all given nodes[1] will happily accept the higher fee.
850
+ let mut feerate_lock = chanmon_cfgs[ 0 ] . fee_estimator . sat_per_kw . lock ( ) . unwrap ( ) ;
851
+ * feerate_lock *= 10 ;
852
+ }
853
+
854
+ nodes[ 0 ] . node . close_channel ( & OutPoint { txid : chan. 3 . txid ( ) , index : 0 } . to_channel_id ( ) ) . unwrap ( ) ;
855
+ let node_0_shutdown = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendShutdown , nodes[ 1 ] . node. get_our_node_id( ) ) ;
856
+ nodes[ 1 ] . node . handle_shutdown ( & nodes[ 0 ] . node . get_our_node_id ( ) , & InitFeatures :: known ( ) , & node_0_shutdown) ;
857
+ let node_1_shutdown = get_event_msg ! ( nodes[ 1 ] , MessageSendEvent :: SendShutdown , nodes[ 0 ] . node. get_our_node_id( ) ) ;
858
+ nodes[ 0 ] . node . handle_shutdown ( & nodes[ 1 ] . node . get_our_node_id ( ) , & InitFeatures :: known ( ) , & node_1_shutdown) ;
859
+
860
+ let mut node_0_closing_signed = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendClosingSigned , nodes[ 1 ] . node. get_our_node_id( ) ) ;
861
+ node_0_closing_signed. fee_range = None ;
862
+ if high_initiator_fee {
863
+ assert ! ( node_0_closing_signed. fee_satoshis > 500 ) ;
864
+ } else {
865
+ assert ! ( node_0_closing_signed. fee_satoshis < 500 ) ;
866
+ }
867
+
868
+ nodes[ 1 ] . node . handle_closing_signed ( & nodes[ 0 ] . node . get_our_node_id ( ) , & node_0_closing_signed) ;
869
+ let ( _, mut node_1_closing_signed) = get_closing_signed_broadcast ! ( nodes[ 1 ] . node, nodes[ 0 ] . node. get_our_node_id( ) ) ;
870
+ node_1_closing_signed. as_mut ( ) . unwrap ( ) . fee_range = None ;
871
+
872
+ nodes[ 0 ] . node . handle_closing_signed ( & nodes[ 1 ] . node . get_our_node_id ( ) , & node_1_closing_signed. unwrap ( ) ) ;
873
+ let ( _, node_0_none) = get_closing_signed_broadcast ! ( nodes[ 0 ] . node, nodes[ 1 ] . node. get_our_node_id( ) ) ;
874
+ assert ! ( node_0_none. is_none( ) ) ;
875
+ }
876
+
877
+ #[ test]
878
+ fn simple_legacy_shutdown_test ( ) {
879
+ do_simple_legacy_shutdown_test ( false ) ;
880
+ do_simple_legacy_shutdown_test ( true ) ;
881
+ }
0 commit comments