X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=fuzz%2Fsrc%2Ffull_stack.rs;h=3acf7ba53ca7c642c6d3bcf4685480eab1131741;hb=3f2efcdfa73ee703093107f908cc7eeb0aa467e8;hp=bffb3e8e214b3a1d6d4d4d75c3e46e4dc6dabfa5;hpb=fe8569638ca8ed014db29a2f48d14c40d1a60d09;p=rust-lightning diff --git a/fuzz/src/full_stack.rs b/fuzz/src/full_stack.rs index bffb3e8e..3acf7ba5 100644 --- a/fuzz/src/full_stack.rs +++ b/fuzz/src/full_stack.rs @@ -51,7 +51,7 @@ use bitcoin::secp256k1::Secp256k1; use std::cell::RefCell; use std::collections::{HashMap, hash_map}; use std::cmp; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use std::sync::atomic::{AtomicU64,AtomicUsize,Ordering}; #[inline] @@ -116,9 +116,13 @@ impl FeeEstimator for FuzzEstimator { } } -struct TestBroadcaster {} +struct TestBroadcaster { + txn_broadcasted: Mutex>, +} impl BroadcasterInterface for TestBroadcaster { - fn broadcast_transaction(&self, _tx: &Transaction) {} + fn broadcast_transaction(&self, tx: &Transaction) { + self.txn_broadcasted.lock().unwrap().push(tx.clone()); + } } #[derive(Clone)] @@ -340,7 +344,7 @@ pub fn do_test(data: &[u8], logger: &Arc) { Err(_) => return, }; - let broadcast = Arc::new(TestBroadcaster{}); + let broadcast = Arc::new(TestBroadcaster{ txn_broadcasted: Mutex::new(Vec::new()) }); let monitor = Arc::new(chainmonitor::ChainMonitor::new(None, broadcast.clone(), Arc::clone(&logger), fee_est.clone(), Arc::new(TestPersister{}))); let keys_manager = Arc::new(KeyProvider { node_secret: our_network_key.clone(), counter: AtomicU64::new(0) }); @@ -370,7 +374,6 @@ pub fn do_test(data: &[u8], logger: &Arc) { let mut payments_sent = 0; let mut pending_funding_generation: Vec<([u8; 32], u64, Script)> = Vec::new(); let mut pending_funding_signatures = HashMap::new(); - let mut pending_funding_relay = Vec::new(); loop { match get_slice!(1)[0] { @@ -513,18 +516,19 @@ pub fn do_test(data: &[u8], logger: &Arc) { continue 'outer_loop; } }; - channelmanager.funding_transaction_generated(&funding_generation.0, funding_output.clone()); + channelmanager.funding_transaction_generated(&funding_generation.0, tx.clone()).unwrap(); pending_funding_signatures.insert(funding_output, tx); } }, 11 => { - if !pending_funding_relay.is_empty() { - loss_detector.connect_block(&pending_funding_relay[..]); + let mut txn = broadcast.txn_broadcasted.lock().unwrap(); + if !txn.is_empty() { + loss_detector.connect_block(&txn[..]); for _ in 2..100 { loss_detector.connect_block(&[]); } } - for tx in pending_funding_relay.drain(..) { + for tx in txn.drain(..) { loss_detector.funding_txn.push(tx); } }, @@ -566,9 +570,6 @@ pub fn do_test(data: &[u8], logger: &Arc) { Event::FundingGenerationReady { temporary_channel_id, channel_value_satoshis, output_script, .. } => { pending_funding_generation.push((temporary_channel_id, channel_value_satoshis, output_script)); }, - Event::FundingBroadcastSafe { funding_txo, .. } => { - pending_funding_relay.push(pending_funding_signatures.remove(&funding_txo).unwrap()); - }, Event::PaymentReceived { payment_hash, payment_secret, amt } => { //TODO: enhance by fetching random amounts from fuzz input? payments_received.push((payment_hash, payment_secret, amt));