d764bc782152e5170f434060226d412c4156c916
[rust-lightning] / lightning / src / ln / chanmon_update_fail_tests.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 //! Functional tests which test the correct handling of ChannelMonitorUpdateErr returns from
11 //! monitor updates.
12 //! There are a bunch of these as their handling is relatively error-prone so they are split out
13 //! here. See also the chanmon_fail_consistency fuzz test.
14
15 use bitcoin::blockdata::block::BlockHeader;
16 use bitcoin::hash_types::BlockHash;
17 use bitcoin::network::constants::Network;
18 use chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr};
19 use chain::transaction::OutPoint;
20 use chain::Watch;
21 use ln::channelmanager::{RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure};
22 use ln::features::InitFeatures;
23 use ln::msgs;
24 use ln::msgs::{ChannelMessageHandler, ErrorAction, RoutingMessageHandler};
25 use routing::router::get_route;
26 use util::enforcing_trait_impls::EnforcingSigner;
27 use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
28 use util::errors::APIError;
29 use util::ser::{ReadableArgs, Writeable};
30
31 use bitcoin::hashes::sha256::Hash as Sha256;
32 use bitcoin::hashes::Hash;
33
34 use ln::functional_test_utils::*;
35
36 use util::test_utils;
37
38 // If persister_fail is true, we have the persister return a PermanentFailure
39 // instead of the higher-level ChainMonitor.
40 fn do_test_simple_monitor_permanent_update_fail(persister_fail: bool) {
41         // Test that we handle a simple permanent monitor update failure
42         let mut chanmon_cfgs = create_chanmon_cfgs(2);
43         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
44         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
45         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
46         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
47         let logger = test_utils::TestLogger::new();
48
49         let (_, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
50
51         match persister_fail {
52                 true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::PermanentFailure)),
53                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::PermanentFailure))
54         }
55         let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
56         let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
57         unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &None), true, APIError::ChannelUnavailable {..}, {});
58         check_added_monitors!(nodes[0], 2);
59
60         let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
61         assert_eq!(events_1.len(), 2);
62         match events_1[0] {
63                 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
64                 _ => panic!("Unexpected event"),
65         };
66         match events_1[1] {
67                 MessageSendEvent::HandleError { node_id, .. } => assert_eq!(node_id, nodes[1].node.get_our_node_id()),
68                 _ => panic!("Unexpected event"),
69         };
70
71         // TODO: Once we hit the chain with the failure transaction we should check that we get a
72         // PaymentFailed event
73
74         assert_eq!(nodes[0].node.list_channels().len(), 0);
75 }
76
77 #[test]
78 fn test_monitor_and_persister_update_fail() {
79         // Test that if both updating the `ChannelMonitor` and persisting the updated
80         // `ChannelMonitor` fail, then the failure from updating the `ChannelMonitor`
81         // one that gets returned.
82         let chanmon_cfgs = create_chanmon_cfgs(2);
83         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
84         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
85         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
86
87         // Create some initial channel
88         let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
89         let outpoint = OutPoint { txid: chan.3.txid(), index: 0 };
90
91         // Rebalance the network to generate htlc in the two directions
92         send_payment(&nodes[0], &vec!(&nodes[1])[..], 10_000_000, 10_000_000);
93
94         // Route an HTLC from node 0 to node 1 (but don't settle)
95         let preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 9_000_000).0;
96
97         // Make a copy of the ChainMonitor so we can capture the error it returns on a
98         // bogus update. Note that if instead we updated the nodes[0]'s ChainMonitor
99         // directly, the node would fail to be `Drop`'d at the end because its
100         // ChannelManager and ChainMonitor would be out of sync.
101         let chain_source = test_utils::TestChainSource::new(Network::Testnet);
102         let logger = test_utils::TestLogger::with_id(format!("node {}", 0));
103         let persister = test_utils::TestPersister::new();
104         let chain_mon = {
105                 let monitors = nodes[0].chain_monitor.chain_monitor.monitors.read().unwrap();
106                 let monitor = monitors.get(&outpoint).unwrap();
107                 let mut w = test_utils::TestVecWriter(Vec::new());
108                 monitor.write(&mut w).unwrap();
109                 let new_monitor = <(BlockHash, ChannelMonitor<EnforcingSigner>)>::read(
110                         &mut ::std::io::Cursor::new(&w.0), &test_utils::OnlyReadsKeysInterface {}).unwrap().1;
111                 assert!(new_monitor == *monitor);
112                 let chain_mon = test_utils::TestChainMonitor::new(Some(&chain_source), &chanmon_cfgs[0].tx_broadcaster, &logger, &chanmon_cfgs[0].fee_estimator, &persister, &node_cfgs[0].keys_manager);
113                 assert!(chain_mon.watch_channel(outpoint, new_monitor).is_ok());
114                 chain_mon
115         };
116         let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
117         chain_mon.chain_monitor.block_connected(&header, &[], 200);
118
119         // Set the persister's return value to be a TemporaryFailure.
120         persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure));
121
122         // Try to update ChannelMonitor
123         assert!(nodes[1].node.claim_funds(preimage, &None, 9_000_000));
124         check_added_monitors!(nodes[1], 1);
125         let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
126         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
127         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
128         if let Some(ref mut channel) = nodes[0].node.channel_state.lock().unwrap().by_id.get_mut(&chan.2) {
129                 if let Ok((_, _, _, update)) = channel.commitment_signed(&updates.commitment_signed, &node_cfgs[0].fee_estimator, &node_cfgs[0].logger) {
130                         // Check that even though the persister is returning a TemporaryFailure,
131                         // because the update is bogus, ultimately the error that's returned
132                         // should be a PermanentFailure.
133                         if let Err(ChannelMonitorUpdateErr::PermanentFailure) = chain_mon.chain_monitor.update_channel(outpoint, update.clone()) {} else { panic!("Expected monitor error to be permanent"); }
134                         logger.assert_log_contains("lightning::chain::chainmonitor".to_string(), "Failed to persist channel monitor update: TemporaryFailure".to_string(), 1);
135                         if let Ok(_) = nodes[0].chain_monitor.update_channel(outpoint, update) {} else { assert!(false); }
136                 } else { assert!(false); }
137         } else { assert!(false); };
138
139         check_added_monitors!(nodes[0], 1);
140         let events = nodes[0].node.get_and_clear_pending_events();
141         assert_eq!(events.len(), 1);
142 }
143
144 #[test]
145 fn test_simple_monitor_permanent_update_fail() {
146         do_test_simple_monitor_permanent_update_fail(false);
147
148         // Test behavior when the persister returns a PermanentFailure.
149         do_test_simple_monitor_permanent_update_fail(true);
150 }
151
152 // If persister_fail is true, we have the persister return a TemporaryFailure instead of the
153 // higher-level ChainMonitor.
154 fn do_test_simple_monitor_temporary_update_fail(disconnect: bool, persister_fail: bool) {
155         // Test that we can recover from a simple temporary monitor update failure optionally with
156         // a disconnect in between
157         let mut chanmon_cfgs = create_chanmon_cfgs(2);
158         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
159         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
160         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
161         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
162         let logger = test_utils::TestLogger::new();
163
164         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
165
166         match persister_fail {
167                 true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure)),
168                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure))
169         }
170
171         {
172                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
173                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
174                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_1, &None), false, APIError::MonitorUpdateFailed, {});
175                 check_added_monitors!(nodes[0], 1);
176         }
177
178         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
179         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
180         assert_eq!(nodes[0].node.list_channels().len(), 1);
181
182         if disconnect {
183                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
184                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
185                 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
186         }
187
188         match persister_fail {
189                 true => chanmon_cfgs[0].persister.set_update_ret(Ok(())),
190                 false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()))
191         }
192         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
193         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
194         check_added_monitors!(nodes[0], 0);
195
196         let mut events_2 = nodes[0].node.get_and_clear_pending_msg_events();
197         assert_eq!(events_2.len(), 1);
198         let payment_event = SendEvent::from_event(events_2.pop().unwrap());
199         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
200         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
201         commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
202
203         expect_pending_htlcs_forwardable!(nodes[1]);
204
205         let events_3 = nodes[1].node.get_and_clear_pending_events();
206         assert_eq!(events_3.len(), 1);
207         match events_3[0] {
208                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
209                         assert_eq!(payment_hash_1, *payment_hash);
210                         assert_eq!(*payment_secret, None);
211                         assert_eq!(amt, 1000000);
212                 },
213                 _ => panic!("Unexpected event"),
214         }
215
216         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
217
218         // Now set it to failed again...
219         let (_, payment_hash_2) = get_payment_preimage_hash!(&nodes[0]);
220         {
221                 match persister_fail {
222                         true => chanmon_cfgs[0].persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure)),
223                         false => *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure))
224                 }
225                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
226                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
227                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &None), false, APIError::MonitorUpdateFailed, {});
228                 check_added_monitors!(nodes[0], 1);
229         }
230
231         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
232         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
233         assert_eq!(nodes[0].node.list_channels().len(), 1);
234
235         if disconnect {
236                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
237                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
238                 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
239         }
240
241         // ...and make sure we can force-close a frozen channel
242         nodes[0].node.force_close_channel(&channel_id).unwrap();
243         check_added_monitors!(nodes[0], 1);
244         check_closed_broadcast!(nodes[0], false);
245
246         // TODO: Once we hit the chain with the failure transaction we should check that we get a
247         // PaymentFailed event
248
249         assert_eq!(nodes[0].node.list_channels().len(), 0);
250 }
251
252 #[test]
253 fn test_simple_monitor_temporary_update_fail() {
254         do_test_simple_monitor_temporary_update_fail(false, false);
255         do_test_simple_monitor_temporary_update_fail(true, false);
256
257         // Test behavior when the persister returns a TemporaryFailure.
258         do_test_simple_monitor_temporary_update_fail(false, true);
259         do_test_simple_monitor_temporary_update_fail(true, true);
260 }
261
262 fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
263         let disconnect_flags = 8 | 16;
264
265         // Test that we can recover from a temporary monitor update failure with some in-flight
266         // HTLCs going on at the same time potentially with some disconnection thrown in.
267         // * First we route a payment, then get a temporary monitor update failure when trying to
268         //   route a second payment. We then claim the first payment.
269         // * If disconnect_count is set, we will disconnect at this point (which is likely as
270         //   TemporaryFailure likely indicates net disconnect which resulted in failing to update
271         //   the ChannelMonitor on a watchtower).
272         // * If !(disconnect_count & 16) we deliver a update_fulfill_htlc/CS for the first payment
273         //   immediately, otherwise we wait disconnect and deliver them via the reconnect
274         //   channel_reestablish processing (ie disconnect_count & 16 makes no sense if
275         //   disconnect_count & !disconnect_flags is 0).
276         // * We then update the channel monitor, reconnecting if disconnect_count is set and walk
277         //   through message sending, potentially disconnect/reconnecting multiple times based on
278         //   disconnect_count, to get the update_fulfill_htlc through.
279         // * We then walk through more message exchanges to get the original update_add_htlc
280         //   through, swapping message ordering based on disconnect_count & 8 and optionally
281         //   disconnect/reconnecting based on disconnect_count.
282         let chanmon_cfgs = create_chanmon_cfgs(2);
283         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
284         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
285         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
286         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
287         let logger = test_utils::TestLogger::new();
288
289         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
290
291         // Now try to send a second payment which will fail to send
292         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
293         {
294                 *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
295                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
296                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
297                 unwrap_send_err!(nodes[0].node.send_payment(&route, payment_hash_2, &None), false, APIError::MonitorUpdateFailed, {});
298                 check_added_monitors!(nodes[0], 1);
299         }
300
301         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
302         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
303         assert_eq!(nodes[0].node.list_channels().len(), 1);
304
305         // Claim the previous payment, which will result in a update_fulfill_htlc/CS from nodes[1]
306         // but nodes[0] won't respond since it is frozen.
307         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
308         check_added_monitors!(nodes[1], 1);
309         let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
310         assert_eq!(events_2.len(), 1);
311         let (bs_initial_fulfill, bs_initial_commitment_signed) = match events_2[0] {
312                 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 } } => {
313                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
314                         assert!(update_add_htlcs.is_empty());
315                         assert_eq!(update_fulfill_htlcs.len(), 1);
316                         assert!(update_fail_htlcs.is_empty());
317                         assert!(update_fail_malformed_htlcs.is_empty());
318                         assert!(update_fee.is_none());
319
320                         if (disconnect_count & 16) == 0 {
321                                 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]);
322                                 let events_3 = nodes[0].node.get_and_clear_pending_events();
323                                 assert_eq!(events_3.len(), 1);
324                                 match events_3[0] {
325                                         Event::PaymentSent { ref payment_preimage } => {
326                                                 assert_eq!(*payment_preimage, payment_preimage_1);
327                                         },
328                                         _ => panic!("Unexpected event"),
329                                 }
330
331                                 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed);
332                                 check_added_monitors!(nodes[0], 1);
333                                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
334                                 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
335                         }
336
337                         (update_fulfill_htlcs[0].clone(), commitment_signed.clone())
338                 },
339                 _ => panic!("Unexpected event"),
340         };
341
342         if disconnect_count & !disconnect_flags > 0 {
343                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
344                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
345         }
346
347         // Now fix monitor updating...
348         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
349         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
350         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
351         check_added_monitors!(nodes[0], 0);
352
353         macro_rules! disconnect_reconnect_peers { () => { {
354                 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
355                 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
356
357                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
358                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
359                 assert_eq!(reestablish_1.len(), 1);
360                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
361                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
362                 assert_eq!(reestablish_2.len(), 1);
363
364                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
365                 let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
366                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
367                 let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
368
369                 assert!(as_resp.0.is_none());
370                 assert!(bs_resp.0.is_none());
371
372                 (reestablish_1, reestablish_2, as_resp, bs_resp)
373         } } }
374
375         let (payment_event, initial_revoke_and_ack) = if disconnect_count & !disconnect_flags > 0 {
376                 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
377                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
378
379                 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
380                 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
381                 assert_eq!(reestablish_1.len(), 1);
382                 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
383                 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
384                 assert_eq!(reestablish_2.len(), 1);
385
386                 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
387                 check_added_monitors!(nodes[0], 0);
388                 let mut as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
389                 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
390                 check_added_monitors!(nodes[1], 0);
391                 let mut bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
392
393                 assert!(as_resp.0.is_none());
394                 assert!(bs_resp.0.is_none());
395
396                 assert!(bs_resp.1.is_none());
397                 if (disconnect_count & 16) == 0 {
398                         assert!(bs_resp.2.is_none());
399
400                         assert!(as_resp.1.is_some());
401                         assert!(as_resp.2.is_some());
402                         assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
403                 } else {
404                         assert!(bs_resp.2.as_ref().unwrap().update_add_htlcs.is_empty());
405                         assert!(bs_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
406                         assert!(bs_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
407                         assert!(bs_resp.2.as_ref().unwrap().update_fee.is_none());
408                         assert!(bs_resp.2.as_ref().unwrap().update_fulfill_htlcs == vec![bs_initial_fulfill]);
409                         assert!(bs_resp.2.as_ref().unwrap().commitment_signed == bs_initial_commitment_signed);
410
411                         assert!(as_resp.1.is_none());
412
413                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().update_fulfill_htlcs[0]);
414                         let events_3 = nodes[0].node.get_and_clear_pending_events();
415                         assert_eq!(events_3.len(), 1);
416                         match events_3[0] {
417                                 Event::PaymentSent { ref payment_preimage } => {
418                                         assert_eq!(*payment_preimage, payment_preimage_1);
419                                 },
420                                 _ => panic!("Unexpected event"),
421                         }
422
423                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().commitment_signed);
424                         let as_resp_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
425                         // No commitment_signed so get_event_msg's assert(len == 1) passes
426                         check_added_monitors!(nodes[0], 1);
427
428                         as_resp.1 = Some(as_resp_raa);
429                         bs_resp.2 = None;
430                 }
431
432                 if disconnect_count & !disconnect_flags > 1 {
433                         let (second_reestablish_1, second_reestablish_2, second_as_resp, second_bs_resp) = disconnect_reconnect_peers!();
434
435                         if (disconnect_count & 16) == 0 {
436                                 assert!(reestablish_1 == second_reestablish_1);
437                                 assert!(reestablish_2 == second_reestablish_2);
438                         }
439                         assert!(as_resp == second_as_resp);
440                         assert!(bs_resp == second_bs_resp);
441                 }
442
443                 (SendEvent::from_commitment_update(nodes[1].node.get_our_node_id(), as_resp.2.unwrap()), as_resp.1.unwrap())
444         } else {
445                 let mut events_4 = nodes[0].node.get_and_clear_pending_msg_events();
446                 assert_eq!(events_4.len(), 2);
447                 (SendEvent::from_event(events_4.remove(0)), match events_4[0] {
448                         MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
449                                 assert_eq!(*node_id, nodes[1].node.get_our_node_id());
450                                 msg.clone()
451                         },
452                         _ => panic!("Unexpected event"),
453                 })
454         };
455
456         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
457
458         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
459         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
460         let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
461         // nodes[1] is awaiting an RAA from nodes[0] still so get_event_msg's assert(len == 1) passes
462         check_added_monitors!(nodes[1], 1);
463
464         if disconnect_count & !disconnect_flags > 2 {
465                 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
466
467                 assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
468                 assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
469
470                 assert!(as_resp.2.is_none());
471                 assert!(bs_resp.2.is_none());
472         }
473
474         let as_commitment_update;
475         let bs_second_commitment_update;
476
477         macro_rules! handle_bs_raa { () => {
478                 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
479                 as_commitment_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
480                 assert!(as_commitment_update.update_add_htlcs.is_empty());
481                 assert!(as_commitment_update.update_fulfill_htlcs.is_empty());
482                 assert!(as_commitment_update.update_fail_htlcs.is_empty());
483                 assert!(as_commitment_update.update_fail_malformed_htlcs.is_empty());
484                 assert!(as_commitment_update.update_fee.is_none());
485                 check_added_monitors!(nodes[0], 1);
486         } }
487
488         macro_rules! handle_initial_raa { () => {
489                 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &initial_revoke_and_ack);
490                 bs_second_commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
491                 assert!(bs_second_commitment_update.update_add_htlcs.is_empty());
492                 assert!(bs_second_commitment_update.update_fulfill_htlcs.is_empty());
493                 assert!(bs_second_commitment_update.update_fail_htlcs.is_empty());
494                 assert!(bs_second_commitment_update.update_fail_malformed_htlcs.is_empty());
495                 assert!(bs_second_commitment_update.update_fee.is_none());
496                 check_added_monitors!(nodes[1], 1);
497         } }
498
499         if (disconnect_count & 8) == 0 {
500                 handle_bs_raa!();
501
502                 if disconnect_count & !disconnect_flags > 3 {
503                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
504
505                         assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
506                         assert!(bs_resp.1.is_none());
507
508                         assert!(as_resp.2.unwrap() == as_commitment_update);
509                         assert!(bs_resp.2.is_none());
510
511                         assert!(as_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
512                 }
513
514                 handle_initial_raa!();
515
516                 if disconnect_count & !disconnect_flags > 4 {
517                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
518
519                         assert!(as_resp.1.is_none());
520                         assert!(bs_resp.1.is_none());
521
522                         assert!(as_resp.2.unwrap() == as_commitment_update);
523                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
524                 }
525         } else {
526                 handle_initial_raa!();
527
528                 if disconnect_count & !disconnect_flags > 3 {
529                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
530
531                         assert!(as_resp.1.is_none());
532                         assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
533
534                         assert!(as_resp.2.is_none());
535                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
536
537                         assert!(bs_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
538                 }
539
540                 handle_bs_raa!();
541
542                 if disconnect_count & !disconnect_flags > 4 {
543                         let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
544
545                         assert!(as_resp.1.is_none());
546                         assert!(bs_resp.1.is_none());
547
548                         assert!(as_resp.2.unwrap() == as_commitment_update);
549                         assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
550                 }
551         }
552
553         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_update.commitment_signed);
554         let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
555         // No commitment_signed so get_event_msg's assert(len == 1) passes
556         check_added_monitors!(nodes[0], 1);
557
558         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_update.commitment_signed);
559         let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
560         // No commitment_signed so get_event_msg's assert(len == 1) passes
561         check_added_monitors!(nodes[1], 1);
562
563         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
564         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
565         check_added_monitors!(nodes[1], 1);
566
567         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack);
568         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
569         check_added_monitors!(nodes[0], 1);
570
571         expect_pending_htlcs_forwardable!(nodes[1]);
572
573         let events_5 = nodes[1].node.get_and_clear_pending_events();
574         assert_eq!(events_5.len(), 1);
575         match events_5[0] {
576                 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
577                         assert_eq!(payment_hash_2, *payment_hash);
578                         assert_eq!(*payment_secret, None);
579                         assert_eq!(amt, 1000000);
580                 },
581                 _ => panic!("Unexpected event"),
582         }
583
584         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
585 }
586
587 #[test]
588 fn test_monitor_temporary_update_fail_a() {
589         do_test_monitor_temporary_update_fail(0);
590         do_test_monitor_temporary_update_fail(1);
591         do_test_monitor_temporary_update_fail(2);
592         do_test_monitor_temporary_update_fail(3);
593         do_test_monitor_temporary_update_fail(4);
594         do_test_monitor_temporary_update_fail(5);
595 }
596
597 #[test]
598 fn test_monitor_temporary_update_fail_b() {
599         do_test_monitor_temporary_update_fail(2 | 8);
600         do_test_monitor_temporary_update_fail(3 | 8);
601         do_test_monitor_temporary_update_fail(4 | 8);
602         do_test_monitor_temporary_update_fail(5 | 8);
603 }
604
605 #[test]
606 fn test_monitor_temporary_update_fail_c() {
607         do_test_monitor_temporary_update_fail(1 | 16);
608         do_test_monitor_temporary_update_fail(2 | 16);
609         do_test_monitor_temporary_update_fail(3 | 16);
610         do_test_monitor_temporary_update_fail(2 | 8 | 16);
611         do_test_monitor_temporary_update_fail(3 | 8 | 16);
612 }
613
614 #[test]
615 fn test_monitor_update_fail_cs() {
616         // Tests handling of a monitor update failure when processing an incoming commitment_signed
617         let chanmon_cfgs = create_chanmon_cfgs(2);
618         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
619         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
620         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
621         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
622         let logger = test_utils::TestLogger::new();
623
624         let (payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
625         {
626                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
627                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
628                 nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
629                 check_added_monitors!(nodes[0], 1);
630         }
631
632         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
633         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
634
635         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
636         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event.commitment_msg);
637         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
638         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
639         check_added_monitors!(nodes[1], 1);
640         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
641
642         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
643         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
644         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
645         check_added_monitors!(nodes[1], 0);
646         let responses = nodes[1].node.get_and_clear_pending_msg_events();
647         assert_eq!(responses.len(), 2);
648
649         match responses[0] {
650                 MessageSendEvent::SendRevokeAndACK { ref msg, ref node_id } => {
651                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
652                         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &msg);
653                         check_added_monitors!(nodes[0], 1);
654                 },
655                 _ => panic!("Unexpected event"),
656         }
657         match responses[1] {
658                 MessageSendEvent::UpdateHTLCs { ref updates, ref node_id } => {
659                         assert!(updates.update_add_htlcs.is_empty());
660                         assert!(updates.update_fulfill_htlcs.is_empty());
661                         assert!(updates.update_fail_htlcs.is_empty());
662                         assert!(updates.update_fail_malformed_htlcs.is_empty());
663                         assert!(updates.update_fee.is_none());
664                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
665
666                         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
667                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
668                         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
669                         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
670                         check_added_monitors!(nodes[0], 1);
671                         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
672                 },
673                 _ => panic!("Unexpected event"),
674         }
675
676         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
677         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
678         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
679         check_added_monitors!(nodes[0], 0);
680
681         let final_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
682         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &final_raa);
683         check_added_monitors!(nodes[1], 1);
684
685         expect_pending_htlcs_forwardable!(nodes[1]);
686
687         let events = nodes[1].node.get_and_clear_pending_events();
688         assert_eq!(events.len(), 1);
689         match events[0] {
690                 Event::PaymentReceived { payment_hash, payment_secret, amt } => {
691                         assert_eq!(payment_hash, our_payment_hash);
692                         assert_eq!(payment_secret, None);
693                         assert_eq!(amt, 1000000);
694                 },
695                 _ => panic!("Unexpected event"),
696         };
697
698         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage, 1_000_000);
699 }
700
701 #[test]
702 fn test_monitor_update_fail_no_rebroadcast() {
703         // Tests handling of a monitor update failure when no message rebroadcasting on
704         // channel_monitor_updated() is required. Backported from chanmon_fail_consistency
705         // fuzz tests.
706         let chanmon_cfgs = create_chanmon_cfgs(2);
707         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
708         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
709         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
710         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
711         let logger = test_utils::TestLogger::new();
712
713         let (payment_preimage_1, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
714         {
715                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
716                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
717                 nodes[0].node.send_payment(&route, our_payment_hash, &None).unwrap();
718                 check_added_monitors!(nodes[0], 1);
719         }
720
721         let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
722         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
723         let bs_raa = commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true, false, true);
724
725         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
726         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_raa);
727         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
728         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
729         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
730         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
731         check_added_monitors!(nodes[1], 1);
732
733         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
734         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
735         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
736         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
737         check_added_monitors!(nodes[1], 0);
738         expect_pending_htlcs_forwardable!(nodes[1]);
739
740         let events = nodes[1].node.get_and_clear_pending_events();
741         assert_eq!(events.len(), 1);
742         match events[0] {
743                 Event::PaymentReceived { payment_hash, .. } => {
744                         assert_eq!(payment_hash, our_payment_hash);
745                 },
746                 _ => panic!("Unexpected event"),
747         }
748
749         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
750 }
751
752 #[test]
753 fn test_monitor_update_raa_while_paused() {
754         // Tests handling of an RAA while monitor updating has already been marked failed.
755         // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
756         let chanmon_cfgs = create_chanmon_cfgs(2);
757         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
758         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
759         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
760         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
761         let logger = test_utils::TestLogger::new();
762
763         send_payment(&nodes[0], &[&nodes[1]], 5000000, 5_000_000);
764         let (payment_preimage_1, our_payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
765         {
766                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
767                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
768                 nodes[0].node.send_payment(&route, our_payment_hash_1, &None).unwrap();
769                 check_added_monitors!(nodes[0], 1);
770         }
771         let send_event_1 = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
772
773         let (payment_preimage_2, our_payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
774         {
775                 let net_graph_msg_handler = &nodes[1].net_graph_msg_handler;
776                 let route = get_route(&nodes[1].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
777                 nodes[1].node.send_payment(&route, our_payment_hash_2, &None).unwrap();
778                 check_added_monitors!(nodes[1], 1);
779         }
780         let send_event_2 = SendEvent::from_event(nodes[1].node.get_and_clear_pending_msg_events().remove(0));
781
782         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event_1.msgs[0]);
783         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event_1.commitment_msg);
784         check_added_monitors!(nodes[1], 1);
785         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
786
787         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
788         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_2.msgs[0]);
789         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_2.commitment_msg);
790         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
791         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
792         check_added_monitors!(nodes[0], 1);
793
794         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
795         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
796         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
797         check_added_monitors!(nodes[0], 1);
798
799         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
800         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
801         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
802         check_added_monitors!(nodes[0], 0);
803
804         let as_update_raa = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
805         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_update_raa.0);
806         check_added_monitors!(nodes[1], 1);
807         let bs_cs = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
808
809         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update_raa.1);
810         check_added_monitors!(nodes[1], 1);
811         let bs_second_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
812
813         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs.commitment_signed);
814         check_added_monitors!(nodes[0], 1);
815         let as_second_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
816
817         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_raa);
818         check_added_monitors!(nodes[0], 1);
819         expect_pending_htlcs_forwardable!(nodes[0]);
820         expect_payment_received!(nodes[0], our_payment_hash_2, 1000000);
821
822         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_raa);
823         check_added_monitors!(nodes[1], 1);
824         expect_pending_htlcs_forwardable!(nodes[1]);
825         expect_payment_received!(nodes[1], our_payment_hash_1, 1000000);
826
827         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
828         claim_payment(&nodes[1], &[&nodes[0]], payment_preimage_2, 1_000_000);
829 }
830
831 fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
832         // Tests handling of a monitor update failure when processing an incoming RAA
833         let chanmon_cfgs = create_chanmon_cfgs(3);
834         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
835         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
836         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
837         create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
838         let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
839         let logger = test_utils::TestLogger::new();
840
841         // Rebalance a bit so that we can send backwards from 2 to 1.
842         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
843
844         // Route a first payment that we'll fail backwards
845         let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
846
847         // Fail the payment backwards, failing the monitor update on nodes[1]'s receipt of the RAA
848         assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1, &None));
849         expect_pending_htlcs_forwardable!(nodes[2]);
850         check_added_monitors!(nodes[2], 1);
851
852         let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
853         assert!(updates.update_add_htlcs.is_empty());
854         assert!(updates.update_fulfill_htlcs.is_empty());
855         assert_eq!(updates.update_fail_htlcs.len(), 1);
856         assert!(updates.update_fail_malformed_htlcs.is_empty());
857         assert!(updates.update_fee.is_none());
858         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
859
860         let bs_revoke_and_ack = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
861         check_added_monitors!(nodes[0], 0);
862
863         // While the second channel is AwaitingRAA, forward a second payment to get it into the
864         // holding cell.
865         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
866         {
867                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
868                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
869                 nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
870                 check_added_monitors!(nodes[0], 1);
871         }
872
873         let mut send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
874         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
875         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false);
876
877         expect_pending_htlcs_forwardable!(nodes[1]);
878         check_added_monitors!(nodes[1], 0);
879         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
880
881         // Now fail monitor updating.
882         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
883         nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
884         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
885         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
886         assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
887         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
888         check_added_monitors!(nodes[1], 1);
889
890         // Attempt to forward a third payment but fail due to the second channel being unavailable
891         // for forwarding.
892         let (_, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
893         {
894                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
895                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
896                 nodes[0].node.send_payment(&route, payment_hash_3, &None).unwrap();
897                 check_added_monitors!(nodes[0], 1);
898         }
899
900         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(())); // We succeed in updating the monitor for the first channel
901         send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
902         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
903         commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true);
904         check_added_monitors!(nodes[1], 0);
905
906         let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
907         assert_eq!(events_2.len(), 1);
908         match events_2.remove(0) {
909                 MessageSendEvent::UpdateHTLCs { node_id, updates } => {
910                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
911                         assert!(updates.update_fulfill_htlcs.is_empty());
912                         assert_eq!(updates.update_fail_htlcs.len(), 1);
913                         assert!(updates.update_fail_malformed_htlcs.is_empty());
914                         assert!(updates.update_add_htlcs.is_empty());
915                         assert!(updates.update_fee.is_none());
916
917                         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
918                         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true);
919
920                         let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
921                         assert_eq!(msg_events.len(), 1);
922                         match msg_events[0] {
923                                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
924                                         assert_eq!(msg.contents.short_channel_id, chan_2.0.contents.short_channel_id);
925                                         assert_eq!(msg.contents.flags & 2, 2); // temp disabled
926                                 },
927                                 _ => panic!("Unexpected event"),
928                         }
929
930                         let events = nodes[0].node.get_and_clear_pending_events();
931                         assert_eq!(events.len(), 1);
932                         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
933                                 assert_eq!(payment_hash, payment_hash_3);
934                                 assert!(!rejected_by_dest);
935                         } else { panic!("Unexpected event!"); }
936                 },
937                 _ => panic!("Unexpected event type!"),
938         };
939
940         let (payment_preimage_4, payment_hash_4) = if test_ignore_second_cs {
941                 // Try to route another payment backwards from 2 to make sure 1 holds off on responding
942                 let (payment_preimage_4, payment_hash_4) = get_payment_preimage_hash!(nodes[0]);
943                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
944                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
945                 nodes[2].node.send_payment(&route, payment_hash_4, &None).unwrap();
946                 check_added_monitors!(nodes[2], 1);
947
948                 send_event = SendEvent::from_event(nodes[2].node.get_and_clear_pending_msg_events().remove(0));
949                 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &send_event.msgs[0]);
950                 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &send_event.commitment_msg);
951                 check_added_monitors!(nodes[1], 1);
952                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
953                 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
954                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
955                 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
956                 (Some(payment_preimage_4), Some(payment_hash_4))
957         } else { (None, None) };
958
959         // Restore monitor updating, ensuring we immediately get a fail-back update and a
960         // update_add update.
961         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
962         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_2.2).unwrap().clone();
963         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
964         check_added_monitors!(nodes[1], 0);
965         expect_pending_htlcs_forwardable!(nodes[1]);
966         check_added_monitors!(nodes[1], 1);
967
968         let mut events_3 = nodes[1].node.get_and_clear_pending_msg_events();
969         if test_ignore_second_cs {
970                 assert_eq!(events_3.len(), 3);
971         } else {
972                 assert_eq!(events_3.len(), 2);
973         }
974
975         // Note that the ordering of the events for different nodes is non-prescriptive, though the
976         // ordering of the two events that both go to nodes[2] have to stay in the same order.
977         let messages_a = match events_3.pop().unwrap() {
978                 MessageSendEvent::UpdateHTLCs { node_id, mut updates } => {
979                         assert_eq!(node_id, nodes[0].node.get_our_node_id());
980                         assert!(updates.update_fulfill_htlcs.is_empty());
981                         assert_eq!(updates.update_fail_htlcs.len(), 1);
982                         assert!(updates.update_fail_malformed_htlcs.is_empty());
983                         assert!(updates.update_add_htlcs.is_empty());
984                         assert!(updates.update_fee.is_none());
985                         (updates.update_fail_htlcs.remove(0), updates.commitment_signed)
986                 },
987                 _ => panic!("Unexpected event type!"),
988         };
989         let raa = if test_ignore_second_cs {
990                 match events_3.remove(1) {
991                         MessageSendEvent::SendRevokeAndACK { node_id, msg } => {
992                                 assert_eq!(node_id, nodes[2].node.get_our_node_id());
993                                 Some(msg.clone())
994                         },
995                         _ => panic!("Unexpected event"),
996                 }
997         } else { None };
998         let send_event_b = SendEvent::from_event(events_3.remove(0));
999         assert_eq!(send_event_b.node_id, nodes[2].node.get_our_node_id());
1000
1001         // Now deliver the new messages...
1002
1003         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &messages_a.0);
1004         commitment_signed_dance!(nodes[0], nodes[1], messages_a.1, false);
1005         let events_4 = nodes[0].node.get_and_clear_pending_events();
1006         assert_eq!(events_4.len(), 1);
1007         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events_4[0] {
1008                 assert_eq!(payment_hash, payment_hash_1);
1009                 assert!(rejected_by_dest);
1010         } else { panic!("Unexpected event!"); }
1011
1012         nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_b.msgs[0]);
1013         if test_ignore_second_cs {
1014                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_b.commitment_msg);
1015                 check_added_monitors!(nodes[2], 1);
1016                 let bs_revoke_and_ack = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1017                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &raa.unwrap());
1018                 check_added_monitors!(nodes[2], 1);
1019                 let bs_cs = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1020                 assert!(bs_cs.update_add_htlcs.is_empty());
1021                 assert!(bs_cs.update_fail_htlcs.is_empty());
1022                 assert!(bs_cs.update_fail_malformed_htlcs.is_empty());
1023                 assert!(bs_cs.update_fulfill_htlcs.is_empty());
1024                 assert!(bs_cs.update_fee.is_none());
1025
1026                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
1027                 check_added_monitors!(nodes[1], 1);
1028                 let as_cs = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1029                 assert!(as_cs.update_add_htlcs.is_empty());
1030                 assert!(as_cs.update_fail_htlcs.is_empty());
1031                 assert!(as_cs.update_fail_malformed_htlcs.is_empty());
1032                 assert!(as_cs.update_fulfill_htlcs.is_empty());
1033                 assert!(as_cs.update_fee.is_none());
1034
1035                 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_cs.commitment_signed);
1036                 check_added_monitors!(nodes[1], 1);
1037                 let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
1038
1039                 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_cs.commitment_signed);
1040                 check_added_monitors!(nodes[2], 1);
1041                 let bs_second_raa = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1042
1043                 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
1044                 check_added_monitors!(nodes[2], 1);
1045                 assert!(nodes[2].node.get_and_clear_pending_msg_events().is_empty());
1046
1047                 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_second_raa);
1048                 check_added_monitors!(nodes[1], 1);
1049                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1050         } else {
1051                 commitment_signed_dance!(nodes[2], nodes[1], send_event_b.commitment_msg, false);
1052         }
1053
1054         expect_pending_htlcs_forwardable!(nodes[2]);
1055
1056         let events_6 = nodes[2].node.get_and_clear_pending_events();
1057         assert_eq!(events_6.len(), 1);
1058         match events_6[0] {
1059                 Event::PaymentReceived { payment_hash, .. } => { assert_eq!(payment_hash, payment_hash_2); },
1060                 _ => panic!("Unexpected event"),
1061         };
1062
1063         if test_ignore_second_cs {
1064                 expect_pending_htlcs_forwardable!(nodes[1]);
1065                 check_added_monitors!(nodes[1], 1);
1066
1067                 send_event = SendEvent::from_node(&nodes[1]);
1068                 assert_eq!(send_event.node_id, nodes[0].node.get_our_node_id());
1069                 assert_eq!(send_event.msgs.len(), 1);
1070                 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event.msgs[0]);
1071                 commitment_signed_dance!(nodes[0], nodes[1], send_event.commitment_msg, false);
1072
1073                 expect_pending_htlcs_forwardable!(nodes[0]);
1074
1075                 let events_9 = nodes[0].node.get_and_clear_pending_events();
1076                 assert_eq!(events_9.len(), 1);
1077                 match events_9[0] {
1078                         Event::PaymentReceived { payment_hash, .. } => assert_eq!(payment_hash, payment_hash_4.unwrap()),
1079                         _ => panic!("Unexpected event"),
1080                 };
1081                 claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_4.unwrap(), 1_000_000);
1082         }
1083
1084         claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_2, 1_000_000);
1085 }
1086
1087 #[test]
1088 fn test_monitor_update_fail_raa() {
1089         do_test_monitor_update_fail_raa(false);
1090         do_test_monitor_update_fail_raa(true);
1091 }
1092
1093 #[test]
1094 fn test_monitor_update_fail_reestablish() {
1095         // Simple test for message retransmission after monitor update failure on
1096         // channel_reestablish generating a monitor update (which comes from freeing holding cell
1097         // HTLCs).
1098         let chanmon_cfgs = create_chanmon_cfgs(3);
1099         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1100         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1101         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1102         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1103         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1104
1105         let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
1106
1107         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1108         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1109
1110         assert!(nodes[2].node.claim_funds(our_payment_preimage, &None, 1_000_000));
1111         check_added_monitors!(nodes[2], 1);
1112         let mut updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1113         assert!(updates.update_add_htlcs.is_empty());
1114         assert!(updates.update_fail_htlcs.is_empty());
1115         assert!(updates.update_fail_malformed_htlcs.is_empty());
1116         assert!(updates.update_fee.is_none());
1117         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1118         nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1119         check_added_monitors!(nodes[1], 1);
1120         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1121         commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
1122
1123         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1124         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1125         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1126
1127         let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1128         let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1129
1130         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
1131
1132         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
1133         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1134         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1135         check_added_monitors!(nodes[1], 1);
1136
1137         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1138         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1139
1140         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1141         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1142
1143         assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
1144         assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
1145
1146         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
1147
1148         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
1149         check_added_monitors!(nodes[1], 0);
1150         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1151
1152         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1153         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1154         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1155         check_added_monitors!(nodes[1], 0);
1156
1157         updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1158         assert!(updates.update_add_htlcs.is_empty());
1159         assert!(updates.update_fail_htlcs.is_empty());
1160         assert!(updates.update_fail_malformed_htlcs.is_empty());
1161         assert!(updates.update_fee.is_none());
1162         assert_eq!(updates.update_fulfill_htlcs.len(), 1);
1163         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1164         commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false);
1165
1166         let events = nodes[0].node.get_and_clear_pending_events();
1167         assert_eq!(events.len(), 1);
1168         match events[0] {
1169                 Event::PaymentSent { payment_preimage, .. } => assert_eq!(payment_preimage, our_payment_preimage),
1170                 _ => panic!("Unexpected event"),
1171         }
1172 }
1173
1174 #[test]
1175 fn raa_no_response_awaiting_raa_state() {
1176         // This is a rather convoluted test which ensures that if handling of an RAA does not happen
1177         // due to a previous monitor update failure, we still set AwaitingRemoteRevoke on the channel
1178         // in question (assuming it intends to respond with a CS after monitor updating is restored).
1179         // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
1180         let chanmon_cfgs = create_chanmon_cfgs(2);
1181         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1182         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1183         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1184         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1185         let logger = test_utils::TestLogger::new();
1186
1187         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1188         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1189         let (payment_preimage_3, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
1190
1191         // Queue up two payments - one will be delivered right away, one immediately goes into the
1192         // holding cell as nodes[0] is AwaitingRAA. Ultimately this allows us to deliver an RAA
1193         // immediately after a CS. By setting failing the monitor update failure from the CS (which
1194         // requires only an RAA response due to AwaitingRAA) we can deliver the RAA and require the CS
1195         // generation during RAA while in monitor-update-failed state.
1196         {
1197                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1198                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1199                 nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
1200                 check_added_monitors!(nodes[0], 1);
1201                 nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1202                 check_added_monitors!(nodes[0], 0);
1203         }
1204
1205         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1206         assert_eq!(events.len(), 1);
1207         let payment_event = SendEvent::from_event(events.pop().unwrap());
1208         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1209         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1210         check_added_monitors!(nodes[1], 1);
1211
1212         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1213         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1214         check_added_monitors!(nodes[0], 1);
1215         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1216         assert_eq!(events.len(), 1);
1217         let payment_event = SendEvent::from_event(events.pop().unwrap());
1218
1219         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1220         check_added_monitors!(nodes[0], 1);
1221         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1222
1223         // Now we have a CS queued up which adds a new HTLC (which will need a RAA/CS response from
1224         // nodes[1]) followed by an RAA. Fail the monitor updating prior to the CS, deliver the RAA,
1225         // then restore channel monitor updates.
1226         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1227         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1228         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1229         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1230         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1231         check_added_monitors!(nodes[1], 1);
1232
1233         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1234         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1235         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
1236         check_added_monitors!(nodes[1], 1);
1237
1238         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1239         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1240         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1241         // nodes[1] should be AwaitingRAA here!
1242         check_added_monitors!(nodes[1], 0);
1243         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1244         expect_pending_htlcs_forwardable!(nodes[1]);
1245         expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1246
1247         // We send a third payment here, which is somewhat of a redundant test, but the
1248         // chanmon_fail_consistency test required it to actually find the bug (by seeing out-of-sync
1249         // commitment transaction states) whereas here we can explicitly check for it.
1250         {
1251                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1252                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1253                 nodes[0].node.send_payment(&route, payment_hash_3, &None).unwrap();
1254                 check_added_monitors!(nodes[0], 0);
1255                 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1256         }
1257         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1258         check_added_monitors!(nodes[0], 1);
1259         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1260         assert_eq!(events.len(), 1);
1261         let payment_event = SendEvent::from_event(events.pop().unwrap());
1262
1263         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1264         check_added_monitors!(nodes[0], 1);
1265         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1266
1267         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1268         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1269         check_added_monitors!(nodes[1], 1);
1270         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1271
1272         // Finally deliver the RAA to nodes[1] which results in a CS response to the last update
1273         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1274         check_added_monitors!(nodes[1], 1);
1275         expect_pending_htlcs_forwardable!(nodes[1]);
1276         expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1277         let bs_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1278
1279         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1280         check_added_monitors!(nodes[0], 1);
1281
1282         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_update.commitment_signed);
1283         check_added_monitors!(nodes[0], 1);
1284         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1285
1286         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1287         check_added_monitors!(nodes[1], 1);
1288         expect_pending_htlcs_forwardable!(nodes[1]);
1289         expect_payment_received!(nodes[1], payment_hash_3, 1000000);
1290
1291         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1292         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1293         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_3, 1_000_000);
1294 }
1295
1296 #[test]
1297 fn claim_while_disconnected_monitor_update_fail() {
1298         // Test for claiming a payment while disconnected and then having the resulting
1299         // channel-update-generated monitor update fail. This kind of thing isn't a particularly
1300         // contrived case for nodes with network instability.
1301         // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1302         // code introduced a regression in this test (specifically, this caught a removal of the
1303         // channel_reestablish handling ensuring the order was sensical given the messages used).
1304         let chanmon_cfgs = create_chanmon_cfgs(2);
1305         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1306         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1307         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1308         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1309         let logger = test_utils::TestLogger::new();
1310
1311         // Forward a payment for B to claim
1312         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1313
1314         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1315         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1316
1317         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1318         check_added_monitors!(nodes[1], 1);
1319
1320         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1321         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1322
1323         let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1324         let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1325
1326         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1327         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1328
1329         // Now deliver a's reestablish, freeing the claim from the holding cell, but fail the monitor
1330         // update.
1331         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1332
1333         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1334         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1335         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1336         check_added_monitors!(nodes[1], 1);
1337         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1338
1339         // Send a second payment from A to B, resulting in a commitment update that gets swallowed with
1340         // the monitor still failed
1341         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1342         {
1343                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1344                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1345                 nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1346                 check_added_monitors!(nodes[0], 1);
1347         }
1348
1349         let as_updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1350         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &as_updates.update_add_htlcs[0]);
1351         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_updates.commitment_signed);
1352         check_added_monitors!(nodes[1], 1);
1353         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1354         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1355         // Note that nodes[1] not updating monitor here is OK - it wont take action on the new HTLC
1356         // until we've channel_monitor_update'd and updated for the new commitment transaction.
1357
1358         // Now un-fail the monitor, which will result in B sending its original commitment update,
1359         // receiving the commitment update from A, and the resulting commitment dances.
1360         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1361         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1362         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1363         check_added_monitors!(nodes[1], 0);
1364
1365         let bs_msgs = nodes[1].node.get_and_clear_pending_msg_events();
1366         assert_eq!(bs_msgs.len(), 2);
1367
1368         match bs_msgs[0] {
1369                 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
1370                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1371                         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1372                         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
1373                         check_added_monitors!(nodes[0], 1);
1374
1375                         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1376                         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1377                         check_added_monitors!(nodes[1], 1);
1378                 },
1379                 _ => panic!("Unexpected event"),
1380         }
1381
1382         match bs_msgs[1] {
1383                 MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
1384                         assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1385                         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), msg);
1386                         check_added_monitors!(nodes[0], 1);
1387                 },
1388                 _ => panic!("Unexpected event"),
1389         }
1390
1391         let as_commitment = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1392
1393         let bs_commitment = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1394         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment.commitment_signed);
1395         check_added_monitors!(nodes[0], 1);
1396         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1397
1398         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment.commitment_signed);
1399         check_added_monitors!(nodes[1], 1);
1400         let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1401         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1402         check_added_monitors!(nodes[1], 1);
1403
1404         expect_pending_htlcs_forwardable!(nodes[1]);
1405         expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1406
1407         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1408         check_added_monitors!(nodes[0], 1);
1409
1410         let events = nodes[0].node.get_and_clear_pending_events();
1411         assert_eq!(events.len(), 1);
1412         match events[0] {
1413                 Event::PaymentSent { ref payment_preimage } => {
1414                         assert_eq!(*payment_preimage, payment_preimage_1);
1415                 },
1416                 _ => panic!("Unexpected event"),
1417         }
1418
1419         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1420 }
1421
1422 #[test]
1423 fn monitor_failed_no_reestablish_response() {
1424         // Test for receiving a channel_reestablish after a monitor update failure resulted in no
1425         // response to a commitment_signed.
1426         // Backported from chanmon_fail_consistency fuzz tests as it caught a long-standing
1427         // debug_assert!() failure in channel_reestablish handling.
1428         let chanmon_cfgs = create_chanmon_cfgs(2);
1429         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1430         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1431         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1432         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1433         let logger = test_utils::TestLogger::new();
1434
1435         // Route the payment and deliver the initial commitment_signed (with a monitor update failure
1436         // on receipt).
1437         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1438         {
1439                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1440                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1441                 nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
1442                 check_added_monitors!(nodes[0], 1);
1443         }
1444
1445         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1446         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1447         assert_eq!(events.len(), 1);
1448         let payment_event = SendEvent::from_event(events.pop().unwrap());
1449         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1450         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1451         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1452         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1453         check_added_monitors!(nodes[1], 1);
1454
1455         // Now disconnect and immediately reconnect, delivering the channel_reestablish while nodes[1]
1456         // is still failing to update monitors.
1457         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1458         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1459
1460         nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1461         nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1462
1463         let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1464         let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1465
1466         nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1467         nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1468
1469         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1470         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1471         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1472         check_added_monitors!(nodes[1], 0);
1473         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1474
1475         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1476         check_added_monitors!(nodes[0], 1);
1477         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1478         check_added_monitors!(nodes[0], 1);
1479
1480         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1481         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1482         check_added_monitors!(nodes[1], 1);
1483
1484         expect_pending_htlcs_forwardable!(nodes[1]);
1485         expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1486
1487         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1488 }
1489
1490 #[test]
1491 fn first_message_on_recv_ordering() {
1492         // Test that if the initial generator of a monitor-update-frozen state doesn't generate
1493         // messages, we're willing to flip the order of response messages if neccessary in resposne to
1494         // a commitment_signed which needs to send an RAA first.
1495         // At a high level, our goal is to fail monitor updating in response to an RAA which needs no
1496         // response and then handle a CS while in the failed state, requiring an RAA followed by a CS
1497         // response. To do this, we start routing two payments, with the final RAA for the first being
1498         // delivered while B is in AwaitingRAA, hence when we deliver the CS for the second B will
1499         // have no pending response but will want to send a RAA/CS (with the updates for the second
1500         // payment applied).
1501         // Backported from chanmon_fail_consistency fuzz tests as it caught a bug here.
1502         let chanmon_cfgs = create_chanmon_cfgs(2);
1503         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1504         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1505         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1506         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1507         let logger = test_utils::TestLogger::new();
1508
1509         // Route the first payment outbound, holding the last RAA for B until we are set up so that we
1510         // can deliver it and fail the monitor update.
1511         let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1512         {
1513                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1514                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1515                 nodes[0].node.send_payment(&route, payment_hash_1, &None).unwrap();
1516                 check_added_monitors!(nodes[0], 1);
1517         }
1518
1519         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1520         assert_eq!(events.len(), 1);
1521         let payment_event = SendEvent::from_event(events.pop().unwrap());
1522         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1523         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1524         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1525         check_added_monitors!(nodes[1], 1);
1526         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1527
1528         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1529         check_added_monitors!(nodes[0], 1);
1530         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1531         check_added_monitors!(nodes[0], 1);
1532
1533         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1534
1535         // Route the second payment, generating an update_add_htlc/commitment_signed
1536         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1537         {
1538                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1539                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1540                 nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1541                 check_added_monitors!(nodes[0], 1);
1542         }
1543         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1544         assert_eq!(events.len(), 1);
1545         let payment_event = SendEvent::from_event(events.pop().unwrap());
1546         assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1547
1548         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1549
1550         // Deliver the final RAA for the first payment, which does not require a response. RAAs
1551         // generally require a commitment_signed, so the fact that we're expecting an opposite response
1552         // to the next message also tests resetting the delivery order.
1553         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1554         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1555         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1556         check_added_monitors!(nodes[1], 1);
1557
1558         // Now deliver the update_add_htlc/commitment_signed for the second payment, which does need an
1559         // RAA/CS response, which should be generated when we call channel_monitor_update (with the
1560         // appropriate HTLC acceptance).
1561         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1562         nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1563         check_added_monitors!(nodes[1], 1);
1564         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1565         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1566
1567         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1568         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1569         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1570         check_added_monitors!(nodes[1], 0);
1571
1572         expect_pending_htlcs_forwardable!(nodes[1]);
1573         expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1574
1575         let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1576         nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1577         check_added_monitors!(nodes[0], 1);
1578         nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1579         check_added_monitors!(nodes[0], 1);
1580
1581         let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1582         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1583         check_added_monitors!(nodes[1], 1);
1584
1585         expect_pending_htlcs_forwardable!(nodes[1]);
1586         expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1587
1588         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1589         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1590 }
1591
1592 #[test]
1593 fn test_monitor_update_fail_claim() {
1594         // Basic test for monitor update failures when processing claim_funds calls.
1595         // We set up a simple 3-node network, sending a payment from A to B and failing B's monitor
1596         // update to claim the payment. We then send a payment C->B->A, making the forward of this
1597         // payment from B to A fail due to the paused channel. Finally, we restore the channel monitor
1598         // updating and claim the payment on B.
1599         let chanmon_cfgs = create_chanmon_cfgs(3);
1600         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1601         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1602         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1603         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1604         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1605         let logger = test_utils::TestLogger::new();
1606
1607         // Rebalance a bit so that we can send backwards from 3 to 2.
1608         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
1609
1610         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1611
1612         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1613         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1614         check_added_monitors!(nodes[1], 1);
1615
1616         let (_, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1617         {
1618                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
1619                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1620                 nodes[2].node.send_payment(&route, payment_hash_2, &None).unwrap();
1621                 check_added_monitors!(nodes[2], 1);
1622         }
1623
1624         // Successfully update the monitor on the 1<->2 channel, but the 0<->1 channel should still be
1625         // paused, so forward shouldn't succeed until we call channel_monitor_updated().
1626         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1627
1628         let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1629         assert_eq!(events.len(), 1);
1630         let payment_event = SendEvent::from_event(events.pop().unwrap());
1631         nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1632         let events = nodes[1].node.get_and_clear_pending_msg_events();
1633         assert_eq!(events.len(), 0);
1634         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Temporary failure claiming HTLC, treating as success: Failed to update ChannelMonitor".to_string(), 1);
1635         commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false, true);
1636
1637         let bs_fail_update = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1638         nodes[2].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_fail_update.update_fail_htlcs[0]);
1639         commitment_signed_dance!(nodes[2], nodes[1], bs_fail_update.commitment_signed, false, true);
1640
1641         let msg_events = nodes[2].node.get_and_clear_pending_msg_events();
1642         assert_eq!(msg_events.len(), 1);
1643         match msg_events[0] {
1644                 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
1645                         assert_eq!(msg.contents.short_channel_id, chan_1.0.contents.short_channel_id);
1646                         assert_eq!(msg.contents.flags & 2, 2); // temp disabled
1647                 },
1648                 _ => panic!("Unexpected event"),
1649         }
1650
1651         let events = nodes[2].node.get_and_clear_pending_events();
1652         assert_eq!(events.len(), 1);
1653         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1654                 assert_eq!(payment_hash, payment_hash_2);
1655                 assert!(!rejected_by_dest);
1656         } else { panic!("Unexpected event!"); }
1657
1658         // Now restore monitor updating on the 0<->1 channel and claim the funds on B.
1659         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1660         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1661         check_added_monitors!(nodes[1], 0);
1662
1663         let bs_fulfill_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1664         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_fulfill_update.update_fulfill_htlcs[0]);
1665         commitment_signed_dance!(nodes[0], nodes[1], bs_fulfill_update.commitment_signed, false);
1666
1667         let events = nodes[0].node.get_and_clear_pending_events();
1668         assert_eq!(events.len(), 1);
1669         if let Event::PaymentSent { payment_preimage, .. } = events[0] {
1670                 assert_eq!(payment_preimage, payment_preimage_1);
1671         } else { panic!("Unexpected event!"); }
1672 }
1673
1674 #[test]
1675 fn test_monitor_update_on_pending_forwards() {
1676         // Basic test for monitor update failures when processing pending HTLC fail/add forwards.
1677         // We do this with a simple 3-node network, sending a payment from A to C and one from C to A.
1678         // The payment from A to C will be failed by C and pending a back-fail to A, while the payment
1679         // from C to A will be pending a forward to A.
1680         let chanmon_cfgs = create_chanmon_cfgs(3);
1681         let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
1682         let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1683         let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1684         let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
1685         create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known());
1686         let logger = test_utils::TestLogger::new();
1687
1688         // Rebalance a bit so that we can send backwards from 3 to 1.
1689         send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
1690
1691         let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
1692         assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1, &None));
1693         expect_pending_htlcs_forwardable!(nodes[2]);
1694         check_added_monitors!(nodes[2], 1);
1695
1696         let cs_fail_update = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1697         nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &cs_fail_update.update_fail_htlcs[0]);
1698         commitment_signed_dance!(nodes[1], nodes[2], cs_fail_update.commitment_signed, true, true);
1699         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1700
1701         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1702         {
1703                 let net_graph_msg_handler = &nodes[2].net_graph_msg_handler;
1704                 let route = get_route(&nodes[2].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1705                 nodes[2].node.send_payment(&route, payment_hash_2, &None).unwrap();
1706                 check_added_monitors!(nodes[2], 1);
1707         }
1708
1709         let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1710         assert_eq!(events.len(), 1);
1711         let payment_event = SendEvent::from_event(events.pop().unwrap());
1712         nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1713         commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false);
1714
1715         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1716         expect_pending_htlcs_forwardable!(nodes[1]);
1717         check_added_monitors!(nodes[1], 1);
1718         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1719         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1720
1721         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1722         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
1723         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1724         check_added_monitors!(nodes[1], 0);
1725
1726         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1727         nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fail_htlcs[0]);
1728         nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_add_htlcs[0]);
1729         commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true);
1730
1731         let events = nodes[0].node.get_and_clear_pending_events();
1732         assert_eq!(events.len(), 2);
1733         if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1734                 assert_eq!(payment_hash, payment_hash_1);
1735                 assert!(rejected_by_dest);
1736         } else { panic!("Unexpected event!"); }
1737         match events[1] {
1738                 Event::PendingHTLCsForwardable { .. } => { },
1739                 _ => panic!("Unexpected event"),
1740         };
1741         nodes[0].node.process_pending_htlc_forwards();
1742         expect_payment_received!(nodes[0], payment_hash_2, 1000000);
1743
1744         claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_2, 1_000_000);
1745 }
1746
1747 #[test]
1748 fn monitor_update_claim_fail_no_response() {
1749         // Test for claim_funds resulting in both a monitor update failure and no message response (due
1750         // to channel being AwaitingRAA).
1751         // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1752         // code was broken.
1753         let chanmon_cfgs = create_chanmon_cfgs(2);
1754         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1755         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1756         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1757         let channel_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).2;
1758         let logger = test_utils::TestLogger::new();
1759
1760         // Forward a payment for B to claim
1761         let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1762
1763         // Now start forwarding a second payment, skipping the last RAA so B is in AwaitingRAA
1764         let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1765         {
1766                 let net_graph_msg_handler = &nodes[0].net_graph_msg_handler;
1767                 let route = get_route(&nodes[0].node.get_our_node_id(), &net_graph_msg_handler.network_graph.read().unwrap(), &nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV, &logger).unwrap();
1768                 nodes[0].node.send_payment(&route, payment_hash_2, &None).unwrap();
1769                 check_added_monitors!(nodes[0], 1);
1770         }
1771
1772         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1773         assert_eq!(events.len(), 1);
1774         let payment_event = SendEvent::from_event(events.pop().unwrap());
1775         nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1776         let as_raa = commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true, false, true);
1777
1778         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1779         assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1780         check_added_monitors!(nodes[1], 1);
1781         let events = nodes[1].node.get_and_clear_pending_msg_events();
1782         assert_eq!(events.len(), 0);
1783         nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Temporary failure claiming HTLC, treating as success: Failed to update ChannelMonitor".to_string(), 1);
1784
1785         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1786         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1787         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1788         check_added_monitors!(nodes[1], 0);
1789         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1790
1791         nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1792         check_added_monitors!(nodes[1], 1);
1793         expect_pending_htlcs_forwardable!(nodes[1]);
1794         expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1795
1796         let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1797         nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fulfill_htlcs[0]);
1798         commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false);
1799
1800         let events = nodes[0].node.get_and_clear_pending_events();
1801         assert_eq!(events.len(), 1);
1802         match events[0] {
1803                 Event::PaymentSent { ref payment_preimage } => {
1804                         assert_eq!(*payment_preimage, payment_preimage_1);
1805                 },
1806                 _ => panic!("Unexpected event"),
1807         }
1808
1809         claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1810 }
1811
1812 // confirm_a_first and restore_b_before_conf are wholly unrelated to earlier bools and
1813 // restore_b_before_conf has no meaning if !confirm_a_first
1814 fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf: bool) {
1815         // Test that if the monitor update generated by funding_transaction_generated fails we continue
1816         // the channel setup happily after the update is restored.
1817         let chanmon_cfgs = create_chanmon_cfgs(2);
1818         let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
1819         let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1820         let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1821
1822         nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43, None).unwrap();
1823         nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
1824         nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::known(), &get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id()));
1825
1826         let (temporary_channel_id, funding_tx, funding_output) = create_funding_transaction(&nodes[0], 100000, 43);
1827
1828         nodes[0].node.funding_transaction_generated(&temporary_channel_id, funding_output);
1829         check_added_monitors!(nodes[0], 0);
1830
1831         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1832         let funding_created_msg = get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id());
1833         let channel_id = OutPoint { txid: funding_created_msg.funding_txid, index: funding_created_msg.funding_output_index }.to_channel_id();
1834         nodes[1].node.handle_funding_created(&nodes[0].node.get_our_node_id(), &funding_created_msg);
1835         check_added_monitors!(nodes[1], 1);
1836
1837         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1838         nodes[0].node.handle_funding_signed(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingSigned, nodes[0].node.get_our_node_id()));
1839         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1840         nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1841         check_added_monitors!(nodes[0], 1);
1842         assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1843         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1844         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1845         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
1846         check_added_monitors!(nodes[0], 0);
1847
1848         let events = nodes[0].node.get_and_clear_pending_events();
1849         assert_eq!(events.len(), 1);
1850         match events[0] {
1851                 Event::FundingBroadcastSafe { ref funding_txo, user_channel_id } => {
1852                         assert_eq!(user_channel_id, 43);
1853                         assert_eq!(*funding_txo, funding_output);
1854                 },
1855                 _ => panic!("Unexpected event"),
1856         };
1857
1858         if confirm_a_first {
1859                 confirm_transaction(&nodes[0], &funding_tx);
1860                 nodes[1].node.handle_funding_locked(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendFundingLocked, nodes[1].node.get_our_node_id()));
1861         } else {
1862                 assert!(!restore_b_before_conf);
1863                 confirm_transaction(&nodes[1], &funding_tx);
1864                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1865         }
1866
1867         // Make sure nodes[1] isn't stupid enough to re-send the FundingLocked on reconnect
1868         nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1869         nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1870         reconnect_nodes(&nodes[0], &nodes[1], (false, confirm_a_first), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
1871         assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1872         assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1873
1874         if !restore_b_before_conf {
1875                 confirm_transaction(&nodes[1], &funding_tx);
1876                 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1877                 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
1878         }
1879
1880         *nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1881         let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();
1882         nodes[1].node.channel_monitor_updated(&outpoint, latest_update);
1883         check_added_monitors!(nodes[1], 0);
1884
1885         let (channel_id, (announcement, as_update, bs_update)) = if !confirm_a_first {
1886                 nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id()));
1887
1888                 confirm_transaction(&nodes[0], &funding_tx);
1889                 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[1], &nodes[0]);
1890                 (channel_id, create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked))
1891         } else {
1892                 if restore_b_before_conf {
1893                         confirm_transaction(&nodes[1], &funding_tx);
1894                 }
1895                 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[0], &nodes[1]);
1896                 (channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &funding_locked))
1897         };
1898         for node in nodes.iter() {
1899                 assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
1900                 node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
1901                 node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
1902         }
1903
1904         send_payment(&nodes[0], &[&nodes[1]], 8000000, 8_000_000);
1905         close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, true);
1906 }
1907
1908 #[test]
1909 fn during_funding_monitor_fail() {
1910         do_during_funding_monitor_fail(true, true);
1911         do_during_funding_monitor_fail(true, false);
1912         do_during_funding_monitor_fail(false, false);
1913 }
1914
1915 #[test]
1916 fn test_path_paused_mpp() {
1917         // Simple test of sending a multi-part payment where one path is currently blocked awaiting
1918         // monitor update
1919         let chanmon_cfgs = create_chanmon_cfgs(4);
1920         let node_cfgs = create_node_cfgs(4, &chanmon_cfgs);
1921         let node_chanmgrs = create_node_chanmgrs(4, &node_cfgs, &[None, None, None, None]);
1922         let mut nodes = create_network(4, &node_cfgs, &node_chanmgrs);
1923
1924         let chan_1_id = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1925         let (chan_2_ann, _, chan_2_id, _) = create_announced_chan_between_nodes(&nodes, 0, 2, InitFeatures::known(), InitFeatures::known());
1926         let chan_3_id = create_announced_chan_between_nodes(&nodes, 1, 3, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1927         let chan_4_id = create_announced_chan_between_nodes(&nodes, 2, 3, InitFeatures::known(), InitFeatures::known()).0.contents.short_channel_id;
1928         let logger = test_utils::TestLogger::new();
1929
1930         let (payment_preimage, payment_hash) = get_payment_preimage_hash!(&nodes[0]);
1931         let payment_secret = PaymentSecret([0xdb; 32]);
1932         let mut route = get_route(&nodes[0].node.get_our_node_id(), &nodes[0].net_graph_msg_handler.network_graph.read().unwrap(), &nodes[3].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV, &logger).unwrap();
1933
1934         // Set us up to take multiple routes, one 0 -> 1 -> 3 and one 0 -> 2 -> 3:
1935         let path = route.paths[0].clone();
1936         route.paths.push(path);
1937         route.paths[0][0].pubkey = nodes[1].node.get_our_node_id();
1938         route.paths[0][0].short_channel_id = chan_1_id;
1939         route.paths[0][1].short_channel_id = chan_3_id;
1940         route.paths[1][0].pubkey = nodes[2].node.get_our_node_id();
1941         route.paths[1][0].short_channel_id = chan_2_ann.contents.short_channel_id;
1942         route.paths[1][1].short_channel_id = chan_4_id;
1943
1944         // Set it so that the first monitor update (for the path 0 -> 1 -> 3) succeeds, but the second
1945         // (for the path 0 -> 2 -> 3) fails.
1946         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1947         *nodes[0].chain_monitor.next_update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1948
1949         // Now check that we get the right return value, indicating that the first path succeeded but
1950         // the second got a MonitorUpdateFailed err. This implies PaymentSendFailure::PartialFailure as
1951         // some paths succeeded, preventing retry.
1952         if let Err(PaymentSendFailure::PartialFailure(results)) = nodes[0].node.send_payment(&route, payment_hash, &Some(payment_secret)) {
1953                 assert_eq!(results.len(), 2);
1954                 if let Ok(()) = results[0] {} else { panic!(); }
1955                 if let Err(APIError::MonitorUpdateFailed) = results[1] {} else { panic!(); }
1956         } else { panic!(); }
1957         check_added_monitors!(nodes[0], 2);
1958         *nodes[0].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
1959
1960         // Pass the first HTLC of the payment along to nodes[3].
1961         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1962         assert_eq!(events.len(), 1);
1963         pass_along_path(&nodes[0], &[&nodes[1], &nodes[3]], 0, payment_hash.clone(), Some(payment_secret), events.pop().unwrap(), false);
1964
1965         // And check that, after we successfully update the monitor for chan_2 we can pass the second
1966         // HTLC along to nodes[3] and claim the whole payment back to nodes[0].
1967         let (outpoint, latest_update) = nodes[0].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_2_id).unwrap().clone();
1968         nodes[0].node.channel_monitor_updated(&outpoint, latest_update);
1969         let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1970         assert_eq!(events.len(), 1);
1971         pass_along_path(&nodes[0], &[&nodes[2], &nodes[3]], 200_000, payment_hash.clone(), Some(payment_secret), events.pop().unwrap(), true);
1972
1973         claim_payment_along_route_with_secret(&nodes[0], &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], false, payment_preimage, Some(payment_secret), 200_000);
1974 }