Replace `check_closed_broadcast` macro with a function
[rust-lightning] / lightning / src / ln / functional_test_utils.rs
index 6c3c6e76d422cb9967cc694d8a640d50cdd46de2..e4f37efaa3198da510812b8a7ac8996d0b076508 100644 (file)
@@ -576,21 +576,26 @@ macro_rules! get_event {
        }
 }
 
+/// Gets an UpdateHTLCs MessageSendEvent
+pub fn get_htlc_update_msgs(node: &Node, recipient: &PublicKey) -> msgs::CommitmentUpdate {
+       let events = node.node.get_and_clear_pending_msg_events();
+       assert_eq!(events.len(), 1);
+       match events[0] {
+               MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
+                       assert_eq!(node_id, recipient);
+                       (*updates).clone()
+               },
+               _ => panic!("Unexpected event"),
+       }
+}
+
 #[macro_export]
 /// Gets an UpdateHTLCs MessageSendEvent
+///
+/// Don't use this, use the identically-named function instead.
 macro_rules! get_htlc_update_msgs {
        ($node: expr, $node_id: expr) => {
-               {
-                       let events = $node.node.get_and_clear_pending_msg_events();
-                       assert_eq!(events.len(), 1);
-                       match events[0] {
-                               $crate::util::events::MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
-                                       assert_eq!(*node_id, $node_id);
-                                       (*updates).clone()
-                               },
-                               _ => panic!("Unexpected event"),
-                       }
-               }
+               $crate::ln::functional_test_utils::get_htlc_update_msgs(&$node, &$node_id)
        }
 }
 
@@ -1144,6 +1149,24 @@ pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, '
        }
 }
 
+pub fn do_check_spends<F: Fn(&bitcoin::blockdata::transaction::OutPoint) -> Option<TxOut>>(tx: &Transaction, get_output: F) {
+       for outp in tx.output.iter() {
+               assert!(outp.value >= outp.script_pubkey.dust_value().to_sat(), "Spending tx output didn't meet dust limit");
+       }
+       let mut total_value_in = 0;
+       for input in tx.input.iter() {
+               total_value_in += get_output(&input.previous_output).unwrap().value;
+       }
+       let mut total_value_out = 0;
+       for output in tx.output.iter() {
+               total_value_out += output.value;
+       }
+       let min_fee = (tx.weight() as u64 + 3) / 4; // One sat per vbyte (ie per weight/4, rounded up)
+       // Input amount - output amount = fee, so check that out + min_fee is smaller than input
+       assert!(total_value_out + min_fee <= total_value_in);
+       tx.verify(get_output).unwrap();
+}
+
 #[macro_export]
 macro_rules! check_spends {
        ($tx: expr, $($spends_txn: expr),*) => {
@@ -1153,9 +1176,6 @@ macro_rules! check_spends {
                                assert!(outp.value >= outp.script_pubkey.dust_value().to_sat(), "Input tx output didn't meet dust limit");
                        }
                        )*
-                       for outp in $tx.output.iter() {
-                               assert!(outp.value >= outp.script_pubkey.dust_value().to_sat(), "Spending tx output didn't meet dust limit");
-                       }
                        let get_output = |out_point: &bitcoin::blockdata::transaction::OutPoint| {
                                $(
                                        if out_point.txid == $spends_txn.txid() {
@@ -1164,18 +1184,7 @@ macro_rules! check_spends {
                                )*
                                None
                        };
-                       let mut total_value_in = 0;
-                       for input in $tx.input.iter() {
-                               total_value_in += get_output(&input.previous_output).unwrap().value;
-                       }
-                       let mut total_value_out = 0;
-                       for output in $tx.output.iter() {
-                               total_value_out += output.value;
-                       }
-                       let min_fee = ($tx.weight() as u64 + 3) / 4; // One sat per vbyte (ie per weight/4, rounded up)
-                       // Input amount - output amount = fee, so check that out + min_fee is smaller than input
-                       assert!(total_value_out + min_fee <= total_value_in);
-                       $tx.verify(get_output).unwrap();
+                       $crate::ln::functional_test_utils::do_check_spends(&$tx, get_output);
                }
        }
 }
@@ -1222,30 +1231,35 @@ macro_rules! check_warn_msg {
 
 /// Check that a channel's closing channel update has been broadcasted, and optionally
 /// check whether an error message event has occurred.
-#[macro_export]
-macro_rules! check_closed_broadcast {
-       ($node: expr, $with_error_msg: expr) => {{
-               use $crate::util::events::MessageSendEvent;
-               use $crate::ln::msgs::ErrorAction;
-
-               let msg_events = $node.node.get_and_clear_pending_msg_events();
-               assert_eq!(msg_events.len(), if $with_error_msg { 2 } else { 1 });
-               match msg_events[0] {
-                       MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
-                               assert_eq!(msg.contents.flags & 2, 2);
+pub fn check_closed_broadcast(node: &Node, with_error_msg: bool) -> Option<msgs::ErrorMessage> {
+       let msg_events = node.node.get_and_clear_pending_msg_events();
+       assert_eq!(msg_events.len(), if with_error_msg { 2 } else { 1 });
+       match msg_events[0] {
+               MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
+                       assert_eq!(msg.contents.flags & 2, 2);
+               },
+               _ => panic!("Unexpected event"),
+       }
+       if with_error_msg {
+               match msg_events[1] {
+                       MessageSendEvent::HandleError { action: msgs::ErrorAction::SendErrorMessage { ref msg }, node_id: _ } => {
+                               // TODO: Check node_id
+                               Some(msg.clone())
                        },
                        _ => panic!("Unexpected event"),
                }
-               if $with_error_msg {
-                       match msg_events[1] {
-                               MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id: _ } => {
-                                       // TODO: Check node_id
-                                       Some(msg.clone())
-                               },
-                               _ => panic!("Unexpected event"),
-                       }
-               } else { None }
-       }}
+       } else { None }
+}
+
+/// Check that a channel's closing channel update has been broadcasted, and optionally
+/// check whether an error message event has occurred.
+///
+/// Don't use this, use the identically-named function instead.
+#[macro_export]
+macro_rules! check_closed_broadcast {
+       ($node: expr, $with_error_msg: expr) => {
+               $crate::ln::functional_test_utils::check_closed_broadcast(&$node, $with_error_msg)
+       }
 }
 
 /// Check that a channel's closing channel events has been issued