]> git.bitcoin.ninja Git - rust-lightning/blobdiff - fuzz/src/chanmon_consistency.rs
[fuzz] Handle monitor updates during get_and_clear_pending_msg_events
[rust-lightning] / fuzz / src / chanmon_consistency.rs
index 4da65f7a2ab8d94f122e18930f2dc6d687b770f7..b564e556d39f29ba493109ac53f2ccea1ba4a456 100644 (file)
@@ -40,7 +40,7 @@ use lightning::chain::keysinterface::{KeysInterface, InMemorySigner};
 use lightning::ln::{PaymentHash, PaymentPreimage, PaymentSecret};
 use lightning::ln::channelmanager::{BestBlock, ChainParameters, ChannelManager, PaymentSendFailure, ChannelManagerReadArgs};
 use lightning::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
-use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, DecodeError, ErrorAction, UpdateAddHTLC, Init};
+use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, DecodeError, UpdateAddHTLC, Init};
 use lightning::util::enforcing_trait_impls::{EnforcingSigner, INITIAL_REVOKED_COMMITMENT_NUMBER};
 use lightning::util::errors::APIError;
 use lightning::util::events;
@@ -603,6 +603,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                                events::MessageSendEvent::SendFundingLocked { .. } => {
                                                        // Can be generated as a reestablish response
                                                },
+                                               events::MessageSendEvent::SendAnnouncementSignatures { .. } => {
+                                                       // Can be generated as a reestablish response
+                                               },
                                                events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {
                                                        // Can be generated due to a payment forward being rejected due to a
                                                        // channel having previously failed a monitor update
@@ -623,8 +626,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                                        events::MessageSendEvent::SendRevokeAndACK { .. } => {},
                                                        events::MessageSendEvent::SendChannelReestablish { .. } => {},
                                                        events::MessageSendEvent::SendFundingLocked { .. } => {},
+                                                       events::MessageSendEvent::SendAnnouncementSignatures { .. } => {},
                                                        events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
-                                                       events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => {},
                                                        _ => panic!("Unhandled message event"),
                                                }
                                        }
@@ -636,8 +639,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                                        events::MessageSendEvent::SendRevokeAndACK { .. } => {},
                                                        events::MessageSendEvent::SendChannelReestablish { .. } => {},
                                                        events::MessageSendEvent::SendFundingLocked { .. } => {},
+                                                       events::MessageSendEvent::SendAnnouncementSignatures { .. } => {},
                                                        events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
-                                                       events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => {},
                                                        _ => panic!("Unhandled message event"),
                                                }
                                        }
@@ -649,17 +652,17 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                for event in events.drain(..) {
                                        let push = match event {
                                                events::MessageSendEvent::UpdateHTLCs { ref node_id, .. } => {
-                                                       if *node_id != drop_node_id { true } else { false }
+                                                       if *node_id != drop_node_id { true } else { panic!("peer_disconnected should drop msgs bound for the disconnected peer"); }
                                                },
                                                events::MessageSendEvent::SendRevokeAndACK { ref node_id, .. } => {
-                                                       if *node_id != drop_node_id { true } else { false }
+                                                       if *node_id != drop_node_id { true } else { panic!("peer_disconnected should drop msgs bound for the disconnected peer"); }
                                                },
                                                events::MessageSendEvent::SendChannelReestablish { ref node_id, .. } => {
-                                                       if *node_id != drop_node_id { true } else { false }
+                                                       if *node_id != drop_node_id { true } else { panic!("peer_disconnected should drop msgs bound for the disconnected peer"); }
                                                },
                                                events::MessageSendEvent::SendFundingLocked { .. } => false,
+                                               events::MessageSendEvent::SendAnnouncementSignatures { .. } => false,
                                                events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => false,
-                                               events::MessageSendEvent::HandleError { action: ErrorAction::IgnoreError, .. } => false,
                                                _ => panic!("Unhandled message event"),
                                        };
                                        if push { msg_sink.push(event); }
@@ -797,6 +800,10 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                        chan_a_disconnected = true;
                                        drain_msg_events_on_disconnect!(0);
                                }
+                               if monitor_a.should_update_manager.load(atomic::Ordering::Relaxed) {
+                                       node_a_ser.0.clear();
+                                       nodes[0].write(&mut node_a_ser).unwrap();
+                               }
                                let (new_node_a, new_monitor_a) = reload_node!(node_a_ser, 0, monitor_a, keys_manager_a);
                                nodes[0] = new_node_a;
                                monitor_a = new_monitor_a;
@@ -824,6 +831,10 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
                                        chan_b_disconnected = true;
                                        drain_msg_events_on_disconnect!(2);
                                }
+                               if monitor_c.should_update_manager.load(atomic::Ordering::Relaxed) {
+                                       node_c_ser.0.clear();
+                                       nodes[2].write(&mut node_c_ser).unwrap();
+                               }
                                let (new_node_c, new_monitor_c) = reload_node!(node_c_ser, 2, monitor_c, keys_manager_c);
                                nodes[2] = new_node_c;
                                monitor_c = new_monitor_c;