use super::traits::{BeaconNode, BeaconNodeError}; use std::sync::RwLock; use types::BeaconBlock; type ProduceResult = Result, BeaconNodeError>; type PublishResult = Result; #[derive(Default)] pub struct TestBeaconNode { pub produce_input: RwLock>, pub produce_result: RwLock>, pub publish_input: RwLock>, pub publish_result: RwLock>, } impl TestBeaconNode { pub fn set_next_produce_result(&self, result: ProduceResult) { *self.produce_result.write().unwrap() = Some(result); } pub fn set_next_publish_result(&self, result: PublishResult) { *self.publish_result.write().unwrap() = Some(result); } } impl BeaconNode for TestBeaconNode { fn produce_beacon_block(&self, slot: u64) -> ProduceResult { *self.produce_input.write().unwrap() = Some(slot); match *self.produce_result.read().unwrap() { Some(ref r) => r.clone(), None => panic!("TestBeaconNode: produce_result == None"), } } fn publish_beacon_block(&self, block: BeaconBlock) -> PublishResult { *self.publish_input.write().unwrap() = Some(block); match *self.publish_result.read().unwrap() { Some(ref r) => r.clone(), None => panic!("TestBeaconNode: publish_result == None"), } } }