1 //! Functional tests which test the correct handling of ChannelMonitorUpdateErr returns from
3 //! There are a bunch of these as their handling is relatively error-prone so they are split out
4 //! here. See also the chanmon_fail_consistency fuzz test.
6 use ln::channelmanager::{RAACommitmentOrder, PaymentPreimage, PaymentHash};
7 use ln::channelmonitor::ChannelMonitorUpdateErr;
8 use ln::features::InitFeatures;
10 use ln::msgs::{ChannelMessageHandler, ErrorAction, RoutingMessageHandler};
11 use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsProvider};
12 use util::errors::APIError;
14 use bitcoin_hashes::sha256::Hash as Sha256;
15 use bitcoin_hashes::Hash;
17 use ln::functional_test_utils::*;
20 fn test_simple_monitor_permanent_update_fail() {
21 // Test that we handle a simple permanent monitor update failure
22 let node_cfgs = create_node_cfgs(2);
23 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
24 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
25 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
27 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
28 let (_, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
30 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::PermanentFailure);
31 if let Err(APIError::ChannelUnavailable {..}) = nodes[0].node.send_payment(route, payment_hash_1, None) {} else { panic!(); }
32 check_added_monitors!(nodes[0], 1);
34 let events_1 = nodes[0].node.get_and_clear_pending_msg_events();
35 assert_eq!(events_1.len(), 2);
37 MessageSendEvent::BroadcastChannelUpdate { .. } => {},
38 _ => panic!("Unexpected event"),
41 MessageSendEvent::HandleError { node_id, .. } => assert_eq!(node_id, nodes[1].node.get_our_node_id()),
42 _ => panic!("Unexpected event"),
45 // TODO: Once we hit the chain with the failure transaction we should check that we get a
46 // PaymentFailed event
48 assert_eq!(nodes[0].node.list_channels().len(), 0);
51 fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
52 // Test that we can recover from a simple temporary monitor update failure optionally with
53 // a disconnect in between
54 let node_cfgs = create_node_cfgs(2);
55 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
56 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
57 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
59 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
60 let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(&nodes[0]);
62 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
63 if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route.clone(), payment_hash_1, None) {} else { panic!(); }
64 check_added_monitors!(nodes[0], 1);
66 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
67 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
68 assert_eq!(nodes[0].node.list_channels().len(), 1);
71 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
72 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
73 reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
76 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
77 nodes[0].node.test_restore_channel_monitor();
78 check_added_monitors!(nodes[0], 1);
80 let mut events_2 = nodes[0].node.get_and_clear_pending_msg_events();
81 assert_eq!(events_2.len(), 1);
82 let payment_event = SendEvent::from_event(events_2.pop().unwrap());
83 assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
84 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
85 commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
87 expect_pending_htlcs_forwardable!(nodes[1]);
89 let events_3 = nodes[1].node.get_and_clear_pending_events();
90 assert_eq!(events_3.len(), 1);
92 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
93 assert_eq!(payment_hash_1, *payment_hash);
94 assert_eq!(*payment_secret, None);
95 assert_eq!(amt, 1000000);
97 _ => panic!("Unexpected event"),
100 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
102 // Now set it to failed again...
103 let (_, payment_hash_2) = get_payment_preimage_hash!(&nodes[0]);
104 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
105 if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route, payment_hash_2, None) {} else { panic!(); }
106 check_added_monitors!(nodes[0], 1);
108 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
109 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
110 assert_eq!(nodes[0].node.list_channels().len(), 1);
113 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
114 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
115 reconnect_nodes(&nodes[0], &nodes[1], (false, false), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
118 // ...and make sure we can force-close a TemporaryFailure channel with a PermanentFailure
119 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::PermanentFailure);
120 nodes[0].node.test_restore_channel_monitor();
121 check_added_monitors!(nodes[0], 1);
122 check_closed_broadcast!(nodes[0], false);
124 // TODO: Once we hit the chain with the failure transaction we should check that we get a
125 // PaymentFailed event
127 assert_eq!(nodes[0].node.list_channels().len(), 0);
131 fn test_simple_monitor_temporary_update_fail() {
132 do_test_simple_monitor_temporary_update_fail(false);
133 do_test_simple_monitor_temporary_update_fail(true);
136 fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
137 let disconnect_flags = 8 | 16;
139 // Test that we can recover from a temporary monitor update failure with some in-flight
140 // HTLCs going on at the same time potentially with some disconnection thrown in.
141 // * First we route a payment, then get a temporary monitor update failure when trying to
142 // route a second payment. We then claim the first payment.
143 // * If disconnect_count is set, we will disconnect at this point (which is likely as
144 // TemporaryFailure likely indicates net disconnect which resulted in failing to update
145 // the ChannelMonitor on a watchtower).
146 // * If !(disconnect_count & 16) we deliver a update_fulfill_htlc/CS for the first payment
147 // immediately, otherwise we wait disconnect and deliver them via the reconnect
148 // channel_reestablish processing (ie disconnect_count & 16 makes no sense if
149 // disconnect_count & !disconnect_flags is 0).
150 // * We then update the channel monitor, reconnecting if disconnect_count is set and walk
151 // through message sending, potentially disconnect/reconnecting multiple times based on
152 // disconnect_count, to get the update_fulfill_htlc through.
153 // * We then walk through more message exchanges to get the original update_add_htlc
154 // through, swapping message ordering based on disconnect_count & 8 and optionally
155 // disconnect/reconnecting based on disconnect_count.
156 let node_cfgs = create_node_cfgs(2);
157 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
158 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
159 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
161 let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
163 // Now try to send a second payment which will fail to send
164 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
165 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
167 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
168 if let Err(APIError::MonitorUpdateFailed) = nodes[0].node.send_payment(route.clone(), payment_hash_2, None) {} else { panic!(); }
169 check_added_monitors!(nodes[0], 1);
171 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
172 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
173 assert_eq!(nodes[0].node.list_channels().len(), 1);
175 // Claim the previous payment, which will result in a update_fulfill_htlc/CS from nodes[1]
176 // but nodes[0] won't respond since it is frozen.
177 assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
178 check_added_monitors!(nodes[1], 1);
179 let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
180 assert_eq!(events_2.len(), 1);
181 let (bs_initial_fulfill, bs_initial_commitment_signed) = match events_2[0] {
182 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 } } => {
183 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
184 assert!(update_add_htlcs.is_empty());
185 assert_eq!(update_fulfill_htlcs.len(), 1);
186 assert!(update_fail_htlcs.is_empty());
187 assert!(update_fail_malformed_htlcs.is_empty());
188 assert!(update_fee.is_none());
190 if (disconnect_count & 16) == 0 {
191 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &update_fulfill_htlcs[0]);
192 let events_3 = nodes[0].node.get_and_clear_pending_events();
193 assert_eq!(events_3.len(), 1);
195 Event::PaymentSent { ref payment_preimage } => {
196 assert_eq!(*payment_preimage, payment_preimage_1);
198 _ => panic!("Unexpected event"),
201 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), commitment_signed);
202 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
203 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
206 (update_fulfill_htlcs[0].clone(), commitment_signed.clone())
208 _ => panic!("Unexpected event"),
211 if disconnect_count & !disconnect_flags > 0 {
212 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
213 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
216 // Now fix monitor updating...
217 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
218 nodes[0].node.test_restore_channel_monitor();
219 check_added_monitors!(nodes[0], 1);
221 macro_rules! disconnect_reconnect_peers { () => { {
222 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
223 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
225 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
226 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
227 assert_eq!(reestablish_1.len(), 1);
228 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
229 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
230 assert_eq!(reestablish_2.len(), 1);
232 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
233 let as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
234 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
235 let bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
237 assert!(as_resp.0.is_none());
238 assert!(bs_resp.0.is_none());
240 (reestablish_1, reestablish_2, as_resp, bs_resp)
243 let (payment_event, initial_revoke_and_ack) = if disconnect_count & !disconnect_flags > 0 {
244 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
245 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
247 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
248 let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
249 assert_eq!(reestablish_1.len(), 1);
250 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
251 let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
252 assert_eq!(reestablish_2.len(), 1);
254 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
255 check_added_monitors!(nodes[0], 0);
256 let mut as_resp = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
257 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
258 check_added_monitors!(nodes[1], 0);
259 let mut bs_resp = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
261 assert!(as_resp.0.is_none());
262 assert!(bs_resp.0.is_none());
264 assert!(bs_resp.1.is_none());
265 if (disconnect_count & 16) == 0 {
266 assert!(bs_resp.2.is_none());
268 assert!(as_resp.1.is_some());
269 assert!(as_resp.2.is_some());
270 assert!(as_resp.3 == RAACommitmentOrder::CommitmentFirst);
272 assert!(bs_resp.2.as_ref().unwrap().update_add_htlcs.is_empty());
273 assert!(bs_resp.2.as_ref().unwrap().update_fail_htlcs.is_empty());
274 assert!(bs_resp.2.as_ref().unwrap().update_fail_malformed_htlcs.is_empty());
275 assert!(bs_resp.2.as_ref().unwrap().update_fee.is_none());
276 assert!(bs_resp.2.as_ref().unwrap().update_fulfill_htlcs == vec![bs_initial_fulfill]);
277 assert!(bs_resp.2.as_ref().unwrap().commitment_signed == bs_initial_commitment_signed);
279 assert!(as_resp.1.is_none());
281 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().update_fulfill_htlcs[0]);
282 let events_3 = nodes[0].node.get_and_clear_pending_events();
283 assert_eq!(events_3.len(), 1);
285 Event::PaymentSent { ref payment_preimage } => {
286 assert_eq!(*payment_preimage, payment_preimage_1);
288 _ => panic!("Unexpected event"),
291 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_resp.2.as_ref().unwrap().commitment_signed);
292 let as_resp_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
293 // No commitment_signed so get_event_msg's assert(len == 1) passes
294 check_added_monitors!(nodes[0], 1);
296 as_resp.1 = Some(as_resp_raa);
300 if disconnect_count & !disconnect_flags > 1 {
301 let (second_reestablish_1, second_reestablish_2, second_as_resp, second_bs_resp) = disconnect_reconnect_peers!();
303 if (disconnect_count & 16) == 0 {
304 assert!(reestablish_1 == second_reestablish_1);
305 assert!(reestablish_2 == second_reestablish_2);
307 assert!(as_resp == second_as_resp);
308 assert!(bs_resp == second_bs_resp);
311 (SendEvent::from_commitment_update(nodes[1].node.get_our_node_id(), as_resp.2.unwrap()), as_resp.1.unwrap())
313 let mut events_4 = nodes[0].node.get_and_clear_pending_msg_events();
314 assert_eq!(events_4.len(), 2);
315 (SendEvent::from_event(events_4.remove(0)), match events_4[0] {
316 MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
317 assert_eq!(*node_id, nodes[1].node.get_our_node_id());
320 _ => panic!("Unexpected event"),
324 assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
326 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
327 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
328 let bs_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
329 // nodes[1] is awaiting an RAA from nodes[0] still so get_event_msg's assert(len == 1) passes
330 check_added_monitors!(nodes[1], 1);
332 if disconnect_count & !disconnect_flags > 2 {
333 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
335 assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
336 assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
338 assert!(as_resp.2.is_none());
339 assert!(bs_resp.2.is_none());
342 let as_commitment_update;
343 let bs_second_commitment_update;
345 macro_rules! handle_bs_raa { () => {
346 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_revoke_and_ack);
347 as_commitment_update = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
348 assert!(as_commitment_update.update_add_htlcs.is_empty());
349 assert!(as_commitment_update.update_fulfill_htlcs.is_empty());
350 assert!(as_commitment_update.update_fail_htlcs.is_empty());
351 assert!(as_commitment_update.update_fail_malformed_htlcs.is_empty());
352 assert!(as_commitment_update.update_fee.is_none());
353 check_added_monitors!(nodes[0], 1);
356 macro_rules! handle_initial_raa { () => {
357 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &initial_revoke_and_ack);
358 bs_second_commitment_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
359 assert!(bs_second_commitment_update.update_add_htlcs.is_empty());
360 assert!(bs_second_commitment_update.update_fulfill_htlcs.is_empty());
361 assert!(bs_second_commitment_update.update_fail_htlcs.is_empty());
362 assert!(bs_second_commitment_update.update_fail_malformed_htlcs.is_empty());
363 assert!(bs_second_commitment_update.update_fee.is_none());
364 check_added_monitors!(nodes[1], 1);
367 if (disconnect_count & 8) == 0 {
370 if disconnect_count & !disconnect_flags > 3 {
371 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
373 assert!(as_resp.1.unwrap() == initial_revoke_and_ack);
374 assert!(bs_resp.1.is_none());
376 assert!(as_resp.2.unwrap() == as_commitment_update);
377 assert!(bs_resp.2.is_none());
379 assert!(as_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
382 handle_initial_raa!();
384 if disconnect_count & !disconnect_flags > 4 {
385 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
387 assert!(as_resp.1.is_none());
388 assert!(bs_resp.1.is_none());
390 assert!(as_resp.2.unwrap() == as_commitment_update);
391 assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
394 handle_initial_raa!();
396 if disconnect_count & !disconnect_flags > 3 {
397 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
399 assert!(as_resp.1.is_none());
400 assert!(bs_resp.1.unwrap() == bs_revoke_and_ack);
402 assert!(as_resp.2.is_none());
403 assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
405 assert!(bs_resp.3 == RAACommitmentOrder::RevokeAndACKFirst);
410 if disconnect_count & !disconnect_flags > 4 {
411 let (_, _, as_resp, bs_resp) = disconnect_reconnect_peers!();
413 assert!(as_resp.1.is_none());
414 assert!(bs_resp.1.is_none());
416 assert!(as_resp.2.unwrap() == as_commitment_update);
417 assert!(bs_resp.2.unwrap() == bs_second_commitment_update);
421 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_second_commitment_update.commitment_signed);
422 let as_revoke_and_ack = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
423 // No commitment_signed so get_event_msg's assert(len == 1) passes
424 check_added_monitors!(nodes[0], 1);
426 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment_update.commitment_signed);
427 let bs_second_revoke_and_ack = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
428 // No commitment_signed so get_event_msg's assert(len == 1) passes
429 check_added_monitors!(nodes[1], 1);
431 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_revoke_and_ack);
432 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
433 check_added_monitors!(nodes[1], 1);
435 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_revoke_and_ack);
436 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
437 check_added_monitors!(nodes[0], 1);
439 expect_pending_htlcs_forwardable!(nodes[1]);
441 let events_5 = nodes[1].node.get_and_clear_pending_events();
442 assert_eq!(events_5.len(), 1);
444 Event::PaymentReceived { ref payment_hash, ref payment_secret, amt } => {
445 assert_eq!(payment_hash_2, *payment_hash);
446 assert_eq!(*payment_secret, None);
447 assert_eq!(amt, 1000000);
449 _ => panic!("Unexpected event"),
452 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
456 fn test_monitor_temporary_update_fail_a() {
457 do_test_monitor_temporary_update_fail(0);
458 do_test_monitor_temporary_update_fail(1);
459 do_test_monitor_temporary_update_fail(2);
460 do_test_monitor_temporary_update_fail(3);
461 do_test_monitor_temporary_update_fail(4);
462 do_test_monitor_temporary_update_fail(5);
466 fn test_monitor_temporary_update_fail_b() {
467 do_test_monitor_temporary_update_fail(2 | 8);
468 do_test_monitor_temporary_update_fail(3 | 8);
469 do_test_monitor_temporary_update_fail(4 | 8);
470 do_test_monitor_temporary_update_fail(5 | 8);
474 fn test_monitor_temporary_update_fail_c() {
475 do_test_monitor_temporary_update_fail(1 | 16);
476 do_test_monitor_temporary_update_fail(2 | 16);
477 do_test_monitor_temporary_update_fail(3 | 16);
478 do_test_monitor_temporary_update_fail(2 | 8 | 16);
479 do_test_monitor_temporary_update_fail(3 | 8 | 16);
483 fn test_monitor_update_fail_cs() {
484 // Tests handling of a monitor update failure when processing an incoming commitment_signed
485 let node_cfgs = create_node_cfgs(2);
486 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
487 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
488 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
490 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
491 let (payment_preimage, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
492 nodes[0].node.send_payment(route, our_payment_hash, None).unwrap();
493 check_added_monitors!(nodes[0], 1);
495 let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
496 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
498 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
499 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event.commitment_msg);
500 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
501 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
502 check_added_monitors!(nodes[1], 1);
503 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
505 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
506 nodes[1].node.test_restore_channel_monitor();
507 check_added_monitors!(nodes[1], 1);
508 let responses = nodes[1].node.get_and_clear_pending_msg_events();
509 assert_eq!(responses.len(), 2);
512 MessageSendEvent::SendRevokeAndACK { ref msg, ref node_id } => {
513 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
514 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &msg);
515 check_added_monitors!(nodes[0], 1);
517 _ => panic!("Unexpected event"),
520 MessageSendEvent::UpdateHTLCs { ref updates, ref node_id } => {
521 assert!(updates.update_add_htlcs.is_empty());
522 assert!(updates.update_fulfill_htlcs.is_empty());
523 assert!(updates.update_fail_htlcs.is_empty());
524 assert!(updates.update_fail_malformed_htlcs.is_empty());
525 assert!(updates.update_fee.is_none());
526 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
528 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
529 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
530 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
531 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
532 check_added_monitors!(nodes[0], 1);
533 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
535 _ => panic!("Unexpected event"),
538 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
539 nodes[0].node.test_restore_channel_monitor();
540 check_added_monitors!(nodes[0], 1);
542 let final_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
543 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &final_raa);
544 check_added_monitors!(nodes[1], 1);
546 expect_pending_htlcs_forwardable!(nodes[1]);
548 let events = nodes[1].node.get_and_clear_pending_events();
549 assert_eq!(events.len(), 1);
551 Event::PaymentReceived { payment_hash, payment_secret, amt } => {
552 assert_eq!(payment_hash, our_payment_hash);
553 assert_eq!(payment_secret, None);
554 assert_eq!(amt, 1000000);
556 _ => panic!("Unexpected event"),
559 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage, 1_000_000);
563 fn test_monitor_update_fail_no_rebroadcast() {
564 // Tests handling of a monitor update failure when no message rebroadcasting on
565 // test_restore_channel_monitor() is required. Backported from
566 // chanmon_fail_consistency fuzz tests.
567 let node_cfgs = create_node_cfgs(2);
568 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
569 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
570 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
572 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
573 let (payment_preimage_1, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
574 nodes[0].node.send_payment(route, our_payment_hash, None).unwrap();
575 check_added_monitors!(nodes[0], 1);
577 let send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
578 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
579 let bs_raa = commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true, false, true);
581 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
582 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &bs_raa);
583 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
584 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
585 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
586 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
587 check_added_monitors!(nodes[1], 1);
589 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
590 nodes[1].node.test_restore_channel_monitor();
591 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
592 check_added_monitors!(nodes[1], 1);
593 expect_pending_htlcs_forwardable!(nodes[1]);
595 let events = nodes[1].node.get_and_clear_pending_events();
596 assert_eq!(events.len(), 1);
598 Event::PaymentReceived { payment_hash, .. } => {
599 assert_eq!(payment_hash, our_payment_hash);
601 _ => panic!("Unexpected event"),
604 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
608 fn test_monitor_update_raa_while_paused() {
609 // Tests handling of an RAA while monitor updating has already been marked failed.
610 // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
611 let node_cfgs = create_node_cfgs(2);
612 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
613 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
614 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
616 send_payment(&nodes[0], &[&nodes[1]], 5000000, 5_000_000);
618 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
619 let (payment_preimage_1, our_payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
620 nodes[0].node.send_payment(route, our_payment_hash_1, None).unwrap();
621 check_added_monitors!(nodes[0], 1);
622 let send_event_1 = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
624 let route = nodes[1].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
625 let (payment_preimage_2, our_payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
626 nodes[1].node.send_payment(route, our_payment_hash_2, None).unwrap();
627 check_added_monitors!(nodes[1], 1);
628 let send_event_2 = SendEvent::from_event(nodes[1].node.get_and_clear_pending_msg_events().remove(0));
630 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event_1.msgs[0]);
631 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &send_event_1.commitment_msg);
632 check_added_monitors!(nodes[1], 1);
633 let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
635 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
636 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_2.msgs[0]);
637 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_2.commitment_msg);
638 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
639 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
640 check_added_monitors!(nodes[0], 1);
642 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
643 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
644 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
645 check_added_monitors!(nodes[0], 1);
647 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
648 nodes[0].node.test_restore_channel_monitor();
649 check_added_monitors!(nodes[0], 1);
651 let as_update_raa = get_revoke_commit_msgs!(nodes[0], nodes[1].node.get_our_node_id());
652 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_update_raa.0);
653 check_added_monitors!(nodes[1], 1);
654 let bs_cs = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
656 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_update_raa.1);
657 check_added_monitors!(nodes[1], 1);
658 let bs_second_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
660 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_cs.commitment_signed);
661 check_added_monitors!(nodes[0], 1);
662 let as_second_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
664 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_second_raa);
665 check_added_monitors!(nodes[0], 1);
666 expect_pending_htlcs_forwardable!(nodes[0]);
667 expect_payment_received!(nodes[0], our_payment_hash_2, 1000000);
669 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_second_raa);
670 check_added_monitors!(nodes[1], 1);
671 expect_pending_htlcs_forwardable!(nodes[1]);
672 expect_payment_received!(nodes[1], our_payment_hash_1, 1000000);
674 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
675 claim_payment(&nodes[1], &[&nodes[0]], payment_preimage_2, 1_000_000);
678 fn do_test_monitor_update_fail_raa(test_ignore_second_cs: bool) {
679 // Tests handling of a monitor update failure when processing an incoming RAA
680 let node_cfgs = create_node_cfgs(3);
681 let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
682 let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
683 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
684 let chan_2 = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
686 // Rebalance a bit so that we can send backwards from 2 to 1.
687 send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
689 // Route a first payment that we'll fail backwards
690 let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
692 // Fail the payment backwards, failing the monitor update on nodes[1]'s receipt of the RAA
693 assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1, &None));
694 expect_pending_htlcs_forwardable!(nodes[2]);
695 check_added_monitors!(nodes[2], 1);
697 let updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
698 assert!(updates.update_add_htlcs.is_empty());
699 assert!(updates.update_fulfill_htlcs.is_empty());
700 assert_eq!(updates.update_fail_htlcs.len(), 1);
701 assert!(updates.update_fail_malformed_htlcs.is_empty());
702 assert!(updates.update_fee.is_none());
703 nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
705 let bs_revoke_and_ack = commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false, true, false, true);
706 check_added_monitors!(nodes[0], 0);
708 // While the second channel is AwaitingRAA, forward a second payment to get it into the
710 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
711 let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
712 nodes[0].node.send_payment(route, payment_hash_2, None).unwrap();
713 check_added_monitors!(nodes[0], 1);
715 let mut send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
716 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
717 commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false);
719 expect_pending_htlcs_forwardable!(nodes[1]);
720 check_added_monitors!(nodes[1], 0);
721 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
723 // Now fail monitor updating.
724 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
725 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
726 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
727 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
728 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
729 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
730 check_added_monitors!(nodes[1], 1);
732 // Attempt to forward a third payment but fail due to the second channel being unavailable
735 let (_, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
736 let route = nodes[0].router.get_route(&nodes[2].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
737 nodes[0].node.send_payment(route, payment_hash_3, None).unwrap();
738 check_added_monitors!(nodes[0], 1);
740 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(()); // We succeed in updating the monitor for the first channel
741 send_event = SendEvent::from_event(nodes[0].node.get_and_clear_pending_msg_events().remove(0));
742 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &send_event.msgs[0]);
743 commitment_signed_dance!(nodes[1], nodes[0], send_event.commitment_msg, false, true);
744 check_added_monitors!(nodes[1], 0);
746 let mut events_2 = nodes[1].node.get_and_clear_pending_msg_events();
747 assert_eq!(events_2.len(), 1);
748 match events_2.remove(0) {
749 MessageSendEvent::UpdateHTLCs { node_id, updates } => {
750 assert_eq!(node_id, nodes[0].node.get_our_node_id());
751 assert!(updates.update_fulfill_htlcs.is_empty());
752 assert_eq!(updates.update_fail_htlcs.len(), 1);
753 assert!(updates.update_fail_malformed_htlcs.is_empty());
754 assert!(updates.update_add_htlcs.is_empty());
755 assert!(updates.update_fee.is_none());
757 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
758 commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false, true);
760 let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
761 assert_eq!(msg_events.len(), 1);
762 match msg_events[0] {
763 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
764 assert_eq!(msg.contents.short_channel_id, chan_2.0.contents.short_channel_id);
765 assert_eq!(msg.contents.flags & 2, 2); // temp disabled
767 _ => panic!("Unexpected event"),
770 let events = nodes[0].node.get_and_clear_pending_events();
771 assert_eq!(events.len(), 1);
772 if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
773 assert_eq!(payment_hash, payment_hash_3);
774 assert!(!rejected_by_dest);
775 } else { panic!("Unexpected event!"); }
777 _ => panic!("Unexpected event type!"),
780 let (payment_preimage_4, payment_hash_4) = if test_ignore_second_cs {
781 // Try to route another payment backwards from 2 to make sure 1 holds off on responding
782 let (payment_preimage_4, payment_hash_4) = get_payment_preimage_hash!(nodes[0]);
783 let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
784 nodes[2].node.send_payment(route, payment_hash_4, None).unwrap();
785 check_added_monitors!(nodes[2], 1);
787 send_event = SendEvent::from_event(nodes[2].node.get_and_clear_pending_msg_events().remove(0));
788 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &send_event.msgs[0]);
789 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &send_event.commitment_msg);
790 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
791 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
792 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
793 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
794 (Some(payment_preimage_4), Some(payment_hash_4))
795 } else { (None, None) };
797 // Restore monitor updating, ensuring we immediately get a fail-back update and a
798 // update_add update.
799 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
800 nodes[1].node.test_restore_channel_monitor();
801 check_added_monitors!(nodes[1], 1);
802 expect_pending_htlcs_forwardable!(nodes[1]);
803 check_added_monitors!(nodes[1], 1);
805 let mut events_3 = nodes[1].node.get_and_clear_pending_msg_events();
806 if test_ignore_second_cs {
807 assert_eq!(events_3.len(), 3);
809 assert_eq!(events_3.len(), 2);
812 // Note that the ordering of the events for different nodes is non-prescriptive, though the
813 // ordering of the two events that both go to nodes[2] have to stay in the same order.
814 let messages_a = match events_3.pop().unwrap() {
815 MessageSendEvent::UpdateHTLCs { node_id, mut updates } => {
816 assert_eq!(node_id, nodes[0].node.get_our_node_id());
817 assert!(updates.update_fulfill_htlcs.is_empty());
818 assert_eq!(updates.update_fail_htlcs.len(), 1);
819 assert!(updates.update_fail_malformed_htlcs.is_empty());
820 assert!(updates.update_add_htlcs.is_empty());
821 assert!(updates.update_fee.is_none());
822 (updates.update_fail_htlcs.remove(0), updates.commitment_signed)
824 _ => panic!("Unexpected event type!"),
826 let raa = if test_ignore_second_cs {
827 match events_3.remove(1) {
828 MessageSendEvent::SendRevokeAndACK { node_id, msg } => {
829 assert_eq!(node_id, nodes[2].node.get_our_node_id());
832 _ => panic!("Unexpected event"),
835 let send_event_b = SendEvent::from_event(events_3.remove(0));
836 assert_eq!(send_event_b.node_id, nodes[2].node.get_our_node_id());
838 // Now deliver the new messages...
840 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &messages_a.0);
841 commitment_signed_dance!(nodes[0], nodes[1], messages_a.1, false);
842 let events_4 = nodes[0].node.get_and_clear_pending_events();
843 assert_eq!(events_4.len(), 1);
844 if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events_4[0] {
845 assert_eq!(payment_hash, payment_hash_1);
846 assert!(rejected_by_dest);
847 } else { panic!("Unexpected event!"); }
849 nodes[2].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event_b.msgs[0]);
850 if test_ignore_second_cs {
851 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &send_event_b.commitment_msg);
852 check_added_monitors!(nodes[2], 1);
853 let bs_revoke_and_ack = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
854 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &raa.unwrap());
855 check_added_monitors!(nodes[2], 1);
856 let bs_cs = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
857 assert!(bs_cs.update_add_htlcs.is_empty());
858 assert!(bs_cs.update_fail_htlcs.is_empty());
859 assert!(bs_cs.update_fail_malformed_htlcs.is_empty());
860 assert!(bs_cs.update_fulfill_htlcs.is_empty());
861 assert!(bs_cs.update_fee.is_none());
863 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_revoke_and_ack);
864 check_added_monitors!(nodes[1], 1);
865 let as_cs = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
866 assert!(as_cs.update_add_htlcs.is_empty());
867 assert!(as_cs.update_fail_htlcs.is_empty());
868 assert!(as_cs.update_fail_malformed_htlcs.is_empty());
869 assert!(as_cs.update_fulfill_htlcs.is_empty());
870 assert!(as_cs.update_fee.is_none());
872 nodes[1].node.handle_commitment_signed(&nodes[2].node.get_our_node_id(), &bs_cs.commitment_signed);
873 check_added_monitors!(nodes[1], 1);
874 let as_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[2].node.get_our_node_id());
876 nodes[2].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &as_cs.commitment_signed);
877 check_added_monitors!(nodes[2], 1);
878 let bs_second_raa = get_event_msg!(nodes[2], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
880 nodes[2].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &as_raa);
881 check_added_monitors!(nodes[2], 1);
882 assert!(nodes[2].node.get_and_clear_pending_msg_events().is_empty());
884 nodes[1].node.handle_revoke_and_ack(&nodes[2].node.get_our_node_id(), &bs_second_raa);
885 check_added_monitors!(nodes[1], 1);
886 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
888 commitment_signed_dance!(nodes[2], nodes[1], send_event_b.commitment_msg, false);
891 expect_pending_htlcs_forwardable!(nodes[2]);
893 let events_6 = nodes[2].node.get_and_clear_pending_events();
894 assert_eq!(events_6.len(), 1);
896 Event::PaymentReceived { payment_hash, .. } => { assert_eq!(payment_hash, payment_hash_2); },
897 _ => panic!("Unexpected event"),
900 if test_ignore_second_cs {
901 expect_pending_htlcs_forwardable!(nodes[1]);
902 check_added_monitors!(nodes[1], 1);
904 send_event = SendEvent::from_node(&nodes[1]);
905 assert_eq!(send_event.node_id, nodes[0].node.get_our_node_id());
906 assert_eq!(send_event.msgs.len(), 1);
907 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &send_event.msgs[0]);
908 commitment_signed_dance!(nodes[0], nodes[1], send_event.commitment_msg, false);
910 expect_pending_htlcs_forwardable!(nodes[0]);
912 let events_9 = nodes[0].node.get_and_clear_pending_events();
913 assert_eq!(events_9.len(), 1);
915 Event::PaymentReceived { payment_hash, .. } => assert_eq!(payment_hash, payment_hash_4.unwrap()),
916 _ => panic!("Unexpected event"),
918 claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_4.unwrap(), 1_000_000);
921 claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage_2, 1_000_000);
925 fn test_monitor_update_fail_raa() {
926 do_test_monitor_update_fail_raa(false);
927 do_test_monitor_update_fail_raa(true);
931 fn test_monitor_update_fail_reestablish() {
932 // Simple test for message retransmission after monitor update failure on
933 // channel_reestablish generating a monitor update (which comes from freeing holding cell
935 let node_cfgs = create_node_cfgs(3);
936 let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
937 let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
938 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
939 create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
941 let (our_payment_preimage, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
943 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
944 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
946 assert!(nodes[2].node.claim_funds(our_payment_preimage, &None, 1_000_000));
947 check_added_monitors!(nodes[2], 1);
948 let mut updates = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
949 assert!(updates.update_add_htlcs.is_empty());
950 assert!(updates.update_fail_htlcs.is_empty());
951 assert!(updates.update_fail_malformed_htlcs.is_empty());
952 assert!(updates.update_fee.is_none());
953 assert_eq!(updates.update_fulfill_htlcs.len(), 1);
954 nodes[1].node.handle_update_fulfill_htlc(&nodes[2].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
955 check_added_monitors!(nodes[1], 1);
956 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
957 commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
959 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
960 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
961 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
963 let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
964 let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
966 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
968 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
969 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
970 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
971 check_added_monitors!(nodes[1], 1);
973 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
974 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
976 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
977 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
979 assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
980 assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
982 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
984 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
985 check_added_monitors!(nodes[1], 0);
986 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
988 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
989 nodes[1].node.test_restore_channel_monitor();
990 check_added_monitors!(nodes[1], 1);
992 updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
993 assert!(updates.update_add_htlcs.is_empty());
994 assert!(updates.update_fail_htlcs.is_empty());
995 assert!(updates.update_fail_malformed_htlcs.is_empty());
996 assert!(updates.update_fee.is_none());
997 assert_eq!(updates.update_fulfill_htlcs.len(), 1);
998 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
999 commitment_signed_dance!(nodes[0], nodes[1], updates.commitment_signed, false);
1001 let events = nodes[0].node.get_and_clear_pending_events();
1002 assert_eq!(events.len(), 1);
1004 Event::PaymentSent { payment_preimage, .. } => assert_eq!(payment_preimage, our_payment_preimage),
1005 _ => panic!("Unexpected event"),
1010 fn raa_no_response_awaiting_raa_state() {
1011 // This is a rather convoluted test which ensures that if handling of an RAA does not happen
1012 // due to a previous monitor update failure, we still set AwaitingRemoteRevoke on the channel
1013 // in question (assuming it intends to respond with a CS after monitor updating is restored).
1014 // Backported from chanmon_fail_consistency fuzz tests as this used to be broken.
1015 let node_cfgs = create_node_cfgs(2);
1016 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1017 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1018 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1020 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1021 let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1022 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1023 let (payment_preimage_3, payment_hash_3) = get_payment_preimage_hash!(nodes[0]);
1025 // Queue up two payments - one will be delivered right away, one immediately goes into the
1026 // holding cell as nodes[0] is AwaitingRAA. Ultimately this allows us to deliver an RAA
1027 // immediately after a CS. By setting failing the monitor update failure from the CS (which
1028 // requires only an RAA response due to AwaitingRAA) we can deliver the RAA and require the CS
1029 // generation during RAA while in monitor-update-failed state.
1030 nodes[0].node.send_payment(route.clone(), payment_hash_1, None).unwrap();
1031 check_added_monitors!(nodes[0], 1);
1032 nodes[0].node.send_payment(route.clone(), payment_hash_2, None).unwrap();
1033 check_added_monitors!(nodes[0], 0);
1035 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1036 assert_eq!(events.len(), 1);
1037 let payment_event = SendEvent::from_event(events.pop().unwrap());
1038 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1039 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1040 check_added_monitors!(nodes[1], 1);
1042 let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1043 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1044 check_added_monitors!(nodes[0], 1);
1045 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1046 assert_eq!(events.len(), 1);
1047 let payment_event = SendEvent::from_event(events.pop().unwrap());
1049 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1050 check_added_monitors!(nodes[0], 1);
1051 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1053 // Now we have a CS queued up which adds a new HTLC (which will need a RAA/CS response from
1054 // nodes[1]) followed by an RAA. Fail the monitor updating prior to the CS, deliver the RAA,
1055 // then restore channel monitor updates.
1056 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1057 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1058 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1059 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1060 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1061 check_added_monitors!(nodes[1], 1);
1063 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1064 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1065 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented responses to RAA".to_string(), 1);
1066 check_added_monitors!(nodes[1], 1);
1068 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1069 nodes[1].node.test_restore_channel_monitor();
1070 // nodes[1] should be AwaitingRAA here!
1071 check_added_monitors!(nodes[1], 1);
1072 let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1073 expect_pending_htlcs_forwardable!(nodes[1]);
1074 expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1076 // We send a third payment here, which is somewhat of a redundant test, but the
1077 // chanmon_fail_consistency test required it to actually find the bug (by seeing out-of-sync
1078 // commitment transaction states) whereas here we can explicitly check for it.
1079 nodes[0].node.send_payment(route.clone(), payment_hash_3, None).unwrap();
1080 check_added_monitors!(nodes[0], 0);
1081 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1083 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1084 check_added_monitors!(nodes[0], 1);
1085 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1086 assert_eq!(events.len(), 1);
1087 let payment_event = SendEvent::from_event(events.pop().unwrap());
1089 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1090 check_added_monitors!(nodes[0], 1);
1091 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1093 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1094 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1095 check_added_monitors!(nodes[1], 1);
1096 let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1098 // Finally deliver the RAA to nodes[1] which results in a CS response to the last update
1099 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1100 check_added_monitors!(nodes[1], 1);
1101 expect_pending_htlcs_forwardable!(nodes[1]);
1102 expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1103 let bs_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1105 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1106 check_added_monitors!(nodes[0], 1);
1108 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_update.commitment_signed);
1109 check_added_monitors!(nodes[0], 1);
1110 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1112 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1113 check_added_monitors!(nodes[1], 1);
1114 expect_pending_htlcs_forwardable!(nodes[1]);
1115 expect_payment_received!(nodes[1], payment_hash_3, 1000000);
1117 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1118 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1119 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_3, 1_000_000);
1123 fn claim_while_disconnected_monitor_update_fail() {
1124 // Test for claiming a payment while disconnected and then having the resulting
1125 // channel-update-generated monitor update fail. This kind of thing isn't a particularly
1126 // contrived case for nodes with network instability.
1127 // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1128 // code introduced a regression in this test (specifically, this caught a removal of the
1129 // channel_reestablish handling ensuring the order was sensical given the messages used).
1130 let node_cfgs = create_node_cfgs(2);
1131 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1132 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1133 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1135 // Forward a payment for B to claim
1136 let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1138 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1139 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1141 assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1142 check_added_monitors!(nodes[1], 1);
1144 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1145 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1147 let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1148 let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1150 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1151 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1153 // Now deliver a's reestablish, freeing the claim from the holding cell, but fail the monitor
1155 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1157 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1158 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1159 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1160 check_added_monitors!(nodes[1], 1);
1161 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1163 // Send a second payment from A to B, resulting in a commitment update that gets swallowed with
1164 // the monitor still failed
1165 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1166 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1167 nodes[0].node.send_payment(route, payment_hash_2, None).unwrap();
1168 check_added_monitors!(nodes[0], 1);
1170 let as_updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1171 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &as_updates.update_add_htlcs[0]);
1172 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_updates.commitment_signed);
1173 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1174 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1175 // Note that nodes[1] not updating monitor here is OK - it wont take action on the new HTLC
1176 // until we've test_restore_channel_monitor'd and updated for the new commitment transaction.
1178 // Now un-fail the monitor, which will result in B sending its original commitment update,
1179 // receiving the commitment update from A, and the resulting commitment dances.
1180 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1181 nodes[1].node.test_restore_channel_monitor();
1182 check_added_monitors!(nodes[1], 1);
1184 let bs_msgs = nodes[1].node.get_and_clear_pending_msg_events();
1185 assert_eq!(bs_msgs.len(), 2);
1188 MessageSendEvent::UpdateHTLCs { ref node_id, ref updates } => {
1189 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1190 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &updates.update_fulfill_htlcs[0]);
1191 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &updates.commitment_signed);
1192 check_added_monitors!(nodes[0], 1);
1194 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1195 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1196 check_added_monitors!(nodes[1], 1);
1198 _ => panic!("Unexpected event"),
1202 MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
1203 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1204 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), msg);
1205 check_added_monitors!(nodes[0], 1);
1207 _ => panic!("Unexpected event"),
1210 let as_commitment = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
1212 let bs_commitment = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1213 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_commitment.commitment_signed);
1214 check_added_monitors!(nodes[0], 1);
1215 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1217 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &as_commitment.commitment_signed);
1218 check_added_monitors!(nodes[1], 1);
1219 let bs_raa = get_event_msg!(nodes[1], MessageSendEvent::SendRevokeAndACK, nodes[0].node.get_our_node_id());
1220 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1221 check_added_monitors!(nodes[1], 1);
1223 expect_pending_htlcs_forwardable!(nodes[1]);
1224 expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1226 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_raa);
1227 check_added_monitors!(nodes[0], 1);
1229 let events = nodes[0].node.get_and_clear_pending_events();
1230 assert_eq!(events.len(), 1);
1232 Event::PaymentSent { ref payment_preimage } => {
1233 assert_eq!(*payment_preimage, payment_preimage_1);
1235 _ => panic!("Unexpected event"),
1238 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1242 fn monitor_failed_no_reestablish_response() {
1243 // Test for receiving a channel_reestablish after a monitor update failure resulted in no
1244 // response to a commitment_signed.
1245 // Backported from chanmon_fail_consistency fuzz tests as it caught a long-standing
1246 // debug_assert!() failure in channel_reestablish handling.
1247 let node_cfgs = create_node_cfgs(2);
1248 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1249 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1250 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1252 // Route the payment and deliver the initial commitment_signed (with a monitor update failure
1254 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1255 let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1256 nodes[0].node.send_payment(route, payment_hash_1, None).unwrap();
1257 check_added_monitors!(nodes[0], 1);
1259 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1260 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1261 assert_eq!(events.len(), 1);
1262 let payment_event = SendEvent::from_event(events.pop().unwrap());
1263 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1264 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1265 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1266 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1267 check_added_monitors!(nodes[1], 1);
1269 // Now disconnect and immediately reconnect, delivering the channel_reestablish while nodes[1]
1270 // is still failing to update monitors.
1271 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1272 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1274 nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1275 nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1277 let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
1278 let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
1280 nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1281 nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1283 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1284 nodes[1].node.test_restore_channel_monitor();
1285 check_added_monitors!(nodes[1], 1);
1286 let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1288 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1289 check_added_monitors!(nodes[0], 1);
1290 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1291 check_added_monitors!(nodes[0], 1);
1293 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1294 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1295 check_added_monitors!(nodes[1], 1);
1297 expect_pending_htlcs_forwardable!(nodes[1]);
1298 expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1300 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1304 fn first_message_on_recv_ordering() {
1305 // Test that if the initial generator of a monitor-update-frozen state doesn't generate
1306 // messages, we're willing to flip the order of response messages if neccessary in resposne to
1307 // a commitment_signed which needs to send an RAA first.
1308 // At a high level, our goal is to fail monitor updating in response to an RAA which needs no
1309 // response and then handle a CS while in the failed state, requiring an RAA followed by a CS
1310 // response. To do this, we start routing two payments, with the final RAA for the first being
1311 // delivered while B is in AwaitingRAA, hence when we deliver the CS for the second B will
1312 // have no pending response but will want to send a RAA/CS (with the updates for the second
1313 // payment applied).
1314 // Backported from chanmon_fail_consistency fuzz tests as it caught a bug here.
1315 let node_cfgs = create_node_cfgs(2);
1316 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1317 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1318 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1320 // Route the first payment outbound, holding the last RAA for B until we are set up so that we
1321 // can deliver it and fail the monitor update.
1322 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1323 let (payment_preimage_1, payment_hash_1) = get_payment_preimage_hash!(nodes[0]);
1324 nodes[0].node.send_payment(route, payment_hash_1, None).unwrap();
1325 check_added_monitors!(nodes[0], 1);
1327 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1328 assert_eq!(events.len(), 1);
1329 let payment_event = SendEvent::from_event(events.pop().unwrap());
1330 assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1331 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1332 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1333 check_added_monitors!(nodes[1], 1);
1334 let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1336 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1337 check_added_monitors!(nodes[0], 1);
1338 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1339 check_added_monitors!(nodes[0], 1);
1341 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1343 // Route the second payment, generating an update_add_htlc/commitment_signed
1344 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1345 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1346 nodes[0].node.send_payment(route, payment_hash_2, None).unwrap();
1347 check_added_monitors!(nodes[0], 1);
1348 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1349 assert_eq!(events.len(), 1);
1350 let payment_event = SendEvent::from_event(events.pop().unwrap());
1351 assert_eq!(payment_event.node_id, nodes[1].node.get_our_node_id());
1353 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1355 // Deliver the final RAA for the first payment, which does not require a response. RAAs
1356 // generally require a commitment_signed, so the fact that we're expecting an opposite response
1357 // to the next message also tests resetting the delivery order.
1358 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1359 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1360 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1361 check_added_monitors!(nodes[1], 1);
1363 // Now deliver the update_add_htlc/commitment_signed for the second payment, which does need an
1364 // RAA/CS response, which should be generated when we call test_restore_channel_monitor (with
1365 // the appropriate HTLC acceptance).
1366 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1367 nodes[1].node.handle_commitment_signed(&nodes[0].node.get_our_node_id(), &payment_event.commitment_msg);
1368 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1369 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented generation of RAA".to_string(), 1);
1371 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1372 nodes[1].node.test_restore_channel_monitor();
1373 check_added_monitors!(nodes[1], 1);
1375 expect_pending_htlcs_forwardable!(nodes[1]);
1376 expect_payment_received!(nodes[1], payment_hash_1, 1000000);
1378 let bs_responses = get_revoke_commit_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1379 nodes[0].node.handle_revoke_and_ack(&nodes[1].node.get_our_node_id(), &bs_responses.0);
1380 check_added_monitors!(nodes[0], 1);
1381 nodes[0].node.handle_commitment_signed(&nodes[1].node.get_our_node_id(), &bs_responses.1);
1382 check_added_monitors!(nodes[0], 1);
1384 let as_raa = get_event_msg!(nodes[0], MessageSendEvent::SendRevokeAndACK, nodes[1].node.get_our_node_id());
1385 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1386 check_added_monitors!(nodes[1], 1);
1388 expect_pending_htlcs_forwardable!(nodes[1]);
1389 expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1391 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_1, 1_000_000);
1392 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1396 fn test_monitor_update_fail_claim() {
1397 // Basic test for monitor update failures when processing claim_funds calls.
1398 // We set up a simple 3-node network, sending a payment from A to B and failing B's monitor
1399 // update to claim the payment. We then send a payment C->B->A, making the forward of this
1400 // payment from B to A fail due to the paused channel. Finally, we restore the channel monitor
1401 // updating and claim the payment on B.
1402 let node_cfgs = create_node_cfgs(3);
1403 let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1404 let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1405 let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1406 create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1408 // Rebalance a bit so that we can send backwards from 3 to 2.
1409 send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
1411 let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1413 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1414 assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1415 check_added_monitors!(nodes[1], 1);
1417 let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1418 let (_, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1419 nodes[2].node.send_payment(route, payment_hash_2, None).unwrap();
1420 check_added_monitors!(nodes[2], 1);
1422 // Successfully update the monitor on the 1<->2 channel, but the 0<->1 channel should still be
1423 // paused, so forward shouldn't succeed until we call test_restore_channel_monitor().
1424 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1426 let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1427 assert_eq!(events.len(), 1);
1428 let payment_event = SendEvent::from_event(events.pop().unwrap());
1429 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1430 let events = nodes[1].node.get_and_clear_pending_msg_events();
1431 assert_eq!(events.len(), 0);
1432 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1433 commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false, true);
1435 let bs_fail_update = get_htlc_update_msgs!(nodes[1], nodes[2].node.get_our_node_id());
1436 nodes[2].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_fail_update.update_fail_htlcs[0]);
1437 commitment_signed_dance!(nodes[2], nodes[1], bs_fail_update.commitment_signed, false, true);
1439 let msg_events = nodes[2].node.get_and_clear_pending_msg_events();
1440 assert_eq!(msg_events.len(), 1);
1441 match msg_events[0] {
1442 MessageSendEvent::PaymentFailureNetworkUpdate { update: msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg }} => {
1443 assert_eq!(msg.contents.short_channel_id, chan_1.0.contents.short_channel_id);
1444 assert_eq!(msg.contents.flags & 2, 2); // temp disabled
1446 _ => panic!("Unexpected event"),
1449 let events = nodes[2].node.get_and_clear_pending_events();
1450 assert_eq!(events.len(), 1);
1451 if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1452 assert_eq!(payment_hash, payment_hash_2);
1453 assert!(!rejected_by_dest);
1454 } else { panic!("Unexpected event!"); }
1456 // Now restore monitor updating on the 0<->1 channel and claim the funds on B.
1457 nodes[1].node.test_restore_channel_monitor();
1458 check_added_monitors!(nodes[1], 1);
1460 let bs_fulfill_update = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1461 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_fulfill_update.update_fulfill_htlcs[0]);
1462 commitment_signed_dance!(nodes[0], nodes[1], bs_fulfill_update.commitment_signed, false);
1464 let events = nodes[0].node.get_and_clear_pending_events();
1465 assert_eq!(events.len(), 1);
1466 if let Event::PaymentSent { payment_preimage, .. } = events[0] {
1467 assert_eq!(payment_preimage, payment_preimage_1);
1468 } else { panic!("Unexpected event!"); }
1472 fn test_monitor_update_on_pending_forwards() {
1473 // Basic test for monitor update failures when processing pending HTLC fail/add forwards.
1474 // We do this with a simple 3-node network, sending a payment from A to C and one from C to A.
1475 // The payment from A to C will be failed by C and pending a back-fail to A, while the payment
1476 // from C to A will be pending a forward to A.
1477 let node_cfgs = create_node_cfgs(3);
1478 let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
1479 let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs);
1480 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1481 create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::supported(), InitFeatures::supported());
1483 // Rebalance a bit so that we can send backwards from 3 to 1.
1484 send_payment(&nodes[0], &[&nodes[1], &nodes[2]], 5000000, 5_000_000);
1486 let (_, payment_hash_1) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000);
1487 assert!(nodes[2].node.fail_htlc_backwards(&payment_hash_1, &None));
1488 expect_pending_htlcs_forwardable!(nodes[2]);
1489 check_added_monitors!(nodes[2], 1);
1491 let cs_fail_update = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
1492 nodes[1].node.handle_update_fail_htlc(&nodes[2].node.get_our_node_id(), &cs_fail_update.update_fail_htlcs[0]);
1493 commitment_signed_dance!(nodes[1], nodes[2], cs_fail_update.commitment_signed, true, true);
1494 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1496 let route = nodes[2].router.get_route(&nodes[0].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1497 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1498 nodes[2].node.send_payment(route, payment_hash_2, None).unwrap();
1499 check_added_monitors!(nodes[2], 1);
1501 let mut events = nodes[2].node.get_and_clear_pending_msg_events();
1502 assert_eq!(events.len(), 1);
1503 let payment_event = SendEvent::from_event(events.pop().unwrap());
1504 nodes[1].node.handle_update_add_htlc(&nodes[2].node.get_our_node_id(), &payment_event.msgs[0]);
1505 commitment_signed_dance!(nodes[1], nodes[2], payment_event.commitment_msg, false);
1507 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1508 expect_pending_htlcs_forwardable!(nodes[1]);
1509 check_added_monitors!(nodes[1], 1);
1510 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1511 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1513 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1514 nodes[1].node.test_restore_channel_monitor();
1515 check_added_monitors!(nodes[1], 1);
1517 let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1518 nodes[0].node.handle_update_fail_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fail_htlcs[0]);
1519 nodes[0].node.handle_update_add_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_add_htlcs[0]);
1520 commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false, true);
1522 let events = nodes[0].node.get_and_clear_pending_events();
1523 assert_eq!(events.len(), 2);
1524 if let Event::PaymentFailed { payment_hash, rejected_by_dest, .. } = events[0] {
1525 assert_eq!(payment_hash, payment_hash_1);
1526 assert!(rejected_by_dest);
1527 } else { panic!("Unexpected event!"); }
1529 Event::PendingHTLCsForwardable { .. } => { },
1530 _ => panic!("Unexpected event"),
1532 nodes[0].node.process_pending_htlc_forwards();
1533 expect_payment_received!(nodes[0], payment_hash_2, 1000000);
1535 claim_payment(&nodes[2], &[&nodes[1], &nodes[0]], payment_preimage_2, 1_000_000);
1539 fn monitor_update_claim_fail_no_response() {
1540 // Test for claim_funds resulting in both a monitor update failure and no message response (due
1541 // to channel being AwaitingRAA).
1542 // Backported from chanmon_fail_consistency fuzz tests as an unmerged version of the handling
1544 let node_cfgs = create_node_cfgs(2);
1545 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1546 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1547 create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::supported(), InitFeatures::supported());
1549 // Forward a payment for B to claim
1550 let (payment_preimage_1, _) = route_payment(&nodes[0], &[&nodes[1]], 1000000);
1552 // Now start forwarding a second payment, skipping the last RAA so B is in AwaitingRAA
1553 let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
1554 let (payment_preimage_2, payment_hash_2) = get_payment_preimage_hash!(nodes[0]);
1555 nodes[0].node.send_payment(route, payment_hash_2, None).unwrap();
1556 check_added_monitors!(nodes[0], 1);
1558 let mut events = nodes[0].node.get_and_clear_pending_msg_events();
1559 assert_eq!(events.len(), 1);
1560 let payment_event = SendEvent::from_event(events.pop().unwrap());
1561 nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
1562 let as_raa = commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false, true, false, true);
1564 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1565 assert!(nodes[1].node.claim_funds(payment_preimage_1, &None, 1_000_000));
1566 check_added_monitors!(nodes[1], 1);
1567 let events = nodes[1].node.get_and_clear_pending_msg_events();
1568 assert_eq!(events.len(), 0);
1569 nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1571 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1572 nodes[1].node.test_restore_channel_monitor();
1573 check_added_monitors!(nodes[1], 1);
1574 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1576 nodes[1].node.handle_revoke_and_ack(&nodes[0].node.get_our_node_id(), &as_raa);
1577 check_added_monitors!(nodes[1], 1);
1578 expect_pending_htlcs_forwardable!(nodes[1]);
1579 expect_payment_received!(nodes[1], payment_hash_2, 1000000);
1581 let bs_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
1582 nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &bs_updates.update_fulfill_htlcs[0]);
1583 commitment_signed_dance!(nodes[0], nodes[1], bs_updates.commitment_signed, false);
1585 let events = nodes[0].node.get_and_clear_pending_events();
1586 assert_eq!(events.len(), 1);
1588 Event::PaymentSent { ref payment_preimage } => {
1589 assert_eq!(*payment_preimage, payment_preimage_1);
1591 _ => panic!("Unexpected event"),
1594 claim_payment(&nodes[0], &[&nodes[1]], payment_preimage_2, 1_000_000);
1597 // Note that restore_between_fails with !fail_on_generate is useless
1598 // Also note that !fail_on_generate && !fail_on_signed is useless
1599 // Finally, note that !fail_on_signed is not possible with fail_on_generate && !restore_between_fails
1600 // confirm_a_first and restore_b_before_conf are wholly unrelated to earlier bools and
1601 // restore_b_before_conf has no meaning if !confirm_a_first
1602 fn do_during_funding_monitor_fail(fail_on_generate: bool, restore_between_fails: bool, fail_on_signed: bool, confirm_a_first: bool, restore_b_before_conf: bool) {
1603 // Test that if the monitor update generated by funding_transaction_generated fails we continue
1604 // the channel setup happily after the update is restored.
1605 let node_cfgs = create_node_cfgs(2);
1606 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
1607 let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1609 nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100000, 10001, 43).unwrap();
1610 nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id()));
1611 nodes[0].node.handle_accept_channel(&nodes[1].node.get_our_node_id(), InitFeatures::supported(), &get_event_msg!(nodes[1], MessageSendEvent::SendAcceptChannel, nodes[0].node.get_our_node_id()));
1613 let (temporary_channel_id, funding_tx, funding_output) = create_funding_transaction(&nodes[0], 100000, 43);
1615 if fail_on_generate {
1616 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1618 nodes[0].node.funding_transaction_generated(&temporary_channel_id, funding_output);
1619 check_added_monitors!(nodes[0], 1);
1621 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1622 nodes[1].node.handle_funding_created(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendFundingCreated, nodes[1].node.get_our_node_id()));
1623 check_added_monitors!(nodes[1], 1);
1625 if restore_between_fails {
1626 assert!(fail_on_generate);
1627 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
1628 nodes[0].node.test_restore_channel_monitor();
1629 check_added_monitors!(nodes[0], 1);
1630 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1631 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1635 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
1637 assert!(restore_between_fails || !fail_on_generate); // We can't switch to good now (there's no monitor update)
1638 assert!(fail_on_generate); // Somebody has to fail
1640 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()));
1641 if fail_on_signed || !restore_between_fails {
1642 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1643 if fail_on_generate && !restore_between_fails {
1644 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Previous monitor update failure prevented funding_signed from allowing funding broadcast".to_string(), 1);
1645 check_added_monitors!(nodes[0], 0);
1647 nodes[0].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
1648 check_added_monitors!(nodes[0], 1);
1650 assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
1651 *nodes[0].chan_monitor.update_ret.lock().unwrap() = Ok(());
1652 nodes[0].node.test_restore_channel_monitor();
1655 check_added_monitors!(nodes[0], 1);
1657 let events = nodes[0].node.get_and_clear_pending_events();
1658 assert_eq!(events.len(), 1);
1660 Event::FundingBroadcastSafe { ref funding_txo, user_channel_id } => {
1661 assert_eq!(user_channel_id, 43);
1662 assert_eq!(*funding_txo, funding_output);
1664 _ => panic!("Unexpected event"),
1667 if confirm_a_first {
1668 confirm_transaction(&nodes[0].block_notifier, &nodes[0].chain_monitor, &funding_tx, funding_tx.version);
1669 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()));
1671 assert!(!restore_b_before_conf);
1672 confirm_transaction(&nodes[1].block_notifier, &nodes[1].chain_monitor, &funding_tx, funding_tx.version);
1673 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1676 // Make sure nodes[1] isn't stupid enough to re-send the FundingLocked on reconnect
1677 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
1678 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
1679 reconnect_nodes(&nodes[0], &nodes[1], (false, confirm_a_first), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
1680 assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1681 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1683 if !restore_b_before_conf {
1684 confirm_transaction(&nodes[1].block_notifier, &nodes[1].chain_monitor, &funding_tx, funding_tx.version);
1685 assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1686 assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
1689 *nodes[1].chan_monitor.update_ret.lock().unwrap() = Ok(());
1690 nodes[1].node.test_restore_channel_monitor();
1691 check_added_monitors!(nodes[1], 1);
1693 let (channel_id, (announcement, as_update, bs_update)) = if !confirm_a_first {
1694 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()));
1696 confirm_transaction(&nodes[0].block_notifier, &nodes[0].chain_monitor, &funding_tx, funding_tx.version);
1697 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[1], &nodes[0]);
1698 (channel_id, create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &funding_locked))
1700 if restore_b_before_conf {
1701 confirm_transaction(&nodes[1].block_notifier, &nodes[1].chain_monitor, &funding_tx, funding_tx.version);
1703 let (funding_locked, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[0], &nodes[1]);
1704 (channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &funding_locked))
1706 for node in nodes.iter() {
1707 assert!(node.router.handle_channel_announcement(&announcement).unwrap());
1708 node.router.handle_channel_update(&as_update).unwrap();
1709 node.router.handle_channel_update(&bs_update).unwrap();
1712 send_payment(&nodes[0], &[&nodes[1]], 8000000, 8_000_000);
1713 close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, true);
1717 fn during_funding_monitor_fail() {
1718 do_during_funding_monitor_fail(false, false, true, true, true);
1719 do_during_funding_monitor_fail(true, false, true, false, false);
1720 do_during_funding_monitor_fail(true, true, true, true, false);
1721 do_during_funding_monitor_fail(true, true, false, false, false);