X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Futil%2Ftest_utils.rs;h=0370c0e1a402150bbdd749d892e10f895573a1a6;hb=5988789a2d0bc5121e6e56c1707396b8188027e1;hp=bc084b77ea07f6b946ef0c7ad14e0720a9ce24d9;hpb=851283d9e54f6bdb56524c49486b03b7bae732b1;p=rust-lightning diff --git a/lightning/src/util/test_utils.rs b/lightning/src/util/test_utils.rs index bc084b77..0370c0e1 100644 --- a/lightning/src/util/test_utils.rs +++ b/lightning/src/util/test_utils.rs @@ -10,13 +10,14 @@ use chain; use chain::chaininterface; use chain::chaininterface::ConfirmationTarget; +use chain::chainmonitor; +use chain::channelmonitor; +use chain::channelmonitor::MonitorEvent; use chain::transaction::OutPoint; use chain::keysinterface; -use ln::channelmonitor; use ln::features::{ChannelFeatures, InitFeatures}; use ln::msgs; use ln::msgs::OptionalField; -use ln::channelmonitor::MonitorEvent; use util::enforcing_trait_impls::EnforcingChannelKeys; use util::events; use util::logger::{Logger, Level, Record}; @@ -27,7 +28,7 @@ use bitcoin::blockdata::transaction::{Transaction, TxOut}; use bitcoin::blockdata::script::{Builder, Script}; use bitcoin::blockdata::opcodes; use bitcoin::network::constants::Network; -use bitcoin::hash_types::BlockHash; +use bitcoin::hash_types::{BlockHash, Txid}; use bitcoin::secp256k1::{SecretKey, PublicKey, Secp256k1, Signature}; @@ -37,7 +38,7 @@ use std::time::Duration; use std::sync::Mutex; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; use std::{cmp, mem}; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; pub struct TestVecWriter(pub Vec); impl Writer for TestVecWriter { @@ -62,18 +63,18 @@ impl chaininterface::FeeEstimator for TestFeeEstimator { pub struct TestChainMonitor<'a> { pub added_monitors: Mutex)>>, pub latest_monitor_update_id: Mutex>, - pub chain_monitor: channelmonitor::ChainMonitor, + pub chain_monitor: chainmonitor::ChainMonitor, pub update_ret: Mutex>, // If this is set to Some(), after the next return, we'll always return this until update_ret // is changed: pub next_update_ret: Mutex>>, } impl<'a> TestChainMonitor<'a> { - pub fn new(broadcaster: &'a chaininterface::BroadcasterInterface, logger: &'a TestLogger, fee_estimator: &'a TestFeeEstimator) -> Self { + pub fn new(chain_source: Option<&'a TestChainSource>, broadcaster: &'a chaininterface::BroadcasterInterface, logger: &'a TestLogger, fee_estimator: &'a TestFeeEstimator) -> Self { Self { added_monitors: Mutex::new(Vec::new()), latest_monitor_update_id: Mutex::new(HashMap::new()), - chain_monitor: channelmonitor::ChainMonitor::new(broadcaster, logger, fee_estimator), + chain_monitor: chainmonitor::ChainMonitor::new(chain_source, broadcaster, logger, fee_estimator), update_ret: Mutex::new(Ok(())), next_update_ret: Mutex::new(None), } @@ -396,6 +397,8 @@ impl TestKeysInterface { pub struct TestChainSource { pub genesis_hash: BlockHash, pub utxo_ret: Mutex>, + pub watched_txn: Mutex>, + pub watched_outputs: Mutex>, } impl TestChainSource { @@ -404,6 +407,8 @@ impl TestChainSource { Self { genesis_hash: genesis_block(network).block_hash(), utxo_ret: Mutex::new(Ok(TxOut { value: u64::max_value(), script_pubkey })), + watched_txn: Mutex::new(HashSet::new()), + watched_outputs: Mutex::new(HashSet::new()), } } } @@ -417,3 +422,13 @@ impl chain::Access for TestChainSource { self.utxo_ret.lock().unwrap().clone() } } + +impl chain::Filter for TestChainSource { + fn register_tx(&self, txid: &Txid, script_pubkey: &Script) { + self.watched_txn.lock().unwrap().insert((*txid, script_pubkey.clone())); + } + + fn register_output(&self, outpoint: &OutPoint, script_pubkey: &Script) { + self.watched_outputs.lock().unwrap().insert((*outpoint, script_pubkey.clone())); + } +}