test for pending

This commit is contained in:
NikVolf 2016-03-27 17:16:15 +03:00
parent 254ac6f253
commit a8c725a891
2 changed files with 28 additions and 4 deletions

View File

@ -53,7 +53,7 @@ struct EthTester {
pub client: Arc<TestBlockChainClient>, pub client: Arc<TestBlockChainClient>,
pub sync: Arc<TestSyncProvider>, pub sync: Arc<TestSyncProvider>,
_accounts_provider: Arc<TestAccountProvider>, _accounts_provider: Arc<TestAccountProvider>,
_miner: Arc<TestMinerService>, miner: Arc<TestMinerService>,
hashrates: Arc<RwLock<HashMap<H256, U256>>>, hashrates: Arc<RwLock<HashMap<H256, U256>>>,
pub io: IoHandler, pub io: IoHandler,
} }
@ -73,7 +73,7 @@ impl Default for EthTester {
client: client, client: client,
sync: sync, sync: sync,
_accounts_provider: ap, _accounts_provider: ap,
_miner: miner, miner: miner,
io: io, io: io,
hashrates: hashrates, hashrates: hashrates,
} }
@ -258,6 +258,27 @@ fn rpc_eth_transaction_count_by_number_pending() {
assert_eq!(EthTester::default().io.handle_request(request), Some(response.to_owned())); assert_eq!(EthTester::default().io.handle_request(request), Some(response.to_owned()));
} }
#[test]
fn rpc_eth_pending_transaction_by_hash() {
use util::*;
use ethcore::transaction::*;
let tester = EthTester::default();
{
let tx: SignedTransaction = decode(&FromHex::from_hex("f85f800182520894095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba048b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353a0efffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804").unwrap());
tester.miner.pending_transactions.lock().unwrap().insert(H256::zero(), tx);
}
let response = r#"{"jsonrpc":"2.0","result":{"blockHash":null,"blockNumber":null,"from":"0x0f65fe9276bc9a24ae7083ae28e2660ef72df99e","gas":"0x5208","gasPrice":"0x01","hash":"0x41df922fd0d4766fcc02e161f8295ec28522f329ae487f14d811e4b64c8d6e31","input":"0x","nonce":"0x00","to":"0x095e7baea6a6c7c4c2dfeb977efac326af552d87","transactionIndex":null,"value":"0x0a"},"id":1}"#;
let request = r#"{
"jsonrpc": "2.0",
"method": "eth_getTransactionByHash",
"params": ["0x0000000000000000000000000000000000000000000000000000000000000000"],
"id": 1
}"#;
assert_eq!(tester.io.handle_request(request), Some(response.to_owned()));
}
#[test] #[test]
fn rpc_eth_uncle_count_by_block_hash() { fn rpc_eth_uncle_count_by_block_hash() {

View File

@ -30,6 +30,8 @@ pub struct TestMinerService {
pub imported_transactions: RwLock<Vec<H256>>, pub imported_transactions: RwLock<Vec<H256>>,
/// Latest closed block. /// Latest closed block.
pub latest_closed_block: Mutex<Option<ClosedBlock>>, pub latest_closed_block: Mutex<Option<ClosedBlock>>,
/// Pre-existed pending transactions
pub pending_transactions: Mutex<HashMap<H256, SignedTransaction>>,
} }
impl Default for TestMinerService { impl Default for TestMinerService {
@ -37,6 +39,7 @@ impl Default for TestMinerService {
TestMinerService { TestMinerService {
imported_transactions: RwLock::new(Vec::new()), imported_transactions: RwLock::new(Vec::new()),
latest_closed_block: Mutex::new(None), latest_closed_block: Mutex::new(None),
pending_transactions: Mutex::new(HashMap::new()),
} }
} }
} }
@ -73,8 +76,8 @@ impl MinerService for TestMinerService {
&self.latest_closed_block &self.latest_closed_block
} }
fn transaction(&self, _hash: &H256) -> Option<SignedTransaction> { fn transaction(&self, hash: &H256) -> Option<SignedTransaction> {
unimplemented!(); self.pending_transactions.lock().unwrap().get(hash).and_then(|tx_ref| Some(tx_ref.clone()))
} }
/// Submit `seal` as a valid solution for the header of `pow_hash`. /// Submit `seal` as a valid solution for the header of `pow_hash`.