Merge pull request #593 from TheBlueMatt/2020-04-par-fuzz-check
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Fri, 24 Apr 2020 20:52:19 +0000 (20:52 +0000)
committerGitHub <noreply@github.com>
Fri, 24 Apr 2020 20:52:19 +0000 (20:52 +0000)
Thread fuzz test cases

1  2 
fuzz/src/chanmon_consistency.rs
fuzz/src/chanmon_deser.rs

index 07a632d0a4e0b60adbf9f547281ce3e984b28295,c524eab400ee5d005f0849cd598d72b83a1ed369..fcc88454fe5e5290433d0ae7860e0757f63082af
@@@ -73,9 -73,9 +73,9 @@@ impl Writer for VecWriter 
        }
  }
  
 -pub struct TestChannelMonitor {
 +struct TestChannelMonitor {
        pub logger: Arc<dyn Logger>,
 -      pub simple_monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<BroadcasterInterface>, Arc<FeeEstimator>>>,
 +      pub simple_monitor: Arc<channelmonitor::SimpleManyChannelMonitor<OutPoint, EnforcingChannelKeys, Arc<TestBroadcaster>, Arc<FuzzEstimator>>>,
        pub update_ret: Mutex<Result<(), channelmonitor::ChannelMonitorUpdateErr>>,
        // If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
        // logic will automatically force-close our channels for us (as we don't have an up-to-date
@@@ -86,7 -86,7 +86,7 @@@
        pub should_update_manager: atomic::AtomicBool,
  }
  impl TestChannelMonitor {
 -      pub fn new(chain_monitor: Arc<dyn chaininterface::ChainWatchInterface>, broadcaster: Arc<dyn chaininterface::BroadcasterInterface>, logger: Arc<dyn Logger>, feeest: Arc<FeeEstimator>) -> Self {
 +      pub fn new(chain_monitor: Arc<dyn chaininterface::ChainWatchInterface>, broadcaster: Arc<TestBroadcaster>, logger: Arc<dyn Logger>, feeest: Arc<FuzzEstimator>) -> Self {
                Self {
                        simple_monitor: Arc::new(channelmonitor::SimpleManyChannelMonitor::new(chain_monitor, broadcaster, logger.clone(), feeest)),
                        logger,
@@@ -180,13 -180,13 +180,13 @@@ impl KeysInterface for KeyProvider 
  }
  
  #[inline]
- pub fn do_test(data: &[u8]) {
+ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
        let fee_est = Arc::new(FuzzEstimator{});
        let broadcast = Arc::new(TestBroadcaster{});
  
        macro_rules! make_node {
                ($node_id: expr) => { {
-                       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string()));
+                       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string(), out.clone()));
                        let watch = Arc::new(ChainWatchInterfaceUtil::new(Network::Bitcoin, Arc::clone(&logger)));
                        let monitor = Arc::new(TestChannelMonitor::new(watch.clone(), broadcast.clone(), logger.clone(), fee_est.clone()));
  
  
        macro_rules! reload_node {
                ($ser: expr, $node_id: expr, $old_monitors: expr) => { {
-                       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string()));
+                       let logger: Arc<dyn Logger> = Arc::new(test_logger::TestLogger::new($node_id.to_string(), out.clone()));
                        let watch = Arc::new(ChainWatchInterfaceUtil::new(Network::Bitcoin, Arc::clone(&logger)));
                        let monitor = Arc::new(TestChannelMonitor::new(watch.clone(), broadcast.clone(), logger.clone(), fee_est.clone()));
  
        }
  }
  
+ pub fn chanmon_consistency_test<Out: test_logger::Output>(data: &[u8], out: Out) {
+       do_test(data, out);
+ }
  #[no_mangle]
  pub extern "C" fn chanmon_consistency_run(data: *const u8, datalen: usize) {
-       do_test(unsafe { std::slice::from_raw_parts(data, datalen) });
+       do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{});
  }
index dc12f5e720781bf4384ea9c9291d7175c0ae7932,cd8f7cde800a05b571257d253f197fb385ebe20e..abff1319a9bccd4fabdfe68ec28fdc8279c1312c
@@@ -24,18 -24,24 +24,22 @@@ impl Writer for VecWriter 
  }
  
  #[inline]
- pub fn do_test(data: &[u8]) {
-       let logger = Arc::new(test_logger::TestLogger::new("".to_owned()));
+ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
+       let logger = Arc::new(test_logger::TestLogger::new("".to_owned(), out));
        if let Ok((latest_block_hash, monitor)) = <(Sha256dHash, channelmonitor::ChannelMonitor<EnforcingChannelKeys>)>::read(&mut Cursor::new(data), logger.clone()) {
                let mut w = VecWriter(Vec::new());
                monitor.write_for_disk(&mut w).unwrap();
                let deserialized_copy = <(Sha256dHash, channelmonitor::ChannelMonitor<EnforcingChannelKeys>)>::read(&mut Cursor::new(&w.0), logger.clone()).unwrap();
                assert!(latest_block_hash == deserialized_copy.0);
                assert!(monitor == deserialized_copy.1);
 -              w.0.clear();
 -              monitor.write_for_watchtower(&mut w).unwrap();
        }
  }
  
+ pub fn chanmon_deser_test<Out: test_logger::Output>(data: &[u8], out: Out) {
+       do_test(data, out);
+ }
  #[no_mangle]
  pub extern "C" fn chanmon_deser_run(data: *const u8, datalen: usize) {
-       do_test(unsafe { std::slice::from_raw_parts(data, datalen) });
+       do_test(unsafe { std::slice::from_raw_parts(data, datalen) }, test_logger::DevNull{});
  }