More flexible chain extraction, get_balance test
This commit is contained in:
parent
152bb6f21b
commit
d370a86b43
@ -18,7 +18,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use ethjson::blockchain::test::Test;
|
|
||||||
use ethcore::client::{BlockChainClient, Client, ClientConfig};
|
use ethcore::client::{BlockChainClient, Client, ClientConfig};
|
||||||
use ethcore::spec::Genesis;
|
use ethcore::spec::Genesis;
|
||||||
use ethcore::block::Block;
|
use ethcore::block::Block;
|
||||||
@ -30,16 +29,43 @@ use util::hash::{Address, FixedHash};
|
|||||||
use util::numbers::U256;
|
use util::numbers::U256;
|
||||||
use util::keys::{TestAccount, TestAccountProvider};
|
use util::keys::{TestAccount, TestAccountProvider};
|
||||||
use jsonrpc_core::IoHandler;
|
use jsonrpc_core::IoHandler;
|
||||||
|
use ethjson::blockchain::BlockChain;
|
||||||
|
|
||||||
use v1::traits::eth::Eth;
|
use v1::traits::eth::Eth;
|
||||||
use v1::impls::EthClient;
|
use v1::impls::EthClient;
|
||||||
use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService};
|
use v1::tests::helpers::{TestSyncProvider, Config, TestMinerService};
|
||||||
|
|
||||||
use super::RPC_CHAIN;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn harness_works() {
|
fn harness_works() {
|
||||||
eth_harness(|_| {});
|
let chain: BlockChain = extract_chain!("BlockchainTests/bcUncleTest");
|
||||||
|
chain_harness(chain, |_| {});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn eth_get_balance() {
|
||||||
|
let chain = extract_chain!("BlockchainTests/bcWalletTest", "wallet2outOf3txs");
|
||||||
|
chain_harness(chain, |handler| {
|
||||||
|
// final account state
|
||||||
|
let req_latest = r#"{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "eth_getBalance",
|
||||||
|
"params": ["0xaaaf5374fce5edbc8e2a8697c15331677e6ebaaa", "latest"],
|
||||||
|
"id": 1
|
||||||
|
}"#;
|
||||||
|
let res_latest = r#"{"jsonrpc":"2.0","result":"0x09","id":1}"#;
|
||||||
|
assert_eq!(&handler.handle_request(req_latest).unwrap(), res_latest);
|
||||||
|
|
||||||
|
// non-existant account
|
||||||
|
let req_new_acc = r#"{
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"method": "eth_getBalance",
|
||||||
|
"params": ["0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
||||||
|
"id": 3
|
||||||
|
}"#;
|
||||||
|
|
||||||
|
let res_new_acc = r#"{"jsonrpc":"2.0","result":"0x00","id":3}"#;
|
||||||
|
assert_eq!(&handler.handle_request(req_new_acc).unwrap(), res_new_acc);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn account_provider() -> Arc<TestAccountProvider> {
|
fn account_provider() -> Arc<TestAccountProvider> {
|
||||||
@ -60,12 +86,10 @@ fn miner_service() -> Arc<TestMinerService> {
|
|||||||
Arc::new(TestMinerService::default())
|
Arc::new(TestMinerService::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
// this harness will create a handler which tests can send specially-crafted
|
// given a blockchain, this harness will create an EthClient wrapping it
|
||||||
// JSONRPC requests to.
|
// which tests can pass specially crafted requests to.
|
||||||
fn eth_harness<F, U>(mut cb: F) -> U
|
fn chain_harness<F, U>(chain: BlockChain, mut cb: F) -> U
|
||||||
where F: FnMut(&IoHandler) -> U {
|
where F: FnMut(&IoHandler) -> U {
|
||||||
let chains = Test::load(RPC_CHAIN).unwrap();
|
|
||||||
let chain = chains.into_iter().next().unwrap().1;
|
|
||||||
let genesis = Genesis::from(chain.genesis());
|
let genesis = Genesis::from(chain.genesis());
|
||||||
let mut spec = ethereum::new_frontier_test();
|
let mut spec = ethereum::new_frontier_test();
|
||||||
let state = chain.pre_state.clone().into();
|
let state = chain.pre_state.clone().into();
|
||||||
|
@ -16,6 +16,37 @@
|
|||||||
|
|
||||||
//! Integration tests for the JSONRPC APIs
|
//! Integration tests for the JSONRPC APIs
|
||||||
|
|
||||||
mod eth;
|
// extract a chain from the given JSON file,
|
||||||
|
// stored in ethcore/res/ethereum/tests/.
|
||||||
|
//
|
||||||
|
// usage:
|
||||||
|
// `extract_chain!("Folder/File")` will load Folder/File.json and extract
|
||||||
|
// the first block chain stored within.
|
||||||
|
//
|
||||||
|
// `extract_chain!("Folder/File", "with_name")` will load Folder/File.json and
|
||||||
|
// extract the chain with that name. This will panic if no chain by that name
|
||||||
|
// is found.
|
||||||
|
macro_rules! extract_chain {
|
||||||
|
($file:expr, $name:expr) => {{
|
||||||
|
const RAW_DATA: &'static [u8] =
|
||||||
|
include_bytes!(concat!("../../../../../ethcore/res/ethereum/tests/", $file, ".json"));
|
||||||
|
let mut chain = None;
|
||||||
|
for (name, c) in ::ethjson::blockchain::Test::load(RAW_DATA).unwrap() {
|
||||||
|
if name == $name {
|
||||||
|
chain = Some(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chain.unwrap()
|
||||||
|
}};
|
||||||
|
|
||||||
const RPC_CHAIN: &'static [u8] = include_bytes!("../../../../../ethcore/res/ethereum/tests/BlockchainTests/bcRPC_API_Test.json");
|
($file:expr) => {{
|
||||||
|
const RAW_DATA: &'static [u8] =
|
||||||
|
include_bytes!(concat!("../../../../../ethcore/res/ethereum/tests/", $file, ".json"));
|
||||||
|
|
||||||
|
::ethjson::blockchain::Test::load(RAW_DATA)
|
||||||
|
.unwrap().into_iter().next().unwrap().1
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
mod eth;
|
Loading…
Reference in New Issue
Block a user