fix tests with loop hack
This commit is contained in:
		
							parent
							
								
									2ca61151ac
								
							
						
					
					
						commit
						3669d17390
					
				| @ -28,6 +28,7 @@ mod requests; | |||||||
| mod signer; | mod signer; | ||||||
| mod signing_queue; | mod signing_queue; | ||||||
| 
 | 
 | ||||||
|  | pub use self::dispatch::{Dispatcher, FullDispatcher}; | ||||||
| pub use self::network_settings::NetworkSettings; | pub use self::network_settings::NetworkSettings; | ||||||
| pub use self::poll_manager::PollManager; | pub use self::poll_manager::PollManager; | ||||||
| pub use self::poll_filter::{PollFilter, limit_logs}; | pub use self::poll_filter::{PollFilter, limit_logs}; | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ use jsonrpc_core::Error; | |||||||
| use v1::helpers::{ | use v1::helpers::{ | ||||||
| 	errors, | 	errors, | ||||||
| 	DefaultAccount, | 	DefaultAccount, | ||||||
| 	SigningQueue, ConfirmationPromise, ConfirmationResult, ConfirmationPayload, SignerService | 	SigningQueue, ConfirmationPromise, ConfirmationResult, SignerService | ||||||
| }; | }; | ||||||
| use v1::helpers::dispatch::{self, Dispatcher}; | use v1::helpers::dispatch::{self, Dispatcher}; | ||||||
| use v1::metadata::Metadata; | use v1::metadata::Metadata; | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ use util::{U256, H256, Uint, Address, Hashable}; | |||||||
| 
 | 
 | ||||||
| use jsonrpc_core::IoHandler; | use jsonrpc_core::IoHandler; | ||||||
| use v1::impls::{EthClient, SigningUnsafeClient}; | use v1::impls::{EthClient, SigningUnsafeClient}; | ||||||
|  | use v1::helpers::dispatch::FullDispatcher; | ||||||
| use v1::metadata::Metadata; | use v1::metadata::Metadata; | ||||||
| use v1::tests::helpers::{TestSnapshotService, TestSyncProvider, Config}; | use v1::tests::helpers::{TestSnapshotService, TestSyncProvider, Config}; | ||||||
| use v1::traits::eth::Eth; | use v1::traits::eth::Eth; | ||||||
| @ -141,10 +142,11 @@ impl EthTester { | |||||||
| 			&external_miner, | 			&external_miner, | ||||||
| 			Default::default(), | 			Default::default(), | ||||||
| 		); | 		); | ||||||
|  | 
 | ||||||
|  | 		let dispatcher = FullDispatcher::new(Arc::downgrade(&client), Arc::downgrade(&miner_service)); | ||||||
| 		let eth_sign = SigningUnsafeClient::new( | 		let eth_sign = SigningUnsafeClient::new( | ||||||
| 			&client, |  | ||||||
| 			&account_provider, | 			&account_provider, | ||||||
| 			&miner_service | 			dispatcher, | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
| 		let mut handler = IoHandler::default(); | 		let mut handler = IoHandler::default(); | ||||||
|  | |||||||
| @ -34,6 +34,7 @@ use ethsync::SyncState; | |||||||
| 
 | 
 | ||||||
| use jsonrpc_core::IoHandler; | use jsonrpc_core::IoHandler; | ||||||
| use v1::{Eth, EthClient, EthClientOptions, EthFilter, EthFilterClient, EthSigning, SigningUnsafeClient}; | use v1::{Eth, EthClient, EthClientOptions, EthFilter, EthFilterClient, EthSigning, SigningUnsafeClient}; | ||||||
|  | use v1::helpers::dispatch::FullDispatcher; | ||||||
| use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService, TestSnapshotService}; | use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService, TestSnapshotService}; | ||||||
| use v1::metadata::Metadata; | use v1::metadata::Metadata; | ||||||
| 
 | 
 | ||||||
| @ -88,7 +89,9 @@ impl EthTester { | |||||||
| 		let external_miner = Arc::new(ExternalMiner::new(hashrates.clone())); | 		let external_miner = Arc::new(ExternalMiner::new(hashrates.clone())); | ||||||
| 		let eth = EthClient::new(&client, &snapshot, &sync, &ap, &miner, &external_miner, options).to_delegate(); | 		let eth = EthClient::new(&client, &snapshot, &sync, &ap, &miner, &external_miner, options).to_delegate(); | ||||||
| 		let filter = EthFilterClient::new(&client, &miner).to_delegate(); | 		let filter = EthFilterClient::new(&client, &miner).to_delegate(); | ||||||
| 		let sign = SigningUnsafeClient::new(&client, &ap, &miner).to_delegate(); | 
 | ||||||
|  | 		let dispatcher = FullDispatcher::new(Arc::downgrade(&client), Arc::downgrade(&miner)); | ||||||
|  | 		let sign = SigningUnsafeClient::new(&ap, dispatcher).to_delegate(); | ||||||
| 		let mut io: IoHandler<Metadata> = IoHandler::default(); | 		let mut io: IoHandler<Metadata> = IoHandler::default(); | ||||||
| 		io.extend_with(eth); | 		io.extend_with(eth); | ||||||
| 		io.extend_with(sign); | 		io.extend_with(sign); | ||||||
|  | |||||||
| @ -16,13 +16,16 @@ | |||||||
| 
 | 
 | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| use std::str::FromStr; | use std::str::FromStr; | ||||||
| use jsonrpc_core::IoHandler; | 
 | ||||||
| use util::{U256, Uint, Address}; |  | ||||||
| use ethcore::account_provider::AccountProvider; | use ethcore::account_provider::AccountProvider; | ||||||
| use v1::{PersonalClient, Personal, Metadata}; |  | ||||||
| use v1::tests::helpers::TestMinerService; |  | ||||||
| use ethcore::client::TestBlockChainClient; | use ethcore::client::TestBlockChainClient; | ||||||
| use ethcore::transaction::{Action, Transaction}; | use ethcore::transaction::{Action, Transaction}; | ||||||
|  | use jsonrpc_core::IoHandler; | ||||||
|  | use util::{U256, Uint, Address}; | ||||||
|  | 
 | ||||||
|  | use v1::{PersonalClient, Personal, Metadata}; | ||||||
|  | use v1::helpers::dispatch::FullDispatcher; | ||||||
|  | use v1::tests::helpers::TestMinerService; | ||||||
| 
 | 
 | ||||||
| struct PersonalTester { | struct PersonalTester { | ||||||
| 	accounts: Arc<AccountProvider>, | 	accounts: Arc<AccountProvider>, | ||||||
| @ -50,7 +53,9 @@ fn setup() -> PersonalTester { | |||||||
| 	let accounts = accounts_provider(); | 	let accounts = accounts_provider(); | ||||||
| 	let client = blockchain_client(); | 	let client = blockchain_client(); | ||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 	let personal = PersonalClient::new(&accounts, &client, &miner, false); | 
 | ||||||
|  | 	let dispatcher = FullDispatcher::new(Arc::downgrade(&client), Arc::downgrade(&miner)); | ||||||
|  | 	let personal = PersonalClient::new(&accounts, dispatcher, false); | ||||||
| 
 | 
 | ||||||
| 	let mut io = IoHandler::default(); | 	let mut io = IoHandler::default(); | ||||||
| 	io.extend_with(personal.to_delegate()); | 	io.extend_with(personal.to_delegate()); | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ use v1::{SignerClient, Signer}; | |||||||
| use v1::metadata::Metadata; | use v1::metadata::Metadata; | ||||||
| use v1::tests::helpers::TestMinerService; | use v1::tests::helpers::TestMinerService; | ||||||
| use v1::helpers::{SigningQueue, SignerService, FilledTransactionRequest, ConfirmationPayload}; | use v1::helpers::{SigningQueue, SignerService, FilledTransactionRequest, ConfirmationPayload}; | ||||||
|  | use v1::helpers::dispatch::FullDispatcher; | ||||||
| 
 | 
 | ||||||
| struct SignerTester { | struct SignerTester { | ||||||
| 	signer: Arc<SignerService>, | 	signer: Arc<SignerService>, | ||||||
| @ -59,8 +60,9 @@ fn signer_tester() -> SignerTester { | |||||||
| 	let client = blockchain_client(); | 	let client = blockchain_client(); | ||||||
| 	let miner = miner_service(); | 	let miner = miner_service(); | ||||||
| 
 | 
 | ||||||
|  | 	let dispatcher = FullDispatcher::new(Arc::downgrade(&client), Arc::downgrade(&miner)); | ||||||
| 	let mut io = IoHandler::default(); | 	let mut io = IoHandler::default(); | ||||||
| 	io.extend_with(SignerClient::new(&accounts, &client, &miner, &signer).to_delegate()); | 	io.extend_with(SignerClient::new(&accounts, dispatcher, &signer).to_delegate()); | ||||||
| 
 | 
 | ||||||
| 	SignerTester { | 	SignerTester { | ||||||
| 		signer: signer, | 		signer: signer, | ||||||
|  | |||||||
| @ -16,13 +16,14 @@ | |||||||
| 
 | 
 | ||||||
| use std::str::FromStr; | use std::str::FromStr; | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
|  | use std::time::Duration; | ||||||
| use rlp; | use rlp; | ||||||
| 
 | 
 | ||||||
| use jsonrpc_core::{IoHandler, Success}; | use jsonrpc_core::{IoHandler, Success}; | ||||||
| use v1::impls::SigningQueueClient; | use v1::impls::SigningQueueClient; | ||||||
| use v1::metadata::Metadata; | use v1::metadata::Metadata; | ||||||
| use v1::traits::{EthSigning, ParitySigning, Parity}; | use v1::traits::{EthSigning, ParitySigning, Parity}; | ||||||
| use v1::helpers::{SignerService, SigningQueue}; | use v1::helpers::{SignerService, SigningQueue, FullDispatcher}; | ||||||
| use v1::types::ConfirmationResponse; | use v1::types::ConfirmationResponse; | ||||||
| use v1::tests::helpers::TestMinerService; | use v1::tests::helpers::TestMinerService; | ||||||
| use v1::tests::mocked::parity; | use v1::tests::mocked::parity; | ||||||
| @ -51,9 +52,12 @@ impl Default for SigningTester { | |||||||
| 		let miner = Arc::new(TestMinerService::default()); | 		let miner = Arc::new(TestMinerService::default()); | ||||||
| 		let accounts = Arc::new(AccountProvider::transient_provider()); | 		let accounts = Arc::new(AccountProvider::transient_provider()); | ||||||
| 		let mut io = IoHandler::default(); | 		let mut io = IoHandler::default(); | ||||||
| 		let rpc = SigningQueueClient::new(&signer, &client, &miner, &accounts); | 
 | ||||||
|  | 		let dispatcher = FullDispatcher::new(Arc::downgrade(&client), Arc::downgrade(&miner)); | ||||||
|  | 
 | ||||||
|  | 		let rpc = SigningQueueClient::new(&signer, dispatcher.clone(), &accounts); | ||||||
| 		io.extend_with(EthSigning::to_delegate(rpc)); | 		io.extend_with(EthSigning::to_delegate(rpc)); | ||||||
| 		let rpc = SigningQueueClient::new(&signer, &client, &miner, &accounts); | 		let rpc = SigningQueueClient::new(&signer, dispatcher, &accounts); | ||||||
| 		io.extend_with(ParitySigning::to_delegate(rpc)); | 		io.extend_with(ParitySigning::to_delegate(rpc)); | ||||||
| 
 | 
 | ||||||
| 		SigningTester { | 		SigningTester { | ||||||
| @ -91,9 +95,17 @@ fn should_add_sign_to_queue() { | |||||||
| 
 | 
 | ||||||
| 	// then
 | 	// then
 | ||||||
| 	let promise = tester.io.handle_request(&request); | 	let promise = tester.io.handle_request(&request); | ||||||
| 	assert_eq!(tester.signer.requests().len(), 1); | 
 | ||||||
|  | 	// the future must be polled at least once before request is queued.
 | ||||||
|  | 	let signer = tester.signer.clone(); | ||||||
|  | 	::std::thread::spawn(move || loop { | ||||||
|  | 		if signer.requests().len() == 1 { | ||||||
| 			// respond
 | 			// respond
 | ||||||
| 	tester.signer.request_confirmed(1.into(), Ok(ConfirmationResponse::Signature(0.into()))); | 			signer.request_confirmed(1.into(), Ok(ConfirmationResponse::Signature(0.into()))); | ||||||
|  | 			break
 | ||||||
|  | 		} | ||||||
|  | 		::std::thread::sleep(Duration::from_millis(100)) | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 	let res = promise.wait().unwrap(); | 	let res = promise.wait().unwrap(); | ||||||
| 	assert_eq!(res, Some(response.to_owned())); | 	assert_eq!(res, Some(response.to_owned())); | ||||||
| @ -229,9 +241,17 @@ fn should_add_transaction_to_queue() { | |||||||
| 
 | 
 | ||||||
| 	// then
 | 	// then
 | ||||||
| 	let promise = tester.io.handle_request(&request); | 	let promise = tester.io.handle_request(&request); | ||||||
| 	assert_eq!(tester.signer.requests().len(), 1); | 
 | ||||||
|  | 	// the future must be polled at least once before request is queued.
 | ||||||
|  | 	let signer = tester.signer.clone(); | ||||||
|  | 	::std::thread::spawn(move || loop { | ||||||
|  | 		if signer.requests().len() == 1 { | ||||||
| 			// respond
 | 			// respond
 | ||||||
| 	tester.signer.request_confirmed(1.into(), Ok(ConfirmationResponse::SendTransaction(0.into()))); | 			signer.request_confirmed(1.into(), Ok(ConfirmationResponse::SendTransaction(0.into()))); | ||||||
|  | 			break
 | ||||||
|  | 		} | ||||||
|  | 		::std::thread::sleep(Duration::from_millis(100)) | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 	let res = promise.wait().unwrap(); | 	let res = promise.wait().unwrap(); | ||||||
| 	assert_eq!(res, Some(response.to_owned())); | 	assert_eq!(res, Some(response.to_owned())); | ||||||
| @ -296,9 +316,17 @@ fn should_add_sign_transaction_to_the_queue() { | |||||||
| 	// then
 | 	// then
 | ||||||
| 	tester.miner.last_nonces.write().insert(address.clone(), U256::zero()); | 	tester.miner.last_nonces.write().insert(address.clone(), U256::zero()); | ||||||
| 	let promise = tester.io.handle_request(&request); | 	let promise = tester.io.handle_request(&request); | ||||||
| 	assert_eq!(tester.signer.requests().len(), 1); | 
 | ||||||
|  | 	// the future must be polled at least once before request is queued.
 | ||||||
|  | 	let signer = tester.signer.clone(); | ||||||
|  | 	::std::thread::spawn(move || loop { | ||||||
|  | 		if signer.requests().len() == 1 { | ||||||
| 			// respond
 | 			// respond
 | ||||||
| 	tester.signer.request_confirmed(1.into(), Ok(ConfirmationResponse::SignTransaction(t.into()))); | 			signer.request_confirmed(1.into(), Ok(ConfirmationResponse::SignTransaction(t.into()))); | ||||||
|  | 			break
 | ||||||
|  | 		} | ||||||
|  | 		::std::thread::sleep(Duration::from_millis(100)) | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 	let res = promise.wait().unwrap(); | 	let res = promise.wait().unwrap(); | ||||||
| 	assert_eq!(res, Some(response.to_owned())); | 	assert_eq!(res, Some(response.to_owned())); | ||||||
| @ -391,12 +419,22 @@ fn should_add_decryption_to_the_queue() { | |||||||
| 	}"#;
 | 	}"#;
 | ||||||
| 	let response = r#"{"jsonrpc":"2.0","result":"0x0102","id":1}"#; | 	let response = r#"{"jsonrpc":"2.0","result":"0x0102","id":1}"#; | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| 	// then
 | 	// then
 | ||||||
| 	let promise = tester.io.handle_request(&request); | 	let promise = tester.io.handle_request(&request); | ||||||
| 	assert_eq!(tester.signer.requests().len(), 1); |  | ||||||
| 	// respond
 |  | ||||||
| 	tester.signer.request_confirmed(1.into(), Ok(ConfirmationResponse::Decrypt(vec![0x1, 0x2].into()))); |  | ||||||
| 
 | 
 | ||||||
|  | 	// the future must be polled at least once before request is queued.
 | ||||||
|  | 	let signer = tester.signer.clone(); | ||||||
|  | 	::std::thread::spawn(move || loop { | ||||||
|  | 		if signer.requests().len() == 1 { | ||||||
|  | 			// respond
 | ||||||
|  | 			signer.request_confirmed(1.into(), Ok(ConfirmationResponse::Decrypt(vec![0x1, 0x2].into()))); | ||||||
|  | 			break
 | ||||||
|  | 		} | ||||||
|  | 		::std::thread::sleep(Duration::from_millis(100)) | ||||||
|  | 	}); | ||||||
|  | 
 | ||||||
|  | 	// check response: will deadlock if unsuccessful.
 | ||||||
| 	let res = promise.wait().unwrap(); | 	let res = promise.wait().unwrap(); | ||||||
| 	assert_eq!(res, Some(response.to_owned())); | 	assert_eq!(res, Some(response.to_owned())); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user