Add an Updater mockup and provide a test for it.
This commit is contained in:
		
							parent
							
								
									77cb937065
								
							
						
					
					
						commit
						4c9ea55e49
					
				| @ -20,8 +20,10 @@ mod sync_provider; | |||||||
| mod miner_service; | mod miner_service; | ||||||
| mod fetch; | mod fetch; | ||||||
| mod snapshot_service; | mod snapshot_service; | ||||||
|  | mod update_service; | ||||||
| 
 | 
 | ||||||
| pub use self::sync_provider::{Config, TestSyncProvider}; | pub use self::sync_provider::{Config, TestSyncProvider}; | ||||||
| pub use self::miner_service::TestMinerService; | pub use self::miner_service::TestMinerService; | ||||||
| pub use self::fetch::TestFetch; | pub use self::fetch::TestFetch; | ||||||
| pub use self::snapshot_service::TestSnapshotService; | pub use self::snapshot_service::TestSnapshotService; | ||||||
|  | pub use self::update_service::TestUpdater; | ||||||
							
								
								
									
										92
									
								
								rpc/src/v1/tests/helpers/update_service.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								rpc/src/v1/tests/helpers/update_service.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | |||||||
|  | // Copyright 2015, 2016 Parity Technologies (UK) Ltd.
 | ||||||
|  | // This file is part of Parity.
 | ||||||
|  | 
 | ||||||
|  | // Parity is free software: you can redistribute it and/or modify
 | ||||||
|  | // it under the terms of the GNU General Public License as published by
 | ||||||
|  | // the Free Software Foundation, either version 3 of the License, or
 | ||||||
|  | // (at your option) any later version.
 | ||||||
|  | 
 | ||||||
|  | // Parity is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License
 | ||||||
|  | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | //! Test implementation of fetch client.
 | ||||||
|  | 
 | ||||||
|  | use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; | ||||||
|  | use semver::Version; | ||||||
|  | use updater::{Service as UpdateService, CapState, ReleaseInfo, VersionInfo, OperationsInfo, ReleaseTrack}; | ||||||
|  | 
 | ||||||
|  | /// Test implementation of fetcher. Will always return the same file.
 | ||||||
|  | #[derive(Default)] | ||||||
|  | pub struct TestUpdater { | ||||||
|  | 	updated: AtomicBool, | ||||||
|  | 	current_block: AtomicUsize, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl TestUpdater { | ||||||
|  | 	/// Update the (faked) current block.
 | ||||||
|  | 	pub fn set_current_block(&self, n: usize) { | ||||||
|  | 		self.current_block.store(n, Ordering::Relaxed); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl UpdateService for TestUpdater { | ||||||
|  | 	fn capability(&self) -> CapState { | ||||||
|  | 		if self.updated.load(Ordering::Relaxed) { | ||||||
|  | 			CapState::Capable | ||||||
|  | 		} else { | ||||||
|  | 			if self.current_block.load(Ordering::Relaxed) < 15100 { | ||||||
|  | 				CapState::CapableUntil(15100) | ||||||
|  | 			} else { | ||||||
|  | 				CapState::IncapableSince(15100) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	fn upgrade_ready(&self) -> Option<ReleaseInfo> { | ||||||
|  | 		if self.updated.load(Ordering::Relaxed) { | ||||||
|  | 			None | ||||||
|  | 		} else { | ||||||
|  | 			self.info().map(|i| i.track) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	fn execute_upgrade(&self) -> bool { | ||||||
|  | 		if self.updated.load(Ordering::Relaxed) { | ||||||
|  | 			false | ||||||
|  | 		} else { | ||||||
|  | 			self.updated.store(true, Ordering::Relaxed); | ||||||
|  | 			true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	fn version_info(&self) -> VersionInfo { | ||||||
|  | 		VersionInfo { | ||||||
|  | 			track: ReleaseTrack::Beta, | ||||||
|  | 			version: Version{major: 1, minor: 5, patch: 0, build: vec![], pre: vec![]}, | ||||||
|  | 			hash: 150.into(), | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	fn info(&self) -> Option<OperationsInfo> { | ||||||
|  | 		Some(OperationsInfo { | ||||||
|  | 			fork: 15100, | ||||||
|  | 			this_fork: Some(15000), | ||||||
|  | 			track: ReleaseInfo { | ||||||
|  | 				version: VersionInfo { | ||||||
|  | 					track: ReleaseTrack::Beta, | ||||||
|  | 					version: Version{major: 1, minor: 5, patch: 1, build: vec![], pre: vec![]}, | ||||||
|  | 					hash: 151.into(), | ||||||
|  | 				}, | ||||||
|  | 				is_critical: true, | ||||||
|  | 				fork: 15100, | ||||||
|  | 				binary: Some(1510.into()), | ||||||
|  | 			}, | ||||||
|  | 			minor: None, | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -26,15 +26,16 @@ use ethstore::ethkey::{Generator, Random}; | |||||||
| use jsonrpc_core::{IoHandler, GenericIoHandler}; | use jsonrpc_core::{IoHandler, GenericIoHandler}; | ||||||
| use v1::{Parity, ParityClient}; | use v1::{Parity, ParityClient}; | ||||||
| use v1::helpers::{SignerService, NetworkSettings}; | use v1::helpers::{SignerService, NetworkSettings}; | ||||||
| use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService}; | use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService, TestUpdater}; | ||||||
| use super::manage_network::TestManageNetwork; | use super::manage_network::TestManageNetwork; | ||||||
| 
 | 
 | ||||||
| pub type TestParityClient = ParityClient<TestBlockChainClient, TestMinerService, TestSyncProvider>; | pub type TestParityClient = ParityClient<TestBlockChainClient, TestMinerService, TestSyncProvider, TestUpdater>; | ||||||
| 
 | 
 | ||||||
| pub struct Dependencies { | pub struct Dependencies { | ||||||
| 	pub miner: Arc<TestMinerService>, | 	pub miner: Arc<TestMinerService>, | ||||||
| 	pub client: Arc<TestBlockChainClient>, | 	pub client: Arc<TestBlockChainClient>, | ||||||
| 	pub sync: Arc<TestSyncProvider>, | 	pub sync: Arc<TestSyncProvider>, | ||||||
|  | 	pub updater: Arc<TestUpdater>, | ||||||
| 	pub logger: Arc<RotatingLogger>, | 	pub logger: Arc<RotatingLogger>, | ||||||
| 	pub settings: Arc<NetworkSettings>, | 	pub settings: Arc<NetworkSettings>, | ||||||
| 	pub network: Arc<ManageNetwork>, | 	pub network: Arc<ManageNetwork>, | ||||||
| @ -52,6 +53,7 @@ impl Dependencies { | |||||||
| 				network_id: 3, | 				network_id: 3, | ||||||
| 				num_peers: 120, | 				num_peers: 120, | ||||||
| 			})), | 			})), | ||||||
|  | 			updater: Arc::new(TestUpdater::default()), | ||||||
| 			logger: Arc::new(RotatingLogger::new("rpc=trace".to_owned())), | 			logger: Arc::new(RotatingLogger::new("rpc=trace".to_owned())), | ||||||
| 			settings: Arc::new(NetworkSettings { | 			settings: Arc::new(NetworkSettings { | ||||||
| 				name: "mynode".to_owned(), | 				name: "mynode".to_owned(), | ||||||
| @ -73,6 +75,7 @@ impl Dependencies { | |||||||
| 			&self.client, | 			&self.client, | ||||||
| 			&self.miner, | 			&self.miner, | ||||||
| 			&self.sync, | 			&self.sync, | ||||||
|  | 			&self.updater, | ||||||
| 			&self.network, | 			&self.network, | ||||||
| 			&self.accounts, | 			&self.accounts, | ||||||
| 			self.logger.clone(), | 			self.logger.clone(), | ||||||
| @ -96,6 +99,17 @@ impl Dependencies { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #[test] | ||||||
|  | fn rpc_parity_consensus_capability() { | ||||||
|  | 	let deps = Dependencies::new(); | ||||||
|  | 	let io = deps.default_client(); | ||||||
|  | 
 | ||||||
|  | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_consensusCapability", "params": [], "id": 1}"#; | ||||||
|  | 	let response = r#"{"jsonrpc":"2.0","result":{"capableUntil":15100},"id":1}"#; | ||||||
|  | 
 | ||||||
|  | 	assert_eq!(io.handle_request_sync(request), Some(response.to_owned())); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[test] | #[test] | ||||||
| fn rpc_parity_extra_data() { | fn rpc_parity_extra_data() { | ||||||
| 	let deps = Dependencies::new(); | 	let deps = Dependencies::new(); | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ use ethsync::ManageNetwork; | |||||||
| 
 | 
 | ||||||
| use jsonrpc_core::{IoHandler, GenericIoHandler}; | use jsonrpc_core::{IoHandler, GenericIoHandler}; | ||||||
| use v1::{ParitySet, ParitySetClient}; | use v1::{ParitySet, ParitySetClient}; | ||||||
| use v1::tests::helpers::{TestMinerService, TestFetch}; | use v1::tests::helpers::{TestMinerService, TestFetch, TestUpdater}; | ||||||
| use super::manage_network::TestManageNetwork; | use super::manage_network::TestManageNetwork; | ||||||
| 
 | 
 | ||||||
| fn miner_service() -> Arc<TestMinerService> { | fn miner_service() -> Arc<TestMinerService> { | ||||||
| @ -40,10 +40,14 @@ fn network_service() -> Arc<TestManageNetwork> { | |||||||
| 	Arc::new(TestManageNetwork) | 	Arc::new(TestManageNetwork) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub type TestParitySetClient = ParitySetClient<TestBlockChainClient, TestMinerService, TestFetch>; | fn updater_service() -> Arc<TestUpdater> { | ||||||
|  | 	Arc::new(TestUpdater::default()) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| fn parity_set_client(client: &Arc<TestBlockChainClient>, miner: &Arc<TestMinerService>, net: &Arc<TestManageNetwork>) -> TestParitySetClient { | pub type TestParitySetClient = ParitySetClient<TestBlockChainClient, TestMinerService, TestUpdater, TestFetch>; | ||||||
| 	ParitySetClient::with_fetch(client, miner, &(net.clone() as Arc<ManageNetwork>)) | 
 | ||||||
|  | fn parity_set_client(client: &Arc<TestBlockChainClient>, miner: &Arc<TestMinerService>, updater: &Arc<TestUpdater>, net: &Arc<TestManageNetwork>) -> TestParitySetClient { | ||||||
|  | 	ParitySetClient::with_fetch(client, miner, updater, &(net.clone() as Arc<ManageNetwork>)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[test] | #[test] | ||||||
| @ -51,8 +55,9 @@ fn rpc_parity_set_min_gas_price() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setMinGasPrice", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setMinGasPrice", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -66,8 +71,9 @@ fn rpc_parity_set_gas_floor_target() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setGasFloorTarget", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setGasFloorTarget", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -81,8 +87,9 @@ fn rpc_parity_set_extra_data() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setExtraData", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setExtraData", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -96,8 +103,9 @@ fn rpc_parity_set_author() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setAuthor", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setAuthor", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -111,8 +119,9 @@ fn rpc_parity_set_engine_signer() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setEngineSigner", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681", "password"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setEngineSigner", "params":["0xcd1722f3947def4cf144679da39c4c32bdc35681", "password"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -128,8 +137,9 @@ fn rpc_parity_set_transactions_limit() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setTransactionsLimit", "params":[10240240], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_setTransactionsLimit", "params":[10240240], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":true,"id":1}"#; | ||||||
| @ -143,8 +153,9 @@ fn rpc_parity_set_hash_content() { | |||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let client = client_service(); | 	let client = client_service(); | ||||||
| 	let network = network_service(); | 	let network = network_service(); | ||||||
|  | 	let updater = updater_service(); | ||||||
| 	let io = IoHandler::new(); | 	let io = IoHandler::new(); | ||||||
| 	io.add_delegate(parity_set_client(&client, &miner, &network).to_delegate()); | 	io.add_delegate(parity_set_client(&client, &miner, &updater, &network).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	let request = r#"{"jsonrpc": "2.0", "method": "parity_hashContent", "params":["https://ethcore.io/assets/images/ethcore-black-horizontal.png"], "id": 1}"#; | 	let request = r#"{"jsonrpc": "2.0", "method": "parity_hashContent", "params":["https://ethcore.io/assets/images/ethcore-black-horizontal.png"], "id": 1}"#; | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":"0x2be00befcf008bc0e7d9cdefc194db9c75352e8632f48498b5a6bfce9f02c88e","id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":"0x2be00befcf008bc0e7d9cdefc194db9c75352e8632f48498b5a6bfce9f02c88e","id":1}"#; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user