+ fn claim_payment(origin_node: &ChannelManager, origin_monitor: &test_utils::TestChannelMonitor, expected_route: &[(&ChannelManager, &test_utils::TestChannelMonitor)], our_payment_preimage: [u8; 32]) {
+ assert!(expected_route.last().unwrap().0.claim_funds(our_payment_preimage));
+ {
+ let mut added_monitors = expected_route.last().unwrap().1.added_monitors.lock().unwrap();
+ assert_eq!(added_monitors.len(), 1);
+ added_monitors.clear();
+ }
+
+ let mut next_msgs: Option<(msgs::UpdateFulfillHTLC, msgs::CommitmentSigned)> = None;
+ macro_rules! update_fulfill_dance {
+ ($node: expr, $monitor: expr, $prev_node: expr, $prev_monitor: expr) => {
+ {
+ $node.handle_update_fulfill_htlc(&$prev_node.get_our_node_id(), &next_msgs.as_ref().unwrap().0).unwrap();
+ let revoke_and_commit = $node.handle_commitment_signed(&$prev_node.get_our_node_id(), &next_msgs.as_ref().unwrap().1).unwrap();
+ {
+ let mut added_monitors = $monitor.added_monitors.lock().unwrap();
+ assert_eq!(added_monitors.len(), 2);
+ added_monitors.clear();
+ }
+ assert!($prev_node.handle_revoke_and_ack(&$node.get_our_node_id(), &revoke_and_commit.0).unwrap().is_none());
+ let revoke_and_ack = $prev_node.handle_commitment_signed(&$node.get_our_node_id(), &revoke_and_commit.1.unwrap()).unwrap();
+ assert!(revoke_and_ack.1.is_none());
+ {
+ let mut added_monitors = $prev_monitor.added_monitors.lock().unwrap();
+ assert_eq!(added_monitors.len(), 2);
+ added_monitors.clear();
+ }
+ assert!($node.handle_revoke_and_ack(&$prev_node.get_our_node_id(), &revoke_and_ack.0).unwrap().is_none());
+ {
+ let mut added_monitors = $monitor.added_monitors.lock().unwrap();
+ assert_eq!(added_monitors.len(), 1);
+ added_monitors.clear();
+ }
+ }
+ }
+ }