diff --git a/core/network/src/test/mod.rs b/core/network/src/test/mod.rs index b6e7c3b10f1c9..8c5ddf0e499f4 100644 --- a/core/network/src/test/mod.rs +++ b/core/network/src/test/mod.rs @@ -117,20 +117,23 @@ impl NetworkSpecialization for DummySpecialization { pub type PeersClient = client::Client; -#[derive(Clone)] /// A Link that can wait for a block to have been imported. -pub struct TestLink + Clone> { +pub struct TestLink> { import_done: Arc, hash: Arc>, link: NetworkLink, + protocol_sender: Sender>, + network_sender: NetworkChan, } -impl + Clone> TestLink { +impl> TestLink { fn new( protocol_sender: Sender>, network_sender: NetworkChan ) -> TestLink { TestLink { + protocol_sender: protocol_sender.clone(), + network_sender: network_sender.clone(), import_done: Arc::new(AtomicBool::new(false)), hash: Arc::new(Mutex::new(Default::default())), link: NetworkLink { @@ -140,6 +143,19 @@ impl + Clone> TestLink { } } + fn clone_link(&self) -> Self { + TestLink { + protocol_sender: self.protocol_sender.clone(), + network_sender: self.network_sender.clone(), + import_done: self.import_done.clone(), + hash: self.hash.clone(), + link: NetworkLink { + protocol_sender: self.protocol_sender.clone(), + network_sender: self.network_sender.clone(), + } + } + } + /// Set the hash which will be awaited for import. fn with_hash(&self, hash: Hash) { self.import_done.store(false, Ordering::SeqCst); @@ -154,7 +170,7 @@ impl + Clone> TestLink { } } -impl + Clone> Link for TestLink { +impl> Link for TestLink { fn block_imported(&self, hash: &Hash, number: NumberFor) { if hash == &*self.hash.lock() { self.import_done.store(true, Ordering::SeqCst); @@ -187,7 +203,7 @@ impl + Clone> Link for TestLink { } } -pub struct Peer + Clone> { +pub struct Peer> { pub is_offline: Arc, pub is_major_syncing: Arc, pub peers: Arc>>>, @@ -203,7 +219,7 @@ pub struct Peer + Clone> { finalized_hash: Mutex>, } -impl + Clone> Peer { +impl> Peer { fn new( is_offline: Arc, is_major_syncing: Arc, @@ -218,7 +234,7 @@ impl + Clone> Peer { ) -> Self { let network_port = Arc::new(Mutex::new(network_port)); let network_link = TestLink::new(protocol_sender.clone(), network_sender.clone()); - import_queue.start(Box::new(network_link.clone())).expect("Test ImportQueue always starts"); + import_queue.start(Box::new(network_link.clone_link())).expect("Test ImportQueue always starts"); Peer { is_offline, is_major_syncing, @@ -518,7 +534,7 @@ impl SpecializationFactory for DummySpecialization { } pub trait TestNetFactory: Sized { - type Specialization: NetworkSpecialization + Clone + SpecializationFactory; + type Specialization: NetworkSpecialization + SpecializationFactory; type Verifier: 'static + Verifier; type PeerData: Default;