Split up generic parameters that used to comprise KeysInterface.
[rust-lightning] / lightning / src / ln / functional_test_utils.rs
1 // This file is Copyright its original authors, visible in version control
2 // history.
3 //
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
8 // licenses.
9
10 //! A bunch of useful utilities for building networks of nodes and exchanging messages between
11 //! nodes for functional tests.
12
13 use crate::chain::{BestBlock, ChannelMonitorUpdateStatus, Confirm, Listen, Watch, keysinterface::EntropySource};
14 use crate::chain::channelmonitor::ChannelMonitor;
15 use crate::chain::transaction::OutPoint;
16 use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
17 use crate::ln::channelmanager::{self, ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, PaymentId, MIN_CLTV_EXPIRY_DELTA};
18 use crate::routing::gossip::{P2PGossipSync, NetworkGraph, NetworkUpdate};
19 use crate::routing::router::{PaymentParameters, Route, get_route};
20 use crate::ln::features::InitFeatures;
21 use crate::ln::msgs;
22 use crate::ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
23 use crate::util::enforcing_trait_impls::EnforcingSigner;
24 use crate::util::scid_utils;
25 use crate::util::test_utils;
26 use crate::util::test_utils::{panicking, TestChainMonitor};
27 use crate::util::events::{Event, HTLCDestination, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose};
28 use crate::util::errors::APIError;
29 use crate::util::config::UserConfig;
30 use crate::util::ser::{ReadableArgs, Writeable};
31
32 use bitcoin::blockdata::block::{Block, BlockHeader};
33 use bitcoin::blockdata::constants::genesis_block;
34 use bitcoin::blockdata::transaction::{Transaction, TxOut};
35 use bitcoin::network::constants::Network;
36
37 use bitcoin::hash_types::BlockHash;
38 use bitcoin::hashes::sha256::Hash as Sha256;
39 use bitcoin::hashes::Hash as _;
40
41 use bitcoin::secp256k1::PublicKey;
42
43 use crate::io;
44 use crate::prelude::*;
45 use core::cell::RefCell;
46 use alloc::rc::Rc;
47 use crate::sync::{Arc, Mutex};
48 use core::mem;
49 use core::iter::repeat;
50 use bitcoin::{PackedLockTime, TxMerkleNode};
51
52 pub const CHAN_CONFIRM_DEPTH: u32 = 10;
53
54 /// Mine the given transaction in the next block and then mine CHAN_CONFIRM_DEPTH - 1 blocks on
55 /// top, giving the given transaction CHAN_CONFIRM_DEPTH confirmations.
56 ///
57 /// Returns the SCID a channel confirmed in the given transaction will have, assuming the funding
58 /// output is the 1st output in the transaction.
59 pub fn confirm_transaction<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, tx: &Transaction) -> u64 {
60         let scid = confirm_transaction_at(node, tx, node.best_block_info().1 + 1);
61         connect_blocks(node, CHAN_CONFIRM_DEPTH - 1);
62         scid
63 }
64 /// Mine a signle block containing the given transaction
65 pub fn mine_transaction<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, tx: &Transaction) {
66         let height = node.best_block_info().1 + 1;
67         confirm_transaction_at(node, tx, height);
68 }
69 /// Mine the given transaction at the given height, mining blocks as required to build to that
70 /// height
71 ///
72 /// Returns the SCID a channel confirmed in the given transaction will have, assuming the funding
73 /// output is the 1st output in the transaction.
74 pub fn confirm_transaction_at<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, tx: &Transaction, conf_height: u32) -> u64 {
75         let first_connect_height = node.best_block_info().1 + 1;
76         assert!(first_connect_height <= conf_height);
77         if conf_height > first_connect_height {
78                 connect_blocks(node, conf_height - first_connect_height);
79         }
80         let mut block = Block {
81                 header: BlockHeader { version: 0x20000000, prev_blockhash: node.best_block_hash(), merkle_root: TxMerkleNode::all_zeros(), time: conf_height, bits: 42, nonce: 42 },
82                 txdata: Vec::new(),
83         };
84         for _ in 0..*node.network_chan_count.borrow() { // Make sure we don't end up with channels at the same short id by offsetting by chan_count
85                 block.txdata.push(Transaction { version: 0, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: Vec::new() });
86         }
87         block.txdata.push(tx.clone());
88         connect_block(node, &block);
89         scid_utils::scid_from_parts(conf_height as u64, block.txdata.len() as u64 - 1, 0).unwrap()
90 }
91
92 /// The possible ways we may notify a ChannelManager of a new block
93 #[derive(Clone, Copy, Debug, PartialEq)]
94 pub enum ConnectStyle {
95         /// Calls `best_block_updated` first, detecting transactions in the block only after receiving
96         /// the header and height information.
97         BestBlockFirst,
98         /// The same as `BestBlockFirst`, however when we have multiple blocks to connect, we only
99         /// make a single `best_block_updated` call.
100         BestBlockFirstSkippingBlocks,
101         /// The same as `BestBlockFirst` when connecting blocks. During disconnection only
102         /// `transaction_unconfirmed` is called.
103         BestBlockFirstReorgsOnlyTip,
104         /// Calls `transactions_confirmed` first, detecting transactions in the block before updating
105         /// the header and height information.
106         TransactionsFirst,
107         /// The same as `TransactionsFirst`, however when we have multiple blocks to connect, we only
108         /// make a single `best_block_updated` call.
109         TransactionsFirstSkippingBlocks,
110         /// The same as `TransactionsFirst`, however when we have multiple blocks to connect, we only
111         /// make a single `best_block_updated` call. Further, we call `transactions_confirmed` multiple
112         /// times to ensure it's idempotent.
113         TransactionsDuplicativelyFirstSkippingBlocks,
114         /// The same as `TransactionsFirst`, however when we have multiple blocks to connect, we only
115         /// make a single `best_block_updated` call. Further, we call `transactions_confirmed` multiple
116         /// times to ensure it's idempotent.
117         HighlyRedundantTransactionsFirstSkippingBlocks,
118         /// The same as `TransactionsFirst` when connecting blocks. During disconnection only
119         /// `transaction_unconfirmed` is called.
120         TransactionsFirstReorgsOnlyTip,
121         /// Provides the full block via the `chain::Listen` interface. In the current code this is
122         /// equivalent to `TransactionsFirst` with some additional assertions.
123         FullBlockViaListen,
124 }
125
126 impl ConnectStyle {
127         fn random_style() -> ConnectStyle {
128                 #[cfg(feature = "std")] {
129                         use core::hash::{BuildHasher, Hasher};
130                         // Get a random value using the only std API to do so - the DefaultHasher
131                         let rand_val = std::collections::hash_map::RandomState::new().build_hasher().finish();
132                         let res = match rand_val % 9 {
133                                 0 => ConnectStyle::BestBlockFirst,
134                                 1 => ConnectStyle::BestBlockFirstSkippingBlocks,
135                                 2 => ConnectStyle::BestBlockFirstReorgsOnlyTip,
136                                 3 => ConnectStyle::TransactionsFirst,
137                                 4 => ConnectStyle::TransactionsFirstSkippingBlocks,
138                                 5 => ConnectStyle::TransactionsDuplicativelyFirstSkippingBlocks,
139                                 6 => ConnectStyle::HighlyRedundantTransactionsFirstSkippingBlocks,
140                                 7 => ConnectStyle::TransactionsFirstReorgsOnlyTip,
141                                 8 => ConnectStyle::FullBlockViaListen,
142                                 _ => unreachable!(),
143                         };
144                         eprintln!("Using Block Connection Style: {:?}", res);
145                         res
146                 }
147                 #[cfg(not(feature = "std"))] {
148                         ConnectStyle::FullBlockViaListen
149                 }
150         }
151 }
152
153 pub fn connect_blocks<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, depth: u32) -> BlockHash {
154         let skip_intermediaries = match *node.connect_style.borrow() {
155                 ConnectStyle::BestBlockFirstSkippingBlocks|ConnectStyle::TransactionsFirstSkippingBlocks|
156                         ConnectStyle::TransactionsDuplicativelyFirstSkippingBlocks|ConnectStyle::HighlyRedundantTransactionsFirstSkippingBlocks|
157                         ConnectStyle::BestBlockFirstReorgsOnlyTip|ConnectStyle::TransactionsFirstReorgsOnlyTip => true,
158                 _ => false,
159         };
160
161         let height = node.best_block_info().1 + 1;
162         let mut block = Block {
163                 header: BlockHeader { version: 0x2000000, prev_blockhash: node.best_block_hash(), merkle_root: TxMerkleNode::all_zeros(), time: height, bits: 42, nonce: 42 },
164                 txdata: vec![],
165         };
166         assert!(depth >= 1);
167         for i in 1..depth {
168                 let prev_blockhash = block.header.block_hash();
169                 do_connect_block(node, block, skip_intermediaries);
170                 block = Block {
171                         header: BlockHeader { version: 0x20000000, prev_blockhash, merkle_root: TxMerkleNode::all_zeros(), time: height + i, bits: 42, nonce: 42 },
172                         txdata: vec![],
173                 };
174         }
175         let hash = block.header.block_hash();
176         do_connect_block(node, block, false);
177         hash
178 }
179
180 pub fn connect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, block: &Block) {
181         do_connect_block(node, block.clone(), false);
182 }
183
184 fn call_claimable_balances<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>) {
185         // Ensure `get_claimable_balances`' self-tests never panic
186         for funding_outpoint in node.chain_monitor.chain_monitor.list_monitors() {
187                 node.chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances();
188         }
189 }
190
191 fn do_connect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, block: Block, skip_intermediaries: bool) {
192         call_claimable_balances(node);
193         let height = node.best_block_info().1 + 1;
194         #[cfg(feature = "std")] {
195                 eprintln!("Connecting block using Block Connection Style: {:?}", *node.connect_style.borrow());
196         }
197         if !skip_intermediaries {
198                 let txdata: Vec<_> = block.txdata.iter().enumerate().collect();
199                 match *node.connect_style.borrow() {
200                         ConnectStyle::BestBlockFirst|ConnectStyle::BestBlockFirstSkippingBlocks|ConnectStyle::BestBlockFirstReorgsOnlyTip => {
201                                 node.chain_monitor.chain_monitor.best_block_updated(&block.header, height);
202                                 call_claimable_balances(node);
203                                 node.chain_monitor.chain_monitor.transactions_confirmed(&block.header, &txdata, height);
204                                 node.node.best_block_updated(&block.header, height);
205                                 node.node.transactions_confirmed(&block.header, &txdata, height);
206                         },
207                         ConnectStyle::TransactionsFirst|ConnectStyle::TransactionsFirstSkippingBlocks|
208                         ConnectStyle::TransactionsDuplicativelyFirstSkippingBlocks|ConnectStyle::HighlyRedundantTransactionsFirstSkippingBlocks|
209                         ConnectStyle::TransactionsFirstReorgsOnlyTip => {
210                                 if *node.connect_style.borrow() == ConnectStyle::HighlyRedundantTransactionsFirstSkippingBlocks {
211                                         let mut connections = Vec::new();
212                                         for (block, height) in node.blocks.lock().unwrap().iter() {
213                                                 if !block.txdata.is_empty() {
214                                                         // Reconnect all transactions we've ever seen to ensure transaction connection
215                                                         // is *really* idempotent. This is a somewhat likely deployment for some
216                                                         // esplora implementations of chain sync which try to reduce state and
217                                                         // complexity as much as possible.
218                                                         //
219                                                         // Sadly we have to clone the block here to maintain lockorder. In the
220                                                         // future we should consider Arc'ing the blocks to avoid this.
221                                                         connections.push((block.clone(), *height));
222                                                 }
223                                         }
224                                         for (old_block, height) in connections {
225                                                 node.chain_monitor.chain_monitor.transactions_confirmed(&old_block.header,
226                                                         &old_block.txdata.iter().enumerate().collect::<Vec<_>>(), height);
227                                         }
228                                 }
229                                 node.chain_monitor.chain_monitor.transactions_confirmed(&block.header, &txdata, height);
230                                 if *node.connect_style.borrow() == ConnectStyle::TransactionsDuplicativelyFirstSkippingBlocks {
231                                         node.chain_monitor.chain_monitor.transactions_confirmed(&block.header, &txdata, height);
232                                 }
233                                 call_claimable_balances(node);
234                                 node.chain_monitor.chain_monitor.best_block_updated(&block.header, height);
235                                 node.node.transactions_confirmed(&block.header, &txdata, height);
236                                 node.node.best_block_updated(&block.header, height);
237                         },
238                         ConnectStyle::FullBlockViaListen => {
239                                 node.chain_monitor.chain_monitor.block_connected(&block, height);
240                                 node.node.block_connected(&block, height);
241                         }
242                 }
243         }
244         call_claimable_balances(node);
245         node.node.test_process_background_events();
246         node.blocks.lock().unwrap().push((block, height));
247 }
248
249 pub fn disconnect_blocks<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, count: u32) {
250         call_claimable_balances(node);
251         #[cfg(feature = "std")] {
252                 eprintln!("Disconnecting {} blocks using Block Connection Style: {:?}", count, *node.connect_style.borrow());
253         }
254         for i in 0..count {
255                 let orig = node.blocks.lock().unwrap().pop().unwrap();
256                 assert!(orig.1 > 0); // Cannot disconnect genesis
257                 let prev = node.blocks.lock().unwrap().last().unwrap().clone();
258
259                 match *node.connect_style.borrow() {
260                         ConnectStyle::FullBlockViaListen => {
261                                 node.chain_monitor.chain_monitor.block_disconnected(&orig.0.header, orig.1);
262                                 Listen::block_disconnected(node.node, &orig.0.header, orig.1);
263                         },
264                         ConnectStyle::BestBlockFirstSkippingBlocks|ConnectStyle::TransactionsFirstSkippingBlocks|
265                         ConnectStyle::HighlyRedundantTransactionsFirstSkippingBlocks|ConnectStyle::TransactionsDuplicativelyFirstSkippingBlocks => {
266                                 if i == count - 1 {
267                                         node.chain_monitor.chain_monitor.best_block_updated(&prev.0.header, prev.1);
268                                         node.node.best_block_updated(&prev.0.header, prev.1);
269                                 }
270                         },
271                         ConnectStyle::BestBlockFirstReorgsOnlyTip|ConnectStyle::TransactionsFirstReorgsOnlyTip => {
272                                 for tx in orig.0.txdata {
273                                         node.chain_monitor.chain_monitor.transaction_unconfirmed(&tx.txid());
274                                         node.node.transaction_unconfirmed(&tx.txid());
275                                 }
276                         },
277                         _ => {
278                                 node.chain_monitor.chain_monitor.best_block_updated(&prev.0.header, prev.1);
279                                 node.node.best_block_updated(&prev.0.header, prev.1);
280                         },
281                 }
282                 call_claimable_balances(node);
283         }
284 }
285
286 pub fn disconnect_all_blocks<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>) {
287         let count = node.blocks.lock().unwrap().len() as u32 - 1;
288         disconnect_blocks(node, count);
289 }
290
291 pub struct TestChanMonCfg {
292         pub tx_broadcaster: test_utils::TestBroadcaster,
293         pub fee_estimator: test_utils::TestFeeEstimator,
294         pub chain_source: test_utils::TestChainSource,
295         pub persister: test_utils::TestPersister,
296         pub logger: test_utils::TestLogger,
297         pub keys_manager: test_utils::TestKeysInterface,
298 }
299
300 pub struct NodeCfg<'a> {
301         pub chain_source: &'a test_utils::TestChainSource,
302         pub tx_broadcaster: &'a test_utils::TestBroadcaster,
303         pub fee_estimator: &'a test_utils::TestFeeEstimator,
304         pub router: test_utils::TestRouter<'a>,
305         pub chain_monitor: test_utils::TestChainMonitor<'a>,
306         pub keys_manager: &'a test_utils::TestKeysInterface,
307         pub logger: &'a test_utils::TestLogger,
308         pub network_graph: Arc<NetworkGraph<&'a test_utils::TestLogger>>,
309         pub node_seed: [u8; 32],
310         pub features: InitFeatures,
311 }
312
313 pub struct Node<'a, 'b: 'a, 'c: 'b> {
314         pub chain_source: &'c test_utils::TestChainSource,
315         pub tx_broadcaster: &'c test_utils::TestBroadcaster,
316         pub fee_estimator: &'c test_utils::TestFeeEstimator,
317         pub router: &'b test_utils::TestRouter<'c>,
318         pub chain_monitor: &'b test_utils::TestChainMonitor<'c>,
319         pub keys_manager: &'b test_utils::TestKeysInterface,
320         pub node: &'a ChannelManager<&'b TestChainMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator, &'b test_utils::TestRouter<'c>, &'c test_utils::TestLogger>,
321         pub network_graph: &'a NetworkGraph<&'c test_utils::TestLogger>,
322         pub gossip_sync: P2PGossipSync<&'b NetworkGraph<&'c test_utils::TestLogger>, &'c test_utils::TestChainSource, &'c test_utils::TestLogger>,
323         pub node_seed: [u8; 32],
324         pub network_payment_count: Rc<RefCell<u8>>,
325         pub network_chan_count: Rc<RefCell<u32>>,
326         pub logger: &'c test_utils::TestLogger,
327         pub blocks: Arc<Mutex<Vec<(Block, u32)>>>,
328         pub connect_style: Rc<RefCell<ConnectStyle>>,
329 }
330 impl<'a, 'b, 'c> Node<'a, 'b, 'c> {
331         pub fn best_block_hash(&self) -> BlockHash {
332                 self.blocks.lock().unwrap().last().unwrap().0.block_hash()
333         }
334         pub fn best_block_info(&self) -> (BlockHash, u32) {
335                 self.blocks.lock().unwrap().last().map(|(a, b)| (a.block_hash(), *b)).unwrap()
336         }
337         pub fn get_block_header(&self, height: u32) -> BlockHeader {
338                 self.blocks.lock().unwrap()[height as usize].0.header
339         }
340 }
341
342 impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
343         fn drop(&mut self) {
344                 if !panicking() {
345                         // Check that we processed all pending events
346                         let msg_events = self.node.get_and_clear_pending_msg_events();
347                         if !msg_events.is_empty() {
348                                 panic!("Had excess message events on node {}: {:?}", self.logger.id, msg_events);
349                         }
350                         let events = self.node.get_and_clear_pending_events();
351                         if !events.is_empty() {
352                                 panic!("Had excess events on node {}: {:?}", self.logger.id, events);
353                         }
354                         let added_monitors = self.chain_monitor.added_monitors.lock().unwrap().split_off(0);
355                         if !added_monitors.is_empty() {
356                                 panic!("Had {} excess added monitors on node {}", added_monitors.len(), self.logger.id);
357                         }
358
359                         // Check that if we serialize the network graph, we can deserialize it again.
360                         let network_graph = {
361                                 let mut w = test_utils::TestVecWriter(Vec::new());
362                                 self.network_graph.write(&mut w).unwrap();
363                                 let network_graph_deser = <NetworkGraph<_>>::read(&mut io::Cursor::new(&w.0), self.logger).unwrap();
364                                 assert!(network_graph_deser == *self.network_graph);
365                                 let gossip_sync = P2PGossipSync::new(
366                                         &network_graph_deser, Some(self.chain_source), self.logger
367                                 );
368                                 let mut chan_progress = 0;
369                                 loop {
370                                         let orig_announcements = self.gossip_sync.get_next_channel_announcement(chan_progress);
371                                         let deserialized_announcements = gossip_sync.get_next_channel_announcement(chan_progress);
372                                         assert!(orig_announcements == deserialized_announcements);
373                                         chan_progress = match orig_announcements {
374                                                 Some(announcement) => announcement.0.contents.short_channel_id + 1,
375                                                 None => break,
376                                         };
377                                 }
378                                 let mut node_progress = None;
379                                 loop {
380                                         let orig_announcements = self.gossip_sync.get_next_node_announcement(node_progress.as_ref());
381                                         let deserialized_announcements = gossip_sync.get_next_node_announcement(node_progress.as_ref());
382                                         assert!(orig_announcements == deserialized_announcements);
383                                         node_progress = match orig_announcements {
384                                                 Some(announcement) => Some(announcement.contents.node_id),
385                                                 None => break,
386                                         };
387                                 }
388                                 network_graph_deser
389                         };
390
391                         // Check that if we serialize and then deserialize all our channel monitors we get the
392                         // same set of outputs to watch for on chain as we have now. Note that if we write
393                         // tests that fully close channels and remove the monitors at some point this may break.
394                         let feeest = test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) };
395                         let mut deserialized_monitors = Vec::new();
396                         {
397                                 for outpoint in self.chain_monitor.chain_monitor.list_monitors() {
398                                         let mut w = test_utils::TestVecWriter(Vec::new());
399                                         self.chain_monitor.chain_monitor.get_monitor(outpoint).unwrap().write(&mut w).unwrap();
400                                         let (_, deserialized_monitor) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
401                                                 &mut io::Cursor::new(&w.0), (self.keys_manager, self.keys_manager)).unwrap();
402                                         deserialized_monitors.push(deserialized_monitor);
403                                 }
404                         }
405
406                         let broadcaster = test_utils::TestBroadcaster {
407                                 txn_broadcasted: Mutex::new(self.tx_broadcaster.txn_broadcasted.lock().unwrap().clone()),
408                                 blocks: Arc::new(Mutex::new(self.tx_broadcaster.blocks.lock().unwrap().clone())),
409                         };
410
411                         // Before using all the new monitors to check the watch outpoints, use the full set of
412                         // them to ensure we can write and reload our ChannelManager.
413                         {
414                                 let mut channel_monitors = HashMap::new();
415                                 for monitor in deserialized_monitors.iter_mut() {
416                                         channel_monitors.insert(monitor.get_funding_txo().0, monitor);
417                                 }
418
419                                 let mut w = test_utils::TestVecWriter(Vec::new());
420                                 self.node.write(&mut w).unwrap();
421                                 <(BlockHash, ChannelManager<&test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestRouter, &test_utils::TestLogger>)>::read(&mut io::Cursor::new(w.0), ChannelManagerReadArgs {
422                                         default_config: *self.node.get_current_default_configuration(),
423                                         entropy_source: self.keys_manager,
424                                         node_signer: self.keys_manager,
425                                         signer_provider: self.keys_manager,
426                                         fee_estimator: &test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) },
427                                         router: &test_utils::TestRouter::new(Arc::new(network_graph)),
428                                         chain_monitor: self.chain_monitor,
429                                         tx_broadcaster: &broadcaster,
430                                         logger: &self.logger,
431                                         channel_monitors,
432                                 }).unwrap();
433                         }
434
435                         let persister = test_utils::TestPersister::new();
436                         let chain_source = test_utils::TestChainSource::new(Network::Testnet);
437                         let chain_monitor = test_utils::TestChainMonitor::new(Some(&chain_source), &broadcaster, &self.logger, &feeest, &persister, &self.keys_manager);
438                         for deserialized_monitor in deserialized_monitors.drain(..) {
439                                 if chain_monitor.watch_channel(deserialized_monitor.get_funding_txo().0, deserialized_monitor) != ChannelMonitorUpdateStatus::Completed {
440                                         panic!();
441                                 }
442                         }
443                         assert_eq!(*chain_source.watched_txn.lock().unwrap(), *self.chain_source.watched_txn.lock().unwrap());
444                         assert_eq!(*chain_source.watched_outputs.lock().unwrap(), *self.chain_source.watched_outputs.lock().unwrap());
445                 }
446         }
447 }
448
449 pub fn create_chan_between_nodes<'a, 'b, 'c, 'd>(node_a: &'a Node<'b, 'c, 'd>, node_b: &'a Node<'b, 'c, 'd>, a_flags: InitFeatures, b_flags: InitFeatures) -> (msgs::ChannelAnnouncement, msgs::ChannelUpdate, msgs::ChannelUpdate, [u8; 32], Transaction) {
450         create_chan_between_nodes_with_value(node_a, node_b, 100000, 10001, a_flags, b_flags)
451 }
452
453 pub fn create_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(node_a: &'a Node<'b, 'c, 'd>, node_b: &'a Node<'b, 'c, 'd>, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> (msgs::ChannelAnnouncement, msgs::ChannelUpdate, msgs::ChannelUpdate, [u8; 32], Transaction) {
454         let (channel_ready, channel_id, tx) = create_chan_between_nodes_with_value_a(node_a, node_b, channel_value, push_msat, a_flags, b_flags);
455         let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(node_a, node_b, &channel_ready);
456         (announcement, as_update, bs_update, channel_id, tx)
457 }
458
459 #[macro_export]
460 /// Gets an RAA and CS which were sent in response to a commitment update
461 macro_rules! get_revoke_commit_msgs {
462         ($node: expr, $node_id: expr) => {
463                 {
464                         use $crate::util::events::MessageSendEvent;
465                         let events = $node.node.get_and_clear_pending_msg_events();
466                         assert_eq!(events.len(), 2);
467                         (match events[0] {
468                                 MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
469                                         assert_eq!(*node_id, $node_id);
470                                         (*msg).clone()
471                                 },
472                                 _ => panic!("Unexpected event"),
473                         }, match events[1] {
474                                 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
475                                         assert_eq!(*node_id, $node_id);
476                                         assert!(updates.update_add_htlcs.is_empty());
477                                         assert!(updates.update_fulfill_htlcs.is_empty());
478                                         assert!(updates.update_fail_htlcs.is_empty());
479                                         assert!(updates.update_fail_malformed_htlcs.is_empty());
480                                         assert!(updates.update_fee.is_none());
481                                         updates.commitment_signed.clone()
482                                 },
483                                 _ => panic!("Unexpected event"),
484                         })
485                 }
486         }
487 }
488
489 /// Get an specific event message from the pending events queue.
490 #[macro_export]
491 macro_rules! get_event_msg {
492         ($node: expr, $event_type: path, $node_id: expr) => {
493                 {
494                         let events = $node.node.get_and_clear_pending_msg_events();
495                         assert_eq!(events.len(), 1);
496                         match events[0] {
497                                 $event_type { ref node_id, ref msg } => {
498                                         assert_eq!(*node_id, $node_id);
499                                         (*msg).clone()
500                                 },
501                                 _ => panic!("Unexpected event"),
502                         }
503                 }
504         }
505 }
506
507 /// Get an error message from the pending events queue.
508 #[macro_export]
509 macro_rules! get_err_msg {
510         ($node: expr, $node_id: expr) => {
511                 {
512                         let events = $node.node.get_and_clear_pending_msg_events();
513                         assert_eq!(events.len(), 1);
514                         match events[0] {
515                                 $crate::util::events::MessageSendEvent::HandleError {
516                                         action: $crate::ln::msgs::ErrorAction::SendErrorMessage { ref msg }, ref node_id
517                                 } => {
518                                         assert_eq!(*node_id, $node_id);
519                                         (*msg).clone()
520                                 },
521                                 _ => panic!("Unexpected event"),
522                         }
523                 }
524         }
525 }
526
527 /// Get a specific event from the pending events queue.
528 #[macro_export]
529 macro_rules! get_event {
530         ($node: expr, $event_type: path) => {
531                 {
532                         let mut events = $node.node.get_and_clear_pending_events();
533                         assert_eq!(events.len(), 1);
534                         let ev = events.pop().unwrap();
535                         match ev {
536                                 $event_type { .. } => {
537                                         ev
538                                 },
539                                 _ => panic!("Unexpected event"),
540                         }
541                 }
542         }
543 }
544
545 #[macro_export]
546 /// Gets an UpdateHTLCs MessageSendEvent
547 macro_rules! get_htlc_update_msgs {
548         ($node: expr, $node_id: expr) => {
549                 {
550                         let events = $node.node.get_and_clear_pending_msg_events();
551                         assert_eq!(events.len(), 1);
552                         match events[0] {
553                                 $crate::util::events::MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
554                                         assert_eq!(*node_id, $node_id);
555                                         (*updates).clone()
556                                 },
557                                 _ => panic!("Unexpected event"),
558                         }
559                 }
560         }
561 }
562
563 /// Fetches the first `msg_event` to the passed `node_id` in the passed `msg_events` vec.
564 /// Returns the `msg_event`, along with an updated `msg_events` vec with the message removed.
565 ///
566 /// Note that even though `BroadcastChannelAnnouncement` and `BroadcastChannelUpdate`
567 /// `msg_events` are stored under specific peers, this function does not fetch such `msg_events` as
568 /// such messages are intended to all peers.
569 pub fn remove_first_msg_event_to_node(msg_node_id: &PublicKey, msg_events: &Vec<MessageSendEvent>) -> (MessageSendEvent, Vec<MessageSendEvent>) {
570         let ev_index = msg_events.iter().position(|e| { match e {
571                 MessageSendEvent::SendAcceptChannel { node_id, .. } => {
572                         node_id == msg_node_id
573                 },
574                 MessageSendEvent::SendOpenChannel { node_id, .. } => {
575                         node_id == msg_node_id
576                 },
577                 MessageSendEvent::SendFundingCreated { node_id, .. } => {
578                         node_id == msg_node_id
579                 },
580                 MessageSendEvent::SendFundingSigned { node_id, .. } => {
581                         node_id == msg_node_id
582                 },
583                 MessageSendEvent::SendChannelReady { node_id, .. } => {
584                         node_id == msg_node_id
585                 },
586                 MessageSendEvent::SendAnnouncementSignatures { node_id, .. } => {
587                         node_id == msg_node_id
588                 },
589                 MessageSendEvent::UpdateHTLCs { node_id, .. } => {
590                         node_id == msg_node_id
591                 },
592                 MessageSendEvent::SendRevokeAndACK { node_id, .. } => {
593                         node_id == msg_node_id
594                 },
595                 MessageSendEvent::SendClosingSigned { node_id, .. } => {
596                         node_id == msg_node_id
597                 },
598                 MessageSendEvent::SendShutdown { node_id, .. } => {
599                         node_id == msg_node_id
600                 },
601                 MessageSendEvent::SendChannelReestablish { node_id, .. } => {
602                         node_id == msg_node_id
603                 },
604                 MessageSendEvent::SendChannelAnnouncement { node_id, .. } => {
605                         node_id == msg_node_id
606                 },
607                 MessageSendEvent::BroadcastChannelAnnouncement { .. } => {
608                         false
609                 },
610                 MessageSendEvent::BroadcastChannelUpdate { .. } => {
611                         false
612                 },
613                 MessageSendEvent::SendChannelUpdate { node_id, .. } => {
614                         node_id == msg_node_id
615                 },
616                 MessageSendEvent::HandleError { node_id, .. } => {
617                         node_id == msg_node_id
618                 },
619                 MessageSendEvent::SendChannelRangeQuery { node_id, .. } => {
620                         node_id == msg_node_id
621                 },
622                 MessageSendEvent::SendShortIdsQuery { node_id, .. } => {
623                         node_id == msg_node_id
624                 },
625                 MessageSendEvent::SendReplyChannelRange { node_id, .. } => {
626                         node_id == msg_node_id
627                 },
628                 MessageSendEvent::SendGossipTimestampFilter { node_id, .. } => {
629                         node_id == msg_node_id
630                 },
631         }});
632         if ev_index.is_some() {
633                 let mut updated_msg_events = msg_events.to_vec();
634                 let ev = updated_msg_events.remove(ev_index.unwrap());
635                 (ev, updated_msg_events)
636         } else {
637                 panic!("Couldn't find any MessageSendEvent to the node!")
638         }
639 }
640
641 #[cfg(test)]
642 macro_rules! get_channel_ref {
643         ($node: expr, $counterparty_node: expr, $per_peer_state_lock: ident, $peer_state_lock: ident, $channel_id: expr) => {
644                 {
645                         $per_peer_state_lock = $node.node.per_peer_state.read().unwrap();
646                         $peer_state_lock = $per_peer_state_lock.get(&$counterparty_node.node.get_our_node_id()).unwrap().lock().unwrap();
647                         $peer_state_lock.channel_by_id.get_mut(&$channel_id).unwrap()
648                 }
649         }
650 }
651
652 #[cfg(test)]
653 macro_rules! get_feerate {
654         ($node: expr, $counterparty_node: expr, $channel_id: expr) => {
655                 {
656                         let mut per_peer_state_lock;
657                         let mut peer_state_lock;
658                         let chan = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
659                         chan.get_feerate()
660                 }
661         }
662 }
663
664 #[cfg(test)]
665 macro_rules! get_opt_anchors {
666         ($node: expr, $counterparty_node: expr, $channel_id: expr) => {
667                 {
668                         let mut per_peer_state_lock;
669                         let mut peer_state_lock;
670                         let chan = get_channel_ref!($node, $counterparty_node, per_peer_state_lock, peer_state_lock, $channel_id);
671                         chan.opt_anchors()
672                 }
673         }
674 }
675
676 /// Returns a channel monitor given a channel id, making some naive assumptions
677 #[macro_export]
678 macro_rules! get_monitor {
679         ($node: expr, $channel_id: expr) => {
680                 {
681                         use bitcoin::hashes::Hash;
682                         let mut monitor = None;
683                         // Assume funding vout is either 0 or 1 blindly
684                         for index in 0..2 {
685                                 if let Ok(mon) = $node.chain_monitor.chain_monitor.get_monitor(
686                                         $crate::chain::transaction::OutPoint {
687                                                 txid: bitcoin::Txid::from_slice(&$channel_id[..]).unwrap(), index
688                                         })
689                                 {
690                                         monitor = Some(mon);
691                                         break;
692                                 }
693                         }
694                         monitor.unwrap()
695                 }
696         }
697 }
698
699 /// Returns any local commitment transactions for the channel.
700 #[macro_export]
701 macro_rules! get_local_commitment_txn {
702         ($node: expr, $channel_id: expr) => {
703                 {
704                         $crate::get_monitor!($node, $channel_id).unsafe_get_latest_holder_commitment_txn(&$node.logger)
705                 }
706         }
707 }
708
709 /// Check the error from attempting a payment.
710 #[macro_export]
711 macro_rules! unwrap_send_err {
712         ($res: expr, $all_failed: expr, $type: pat, $check: expr) => {
713                 match &$res {
714                         &Err(PaymentSendFailure::AllFailedResendSafe(ref fails)) if $all_failed => {
715                                 assert_eq!(fails.len(), 1);
716                                 match fails[0] {
717                                         $type => { $check },
718                                         _ => panic!(),
719                                 }
720                         },
721                         &Err(PaymentSendFailure::PartialFailure { ref results, .. }) if !$all_failed => {
722                                 assert_eq!(results.len(), 1);
723                                 match results[0] {
724                                         Err($type) => { $check },
725                                         _ => panic!(),
726                                 }
727                         },
728                         _ => panic!(),
729                 }
730         }
731 }
732
733 /// Check whether N channel monitor(s) have been added.
734 #[macro_export]
735 macro_rules! check_added_monitors {
736         ($node: expr, $count: expr) => {
737                 {
738                         let mut added_monitors = $node.chain_monitor.added_monitors.lock().unwrap();
739                         assert_eq!(added_monitors.len(), $count);
740                         added_monitors.clear();
741                 }
742         }
743 }
744
745 pub fn _reload_node<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, default_config: UserConfig, chanman_encoded: &[u8], monitors_encoded: &[&[u8]]) -> ChannelManager<&'b TestChainMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator, &'b test_utils::TestRouter<'c>, &'c test_utils::TestLogger> {
746         let mut monitors_read = Vec::with_capacity(monitors_encoded.len());
747         for encoded in monitors_encoded {
748                 let mut monitor_read = &encoded[..];
749                 let (_, monitor) = <(BlockHash, ChannelMonitor<EnforcingSigner>)>
750                         ::read(&mut monitor_read, (node.keys_manager, node.keys_manager)).unwrap();
751                 assert!(monitor_read.is_empty());
752                 monitors_read.push(monitor);
753         }
754
755         let mut node_read = &chanman_encoded[..];
756         let (_, node_deserialized) = {
757                 let mut channel_monitors = HashMap::new();
758                 for monitor in monitors_read.iter_mut() {
759                         assert!(channel_monitors.insert(monitor.get_funding_txo().0, monitor).is_none());
760                 }
761                 <(BlockHash, ChannelManager<&test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestRouter, &test_utils::TestLogger>)>::read(&mut node_read, ChannelManagerReadArgs {
762                         default_config,
763                         entropy_source: node.keys_manager,
764                         node_signer: node.keys_manager,
765                         signer_provider: node.keys_manager,
766                         fee_estimator: node.fee_estimator,
767                         router: node.router,
768                         chain_monitor: node.chain_monitor,
769                         tx_broadcaster: node.tx_broadcaster,
770                         logger: node.logger,
771                         channel_monitors,
772                 }).unwrap()
773         };
774         assert!(node_read.is_empty());
775
776         for monitor in monitors_read.drain(..) {
777                 assert_eq!(node.chain_monitor.watch_channel(monitor.get_funding_txo().0, monitor),
778                         ChannelMonitorUpdateStatus::Completed);
779                 check_added_monitors!(node, 1);
780         }
781
782         node_deserialized
783 }
784
785 #[cfg(test)]
786 macro_rules! reload_node {
787         ($node: expr, $new_config: expr, $chanman_encoded: expr, $monitors_encoded: expr, $persister: ident, $new_chain_monitor: ident, $new_channelmanager: ident) => {
788                 let chanman_encoded = $chanman_encoded;
789
790                 $persister = test_utils::TestPersister::new();
791                 $new_chain_monitor = test_utils::TestChainMonitor::new(Some($node.chain_source), $node.tx_broadcaster.clone(), $node.logger, $node.fee_estimator, &$persister, &$node.keys_manager);
792                 $node.chain_monitor = &$new_chain_monitor;
793
794                 $new_channelmanager = _reload_node(&$node, $new_config, &chanman_encoded, $monitors_encoded);
795                 $node.node = &$new_channelmanager;
796         };
797         ($node: expr, $chanman_encoded: expr, $monitors_encoded: expr, $persister: ident, $new_chain_monitor: ident, $new_channelmanager: ident) => {
798                 reload_node!($node, $crate::util::config::UserConfig::default(), $chanman_encoded, $monitors_encoded, $persister, $new_chain_monitor, $new_channelmanager);
799         };
800 }
801
802 pub fn create_funding_transaction<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, expected_counterparty_node_id: &PublicKey, expected_chan_value: u64, expected_user_chan_id: u128) -> ([u8; 32], Transaction, OutPoint) {
803         let chan_id = *node.network_chan_count.borrow();
804
805         let events = node.node.get_and_clear_pending_events();
806         assert_eq!(events.len(), 1);
807         match events[0] {
808                 Event::FundingGenerationReady { ref temporary_channel_id, ref counterparty_node_id, ref channel_value_satoshis, ref output_script, user_channel_id } => {
809                         assert_eq!(counterparty_node_id, expected_counterparty_node_id);
810                         assert_eq!(*channel_value_satoshis, expected_chan_value);
811                         assert_eq!(user_channel_id, expected_user_chan_id);
812
813                         let tx = Transaction { version: chan_id as i32, lock_time: PackedLockTime::ZERO, input: Vec::new(), output: vec![TxOut {
814                                 value: *channel_value_satoshis, script_pubkey: output_script.clone(),
815                         }]};
816                         let funding_outpoint = OutPoint { txid: tx.txid(), index: 0 };
817                         (*temporary_channel_id, tx, funding_outpoint)
818                 },
819                 _ => panic!("Unexpected event"),
820         }
821 }
822 pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, channel_value: u64, expected_temporary_channel_id: [u8; 32]) -> Transaction {
823         let (temporary_channel_id, tx, funding_output) = create_funding_transaction(node_a, &node_b.node.get_our_node_id(), channel_value, 42);
824         assert_eq!(temporary_channel_id, expected_temporary_channel_id);
825
826         assert!(node_a.node.funding_transaction_generated(&temporary_channel_id, &node_b.node.get_our_node_id(), tx.clone()).is_ok());
827         check_added_monitors!(node_a, 0);
828
829         let funding_created_msg = get_event_msg!(node_a, MessageSendEvent::SendFundingCreated, node_b.node.get_our_node_id());
830         assert_eq!(funding_created_msg.temporary_channel_id, expected_temporary_channel_id);
831         node_b.node.handle_funding_created(&node_a.node.get_our_node_id(), &funding_created_msg);
832         {
833                 let mut added_monitors = node_b.chain_monitor.added_monitors.lock().unwrap();
834                 assert_eq!(added_monitors.len(), 1);
835                 assert_eq!(added_monitors[0].0, funding_output);
836                 added_monitors.clear();
837         }
838
839         node_a.node.handle_funding_signed(&node_b.node.get_our_node_id(), &get_event_msg!(node_b, MessageSendEvent::SendFundingSigned, node_a.node.get_our_node_id()));
840         {
841                 let mut added_monitors = node_a.chain_monitor.added_monitors.lock().unwrap();
842                 assert_eq!(added_monitors.len(), 1);
843                 assert_eq!(added_monitors[0].0, funding_output);
844                 added_monitors.clear();
845         }
846
847         let events_4 = node_a.node.get_and_clear_pending_events();
848         assert_eq!(events_4.len(), 0);
849
850         assert_eq!(node_a.tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
851         assert_eq!(node_a.tx_broadcaster.txn_broadcasted.lock().unwrap()[0], tx);
852         node_a.tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
853
854         // Ensure that funding_transaction_generated is idempotent.
855         assert!(node_a.node.funding_transaction_generated(&temporary_channel_id, &node_b.node.get_our_node_id(), tx.clone()).is_err());
856         assert!(node_a.node.get_and_clear_pending_msg_events().is_empty());
857         check_added_monitors!(node_a, 0);
858
859         tx
860 }
861
862 // Receiver must have been initialized with manually_accept_inbound_channels set to true.
863 pub fn open_zero_conf_channel<'a, 'b, 'c, 'd>(initiator: &'a Node<'b, 'c, 'd>, receiver: &'a Node<'b, 'c, 'd>, initiator_config: Option<UserConfig>) -> (bitcoin::Transaction, [u8; 32]) {
864         let initiator_channels = initiator.node.list_usable_channels().len();
865         let receiver_channels = receiver.node.list_usable_channels().len();
866
867         initiator.node.create_channel(receiver.node.get_our_node_id(), 100_000, 10_001, 42, initiator_config).unwrap();
868         let open_channel = get_event_msg!(initiator, MessageSendEvent::SendOpenChannel, receiver.node.get_our_node_id());
869
870         receiver.node.handle_open_channel(&initiator.node.get_our_node_id(), channelmanager::provided_init_features(), &open_channel);
871         let events = receiver.node.get_and_clear_pending_events();
872         assert_eq!(events.len(), 1);
873         match events[0] {
874                 Event::OpenChannelRequest { temporary_channel_id, .. } => {
875                         receiver.node.accept_inbound_channel_from_trusted_peer_0conf(&temporary_channel_id, &initiator.node.get_our_node_id(), 0).unwrap();
876                 },
877                 _ => panic!("Unexpected event"),
878         };
879
880         let accept_channel = get_event_msg!(receiver, MessageSendEvent::SendAcceptChannel, initiator.node.get_our_node_id());
881         assert_eq!(accept_channel.minimum_depth, 0);
882         initiator.node.handle_accept_channel(&receiver.node.get_our_node_id(), channelmanager::provided_init_features(), &accept_channel);
883
884         let (temporary_channel_id, tx, _) = create_funding_transaction(&initiator, &receiver.node.get_our_node_id(), 100_000, 42);
885         initiator.node.funding_transaction_generated(&temporary_channel_id, &receiver.node.get_our_node_id(), tx.clone()).unwrap();
886         let funding_created = get_event_msg!(initiator, MessageSendEvent::SendFundingCreated, receiver.node.get_our_node_id());
887
888         receiver.node.handle_funding_created(&initiator.node.get_our_node_id(), &funding_created);
889         check_added_monitors!(receiver, 1);
890         let bs_signed_locked = receiver.node.get_and_clear_pending_msg_events();
891         assert_eq!(bs_signed_locked.len(), 2);
892         let as_channel_ready;
893         match &bs_signed_locked[0] {
894                 MessageSendEvent::SendFundingSigned { node_id, msg } => {
895                         assert_eq!(*node_id, initiator.node.get_our_node_id());
896                         initiator.node.handle_funding_signed(&receiver.node.get_our_node_id(), &msg);
897                         check_added_monitors!(initiator, 1);
898
899                         assert_eq!(initiator.tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
900                         assert_eq!(initiator.tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0)[0], tx);
901
902                         as_channel_ready = get_event_msg!(initiator, MessageSendEvent::SendChannelReady, receiver.node.get_our_node_id());
903                 }
904                 _ => panic!("Unexpected event"),
905         }
906         match &bs_signed_locked[1] {
907                 MessageSendEvent::SendChannelReady { node_id, msg } => {
908                         assert_eq!(*node_id, initiator.node.get_our_node_id());
909                         initiator.node.handle_channel_ready(&receiver.node.get_our_node_id(), &msg);
910                 }
911                 _ => panic!("Unexpected event"),
912         }
913
914         receiver.node.handle_channel_ready(&initiator.node.get_our_node_id(), &as_channel_ready);
915
916         let as_channel_update = get_event_msg!(initiator, MessageSendEvent::SendChannelUpdate, receiver.node.get_our_node_id());
917         let bs_channel_update = get_event_msg!(receiver, MessageSendEvent::SendChannelUpdate, initiator.node.get_our_node_id());
918
919         initiator.node.handle_channel_update(&receiver.node.get_our_node_id(), &bs_channel_update);
920         receiver.node.handle_channel_update(&initiator.node.get_our_node_id(), &as_channel_update);
921
922         assert_eq!(initiator.node.list_usable_channels().len(), initiator_channels + 1);
923         assert_eq!(receiver.node.list_usable_channels().len(), receiver_channels + 1);
924
925         expect_channel_ready_event(&initiator, &receiver.node.get_our_node_id());
926         expect_channel_ready_event(&receiver, &initiator.node.get_our_node_id());
927
928         (tx, as_channel_ready.channel_id)
929 }
930
931 pub fn create_chan_between_nodes_with_value_init<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> Transaction {
932         let create_chan_id = node_a.node.create_channel(node_b.node.get_our_node_id(), channel_value, push_msat, 42, None).unwrap();
933         let open_channel_msg = get_event_msg!(node_a, MessageSendEvent::SendOpenChannel, node_b.node.get_our_node_id());
934         assert_eq!(open_channel_msg.temporary_channel_id, create_chan_id);
935         assert_eq!(node_a.node.list_channels().iter().find(|channel| channel.channel_id == create_chan_id).unwrap().user_channel_id, 42);
936         node_b.node.handle_open_channel(&node_a.node.get_our_node_id(), a_flags, &open_channel_msg);
937         let accept_channel_msg = get_event_msg!(node_b, MessageSendEvent::SendAcceptChannel, node_a.node.get_our_node_id());
938         assert_eq!(accept_channel_msg.temporary_channel_id, create_chan_id);
939         node_a.node.handle_accept_channel(&node_b.node.get_our_node_id(), b_flags, &accept_channel_msg);
940         assert_ne!(node_b.node.list_channels().iter().find(|channel| channel.channel_id == create_chan_id).unwrap().user_channel_id, 0);
941
942         sign_funding_transaction(node_a, node_b, channel_value, create_chan_id)
943 }
944
945 pub fn create_chan_between_nodes_with_value_confirm_first<'a, 'b, 'c, 'd>(node_recv: &'a Node<'b, 'c, 'c>, node_conf: &'a Node<'b, 'c, 'd>, tx: &Transaction, conf_height: u32) {
946         confirm_transaction_at(node_conf, tx, conf_height);
947         connect_blocks(node_conf, CHAN_CONFIRM_DEPTH - 1);
948         node_recv.node.handle_channel_ready(&node_conf.node.get_our_node_id(), &get_event_msg!(node_conf, MessageSendEvent::SendChannelReady, node_recv.node.get_our_node_id()));
949 }
950
951 pub fn create_chan_between_nodes_with_value_confirm_second<'a, 'b, 'c>(node_recv: &Node<'a, 'b, 'c>, node_conf: &Node<'a, 'b, 'c>) -> ((msgs::ChannelReady, msgs::AnnouncementSignatures), [u8; 32]) {
952         let channel_id;
953         let events_6 = node_conf.node.get_and_clear_pending_msg_events();
954         assert_eq!(events_6.len(), 3);
955         let announcement_sigs_idx = if let MessageSendEvent::SendChannelUpdate { ref node_id, msg: _ } = events_6[1] {
956                 assert_eq!(*node_id, node_recv.node.get_our_node_id());
957                 2
958         } else if let MessageSendEvent::SendChannelUpdate { ref node_id, msg: _ } = events_6[2] {
959                 assert_eq!(*node_id, node_recv.node.get_our_node_id());
960                 1
961         } else { panic!("Unexpected event: {:?}", events_6[1]); };
962         ((match events_6[0] {
963                 MessageSendEvent::SendChannelReady { ref node_id, ref msg } => {
964                         channel_id = msg.channel_id.clone();
965                         assert_eq!(*node_id, node_recv.node.get_our_node_id());
966                         msg.clone()
967                 },
968                 _ => panic!("Unexpected event"),
969         }, match events_6[announcement_sigs_idx] {
970                 MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
971                         assert_eq!(*node_id, node_recv.node.get_our_node_id());
972                         msg.clone()
973                 },
974                 _ => panic!("Unexpected event"),
975         }), channel_id)
976 }
977
978 pub fn create_chan_between_nodes_with_value_confirm<'a, 'b, 'c, 'd>(node_a: &'a Node<'b, 'c, 'd>, node_b: &'a Node<'b, 'c, 'd>, tx: &Transaction) -> ((msgs::ChannelReady, msgs::AnnouncementSignatures), [u8; 32]) {
979         let conf_height = core::cmp::max(node_a.best_block_info().1 + 1, node_b.best_block_info().1 + 1);
980         create_chan_between_nodes_with_value_confirm_first(node_a, node_b, tx, conf_height);
981         confirm_transaction_at(node_a, tx, conf_height);
982         connect_blocks(node_a, CHAN_CONFIRM_DEPTH - 1);
983         expect_channel_ready_event(&node_a, &node_b.node.get_our_node_id());
984         create_chan_between_nodes_with_value_confirm_second(node_b, node_a)
985 }
986
987 pub fn create_chan_between_nodes_with_value_a<'a, 'b, 'c, 'd>(node_a: &'a Node<'b, 'c, 'd>, node_b: &'a Node<'b, 'c, 'd>, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> ((msgs::ChannelReady, msgs::AnnouncementSignatures), [u8; 32], Transaction) {
988         let tx = create_chan_between_nodes_with_value_init(node_a, node_b, channel_value, push_msat, a_flags, b_flags);
989         let (msgs, chan_id) = create_chan_between_nodes_with_value_confirm(node_a, node_b, &tx);
990         (msgs, chan_id, tx)
991 }
992
993 pub fn create_chan_between_nodes_with_value_b<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, as_funding_msgs: &(msgs::ChannelReady, msgs::AnnouncementSignatures)) -> (msgs::ChannelAnnouncement, msgs::ChannelUpdate, msgs::ChannelUpdate) {
994         node_b.node.handle_channel_ready(&node_a.node.get_our_node_id(), &as_funding_msgs.0);
995         let bs_announcement_sigs = get_event_msg!(node_b, MessageSendEvent::SendAnnouncementSignatures, node_a.node.get_our_node_id());
996         node_b.node.handle_announcement_signatures(&node_a.node.get_our_node_id(), &as_funding_msgs.1);
997
998         let events_7 = node_b.node.get_and_clear_pending_msg_events();
999         assert_eq!(events_7.len(), 1);
1000         let (announcement, bs_update) = match events_7[0] {
1001                 MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
1002                         (msg, update_msg)
1003                 },
1004                 _ => panic!("Unexpected event"),
1005         };
1006
1007         node_a.node.handle_announcement_signatures(&node_b.node.get_our_node_id(), &bs_announcement_sigs);
1008         let events_8 = node_a.node.get_and_clear_pending_msg_events();
1009         assert_eq!(events_8.len(), 1);
1010         let as_update = match events_8[0] {
1011                 MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
1012                         assert!(*announcement == *msg);
1013                         assert_eq!(update_msg.contents.short_channel_id, announcement.contents.short_channel_id);
1014                         assert_eq!(update_msg.contents.short_channel_id, bs_update.contents.short_channel_id);
1015                         update_msg
1016                 },
1017                 _ => panic!("Unexpected event"),
1018         };
1019
1020         *node_a.network_chan_count.borrow_mut() += 1;
1021
1022         expect_channel_ready_event(&node_b, &node_a.node.get_our_node_id());
1023         ((*announcement).clone(), (*as_update).clone(), (*bs_update).clone())
1024 }
1025
1026 pub fn create_announced_chan_between_nodes<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, a_flags: InitFeatures, b_flags: InitFeatures) -> (msgs::ChannelUpdate, msgs::ChannelUpdate, [u8; 32], Transaction) {
1027         create_announced_chan_between_nodes_with_value(nodes, a, b, 100000, 10001, a_flags, b_flags)
1028 }
1029
1030 pub fn create_announced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> (msgs::ChannelUpdate, msgs::ChannelUpdate, [u8; 32], Transaction) {
1031         let chan_announcement = create_chan_between_nodes_with_value(&nodes[a], &nodes[b], channel_value, push_msat, a_flags, b_flags);
1032         update_nodes_with_chan_announce(nodes, a, b, &chan_announcement.0, &chan_announcement.1, &chan_announcement.2);
1033         (chan_announcement.1, chan_announcement.2, chan_announcement.3, chan_announcement.4)
1034 }
1035
1036 pub fn create_unannounced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, channel_value: u64, push_msat: u64, a_flags: InitFeatures, b_flags: InitFeatures) -> (msgs::ChannelReady, Transaction) {
1037         let mut no_announce_cfg = test_default_channel_config();
1038         no_announce_cfg.channel_handshake_config.announced_channel = false;
1039         nodes[a].node.create_channel(nodes[b].node.get_our_node_id(), channel_value, push_msat, 42, Some(no_announce_cfg)).unwrap();
1040         let open_channel = get_event_msg!(nodes[a], MessageSendEvent::SendOpenChannel, nodes[b].node.get_our_node_id());
1041         nodes[b].node.handle_open_channel(&nodes[a].node.get_our_node_id(), a_flags, &open_channel);
1042         let accept_channel = get_event_msg!(nodes[b], MessageSendEvent::SendAcceptChannel, nodes[a].node.get_our_node_id());
1043         nodes[a].node.handle_accept_channel(&nodes[b].node.get_our_node_id(), b_flags, &accept_channel);
1044
1045         let (temporary_channel_id, tx, _) = create_funding_transaction(&nodes[a], &nodes[b].node.get_our_node_id(), channel_value, 42);
1046         nodes[a].node.funding_transaction_generated(&temporary_channel_id, &nodes[b].node.get_our_node_id(), tx.clone()).unwrap();
1047         nodes[b].node.handle_funding_created(&nodes[a].node.get_our_node_id(), &get_event_msg!(nodes[a], MessageSendEvent::SendFundingCreated, nodes[b].node.get_our_node_id()));
1048         check_added_monitors!(nodes[b], 1);
1049
1050         let cs_funding_signed = get_event_msg!(nodes[b], MessageSendEvent::SendFundingSigned, nodes[a].node.get_our_node_id());
1051         nodes[a].node.handle_funding_signed(&nodes[b].node.get_our_node_id(), &cs_funding_signed);
1052         check_added_monitors!(nodes[a], 1);
1053
1054         let conf_height = core::cmp::max(nodes[a].best_block_info().1 + 1, nodes[b].best_block_info().1 + 1);
1055         confirm_transaction_at(&nodes[a], &tx, conf_height);
1056         connect_blocks(&nodes[a], CHAN_CONFIRM_DEPTH - 1);
1057         confirm_transaction_at(&nodes[b], &tx, conf_height);
1058         connect_blocks(&nodes[b], CHAN_CONFIRM_DEPTH - 1);
1059         let as_channel_ready = get_event_msg!(nodes[a], MessageSendEvent::SendChannelReady, nodes[b].node.get_our_node_id());
1060         nodes[a].node.handle_channel_ready(&nodes[b].node.get_our_node_id(), &get_event_msg!(nodes[b], MessageSendEvent::SendChannelReady, nodes[a].node.get_our_node_id()));
1061         expect_channel_ready_event(&nodes[a], &nodes[b].node.get_our_node_id());
1062         let as_update = get_event_msg!(nodes[a], MessageSendEvent::SendChannelUpdate, nodes[b].node.get_our_node_id());
1063         nodes[b].node.handle_channel_ready(&nodes[a].node.get_our_node_id(), &as_channel_ready);
1064         expect_channel_ready_event(&nodes[b], &nodes[a].node.get_our_node_id());
1065         let bs_update = get_event_msg!(nodes[b], MessageSendEvent::SendChannelUpdate, nodes[a].node.get_our_node_id());
1066
1067         nodes[a].node.handle_channel_update(&nodes[b].node.get_our_node_id(), &bs_update);
1068         nodes[b].node.handle_channel_update(&nodes[a].node.get_our_node_id(), &as_update);
1069
1070         let mut found_a = false;
1071         for chan in nodes[a].node.list_usable_channels() {
1072                 if chan.channel_id == as_channel_ready.channel_id {
1073                         assert!(!found_a);
1074                         found_a = true;
1075                         assert!(!chan.is_public);
1076                 }
1077         }
1078         assert!(found_a);
1079
1080         let mut found_b = false;
1081         for chan in nodes[b].node.list_usable_channels() {
1082                 if chan.channel_id == as_channel_ready.channel_id {
1083                         assert!(!found_b);
1084                         found_b = true;
1085                         assert!(!chan.is_public);
1086                 }
1087         }
1088         assert!(found_b);
1089
1090         (as_channel_ready, tx)
1091 }
1092
1093 pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, ann: &msgs::ChannelAnnouncement, upd_1: &msgs::ChannelUpdate, upd_2: &msgs::ChannelUpdate) {
1094         for node in nodes {
1095                 assert!(node.gossip_sync.handle_channel_announcement(ann).unwrap());
1096                 node.gossip_sync.handle_channel_update(upd_1).unwrap();
1097                 node.gossip_sync.handle_channel_update(upd_2).unwrap();
1098
1099                 // Note that channel_updates are also delivered to ChannelManagers to ensure we have
1100                 // forwarding info for local channels even if its not accepted in the network graph.
1101                 node.node.handle_channel_update(&nodes[a].node.get_our_node_id(), &upd_1);
1102                 node.node.handle_channel_update(&nodes[b].node.get_our_node_id(), &upd_2);
1103         }
1104 }
1105
1106 #[macro_export]
1107 macro_rules! check_spends {
1108         ($tx: expr, $($spends_txn: expr),*) => {
1109                 {
1110                         $(
1111                         for outp in $spends_txn.output.iter() {
1112                                 assert!(outp.value >= outp.script_pubkey.dust_value().to_sat(), "Input tx output didn't meet dust limit");
1113                         }
1114                         )*
1115                         for outp in $tx.output.iter() {
1116                                 assert!(outp.value >= outp.script_pubkey.dust_value().to_sat(), "Spending tx output didn't meet dust limit");
1117                         }
1118                         let get_output = |out_point: &bitcoin::blockdata::transaction::OutPoint| {
1119                                 $(
1120                                         if out_point.txid == $spends_txn.txid() {
1121                                                 return $spends_txn.output.get(out_point.vout as usize).cloned()
1122                                         }
1123                                 )*
1124                                 None
1125                         };
1126                         let mut total_value_in = 0;
1127                         for input in $tx.input.iter() {
1128                                 total_value_in += get_output(&input.previous_output).unwrap().value;
1129                         }
1130                         let mut total_value_out = 0;
1131                         for output in $tx.output.iter() {
1132                                 total_value_out += output.value;
1133                         }
1134                         let min_fee = ($tx.weight() as u64 + 3) / 4; // One sat per vbyte (ie per weight/4, rounded up)
1135                         // Input amount - output amount = fee, so check that out + min_fee is smaller than input
1136                         assert!(total_value_out + min_fee <= total_value_in);
1137                         $tx.verify(get_output).unwrap();
1138                 }
1139         }
1140 }
1141
1142 macro_rules! get_closing_signed_broadcast {
1143         ($node: expr, $dest_pubkey: expr) => {
1144                 {
1145                         let events = $node.get_and_clear_pending_msg_events();
1146                         assert!(events.len() == 1 || events.len() == 2);
1147                         (match events[events.len() - 1] {
1148                                 MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
1149                                         assert_eq!(msg.contents.flags & 2, 2);
1150                                         msg.clone()
1151                                 },
1152                                 _ => panic!("Unexpected event"),
1153                         }, if events.len() == 2 {
1154                                 match events[0] {
1155                                         MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
1156                                                 assert_eq!(*node_id, $dest_pubkey);
1157                                                 Some(msg.clone())
1158                                         },
1159                                         _ => panic!("Unexpected event"),
1160                                 }
1161                         } else { None })
1162                 }
1163         }
1164 }
1165
1166 #[cfg(test)]
1167 macro_rules! check_warn_msg {
1168         ($node: expr, $recipient_node_id: expr, $chan_id: expr) => {{
1169                 let msg_events = $node.node.get_and_clear_pending_msg_events();
1170                 assert_eq!(msg_events.len(), 1);
1171                 match msg_events[0] {
1172                         MessageSendEvent::HandleError { action: ErrorAction::SendWarningMessage { ref msg, log_level: _ }, node_id } => {
1173                                 assert_eq!(node_id, $recipient_node_id);
1174                                 assert_eq!(msg.channel_id, $chan_id);
1175                                 msg.data.clone()
1176                         },
1177                         _ => panic!("Unexpected event"),
1178                 }
1179         }}
1180 }
1181
1182 /// Check that a channel's closing channel update has been broadcasted, and optionally
1183 /// check whether an error message event has occurred.
1184 #[macro_export]
1185 macro_rules! check_closed_broadcast {
1186         ($node: expr, $with_error_msg: expr) => {{
1187                 use $crate::util::events::MessageSendEvent;
1188                 use $crate::ln::msgs::ErrorAction;
1189
1190                 let msg_events = $node.node.get_and_clear_pending_msg_events();
1191                 assert_eq!(msg_events.len(), if $with_error_msg { 2 } else { 1 });
1192                 match msg_events[0] {
1193                         MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
1194                                 assert_eq!(msg.contents.flags & 2, 2);
1195                         },
1196                         _ => panic!("Unexpected event"),
1197                 }
1198                 if $with_error_msg {
1199                         match msg_events[1] {
1200                                 MessageSendEvent::HandleError { action: ErrorAction::SendErrorMessage { ref msg }, node_id: _ } => {
1201                                         // TODO: Check node_id
1202                                         Some(msg.clone())
1203                                 },
1204                                 _ => panic!("Unexpected event"),
1205                         }
1206                 } else { None }
1207         }}
1208 }
1209
1210 /// Check that a channel's closing channel events has been issued
1211 #[macro_export]
1212 macro_rules! check_closed_event {
1213         ($node: expr, $events: expr, $reason: expr) => {
1214                 check_closed_event!($node, $events, $reason, false);
1215         };
1216         ($node: expr, $events: expr, $reason: expr, $is_check_discard_funding: expr) => {{
1217                 use $crate::util::events::Event;
1218
1219                 let events = $node.node.get_and_clear_pending_events();
1220                 assert_eq!(events.len(), $events, "{:?}", events);
1221                 let expected_reason = $reason;
1222                 let mut issues_discard_funding = false;
1223                 for event in events {
1224                         match event {
1225                                 Event::ChannelClosed { ref reason, .. } => {
1226                                         assert_eq!(*reason, expected_reason);
1227                                 },
1228                                 Event::DiscardFunding { .. } => {
1229                                         issues_discard_funding = true;
1230                                 }
1231                                 _ => panic!("Unexpected event"),
1232                         }
1233                 }
1234                 assert_eq!($is_check_discard_funding, issues_discard_funding);
1235         }}
1236 }
1237
1238 pub fn close_channel<'a, 'b, 'c>(outbound_node: &Node<'a, 'b, 'c>, inbound_node: &Node<'a, 'b, 'c>, channel_id: &[u8; 32], funding_tx: Transaction, close_inbound_first: bool) -> (msgs::ChannelUpdate, msgs::ChannelUpdate, Transaction) {
1239         let (node_a, broadcaster_a, struct_a) = if close_inbound_first { (&inbound_node.node, &inbound_node.tx_broadcaster, inbound_node) } else { (&outbound_node.node, &outbound_node.tx_broadcaster, outbound_node) };
1240         let (node_b, broadcaster_b, struct_b) = if close_inbound_first { (&outbound_node.node, &outbound_node.tx_broadcaster, outbound_node) } else { (&inbound_node.node, &inbound_node.tx_broadcaster, inbound_node) };
1241         let (tx_a, tx_b);
1242
1243         node_a.close_channel(channel_id, &node_b.get_our_node_id()).unwrap();
1244         node_b.handle_shutdown(&node_a.get_our_node_id(), &channelmanager::provided_init_features(), &get_event_msg!(struct_a, MessageSendEvent::SendShutdown, node_b.get_our_node_id()));
1245
1246         let events_1 = node_b.get_and_clear_pending_msg_events();
1247         assert!(events_1.len() >= 1);
1248         let shutdown_b = match events_1[0] {
1249                 MessageSendEvent::SendShutdown { ref node_id, ref msg } => {
1250                         assert_eq!(node_id, &node_a.get_our_node_id());
1251                         msg.clone()
1252                 },
1253                 _ => panic!("Unexpected event"),
1254         };
1255
1256         let closing_signed_b = if !close_inbound_first {
1257                 assert_eq!(events_1.len(), 1);
1258                 None
1259         } else {
1260                 Some(match events_1[1] {
1261                         MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
1262                                 assert_eq!(node_id, &node_a.get_our_node_id());
1263                                 msg.clone()
1264                         },
1265                         _ => panic!("Unexpected event"),
1266                 })
1267         };
1268
1269         node_a.handle_shutdown(&node_b.get_our_node_id(), &channelmanager::provided_init_features(), &shutdown_b);
1270         let (as_update, bs_update) = if close_inbound_first {
1271                 assert!(node_a.get_and_clear_pending_msg_events().is_empty());
1272                 node_a.handle_closing_signed(&node_b.get_our_node_id(), &closing_signed_b.unwrap());
1273
1274                 node_b.handle_closing_signed(&node_a.get_our_node_id(), &get_event_msg!(struct_a, MessageSendEvent::SendClosingSigned, node_b.get_our_node_id()));
1275                 assert_eq!(broadcaster_b.txn_broadcasted.lock().unwrap().len(), 1);
1276                 tx_b = broadcaster_b.txn_broadcasted.lock().unwrap().remove(0);
1277                 let (bs_update, closing_signed_b) = get_closing_signed_broadcast!(node_b, node_a.get_our_node_id());
1278
1279                 node_a.handle_closing_signed(&node_b.get_our_node_id(), &closing_signed_b.unwrap());
1280                 let (as_update, none_a) = get_closing_signed_broadcast!(node_a, node_b.get_our_node_id());
1281                 assert!(none_a.is_none());
1282                 assert_eq!(broadcaster_a.txn_broadcasted.lock().unwrap().len(), 1);
1283                 tx_a = broadcaster_a.txn_broadcasted.lock().unwrap().remove(0);
1284                 (as_update, bs_update)
1285         } else {
1286                 let closing_signed_a = get_event_msg!(struct_a, MessageSendEvent::SendClosingSigned, node_b.get_our_node_id());
1287
1288                 node_b.handle_closing_signed(&node_a.get_our_node_id(), &closing_signed_a);
1289                 node_a.handle_closing_signed(&node_b.get_our_node_id(), &get_event_msg!(struct_b, MessageSendEvent::SendClosingSigned, node_a.get_our_node_id()));
1290
1291                 assert_eq!(broadcaster_a.txn_broadcasted.lock().unwrap().len(), 1);
1292                 tx_a = broadcaster_a.txn_broadcasted.lock().unwrap().remove(0);
1293                 let (as_update, closing_signed_a) = get_closing_signed_broadcast!(node_a, node_b.get_our_node_id());
1294
1295                 node_b.handle_closing_signed(&node_a.get_our_node_id(), &closing_signed_a.unwrap());
1296                 let (bs_update, none_b) = get_closing_signed_broadcast!(node_b, node_a.get_our_node_id());
1297                 assert!(none_b.is_none());
1298                 assert_eq!(broadcaster_b.txn_broadcasted.lock().unwrap().len(), 1);
1299                 tx_b = broadcaster_b.txn_broadcasted.lock().unwrap().remove(0);
1300                 (as_update, bs_update)
1301         };
1302         assert_eq!(tx_a, tx_b);
1303         check_spends!(tx_a, funding_tx);
1304
1305         (as_update, bs_update, tx_a)
1306 }
1307
1308 pub struct SendEvent {
1309         pub node_id: PublicKey,
1310         pub msgs: Vec<msgs::UpdateAddHTLC>,
1311         pub commitment_msg: msgs::CommitmentSigned,
1312 }
1313 impl SendEvent {
1314         pub fn from_commitment_update(node_id: PublicKey, updates: msgs::CommitmentUpdate) -> SendEvent {
1315                 assert!(updates.update_fulfill_htlcs.is_empty());
1316                 assert!(updates.update_fail_htlcs.is_empty());
1317                 assert!(updates.update_fail_malformed_htlcs.is_empty());
1318                 assert!(updates.update_fee.is_none());
1319                 SendEvent { node_id, msgs: updates.update_add_htlcs, commitment_msg: updates.commitment_signed }
1320         }
1321
1322         pub fn from_event(event: MessageSendEvent) -> SendEvent {
1323                 match event {
1324                         MessageSendEvent::UpdateHTLCs { node_id, updates } => SendEvent::from_commitment_update(node_id, updates),
1325                         _ => panic!("Unexpected event type!"),
1326                 }
1327         }
1328
1329         pub fn from_node<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>) -> SendEvent {
1330                 let mut events = node.node.get_and_clear_pending_msg_events();
1331                 assert_eq!(events.len(), 1);
1332                 SendEvent::from_event(events.pop().unwrap())
1333         }
1334 }
1335
1336 #[macro_export]
1337 /// Performs the "commitment signed dance" - the series of message exchanges which occur after a
1338 /// commitment update.
1339 macro_rules! commitment_signed_dance {
1340         ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr, true /* skip last step */) => {
1341                 {
1342                         check_added_monitors!($node_a, 0);
1343                         assert!($node_a.node.get_and_clear_pending_msg_events().is_empty());
1344                         $node_a.node.handle_commitment_signed(&$node_b.node.get_our_node_id(), &$commitment_signed);
1345                         check_added_monitors!($node_a, 1);
1346                         commitment_signed_dance!($node_a, $node_b, (), $fail_backwards, true, false);
1347                 }
1348         };
1349         ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, true /* return extra message */, true /* return last RAA */) => {
1350                 {
1351                         let (as_revoke_and_ack, as_commitment_signed) = get_revoke_commit_msgs!($node_a, $node_b.node.get_our_node_id());
1352                         check_added_monitors!($node_b, 0);
1353                         assert!($node_b.node.get_and_clear_pending_msg_events().is_empty());
1354                         $node_b.node.handle_revoke_and_ack(&$node_a.node.get_our_node_id(), &as_revoke_and_ack);
1355                         assert!($node_b.node.get_and_clear_pending_msg_events().is_empty());
1356                         check_added_monitors!($node_b, 1);
1357                         $node_b.node.handle_commitment_signed(&$node_a.node.get_our_node_id(), &as_commitment_signed);
1358                         let (bs_revoke_and_ack, extra_msg_option) = {
1359                                 let events = $node_b.node.get_and_clear_pending_msg_events();
1360                                 assert!(events.len() <= 2);
1361                                 let (node_a_event, events) = remove_first_msg_event_to_node(&$node_a.node.get_our_node_id(), &events);
1362                                 (match node_a_event {
1363                                         MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
1364                                                 assert_eq!(*node_id, $node_a.node.get_our_node_id());
1365                                                 (*msg).clone()
1366                                         },
1367                                         _ => panic!("Unexpected event"),
1368                                 }, events.get(0).map(|e| e.clone()))
1369                         };
1370                         check_added_monitors!($node_b, 1);
1371                         if $fail_backwards {
1372                                 assert!($node_a.node.get_and_clear_pending_events().is_empty());
1373                                 assert!($node_a.node.get_and_clear_pending_msg_events().is_empty());
1374                         }
1375                         (extra_msg_option, bs_revoke_and_ack)
1376                 }
1377         };
1378         ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr, true /* skip last step */, false /* return extra message */, true /* return last RAA */) => {
1379                 {
1380                         check_added_monitors!($node_a, 0);
1381                         assert!($node_a.node.get_and_clear_pending_msg_events().is_empty());
1382                         $node_a.node.handle_commitment_signed(&$node_b.node.get_our_node_id(), &$commitment_signed);
1383                         check_added_monitors!($node_a, 1);
1384                         let (extra_msg_option, bs_revoke_and_ack) = commitment_signed_dance!($node_a, $node_b, (), $fail_backwards, true, true, true);
1385                         assert!(extra_msg_option.is_none());
1386                         bs_revoke_and_ack
1387                 }
1388         };
1389         ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, true /* return extra message */) => {
1390                 {
1391                         let (extra_msg_option, bs_revoke_and_ack) = commitment_signed_dance!($node_a, $node_b, (), $fail_backwards, true, true, true);
1392                         $node_a.node.handle_revoke_and_ack(&$node_b.node.get_our_node_id(), &bs_revoke_and_ack);
1393                         check_added_monitors!($node_a, 1);
1394                         extra_msg_option
1395                 }
1396         };
1397         ($node_a: expr, $node_b: expr, (), $fail_backwards: expr, true /* skip last step */, false /* no extra message */) => {
1398                 {
1399                         assert!(commitment_signed_dance!($node_a, $node_b, (), $fail_backwards, true, true).is_none());
1400                 }
1401         };
1402         ($node_a: expr, $node_b: expr, $commitment_signed: expr, $fail_backwards: expr) => {
1403                 {
1404                         commitment_signed_dance!($node_a, $node_b, $commitment_signed, $fail_backwards, true);
1405                         if $fail_backwards {
1406                                 expect_pending_htlcs_forwardable_and_htlc_handling_failed!($node_a, vec![$crate::util::events::HTLCDestination::NextHopChannel{ node_id: Some($node_b.node.get_our_node_id()), channel_id: $commitment_signed.channel_id }]);
1407                                 check_added_monitors!($node_a, 1);
1408
1409                                 let node_a_per_peer_state = $node_a.node.per_peer_state.read().unwrap();
1410                                 let mut number_of_msg_events = 0;
1411                                 for (cp_id, peer_state_mutex) in node_a_per_peer_state.iter() {
1412                                         let peer_state = peer_state_mutex.lock().unwrap();
1413                                         let cp_pending_msg_events = &peer_state.pending_msg_events;
1414                                         number_of_msg_events += cp_pending_msg_events.len();
1415                                         if cp_pending_msg_events.len() == 1 {
1416                                                 if let MessageSendEvent::UpdateHTLCs { .. } = cp_pending_msg_events[0] {
1417                                                         assert_ne!(*cp_id, $node_b.node.get_our_node_id());
1418                                                 } else { panic!("Unexpected event"); }
1419                                         }
1420                                 }
1421                                 // Expecting the failure backwards event to the previous hop (not `node_b`)
1422                                 assert_eq!(number_of_msg_events, 1);
1423                         } else {
1424                                 assert!($node_a.node.get_and_clear_pending_msg_events().is_empty());
1425                         }
1426                 }
1427         }
1428 }
1429
1430 /// Get a payment preimage and hash.
1431 #[macro_export]
1432 macro_rules! get_payment_preimage_hash {
1433         ($dest_node: expr) => {
1434                 {
1435                         get_payment_preimage_hash!($dest_node, None)
1436                 }
1437         };
1438         ($dest_node: expr, $min_value_msat: expr) => {
1439                 {
1440                         use bitcoin::hashes::Hash as _;
1441                         let mut payment_count = $dest_node.network_payment_count.borrow_mut();
1442                         let payment_preimage = $crate::ln::PaymentPreimage([*payment_count; 32]);
1443                         *payment_count += 1;
1444                         let payment_hash = $crate::ln::PaymentHash(
1445                                 bitcoin::hashes::sha256::Hash::hash(&payment_preimage.0[..]).into_inner());
1446                         let payment_secret = $dest_node.node.create_inbound_payment_for_hash(payment_hash, $min_value_msat, 7200).unwrap();
1447                         (payment_preimage, payment_hash, payment_secret)
1448                 }
1449         }
1450 }
1451
1452 #[macro_export]
1453 macro_rules! get_route {
1454         ($send_node: expr, $payment_params: expr, $recv_value: expr, $cltv: expr) => {{
1455                 use $crate::chain::keysinterface::EntropySource;
1456                 let scorer = $crate::util::test_utils::TestScorer::with_penalty(0);
1457                 let keys_manager = $crate::util::test_utils::TestKeysInterface::new(&[0u8; 32], bitcoin::network::constants::Network::Testnet);
1458                 let random_seed_bytes = keys_manager.get_secure_random_bytes();
1459                 $crate::routing::router::get_route(
1460                         &$send_node.node.get_our_node_id(), &$payment_params, &$send_node.network_graph.read_only(),
1461                         Some(&$send_node.node.list_usable_channels().iter().collect::<Vec<_>>()),
1462                         $recv_value, $cltv, $send_node.logger, &scorer, &random_seed_bytes
1463                 )
1464         }}
1465 }
1466
1467 #[cfg(test)]
1468 #[macro_export]
1469 macro_rules! get_route_and_payment_hash {
1470         ($send_node: expr, $recv_node: expr, $recv_value: expr) => {{
1471                 let payment_params = $crate::routing::router::PaymentParameters::from_node_id($recv_node.node.get_our_node_id())
1472                         .with_features($crate::ln::channelmanager::provided_invoice_features());
1473                 $crate::get_route_and_payment_hash!($send_node, $recv_node, payment_params, $recv_value, TEST_FINAL_CLTV)
1474         }};
1475         ($send_node: expr, $recv_node: expr, $payment_params: expr, $recv_value: expr, $cltv: expr) => {{
1476                 let (payment_preimage, payment_hash, payment_secret) = $crate::get_payment_preimage_hash!($recv_node, Some($recv_value));
1477                 let route = $crate::get_route!($send_node, $payment_params, $recv_value, $cltv);
1478                 (route.unwrap(), payment_hash, payment_preimage, payment_secret)
1479         }}
1480 }
1481
1482 #[macro_export]
1483 macro_rules! expect_pending_htlcs_forwardable_conditions {
1484         ($node: expr, $expected_failures: expr) => {{
1485                 let expected_failures = $expected_failures;
1486                 let events = $node.node.get_and_clear_pending_events();
1487                 match events[0] {
1488                         $crate::util::events::Event::PendingHTLCsForwardable { .. } => { },
1489                         _ => panic!("Unexpected event {:?}", events),
1490                 };
1491
1492                 let count = expected_failures.len() + 1;
1493                 assert_eq!(events.len(), count);
1494
1495                 if expected_failures.len() > 0 {
1496                         expect_htlc_handling_failed_destinations!(events, expected_failures)
1497                 }
1498         }}
1499 }
1500
1501 #[macro_export]
1502 macro_rules! expect_htlc_handling_failed_destinations {
1503         ($events: expr, $expected_failures: expr) => {{
1504                 for event in $events {
1505                         match event {
1506                                 $crate::util::events::Event::PendingHTLCsForwardable { .. } => { },
1507                                 $crate::util::events::Event::HTLCHandlingFailed { ref failed_next_destination, .. } => {
1508                                         assert!($expected_failures.contains(&failed_next_destination))
1509                                 },
1510                                 _ => panic!("Unexpected destination"),
1511                         }
1512                 }
1513         }}
1514 }
1515
1516 #[macro_export]
1517 /// Clears (and ignores) a PendingHTLCsForwardable event
1518 macro_rules! expect_pending_htlcs_forwardable_ignore {
1519         ($node: expr) => {{
1520                 expect_pending_htlcs_forwardable_conditions!($node, vec![]);
1521         }};
1522 }
1523
1524 #[macro_export]
1525 /// Clears (and ignores) PendingHTLCsForwardable and HTLCHandlingFailed events
1526 macro_rules! expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore {
1527         ($node: expr, $expected_failures: expr) => {{
1528                 expect_pending_htlcs_forwardable_conditions!($node, $expected_failures);
1529         }};
1530 }
1531
1532 #[macro_export]
1533 /// Handles a PendingHTLCsForwardable event
1534 macro_rules! expect_pending_htlcs_forwardable {
1535         ($node: expr) => {{
1536                 expect_pending_htlcs_forwardable_ignore!($node);
1537                 $node.node.process_pending_htlc_forwards();
1538
1539                 // Ensure process_pending_htlc_forwards is idempotent.
1540                 $node.node.process_pending_htlc_forwards();
1541         }};
1542 }
1543
1544 #[macro_export]
1545 /// Handles a PendingHTLCsForwardable and HTLCHandlingFailed event
1546 macro_rules! expect_pending_htlcs_forwardable_and_htlc_handling_failed {
1547         ($node: expr, $expected_failures: expr) => {{
1548                 expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore!($node, $expected_failures);
1549                 $node.node.process_pending_htlc_forwards();
1550
1551                 // Ensure process_pending_htlc_forwards is idempotent.
1552                 $node.node.process_pending_htlc_forwards();
1553         }}
1554 }
1555
1556 #[cfg(test)]
1557 macro_rules! expect_pending_htlcs_forwardable_from_events {
1558         ($node: expr, $events: expr, $ignore: expr) => {{
1559                 assert_eq!($events.len(), 1);
1560                 match $events[0] {
1561                         Event::PendingHTLCsForwardable { .. } => { },
1562                         _ => panic!("Unexpected event"),
1563                 };
1564                 if $ignore {
1565                         $node.node.process_pending_htlc_forwards();
1566
1567                         // Ensure process_pending_htlc_forwards is idempotent.
1568                         $node.node.process_pending_htlc_forwards();
1569                 }
1570         }}
1571 }
1572 #[macro_export]
1573 #[cfg(any(test, feature = "_bench_unstable", feature = "_test_utils"))]
1574 macro_rules! expect_payment_claimable {
1575         ($node: expr, $expected_payment_hash: expr, $expected_payment_secret: expr, $expected_recv_value: expr) => {
1576                 expect_payment_claimable!($node, $expected_payment_hash, $expected_payment_secret, $expected_recv_value, None, $node.node.get_our_node_id())
1577         };
1578         ($node: expr, $expected_payment_hash: expr, $expected_payment_secret: expr, $expected_recv_value: expr, $expected_payment_preimage: expr, $expected_receiver_node_id: expr) => {
1579                 let events = $node.node.get_and_clear_pending_events();
1580                 assert_eq!(events.len(), 1);
1581                 match events[0] {
1582                         $crate::util::events::Event::PaymentClaimable { ref payment_hash, ref purpose, amount_msat, receiver_node_id, via_channel_id: _, via_user_channel_id: _ } => {
1583                                 assert_eq!($expected_payment_hash, *payment_hash);
1584                                 assert_eq!($expected_recv_value, amount_msat);
1585                                 assert_eq!($expected_receiver_node_id, receiver_node_id.unwrap());
1586                                 match purpose {
1587                                         $crate::util::events::PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, .. } => {
1588                                                 assert_eq!(&$expected_payment_preimage, payment_preimage);
1589                                                 assert_eq!($expected_payment_secret, *payment_secret);
1590                                         },
1591                                         _ => {},
1592                                 }
1593                         },
1594                         _ => panic!("Unexpected event"),
1595                 }
1596         }
1597 }
1598
1599 #[macro_export]
1600 #[cfg(any(test, feature = "_bench_unstable", feature = "_test_utils"))]
1601 macro_rules! expect_payment_claimed {
1602         ($node: expr, $expected_payment_hash: expr, $expected_recv_value: expr) => {
1603                 let events = $node.node.get_and_clear_pending_events();
1604                 assert_eq!(events.len(), 1);
1605                 match events[0] {
1606                         $crate::util::events::Event::PaymentClaimed { ref payment_hash, amount_msat, .. } => {
1607                                 assert_eq!($expected_payment_hash, *payment_hash);
1608                                 assert_eq!($expected_recv_value, amount_msat);
1609                         },
1610                         _ => panic!("Unexpected event"),
1611                 }
1612         }
1613 }
1614
1615 #[cfg(test)]
1616 #[macro_export]
1617 macro_rules! expect_payment_sent_without_paths {
1618         ($node: expr, $expected_payment_preimage: expr) => {
1619                 expect_payment_sent!($node, $expected_payment_preimage, None::<u64>, false);
1620         };
1621         ($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr) => {
1622                 expect_payment_sent!($node, $expected_payment_preimage, $expected_fee_msat_opt, false);
1623         }
1624 }
1625
1626 #[macro_export]
1627 macro_rules! expect_payment_sent {
1628         ($node: expr, $expected_payment_preimage: expr) => {
1629                 $crate::expect_payment_sent!($node, $expected_payment_preimage, None::<u64>, true);
1630         };
1631         ($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr) => {
1632                 $crate::expect_payment_sent!($node, $expected_payment_preimage, $expected_fee_msat_opt, true);
1633         };
1634         ($node: expr, $expected_payment_preimage: expr, $expected_fee_msat_opt: expr, $expect_paths: expr) => { {
1635                 use bitcoin::hashes::Hash as _;
1636                 let events = $node.node.get_and_clear_pending_events();
1637                 let expected_payment_hash = $crate::ln::PaymentHash(
1638                         bitcoin::hashes::sha256::Hash::hash(&$expected_payment_preimage.0).into_inner());
1639                 if $expect_paths {
1640                         assert!(events.len() > 1);
1641                 } else {
1642                         assert_eq!(events.len(), 1);
1643                 }
1644                 let expected_payment_id = match events[0] {
1645                         $crate::util::events::Event::PaymentSent { ref payment_id, ref payment_preimage, ref payment_hash, ref fee_paid_msat } => {
1646                                 assert_eq!($expected_payment_preimage, *payment_preimage);
1647                                 assert_eq!(expected_payment_hash, *payment_hash);
1648                                 assert!(fee_paid_msat.is_some());
1649                                 if $expected_fee_msat_opt.is_some() {
1650                                         assert_eq!(*fee_paid_msat, $expected_fee_msat_opt);
1651                                 }
1652                                 payment_id.unwrap()
1653                         },
1654                         _ => panic!("Unexpected event"),
1655                 };
1656                 if $expect_paths {
1657                         for i in 1..events.len() {
1658                                 match events[i] {
1659                                         $crate::util::events::Event::PaymentPathSuccessful { payment_id, payment_hash, .. } => {
1660                                                 assert_eq!(payment_id, expected_payment_id);
1661                                                 assert_eq!(payment_hash, Some(expected_payment_hash));
1662                                         },
1663                                         _ => panic!("Unexpected event"),
1664                                 }
1665                         }
1666                 }
1667         } }
1668 }
1669
1670 #[cfg(test)]
1671 #[macro_export]
1672 macro_rules! expect_payment_path_successful {
1673         ($node: expr) => {
1674                 let events = $node.node.get_and_clear_pending_events();
1675                 assert_eq!(events.len(), 1);
1676                 match events[0] {
1677                         $crate::util::events::Event::PaymentPathSuccessful { .. } => {},
1678                         _ => panic!("Unexpected event"),
1679                 }
1680         }
1681 }
1682
1683 macro_rules! expect_payment_forwarded {
1684         ($node: expr, $prev_node: expr, $next_node: expr, $expected_fee: expr, $upstream_force_closed: expr, $downstream_force_closed: expr) => {
1685                 let events = $node.node.get_and_clear_pending_events();
1686                 assert_eq!(events.len(), 1);
1687                 match events[0] {
1688                         Event::PaymentForwarded { fee_earned_msat, prev_channel_id, claim_from_onchain_tx, next_channel_id } => {
1689                                 assert_eq!(fee_earned_msat, $expected_fee);
1690                                 if fee_earned_msat.is_some() {
1691                                         // Is the event prev_channel_id in one of the channels between the two nodes?
1692                                         assert!($node.node.list_channels().iter().any(|x| x.counterparty.node_id == $prev_node.node.get_our_node_id() && x.channel_id == prev_channel_id.unwrap()));
1693                                 }
1694                                 // We check for force closures since a force closed channel is removed from the
1695                                 // node's channel list
1696                                 if !$downstream_force_closed {
1697                                         assert!($node.node.list_channels().iter().any(|x| x.counterparty.node_id == $next_node.node.get_our_node_id() && x.channel_id == next_channel_id.unwrap()));
1698                                 }
1699                                 assert_eq!(claim_from_onchain_tx, $downstream_force_closed);
1700                         },
1701                         _ => panic!("Unexpected event"),
1702                 }
1703         }
1704 }
1705
1706 #[cfg(any(test, feature = "_bench_unstable", feature = "_test_utils"))]
1707 pub fn expect_channel_ready_event<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, expected_counterparty_node_id: &PublicKey) {
1708         let events = node.node.get_and_clear_pending_events();
1709         assert_eq!(events.len(), 1);
1710         match events[0] {
1711                 crate::util::events::Event::ChannelReady{ ref counterparty_node_id, .. } => {
1712                         assert_eq!(*expected_counterparty_node_id, *counterparty_node_id);
1713                 },
1714                 _ => panic!("Unexpected event"),
1715         }
1716 }
1717
1718
1719 pub struct PaymentFailedConditions<'a> {
1720         pub(crate) expected_htlc_error_data: Option<(u16, &'a [u8])>,
1721         pub(crate) expected_blamed_scid: Option<u64>,
1722         pub(crate) expected_blamed_chan_closed: Option<bool>,
1723         pub(crate) expected_mpp_parts_remain: bool,
1724 }
1725
1726 impl<'a> PaymentFailedConditions<'a> {
1727         pub fn new() -> Self {
1728                 Self {
1729                         expected_htlc_error_data: None,
1730                         expected_blamed_scid: None,
1731                         expected_blamed_chan_closed: None,
1732                         expected_mpp_parts_remain: false,
1733                 }
1734         }
1735         pub fn mpp_parts_remain(mut self) -> Self {
1736                 self.expected_mpp_parts_remain = true;
1737                 self
1738         }
1739         pub fn blamed_scid(mut self, scid: u64) -> Self {
1740                 self.expected_blamed_scid = Some(scid);
1741                 self
1742         }
1743         pub fn blamed_chan_closed(mut self, closed: bool) -> Self {
1744                 self.expected_blamed_chan_closed = Some(closed);
1745                 self
1746         }
1747         pub fn expected_htlc_error_data(mut self, code: u16, data: &'a [u8]) -> Self {
1748                 self.expected_htlc_error_data = Some((code, data));
1749                 self
1750         }
1751 }
1752
1753 #[cfg(test)]
1754 macro_rules! expect_payment_failed_with_update {
1755         ($node: expr, $expected_payment_hash: expr, $payment_failed_permanently: expr, $scid: expr, $chan_closed: expr) => {
1756                 $crate::ln::functional_test_utils::expect_payment_failed_conditions(
1757                         &$node, $expected_payment_hash, $payment_failed_permanently,
1758                         $crate::ln::functional_test_utils::PaymentFailedConditions::new()
1759                                 .blamed_scid($scid).blamed_chan_closed($chan_closed));
1760         }
1761 }
1762
1763 #[cfg(test)]
1764 macro_rules! expect_payment_failed {
1765         ($node: expr, $expected_payment_hash: expr, $payment_failed_permanently: expr $(, $expected_error_code: expr, $expected_error_data: expr)*) => {
1766                 #[allow(unused_mut)]
1767                 let mut conditions = $crate::ln::functional_test_utils::PaymentFailedConditions::new();
1768                 $(
1769                         conditions = conditions.expected_htlc_error_data($expected_error_code, &$expected_error_data);
1770                 )*
1771                 $crate::ln::functional_test_utils::expect_payment_failed_conditions(&$node, $expected_payment_hash, $payment_failed_permanently, conditions);
1772         };
1773 }
1774
1775 pub fn expect_payment_failed_conditions_event<'a, 'b, 'c, 'd, 'e>(
1776         node: &'a Node<'b, 'c, 'd>, payment_failed_event: Event, expected_payment_hash: PaymentHash,
1777         expected_payment_failed_permanently: bool, conditions: PaymentFailedConditions<'e>
1778 ) {
1779         let expected_payment_id = match payment_failed_event {
1780                 Event::PaymentPathFailed { payment_hash, payment_failed_permanently, path, retry, payment_id, network_update, short_channel_id,
1781                         #[cfg(test)]
1782                         error_code,
1783                         #[cfg(test)]
1784                         error_data, .. } => {
1785                         assert_eq!(payment_hash, expected_payment_hash, "unexpected payment_hash");
1786                         assert_eq!(payment_failed_permanently, expected_payment_failed_permanently, "unexpected payment_failed_permanently value");
1787                         assert!(retry.is_some(), "expected retry.is_some()");
1788                         assert_eq!(retry.as_ref().unwrap().final_value_msat, path.last().unwrap().fee_msat, "Retry amount should match last hop in path");
1789                         assert_eq!(retry.as_ref().unwrap().payment_params.payee_pubkey, path.last().unwrap().pubkey, "Retry payee node_id should match last hop in path");
1790                         if let Some(scid) = short_channel_id {
1791                                 assert!(retry.as_ref().unwrap().payment_params.previously_failed_channels.contains(&scid));
1792                         }
1793
1794                         #[cfg(test)]
1795                         {
1796                                 assert!(error_code.is_some(), "expected error_code.is_some() = true");
1797                                 assert!(error_data.is_some(), "expected error_data.is_some() = true");
1798                                 if let Some((code, data)) = conditions.expected_htlc_error_data {
1799                                         assert_eq!(error_code.unwrap(), code, "unexpected error code");
1800                                         assert_eq!(&error_data.as_ref().unwrap()[..], data, "unexpected error data");
1801                                 }
1802                         }
1803
1804                         if let Some(chan_closed) = conditions.expected_blamed_chan_closed {
1805                                 match network_update {
1806                                         Some(NetworkUpdate::ChannelUpdateMessage { ref msg }) if !chan_closed => {
1807                                                 if let Some(scid) = conditions.expected_blamed_scid {
1808                                                         assert_eq!(msg.contents.short_channel_id, scid);
1809                                                 }
1810                                                 const CHAN_DISABLED_FLAG: u8 = 2;
1811                                                 assert_eq!(msg.contents.flags & CHAN_DISABLED_FLAG, 0);
1812                                         },
1813                                         Some(NetworkUpdate::ChannelFailure { short_channel_id, is_permanent }) if chan_closed => {
1814                                                 if let Some(scid) = conditions.expected_blamed_scid {
1815                                                         assert_eq!(short_channel_id, scid);
1816                                                 }
1817                                                 assert!(is_permanent);
1818                                         },
1819                                         Some(_) => panic!("Unexpected update type"),
1820                                         None => panic!("Expected update"),
1821                                 }
1822                         }
1823
1824                         payment_id.unwrap()
1825                 },
1826                 _ => panic!("Unexpected event"),
1827         };
1828         if !conditions.expected_mpp_parts_remain {
1829                 node.node.abandon_payment(expected_payment_id);
1830                 let events = node.node.get_and_clear_pending_events();
1831                 assert_eq!(events.len(), 1);
1832                 match events[0] {
1833                         Event::PaymentFailed { ref payment_hash, ref payment_id } => {
1834                                 assert_eq!(*payment_hash, expected_payment_hash, "unexpected second payment_hash");
1835                                 assert_eq!(*payment_id, expected_payment_id);
1836                         }
1837                         _ => panic!("Unexpected second event"),
1838                 }
1839         }
1840 }
1841
1842 pub fn expect_payment_failed_conditions<'a, 'b, 'c, 'd, 'e>(
1843         node: &'a Node<'b, 'c, 'd>, expected_payment_hash: PaymentHash, expected_payment_failed_permanently: bool,
1844         conditions: PaymentFailedConditions<'e>
1845 ) {
1846         let mut events = node.node.get_and_clear_pending_events();
1847         assert_eq!(events.len(), 1);
1848         expect_payment_failed_conditions_event(node, events.pop().unwrap(), expected_payment_hash, expected_payment_failed_permanently, conditions);
1849 }
1850
1851 pub fn send_along_route_with_secret<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, route: Route, expected_paths: &[&[&Node<'a, 'b, 'c>]], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: PaymentSecret) -> PaymentId {
1852         let payment_id = PaymentId(origin_node.keys_manager.backing.get_secure_random_bytes());
1853         origin_node.node.send_payment(&route, our_payment_hash, &Some(our_payment_secret), payment_id).unwrap();
1854         check_added_monitors!(origin_node, expected_paths.len());
1855         pass_along_route(origin_node, expected_paths, recv_value, our_payment_hash, our_payment_secret);
1856         payment_id
1857 }
1858
1859 pub fn do_pass_along_path<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_path: &[&Node<'a, 'b, 'c>], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: Option<PaymentSecret>, ev: MessageSendEvent, payment_claimable_expected: bool, clear_recipient_events: bool, expected_preimage: Option<PaymentPreimage>) {
1860         let mut payment_event = SendEvent::from_event(ev);
1861         let mut prev_node = origin_node;
1862
1863         for (idx, &node) in expected_path.iter().enumerate() {
1864                 assert_eq!(node.node.get_our_node_id(), payment_event.node_id);
1865
1866                 node.node.handle_update_add_htlc(&prev_node.node.get_our_node_id(), &payment_event.msgs[0]);
1867                 check_added_monitors!(node, 0);
1868                 commitment_signed_dance!(node, prev_node, payment_event.commitment_msg, false);
1869
1870                 expect_pending_htlcs_forwardable!(node);
1871
1872                 if idx == expected_path.len() - 1 && clear_recipient_events {
1873                         let events_2 = node.node.get_and_clear_pending_events();
1874                         if payment_claimable_expected {
1875                                 assert_eq!(events_2.len(), 1);
1876                                 match events_2[0] {
1877                                         Event::PaymentClaimable { ref payment_hash, ref purpose, amount_msat, receiver_node_id, ref via_channel_id, ref via_user_channel_id } => {
1878                                                 assert_eq!(our_payment_hash, *payment_hash);
1879                                                 assert_eq!(node.node.get_our_node_id(), receiver_node_id.unwrap());
1880                                                 match &purpose {
1881                                                         PaymentPurpose::InvoicePayment { payment_preimage, payment_secret, .. } => {
1882                                                                 assert_eq!(expected_preimage, *payment_preimage);
1883                                                                 assert_eq!(our_payment_secret.unwrap(), *payment_secret);
1884                                                         },
1885                                                         PaymentPurpose::SpontaneousPayment(payment_preimage) => {
1886                                                                 assert_eq!(expected_preimage.unwrap(), *payment_preimage);
1887                                                                 assert!(our_payment_secret.is_none());
1888                                                         },
1889                                                 }
1890                                                 assert_eq!(amount_msat, recv_value);
1891                                                 assert!(node.node.list_channels().iter().any(|details| details.channel_id == via_channel_id.unwrap()));
1892                                                 assert!(node.node.list_channels().iter().any(|details| details.user_channel_id == via_user_channel_id.unwrap()));
1893                                         },
1894                                         _ => panic!("Unexpected event"),
1895                                 }
1896                         } else {
1897                                 assert!(events_2.is_empty());
1898                         }
1899                 } else if idx != expected_path.len() - 1 {
1900                         let mut events_2 = node.node.get_and_clear_pending_msg_events();
1901                         assert_eq!(events_2.len(), 1);
1902                         check_added_monitors!(node, 1);
1903                         payment_event = SendEvent::from_event(events_2.remove(0));
1904                         assert_eq!(payment_event.msgs.len(), 1);
1905                 }
1906
1907                 prev_node = node;
1908         }
1909 }
1910
1911 pub fn pass_along_path<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_path: &[&Node<'a, 'b, 'c>], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: Option<PaymentSecret>, ev: MessageSendEvent, payment_claimable_expected: bool, expected_preimage: Option<PaymentPreimage>) {
1912         do_pass_along_path(origin_node, expected_path, recv_value, our_payment_hash, our_payment_secret, ev, payment_claimable_expected, true, expected_preimage);
1913 }
1914
1915 pub fn pass_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&[&Node<'a, 'b, 'c>]], recv_value: u64, our_payment_hash: PaymentHash, our_payment_secret: PaymentSecret) {
1916         let mut events = origin_node.node.get_and_clear_pending_msg_events();
1917         assert_eq!(events.len(), expected_route.len());
1918         for (path_idx, expected_path) in expected_route.iter().enumerate() {
1919                 let (ev, updated_events) = remove_first_msg_event_to_node(&expected_path[0].node.get_our_node_id(), &events);
1920                 events = updated_events;
1921                 // Once we've gotten through all the HTLCs, the last one should result in a
1922                 // PaymentClaimable (but each previous one should not!), .
1923                 let expect_payment = path_idx == expected_route.len() - 1;
1924                 pass_along_path(origin_node, expected_path, recv_value, our_payment_hash.clone(), Some(our_payment_secret), ev, expect_payment, None);
1925         }
1926 }
1927
1928 pub fn send_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, route: Route, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash, PaymentSecret, PaymentId) {
1929         let (our_payment_preimage, our_payment_hash, our_payment_secret) = get_payment_preimage_hash!(expected_route.last().unwrap());
1930         let payment_id = send_along_route_with_secret(origin_node, route, &[expected_route], recv_value, our_payment_hash, our_payment_secret);
1931         (our_payment_preimage, our_payment_hash, our_payment_secret, payment_id)
1932 }
1933
1934 pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_paths: &[&[&Node<'a, 'b, 'c>]], skip_last: bool, our_payment_preimage: PaymentPreimage) -> u64 {
1935         for path in expected_paths.iter() {
1936                 assert_eq!(path.last().unwrap().node.get_our_node_id(), expected_paths[0].last().unwrap().node.get_our_node_id());
1937         }
1938         expected_paths[0].last().unwrap().node.claim_funds(our_payment_preimage);
1939
1940         let claim_event = expected_paths[0].last().unwrap().node.get_and_clear_pending_events();
1941         assert_eq!(claim_event.len(), 1);
1942         match claim_event[0] {
1943                 Event::PaymentClaimed { purpose: PaymentPurpose::SpontaneousPayment(preimage), .. }|
1944                 Event::PaymentClaimed { purpose: PaymentPurpose::InvoicePayment { payment_preimage: Some(preimage), ..}, .. } =>
1945                         assert_eq!(preimage, our_payment_preimage),
1946                 Event::PaymentClaimed { purpose: PaymentPurpose::InvoicePayment { .. }, payment_hash, .. } =>
1947                         assert_eq!(&payment_hash.0, &Sha256::hash(&our_payment_preimage.0)[..]),
1948                 _ => panic!(),
1949         }
1950
1951         check_added_monitors!(expected_paths[0].last().unwrap(), expected_paths.len());
1952
1953         let mut expected_total_fee_msat = 0;
1954
1955         macro_rules! msgs_from_ev {
1956                 ($ev: expr) => {
1957                         match $ev {
1958                                 &MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
1959                                         assert!(update_add_htlcs.is_empty());
1960                                         assert_eq!(update_fulfill_htlcs.len(), 1);
1961                                         assert!(update_fail_htlcs.is_empty());
1962                                         assert!(update_fail_malformed_htlcs.is_empty());
1963                                         assert!(update_fee.is_none());
1964                                         ((update_fulfill_htlcs[0].clone(), commitment_signed.clone()), node_id.clone())
1965                                 },
1966                                 _ => panic!("Unexpected event"),
1967                         }
1968                 }
1969         }
1970         let mut per_path_msgs: Vec<((msgs::UpdateFulfillHTLC, msgs::CommitmentSigned), PublicKey)> = Vec::with_capacity(expected_paths.len());
1971         let mut events = expected_paths[0].last().unwrap().node.get_and_clear_pending_msg_events();
1972         assert_eq!(events.len(), expected_paths.len());
1973
1974         if events.len() == 1 {
1975                 per_path_msgs.push(msgs_from_ev!(&events[0]));
1976         } else {
1977                 for expected_path in expected_paths.iter() {
1978                         // For MPP payments, we always want the message to the first node in the path.
1979                         let (ev, updated_events) = remove_first_msg_event_to_node(&expected_path[0].node.get_our_node_id(), &events);
1980                         per_path_msgs.push(msgs_from_ev!(&ev));
1981                         events = updated_events;
1982                 }
1983         }
1984
1985         for (expected_route, (path_msgs, next_hop)) in expected_paths.iter().zip(per_path_msgs.drain(..)) {
1986                 let mut next_msgs = Some(path_msgs);
1987                 let mut expected_next_node = next_hop;
1988
1989                 macro_rules! last_update_fulfill_dance {
1990                         ($node: expr, $prev_node: expr) => {
1991                                 {
1992                                         $node.node.handle_update_fulfill_htlc(&$prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0);
1993                                         check_added_monitors!($node, 0);
1994                                         assert!($node.node.get_and_clear_pending_msg_events().is_empty());
1995                                         commitment_signed_dance!($node, $prev_node, next_msgs.as_ref().unwrap().1, false);
1996                                 }
1997                         }
1998                 }
1999                 macro_rules! mid_update_fulfill_dance {
2000                         ($node: expr, $prev_node: expr, $next_node: expr, $new_msgs: expr) => {
2001                                 {
2002                                         $node.node.handle_update_fulfill_htlc(&$prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0);
2003                                         let fee = {
2004                                                 let per_peer_state = $node.node.per_peer_state.read().unwrap();
2005                                                 let peer_state = per_peer_state.get(&$prev_node.node.get_our_node_id())
2006                                                         .unwrap().lock().unwrap();
2007                                                 let channel = peer_state.channel_by_id.get(&next_msgs.as_ref().unwrap().0.channel_id).unwrap();
2008                                                 if let Some(prev_config) = channel.prev_config() {
2009                                                         prev_config.forwarding_fee_base_msat
2010                                                 } else {
2011                                                         channel.config().forwarding_fee_base_msat
2012                                                 }
2013                                         };
2014                                         expect_payment_forwarded!($node, $next_node, $prev_node, Some(fee as u64), false, false);
2015                                         expected_total_fee_msat += fee as u64;
2016                                         check_added_monitors!($node, 1);
2017                                         let new_next_msgs = if $new_msgs {
2018                                                 let events = $node.node.get_and_clear_pending_msg_events();
2019                                                 assert_eq!(events.len(), 1);
2020                                                 let (res, nexthop) = msgs_from_ev!(&events[0]);
2021                                                 expected_next_node = nexthop;
2022                                                 Some(res)
2023                                         } else {
2024                                                 assert!($node.node.get_and_clear_pending_msg_events().is_empty());
2025                                                 None
2026                                         };
2027                                         commitment_signed_dance!($node, $prev_node, next_msgs.as_ref().unwrap().1, false);
2028                                         next_msgs = new_next_msgs;
2029                                 }
2030                         }
2031                 }
2032
2033                 let mut prev_node = expected_route.last().unwrap();
2034                 for (idx, node) in expected_route.iter().rev().enumerate().skip(1) {
2035                         assert_eq!(expected_next_node, node.node.get_our_node_id());
2036                         let update_next_msgs = !skip_last || idx != expected_route.len() - 1;
2037                         if next_msgs.is_some() {
2038                                 // Since we are traversing in reverse, next_node is actually the previous node
2039                                 let next_node: &Node;
2040                                 if idx == expected_route.len() - 1 {
2041                                         next_node = origin_node;
2042                                 } else {
2043                                         next_node = expected_route[expected_route.len() - 1 - idx - 1];
2044                                 }
2045                                 mid_update_fulfill_dance!(node, prev_node, next_node, update_next_msgs);
2046                         } else {
2047                                 assert!(!update_next_msgs);
2048                                 assert!(node.node.get_and_clear_pending_msg_events().is_empty());
2049                         }
2050                         if !skip_last && idx == expected_route.len() - 1 {
2051                                 assert_eq!(expected_next_node, origin_node.node.get_our_node_id());
2052                         }
2053
2054                         prev_node = node;
2055                 }
2056
2057                 if !skip_last {
2058                         last_update_fulfill_dance!(origin_node, expected_route.first().unwrap());
2059                 }
2060         }
2061
2062         // Ensure that claim_funds is idempotent.
2063         expected_paths[0].last().unwrap().node.claim_funds(our_payment_preimage);
2064         assert!(expected_paths[0].last().unwrap().node.get_and_clear_pending_msg_events().is_empty());
2065         check_added_monitors!(expected_paths[0].last().unwrap(), 0);
2066
2067         expected_total_fee_msat
2068 }
2069 pub fn claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_paths: &[&[&Node<'a, 'b, 'c>]], skip_last: bool, our_payment_preimage: PaymentPreimage) {
2070         let expected_total_fee_msat = do_claim_payment_along_route(origin_node, expected_paths, skip_last, our_payment_preimage);
2071         if !skip_last {
2072                 expect_payment_sent!(origin_node, our_payment_preimage, Some(expected_total_fee_msat));
2073         }
2074 }
2075
2076 pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], our_payment_preimage: PaymentPreimage) {
2077         claim_payment_along_route(origin_node, &[expected_route], false, our_payment_preimage);
2078 }
2079
2080 pub const TEST_FINAL_CLTV: u32 = 70;
2081
2082 pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash, PaymentSecret) {
2083         let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
2084                 .with_features(channelmanager::provided_invoice_features());
2085         let route = get_route!(origin_node, payment_params, recv_value, TEST_FINAL_CLTV).unwrap();
2086         assert_eq!(route.paths.len(), 1);
2087         assert_eq!(route.paths[0].len(), expected_route.len());
2088         for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
2089                 assert_eq!(hop.pubkey, node.node.get_our_node_id());
2090         }
2091
2092         let res = send_along_route(origin_node, route, expected_route, recv_value);
2093         (res.0, res.1, res.2)
2094 }
2095
2096 pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64)  {
2097         let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id())
2098                 .with_features(channelmanager::provided_invoice_features());
2099         let network_graph = origin_node.network_graph.read_only();
2100         let scorer = test_utils::TestScorer::with_penalty(0);
2101         let seed = [0u8; 32];
2102         let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
2103         let random_seed_bytes = keys_manager.get_secure_random_bytes();
2104         let route = get_route(
2105                 &origin_node.node.get_our_node_id(), &payment_params, &network_graph,
2106                 None, recv_value, TEST_FINAL_CLTV, origin_node.logger, &scorer, &random_seed_bytes).unwrap();
2107         assert_eq!(route.paths.len(), 1);
2108         assert_eq!(route.paths[0].len(), expected_route.len());
2109         for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
2110                 assert_eq!(hop.pubkey, node.node.get_our_node_id());
2111         }
2112
2113         let (_, our_payment_hash, our_payment_preimage) = get_payment_preimage_hash!(expected_route.last().unwrap());
2114         unwrap_send_err!(origin_node.node.send_payment(&route, our_payment_hash, &Some(our_payment_preimage), PaymentId(our_payment_hash.0)), true, APIError::ChannelUnavailable { ref err },
2115                 assert!(err.contains("Cannot send value that would put us over the max HTLC value in flight our peer will accept")));
2116 }
2117
2118 pub fn send_payment<'a, 'b, 'c>(origin: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64)  {
2119         let our_payment_preimage = route_payment(&origin, expected_route, recv_value).0;
2120         claim_payment(&origin, expected_route, our_payment_preimage);
2121 }
2122
2123 pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_paths: &[&[&Node<'a, 'b, 'c>]], skip_last: bool, our_payment_hash: PaymentHash) {
2124         for path in expected_paths.iter() {
2125                 assert_eq!(path.last().unwrap().node.get_our_node_id(), expected_paths[0].last().unwrap().node.get_our_node_id());
2126         }
2127         expected_paths[0].last().unwrap().node.fail_htlc_backwards(&our_payment_hash);
2128         let expected_destinations: Vec<HTLCDestination> = repeat(HTLCDestination::FailedPayment { payment_hash: our_payment_hash }).take(expected_paths.len()).collect();
2129         expect_pending_htlcs_forwardable_and_htlc_handling_failed!(expected_paths[0].last().unwrap(), expected_destinations);
2130
2131         pass_failed_payment_back(origin_node, expected_paths, skip_last, our_payment_hash);
2132 }
2133
2134 pub fn pass_failed_payment_back<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_paths_slice: &[&[&Node<'a, 'b, 'c>]], skip_last: bool, our_payment_hash: PaymentHash) {
2135         let expected_payment_id = pass_failed_payment_back_no_abandon(origin_node, expected_paths_slice, skip_last, our_payment_hash);
2136         if !skip_last {
2137                 origin_node.node.abandon_payment(expected_payment_id.unwrap());
2138                 let events = origin_node.node.get_and_clear_pending_events();
2139                 assert_eq!(events.len(), 1);
2140                 match events[0] {
2141                         Event::PaymentFailed { ref payment_hash, ref payment_id } => {
2142                                 assert_eq!(*payment_hash, our_payment_hash, "unexpected second payment_hash");
2143                                 assert_eq!(*payment_id, expected_payment_id.unwrap());
2144                         }
2145                         _ => panic!("Unexpected second event"),
2146                 }
2147         }
2148 }
2149
2150 pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_paths_slice: &[&[&Node<'a, 'b, 'c>]], skip_last: bool, our_payment_hash: PaymentHash) -> Option<PaymentId> {
2151         let mut expected_paths: Vec<_> = expected_paths_slice.iter().collect();
2152         check_added_monitors!(expected_paths[0].last().unwrap(), expected_paths.len());
2153
2154         let mut per_path_msgs: Vec<((msgs::UpdateFailHTLC, msgs::CommitmentSigned), PublicKey)> = Vec::with_capacity(expected_paths.len());
2155         let events = expected_paths[0].last().unwrap().node.get_and_clear_pending_msg_events();
2156         assert_eq!(events.len(), expected_paths.len());
2157         for ev in events.iter() {
2158                 let (update_fail, commitment_signed, node_id) = match ev {
2159                         &MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
2160                                 assert!(update_add_htlcs.is_empty());
2161                                 assert!(update_fulfill_htlcs.is_empty());
2162                                 assert_eq!(update_fail_htlcs.len(), 1);
2163                                 assert!(update_fail_malformed_htlcs.is_empty());
2164                                 assert!(update_fee.is_none());
2165                                 (update_fail_htlcs[0].clone(), commitment_signed.clone(), node_id.clone())
2166                         },
2167                         _ => panic!("Unexpected event"),
2168                 };
2169                 per_path_msgs.push(((update_fail, commitment_signed), node_id));
2170         }
2171         per_path_msgs.sort_unstable_by(|(_, node_id_a), (_, node_id_b)| node_id_a.cmp(node_id_b));
2172         expected_paths.sort_unstable_by(|path_a, path_b| path_a[path_a.len() - 2].node.get_our_node_id().cmp(&path_b[path_b.len() - 2].node.get_our_node_id()));
2173
2174         let mut expected_payment_id = None;
2175
2176         for (i, (expected_route, (path_msgs, next_hop))) in expected_paths.iter().zip(per_path_msgs.drain(..)).enumerate() {
2177                 let mut next_msgs = Some(path_msgs);
2178                 let mut expected_next_node = next_hop;
2179                 let mut prev_node = expected_route.last().unwrap();
2180
2181                 for (idx, node) in expected_route.iter().rev().enumerate().skip(1) {
2182                         assert_eq!(expected_next_node, node.node.get_our_node_id());
2183                         let update_next_node = !skip_last || idx != expected_route.len() - 1;
2184                         if next_msgs.is_some() {
2185                                 node.node.handle_update_fail_htlc(&prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0);
2186                                 commitment_signed_dance!(node, prev_node, next_msgs.as_ref().unwrap().1, update_next_node);
2187                                 if !update_next_node {
2188                                         expect_pending_htlcs_forwardable_and_htlc_handling_failed!(node, vec![HTLCDestination::NextHopChannel { node_id: Some(prev_node.node.get_our_node_id()), channel_id: next_msgs.as_ref().unwrap().0.channel_id }]);
2189                                 }
2190                         }
2191                         let events = node.node.get_and_clear_pending_msg_events();
2192                         if update_next_node {
2193                                 assert_eq!(events.len(), 1);
2194                                 match events[0] {
2195                                         MessageSendEvent::UpdateHTLCs { ref node_id, updates: msgs::CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
2196                                                 assert!(update_add_htlcs.is_empty());
2197                                                 assert!(update_fulfill_htlcs.is_empty());
2198                                                 assert_eq!(update_fail_htlcs.len(), 1);
2199                                                 assert!(update_fail_malformed_htlcs.is_empty());
2200                                                 assert!(update_fee.is_none());
2201                                                 expected_next_node = node_id.clone();
2202                                                 next_msgs = Some((update_fail_htlcs[0].clone(), commitment_signed.clone()));
2203                                         },
2204                                         _ => panic!("Unexpected event"),
2205                                 }
2206                         } else {
2207                                 assert!(events.is_empty());
2208                         }
2209                         if !skip_last && idx == expected_route.len() - 1 {
2210                                 assert_eq!(expected_next_node, origin_node.node.get_our_node_id());
2211                         }
2212
2213                         prev_node = node;
2214                 }
2215
2216                 if !skip_last {
2217                         let prev_node = expected_route.first().unwrap();
2218                         origin_node.node.handle_update_fail_htlc(&prev_node.node.get_our_node_id(), &next_msgs.as_ref().unwrap().0);
2219                         check_added_monitors!(origin_node, 0);
2220                         assert!(origin_node.node.get_and_clear_pending_msg_events().is_empty());
2221                         commitment_signed_dance!(origin_node, prev_node, next_msgs.as_ref().unwrap().1, false);
2222                         let events = origin_node.node.get_and_clear_pending_events();
2223                         assert_eq!(events.len(), 1);
2224                         expected_payment_id = Some(match events[0] {
2225                                 Event::PaymentPathFailed { payment_hash, payment_failed_permanently, all_paths_failed, ref path, ref payment_id, .. } => {
2226                                         assert_eq!(payment_hash, our_payment_hash);
2227                                         assert!(payment_failed_permanently);
2228                                         assert_eq!(all_paths_failed, i == expected_paths.len() - 1);
2229                                         for (idx, hop) in expected_route.iter().enumerate() {
2230                                                 assert_eq!(hop.node.get_our_node_id(), path[idx].pubkey);
2231                                         }
2232                                         payment_id.unwrap()
2233                                 },
2234                                 _ => panic!("Unexpected event"),
2235                         });
2236                 }
2237         }
2238
2239         // Ensure that fail_htlc_backwards is idempotent.
2240         expected_paths[0].last().unwrap().node.fail_htlc_backwards(&our_payment_hash);
2241         assert!(expected_paths[0].last().unwrap().node.get_and_clear_pending_events().is_empty());
2242         assert!(expected_paths[0].last().unwrap().node.get_and_clear_pending_msg_events().is_empty());
2243         check_added_monitors!(expected_paths[0].last().unwrap(), 0);
2244
2245         expected_payment_id
2246 }
2247
2248 pub fn fail_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_path: &[&Node<'a, 'b, 'c>], our_payment_hash: PaymentHash)  {
2249         fail_payment_along_route(origin_node, &[&expected_path[..]], false, our_payment_hash);
2250 }
2251
2252 pub fn create_chanmon_cfgs(node_count: usize) -> Vec<TestChanMonCfg> {
2253         let mut chan_mon_cfgs = Vec::new();
2254         for i in 0..node_count {
2255                 let tx_broadcaster = test_utils::TestBroadcaster {
2256                         txn_broadcasted: Mutex::new(Vec::new()),
2257                         blocks: Arc::new(Mutex::new(vec![(genesis_block(Network::Testnet), 0)])),
2258                 };
2259                 let fee_estimator = test_utils::TestFeeEstimator { sat_per_kw: Mutex::new(253) };
2260                 let chain_source = test_utils::TestChainSource::new(Network::Testnet);
2261                 let logger = test_utils::TestLogger::with_id(format!("node {}", i));
2262                 let persister = test_utils::TestPersister::new();
2263                 let seed = [i as u8; 32];
2264                 let keys_manager = test_utils::TestKeysInterface::new(&seed, Network::Testnet);
2265
2266                 chan_mon_cfgs.push(TestChanMonCfg { tx_broadcaster, fee_estimator, chain_source, logger, persister, keys_manager });
2267         }
2268
2269         chan_mon_cfgs
2270 }
2271
2272 pub fn create_node_cfgs<'a>(node_count: usize, chanmon_cfgs: &'a Vec<TestChanMonCfg>) -> Vec<NodeCfg<'a>> {
2273         let mut nodes = Vec::new();
2274
2275         for i in 0..node_count {
2276                 let chain_monitor = test_utils::TestChainMonitor::new(Some(&chanmon_cfgs[i].chain_source), &chanmon_cfgs[i].tx_broadcaster, &chanmon_cfgs[i].logger, &chanmon_cfgs[i].fee_estimator, &chanmon_cfgs[i].persister, &chanmon_cfgs[i].keys_manager);
2277                 let network_graph = Arc::new(NetworkGraph::new(chanmon_cfgs[i].chain_source.genesis_hash, &chanmon_cfgs[i].logger));
2278                 let seed = [i as u8; 32];
2279                 nodes.push(NodeCfg {
2280                         chain_source: &chanmon_cfgs[i].chain_source,
2281                         logger: &chanmon_cfgs[i].logger,
2282                         tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster,
2283                         fee_estimator: &chanmon_cfgs[i].fee_estimator,
2284                         router: test_utils::TestRouter::new(network_graph.clone()),
2285                         chain_monitor,
2286                         keys_manager: &chanmon_cfgs[i].keys_manager,
2287                         node_seed: seed,
2288                         features: channelmanager::provided_init_features(),
2289                         network_graph,
2290                 });
2291         }
2292
2293         nodes
2294 }
2295
2296 pub fn test_default_channel_config() -> UserConfig {
2297         let mut default_config = UserConfig::default();
2298         // Set cltv_expiry_delta slightly lower to keep the final CLTV values inside one byte in our
2299         // tests so that our script-length checks don't fail (see ACCEPTED_HTLC_SCRIPT_WEIGHT).
2300         default_config.channel_config.cltv_expiry_delta = MIN_CLTV_EXPIRY_DELTA;
2301         default_config.channel_handshake_config.announced_channel = true;
2302         default_config.channel_handshake_limits.force_announced_channel_preference = false;
2303         // When most of our tests were written, the default HTLC minimum was fixed at 1000.
2304         // It now defaults to 1, so we simply set it to the expected value here.
2305         default_config.channel_handshake_config.our_htlc_minimum_msat = 1000;
2306         // When most of our tests were written, we didn't have the notion of a `max_dust_htlc_exposure_msat`,
2307         // It now defaults to 5_000_000 msat; to avoid interfering with tests we bump it to 50_000_000 msat.
2308         default_config.channel_config.max_dust_htlc_exposure_msat = 50_000_000;
2309         default_config
2310 }
2311
2312 pub fn create_node_chanmgrs<'a, 'b>(node_count: usize, cfgs: &'a Vec<NodeCfg<'b>>, node_config: &[Option<UserConfig>]) -> Vec<ChannelManager<&'a TestChainMonitor<'b>, &'b test_utils::TestBroadcaster, &'a test_utils::TestKeysInterface, &'a test_utils::TestKeysInterface, &'a test_utils::TestKeysInterface, &'b test_utils::TestFeeEstimator, &'a test_utils::TestRouter<'b>, &'b test_utils::TestLogger>> {
2313         let mut chanmgrs = Vec::new();
2314         for i in 0..node_count {
2315                 let network = Network::Testnet;
2316                 let params = ChainParameters {
2317                         network,
2318                         best_block: BestBlock::from_genesis(network),
2319                 };
2320                 let node = ChannelManager::new(cfgs[i].fee_estimator, &cfgs[i].chain_monitor, cfgs[i].tx_broadcaster, &cfgs[i].router, cfgs[i].logger, cfgs[i].keys_manager,
2321                         cfgs[i].keys_manager, cfgs[i].keys_manager, if node_config[i].is_some() { node_config[i].clone().unwrap() } else { test_default_channel_config() }, params);
2322                 chanmgrs.push(node);
2323         }
2324
2325         chanmgrs
2326 }
2327
2328 pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeCfg<'c>>, chan_mgrs: &'a Vec<ChannelManager<&'b TestChainMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator, &'c test_utils::TestRouter, &'c test_utils::TestLogger>>) -> Vec<Node<'a, 'b, 'c>> {
2329         let mut nodes = Vec::new();
2330         let chan_count = Rc::new(RefCell::new(0));
2331         let payment_count = Rc::new(RefCell::new(0));
2332         let connect_style = Rc::new(RefCell::new(ConnectStyle::random_style()));
2333
2334         for i in 0..node_count {
2335                 let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph.as_ref(), None, cfgs[i].logger);
2336                 nodes.push(Node{
2337                         chain_source: cfgs[i].chain_source, tx_broadcaster: cfgs[i].tx_broadcaster,
2338                         fee_estimator: cfgs[i].fee_estimator, router: &cfgs[i].router,
2339                         chain_monitor: &cfgs[i].chain_monitor, keys_manager: &cfgs[i].keys_manager,
2340                         node: &chan_mgrs[i], network_graph: cfgs[i].network_graph.as_ref(), gossip_sync,
2341                         node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
2342                         network_payment_count: payment_count.clone(), logger: cfgs[i].logger,
2343                         blocks: Arc::clone(&cfgs[i].tx_broadcaster.blocks),
2344                         connect_style: Rc::clone(&connect_style),
2345                 })
2346         }
2347
2348         for i in 0..node_count {
2349                 for j in (i+1)..node_count {
2350                         nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &msgs::Init { features: cfgs[j].features.clone(), remote_network_address: None }).unwrap();
2351                         nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &msgs::Init { features: cfgs[i].features.clone(), remote_network_address: None }).unwrap();
2352                 }
2353         }
2354
2355         nodes
2356 }
2357
2358 // Note that the following only works for CLTV values up to 128
2359 pub const ACCEPTED_HTLC_SCRIPT_WEIGHT: usize = 137; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
2360
2361 #[derive(PartialEq)]
2362 pub enum HTLCType { NONE, TIMEOUT, SUCCESS }
2363 /// Tests that the given node has broadcast transactions for the given Channel
2364 ///
2365 /// First checks that the latest holder commitment tx has been broadcast, unless an explicit
2366 /// commitment_tx is provided, which may be used to test that a remote commitment tx was
2367 /// broadcast and the revoked outputs were claimed.
2368 ///
2369 /// Next tests that there is (or is not) a transaction that spends the commitment transaction
2370 /// that appears to be the type of HTLC transaction specified in has_htlc_tx.
2371 ///
2372 /// All broadcast transactions must be accounted for in one of the above three types of we'll
2373 /// also fail.
2374 pub fn test_txn_broadcast<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, chan: &(msgs::ChannelUpdate, msgs::ChannelUpdate, [u8; 32], Transaction), commitment_tx: Option<Transaction>, has_htlc_tx: HTLCType) -> Vec<Transaction>  {
2375         let mut node_txn = node.tx_broadcaster.txn_broadcasted.lock().unwrap();
2376         assert!(node_txn.len() >= if commitment_tx.is_some() { 0 } else { 1 } + if has_htlc_tx == HTLCType::NONE { 0 } else { 1 });
2377
2378         let mut res = Vec::with_capacity(2);
2379         node_txn.retain(|tx| {
2380                 if tx.input.len() == 1 && tx.input[0].previous_output.txid == chan.3.txid() {
2381                         check_spends!(tx, chan.3);
2382                         if commitment_tx.is_none() {
2383                                 res.push(tx.clone());
2384                         }
2385                         false
2386                 } else { true }
2387         });
2388         if let Some(explicit_tx) = commitment_tx {
2389                 res.push(explicit_tx.clone());
2390         }
2391
2392         assert_eq!(res.len(), 1);
2393
2394         if has_htlc_tx != HTLCType::NONE {
2395                 node_txn.retain(|tx| {
2396                         if tx.input.len() == 1 && tx.input[0].previous_output.txid == res[0].txid() {
2397                                 check_spends!(tx, res[0]);
2398                                 if has_htlc_tx == HTLCType::TIMEOUT {
2399                                         assert!(tx.lock_time.0 != 0);
2400                                 } else {
2401                                         assert!(tx.lock_time.0 == 0);
2402                                 }
2403                                 res.push(tx.clone());
2404                                 false
2405                         } else { true }
2406                 });
2407                 assert!(res.len() == 2 || res.len() == 3);
2408                 if res.len() == 3 {
2409                         assert_eq!(res[1], res[2]);
2410                 }
2411         }
2412
2413         assert!(node_txn.is_empty());
2414         res
2415 }
2416
2417 /// Tests that the given node has broadcast a claim transaction against the provided revoked
2418 /// HTLC transaction.
2419 pub fn test_revoked_htlc_claim_txn_broadcast<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, revoked_tx: Transaction, commitment_revoked_tx: Transaction)  {
2420         let mut node_txn = node.tx_broadcaster.txn_broadcasted.lock().unwrap();
2421         // We may issue multiple claiming transaction on revoked outputs due to block rescan
2422         // for revoked htlc outputs
2423         if node_txn.len() != 1 && node_txn.len() != 2 && node_txn.len() != 3 { assert!(false); }
2424         node_txn.retain(|tx| {
2425                 if tx.input.len() == 1 && tx.input[0].previous_output.txid == revoked_tx.txid() {
2426                         check_spends!(tx, revoked_tx);
2427                         false
2428                 } else { true }
2429         });
2430         node_txn.retain(|tx| {
2431                 check_spends!(tx, commitment_revoked_tx);
2432                 false
2433         });
2434         assert!(node_txn.is_empty());
2435 }
2436
2437 pub fn check_preimage_claim<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, prev_txn: &Vec<Transaction>) -> Vec<Transaction>  {
2438         let mut node_txn = node.tx_broadcaster.txn_broadcasted.lock().unwrap();
2439
2440         assert!(node_txn.len() >= 1);
2441         assert_eq!(node_txn[0].input.len(), 1);
2442         let mut found_prev = false;
2443
2444         for tx in prev_txn {
2445                 if node_txn[0].input[0].previous_output.txid == tx.txid() {
2446                         check_spends!(node_txn[0], tx);
2447                         let mut iter = node_txn[0].input[0].witness.iter();
2448                         iter.next().expect("expected 3 witness items");
2449                         iter.next().expect("expected 3 witness items");
2450                         assert!(iter.next().expect("expected 3 witness items").len() > 106); // must spend an htlc output
2451                         assert_eq!(tx.input.len(), 1); // must spend a commitment tx
2452
2453                         found_prev = true;
2454                         break;
2455                 }
2456         }
2457         assert!(found_prev);
2458
2459         let mut res = Vec::new();
2460         mem::swap(&mut *node_txn, &mut res);
2461         res
2462 }
2463
2464 pub fn handle_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, 'b, 'c>>, a: usize, b: usize, needs_err_handle: bool, expected_error: &str)  {
2465         let events_1 = nodes[a].node.get_and_clear_pending_msg_events();
2466         assert_eq!(events_1.len(), 2);
2467         let as_update = match events_1[0] {
2468                 MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
2469                         msg.clone()
2470                 },
2471                 _ => panic!("Unexpected event"),
2472         };
2473         match events_1[1] {
2474                 MessageSendEvent::HandleError { node_id, action: msgs::ErrorAction::SendErrorMessage { ref msg } } => {
2475                         assert_eq!(node_id, nodes[b].node.get_our_node_id());
2476                         assert_eq!(msg.data, expected_error);
2477                         if needs_err_handle {
2478                                 nodes[b].node.handle_error(&nodes[a].node.get_our_node_id(), msg);
2479                         }
2480                 },
2481                 _ => panic!("Unexpected event"),
2482         }
2483
2484         let events_2 = nodes[b].node.get_and_clear_pending_msg_events();
2485         assert_eq!(events_2.len(), if needs_err_handle { 1 } else { 2 });
2486         let bs_update = match events_2[0] {
2487                 MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
2488                         msg.clone()
2489                 },
2490                 _ => panic!("Unexpected event"),
2491         };
2492         if !needs_err_handle {
2493                 match events_2[1] {
2494                         MessageSendEvent::HandleError { node_id, action: msgs::ErrorAction::SendErrorMessage { ref msg } } => {
2495                                 assert_eq!(node_id, nodes[a].node.get_our_node_id());
2496                                 assert_eq!(msg.data, expected_error);
2497                         },
2498                         _ => panic!("Unexpected event"),
2499                 }
2500         }
2501
2502         for node in nodes {
2503                 node.gossip_sync.handle_channel_update(&as_update).unwrap();
2504                 node.gossip_sync.handle_channel_update(&bs_update).unwrap();
2505         }
2506 }
2507
2508 pub fn get_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, 'b, 'c>>, a: usize, b: usize)  {
2509         handle_announce_close_broadcast_events(nodes, a, b, false, "Channel closed because commitment or closing transaction was confirmed on chain.");
2510 }
2511
2512 #[cfg(test)]
2513 macro_rules! get_channel_value_stat {
2514         ($node: expr, $counterparty_node: expr, $channel_id: expr) => {{
2515                 let peer_state_lock = $node.node.per_peer_state.read().unwrap();
2516                 let chan_lock = peer_state_lock.get(&$counterparty_node.node.get_our_node_id()).unwrap().lock().unwrap();
2517                 let chan = chan_lock.channel_by_id.get(&$channel_id).unwrap();
2518                 chan.get_value_stat()
2519         }}
2520 }
2521
2522 macro_rules! get_chan_reestablish_msgs {
2523         ($src_node: expr, $dst_node: expr) => {
2524                 {
2525                         let mut announcements = $crate::prelude::HashSet::new();
2526                         let mut res = Vec::with_capacity(1);
2527                         for msg in $src_node.node.get_and_clear_pending_msg_events() {
2528                                 if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
2529                                         assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2530                                         res.push(msg.clone());
2531                                 } else if let MessageSendEvent::SendChannelAnnouncement { ref node_id, ref msg, .. } = msg {
2532                                         assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2533                                         announcements.insert(msg.contents.short_channel_id);
2534                                 } else {
2535                                         panic!("Unexpected event")
2536                                 }
2537                         }
2538                         for chan in $src_node.node.list_channels() {
2539                                 if chan.is_public && chan.counterparty.node_id != $dst_node.node.get_our_node_id() {
2540                                         if let Some(scid) = chan.short_channel_id {
2541                                                 assert!(announcements.remove(&scid));
2542                                         }
2543                                 }
2544                         }
2545                         assert!(announcements.is_empty());
2546                         res
2547                 }
2548         }
2549 }
2550
2551 macro_rules! handle_chan_reestablish_msgs {
2552         ($src_node: expr, $dst_node: expr) => {
2553                 {
2554                         let msg_events = $src_node.node.get_and_clear_pending_msg_events();
2555                         let mut idx = 0;
2556                         let channel_ready = if let Some(&MessageSendEvent::SendChannelReady { ref node_id, ref msg }) = msg_events.get(0) {
2557                                 idx += 1;
2558                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2559                                 Some(msg.clone())
2560                         } else {
2561                                 None
2562                         };
2563
2564                         if let Some(&MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ }) = msg_events.get(idx) {
2565                                 idx += 1;
2566                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2567                         }
2568
2569                         let mut had_channel_update = false; // ChannelUpdate may be now or later, but not both
2570                         if let Some(&MessageSendEvent::SendChannelUpdate { ref node_id, ref msg }) = msg_events.get(idx) {
2571                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2572                                 idx += 1;
2573                                 assert_eq!(msg.contents.flags & 2, 0); // "disabled" flag must not be set as we just reconnected.
2574                                 had_channel_update = true;
2575                         }
2576
2577                         let mut revoke_and_ack = None;
2578                         let mut commitment_update = None;
2579                         let order = if let Some(ev) = msg_events.get(idx) {
2580                                 match ev {
2581                                         &MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
2582                                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2583                                                 revoke_and_ack = Some(msg.clone());
2584                                                 idx += 1;
2585                                                 RAACommitmentOrder::RevokeAndACKFirst
2586                                         },
2587                                         &MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
2588                                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2589                                                 commitment_update = Some(updates.clone());
2590                                                 idx += 1;
2591                                                 RAACommitmentOrder::CommitmentFirst
2592                                         },
2593                                         _ => RAACommitmentOrder::CommitmentFirst,
2594                                 }
2595                         } else {
2596                                 RAACommitmentOrder::CommitmentFirst
2597                         };
2598
2599                         if let Some(ev) = msg_events.get(idx) {
2600                                 match ev {
2601                                         &MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
2602                                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2603                                                 assert!(revoke_and_ack.is_none());
2604                                                 revoke_and_ack = Some(msg.clone());
2605                                                 idx += 1;
2606                                         },
2607                                         &MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
2608                                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2609                                                 assert!(commitment_update.is_none());
2610                                                 commitment_update = Some(updates.clone());
2611                                                 idx += 1;
2612                                         },
2613                                         _ => {},
2614                                 }
2615                         }
2616
2617                         if let Some(&MessageSendEvent::SendChannelUpdate { ref node_id, ref msg }) = msg_events.get(idx) {
2618                                 assert_eq!(*node_id, $dst_node.node.get_our_node_id());
2619                                 idx += 1;
2620                                 assert_eq!(msg.contents.flags & 2, 0); // "disabled" flag must not be set as we just reconnected.
2621                                 assert!(!had_channel_update);
2622                         }
2623
2624                         assert_eq!(msg_events.len(), idx);
2625
2626                         (channel_ready, revoke_and_ack, commitment_update, order)
2627                 }
2628         }
2629 }
2630
2631 /// pending_htlc_adds includes both the holding cell and in-flight update_add_htlcs, whereas
2632 /// for claims/fails they are separated out.
2633 pub fn reconnect_nodes<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &Node<'a, 'b, 'c>, send_channel_ready: (bool, bool), pending_htlc_adds: (i64, i64), pending_htlc_claims: (usize, usize), pending_htlc_fails: (usize, usize), pending_cell_htlc_claims: (usize, usize), pending_cell_htlc_fails: (usize, usize), pending_raa: (bool, bool))  {
2634         node_a.node.peer_connected(&node_b.node.get_our_node_id(), &msgs::Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
2635         let reestablish_1 = get_chan_reestablish_msgs!(node_a, node_b);
2636         node_b.node.peer_connected(&node_a.node.get_our_node_id(), &msgs::Init { features: channelmanager::provided_init_features(), remote_network_address: None }).unwrap();
2637         let reestablish_2 = get_chan_reestablish_msgs!(node_b, node_a);
2638
2639         if send_channel_ready.0 {
2640                 // If a expects a channel_ready, it better not think it has received a revoke_and_ack
2641                 // from b
2642                 for reestablish in reestablish_1.iter() {
2643                         assert_eq!(reestablish.next_remote_commitment_number, 0);
2644                 }
2645         }
2646         if send_channel_ready.1 {
2647                 // If b expects a channel_ready, it better not think it has received a revoke_and_ack
2648                 // from a
2649                 for reestablish in reestablish_2.iter() {
2650                         assert_eq!(reestablish.next_remote_commitment_number, 0);
2651                 }
2652         }
2653         if send_channel_ready.0 || send_channel_ready.1 {
2654                 // If we expect any channel_ready's, both sides better have set
2655                 // next_holder_commitment_number to 1
2656                 for reestablish in reestablish_1.iter() {
2657                         assert_eq!(reestablish.next_local_commitment_number, 1);
2658                 }
2659                 for reestablish in reestablish_2.iter() {
2660                         assert_eq!(reestablish.next_local_commitment_number, 1);
2661                 }
2662         }
2663
2664         let mut resp_1 = Vec::new();
2665         for msg in reestablish_1 {
2666                 node_b.node.handle_channel_reestablish(&node_a.node.get_our_node_id(), &msg);
2667                 resp_1.push(handle_chan_reestablish_msgs!(node_b, node_a));
2668         }
2669         if pending_cell_htlc_claims.0 != 0 || pending_cell_htlc_fails.0 != 0 {
2670                 check_added_monitors!(node_b, 1);
2671         } else {
2672                 check_added_monitors!(node_b, 0);
2673         }
2674
2675         let mut resp_2 = Vec::new();
2676         for msg in reestablish_2 {
2677                 node_a.node.handle_channel_reestablish(&node_b.node.get_our_node_id(), &msg);
2678                 resp_2.push(handle_chan_reestablish_msgs!(node_a, node_b));
2679         }
2680         if pending_cell_htlc_claims.1 != 0 || pending_cell_htlc_fails.1 != 0 {
2681                 check_added_monitors!(node_a, 1);
2682         } else {
2683                 check_added_monitors!(node_a, 0);
2684         }
2685
2686         // We don't yet support both needing updates, as that would require a different commitment dance:
2687         assert!((pending_htlc_adds.0 == 0 && pending_htlc_claims.0 == 0 && pending_htlc_fails.0 == 0 &&
2688                          pending_cell_htlc_claims.0 == 0 && pending_cell_htlc_fails.0 == 0) ||
2689                         (pending_htlc_adds.1 == 0 && pending_htlc_claims.1 == 0 && pending_htlc_fails.1 == 0 &&
2690                          pending_cell_htlc_claims.1 == 0 && pending_cell_htlc_fails.1 == 0));
2691
2692         for chan_msgs in resp_1.drain(..) {
2693                 if send_channel_ready.0 {
2694                         node_a.node.handle_channel_ready(&node_b.node.get_our_node_id(), &chan_msgs.0.unwrap());
2695                         let announcement_event = node_a.node.get_and_clear_pending_msg_events();
2696                         if !announcement_event.is_empty() {
2697                                 assert_eq!(announcement_event.len(), 1);
2698                                 if let MessageSendEvent::SendChannelUpdate { .. } = announcement_event[0] {
2699                                         //TODO: Test announcement_sigs re-sending
2700                                 } else { panic!("Unexpected event! {:?}", announcement_event[0]); }
2701                         }
2702                 } else {
2703                         assert!(chan_msgs.0.is_none());
2704                 }
2705                 if pending_raa.0 {
2706                         assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
2707                         node_a.node.handle_revoke_and_ack(&node_b.node.get_our_node_id(), &chan_msgs.1.unwrap());
2708                         assert!(node_a.node.get_and_clear_pending_msg_events().is_empty());
2709                         check_added_monitors!(node_a, 1);
2710                 } else {
2711                         assert!(chan_msgs.1.is_none());
2712                 }
2713                 if pending_htlc_adds.0 != 0 || pending_htlc_claims.0 != 0 || pending_htlc_fails.0 != 0 || pending_cell_htlc_claims.0 != 0 || pending_cell_htlc_fails.0 != 0 {
2714                         let commitment_update = chan_msgs.2.unwrap();
2715                         if pending_htlc_adds.0 != -1 { // We use -1 to denote a response commitment_signed
2716                                 assert_eq!(commitment_update.update_add_htlcs.len(), pending_htlc_adds.0 as usize);
2717                         } else {
2718                                 assert!(commitment_update.update_add_htlcs.is_empty());
2719                         }
2720                         assert_eq!(commitment_update.update_fulfill_htlcs.len(), pending_htlc_claims.0 + pending_cell_htlc_claims.0);
2721                         assert_eq!(commitment_update.update_fail_htlcs.len(), pending_htlc_fails.0 + pending_cell_htlc_fails.0);
2722                         assert!(commitment_update.update_fail_malformed_htlcs.is_empty());
2723                         for update_add in commitment_update.update_add_htlcs {
2724                                 node_a.node.handle_update_add_htlc(&node_b.node.get_our_node_id(), &update_add);
2725                         }
2726                         for update_fulfill in commitment_update.update_fulfill_htlcs {
2727                                 node_a.node.handle_update_fulfill_htlc(&node_b.node.get_our_node_id(), &update_fulfill);
2728                         }
2729                         for update_fail in commitment_update.update_fail_htlcs {
2730                                 node_a.node.handle_update_fail_htlc(&node_b.node.get_our_node_id(), &update_fail);
2731                         }
2732
2733                         if pending_htlc_adds.0 != -1 { // We use -1 to denote a response commitment_signed
2734                                 commitment_signed_dance!(node_a, node_b, commitment_update.commitment_signed, false);
2735                         } else {
2736                                 node_a.node.handle_commitment_signed(&node_b.node.get_our_node_id(), &commitment_update.commitment_signed);
2737                                 check_added_monitors!(node_a, 1);
2738                                 let as_revoke_and_ack = get_event_msg!(node_a, MessageSendEvent::SendRevokeAndACK, node_b.node.get_our_node_id());
2739                                 // No commitment_signed so get_event_msg's assert(len == 1) passes
2740                                 node_b.node.handle_revoke_and_ack(&node_a.node.get_our_node_id(), &as_revoke_and_ack);
2741                                 assert!(node_b.node.get_and_clear_pending_msg_events().is_empty());
2742                                 check_added_monitors!(node_b, 1);
2743                         }
2744                 } else {
2745                         assert!(chan_msgs.2.is_none());
2746                 }
2747         }
2748
2749         for chan_msgs in resp_2.drain(..) {
2750                 if send_channel_ready.1 {
2751                         node_b.node.handle_channel_ready(&node_a.node.get_our_node_id(), &chan_msgs.0.unwrap());
2752                         let announcement_event = node_b.node.get_and_clear_pending_msg_events();
2753                         if !announcement_event.is_empty() {
2754                                 assert_eq!(announcement_event.len(), 1);
2755                                 match announcement_event[0] {
2756                                         MessageSendEvent::SendChannelUpdate { .. } => {},
2757                                         MessageSendEvent::SendAnnouncementSignatures { .. } => {},
2758                                         _ => panic!("Unexpected event {:?}!", announcement_event[0]),
2759                                 }
2760                         }
2761                 } else {
2762                         assert!(chan_msgs.0.is_none());
2763                 }
2764                 if pending_raa.1 {
2765                         assert!(chan_msgs.3 == RAACommitmentOrder::RevokeAndACKFirst);
2766                         node_b.node.handle_revoke_and_ack(&node_a.node.get_our_node_id(), &chan_msgs.1.unwrap());
2767                         assert!(node_b.node.get_and_clear_pending_msg_events().is_empty());
2768                         check_added_monitors!(node_b, 1);
2769                 } else {
2770                         assert!(chan_msgs.1.is_none());
2771                 }
2772                 if pending_htlc_adds.1 != 0 || pending_htlc_claims.1 != 0 || pending_htlc_fails.1 != 0 || pending_cell_htlc_claims.1 != 0 || pending_cell_htlc_fails.1 != 0 {
2773                         let commitment_update = chan_msgs.2.unwrap();
2774                         if pending_htlc_adds.1 != -1 { // We use -1 to denote a response commitment_signed
2775                                 assert_eq!(commitment_update.update_add_htlcs.len(), pending_htlc_adds.1 as usize);
2776                         }
2777                         assert_eq!(commitment_update.update_fulfill_htlcs.len(), pending_htlc_claims.1 + pending_cell_htlc_claims.1);
2778                         assert_eq!(commitment_update.update_fail_htlcs.len(), pending_htlc_fails.1 + pending_cell_htlc_fails.1);
2779                         assert!(commitment_update.update_fail_malformed_htlcs.is_empty());
2780                         for update_add in commitment_update.update_add_htlcs {
2781                                 node_b.node.handle_update_add_htlc(&node_a.node.get_our_node_id(), &update_add);
2782                         }
2783                         for update_fulfill in commitment_update.update_fulfill_htlcs {
2784                                 node_b.node.handle_update_fulfill_htlc(&node_a.node.get_our_node_id(), &update_fulfill);
2785                         }
2786                         for update_fail in commitment_update.update_fail_htlcs {
2787                                 node_b.node.handle_update_fail_htlc(&node_a.node.get_our_node_id(), &update_fail);
2788                         }
2789
2790                         if pending_htlc_adds.1 != -1 { // We use -1 to denote a response commitment_signed
2791                                 commitment_signed_dance!(node_b, node_a, commitment_update.commitment_signed, false);
2792                         } else {
2793                                 node_b.node.handle_commitment_signed(&node_a.node.get_our_node_id(), &commitment_update.commitment_signed);
2794                                 check_added_monitors!(node_b, 1);
2795                                 let bs_revoke_and_ack = get_event_msg!(node_b, MessageSendEvent::SendRevokeAndACK, node_a.node.get_our_node_id());
2796                                 // No commitment_signed so get_event_msg's assert(len == 1) passes
2797                                 node_a.node.handle_revoke_and_ack(&node_b.node.get_our_node_id(), &bs_revoke_and_ack);
2798                                 assert!(node_a.node.get_and_clear_pending_msg_events().is_empty());
2799                                 check_added_monitors!(node_a, 1);
2800                         }
2801                 } else {
2802                         assert!(chan_msgs.2.is_none());
2803                 }
2804         }
2805 }