Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rphmeier committed Jan 10, 2017
1 parent f4e353a commit 542e95c
Showing 1 changed file with 23 additions and 85 deletions.
108 changes: 23 additions & 85 deletions ethcore/light/src/net/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,16 @@
use ethcore::blockchain_info::BlockChainInfo;
use ethcore::client::{BlockChainClient, EachBlockWith, TestBlockChainClient};
use ethcore::ids::BlockId;
use ethcore::transaction::PendingTransaction;
use ethcore::encoded;
use network::{PeerId, NodeId};

use net::buffer_flow::FlowParams;
use net::context::IoContext;
use net::status::{Capabilities, Status, write_handshake};
use net::{encode_request, LightProtocol, Params, packet};
use provider::Provider;
use request::{self, Request, Headers};

use rlp::*;
use util::{Bytes, H256, U256};
use util::{H256, U256};

use std::sync::Arc;

Expand Down Expand Up @@ -75,63 +72,6 @@ impl IoContext for Expect {
}
}

// can't implement directly for Arc due to cross-crate orphan rules.
struct TestProvider(Arc<TestProviderInner>);

struct TestProviderInner {
client: TestBlockChainClient,
}

impl Provider for TestProvider {
fn chain_info(&self) -> BlockChainInfo {
self.0.client.chain_info()
}

fn reorg_depth(&self, a: &H256, b: &H256) -> Option<u64> {
self.0.client.tree_route(a, b).map(|route| route.index as u64)
}

fn earliest_state(&self) -> Option<u64> {
None
}

fn block_header(&self, id: BlockId) -> Option<encoded::Header> {
self.0.client.block_header(id)
}

fn block_body(&self, id: BlockId) -> Option<encoded::Body> {
self.0.client.block_body(id)
}

fn block_receipts(&self, hash: &H256) -> Option<Bytes> {
self.0.client.block_receipts(&hash)
}

fn state_proof(&self, req: request::StateProof) -> Vec<Bytes> {
match req.key2 {
Some(_) => vec![::util::sha3::SHA3_NULL_RLP.to_vec()],
None => {
// sort of a leaf node
let mut stream = RlpStream::new_list(2);
stream.append(&req.key1).append_empty_data();
vec![stream.out()]
}
}
}

fn contract_code(&self, req: request::ContractCode) -> Bytes {
req.account_key.iter().chain(req.account_key.iter()).cloned().collect()
}

fn header_proof(&self, _req: request::HeaderProof) -> Option<(encoded::Header, Vec<Bytes>)> {
None
}

fn ready_transactions(&self) -> Vec<PendingTransaction> {
self.0.client.ready_transactions()
}
}

fn make_flow_params() -> FlowParams {
FlowParams::new(5_000_000.into(), Default::default(), 100_000.into())
}
Expand All @@ -146,12 +86,10 @@ fn capabilities() -> Capabilities {
}

// helper for setting up the protocol handler and provider.
fn setup(flow_params: FlowParams, capabilities: Capabilities) -> (Arc<TestProviderInner>, LightProtocol) {
let provider = Arc::new(TestProviderInner {
client: TestBlockChainClient::new(),
});
fn setup(flow_params: FlowParams, capabilities: Capabilities) -> (Arc<TestBlockChainClient>, LightProtocol) {
let provider = Arc::new(TestBlockChainClient::new());

let proto = LightProtocol::new(Arc::new(TestProvider(provider.clone())), Params {
let proto = LightProtocol::new(provider.clone(), Params {
network_id: 2,
flow_params: flow_params,
capabilities: capabilities,
Expand Down Expand Up @@ -179,7 +117,7 @@ fn handshake_expected() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let status = status(provider.client.chain_info());
let status = status(provider.chain_info());

let packet_body = write_handshake(&status, &capabilities, Some(&flow_params));

Expand All @@ -194,7 +132,7 @@ fn genesis_mismatch() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let mut status = status(provider.client.chain_info());
let mut status = status(provider.chain_info());
status.genesis_hash = H256::default();

let packet_body = write_handshake(&status, &capabilities, Some(&flow_params));
Expand All @@ -209,7 +147,7 @@ fn buffer_overflow() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let status = status(provider.client.chain_info());
let status = status(provider.chain_info());

{
let packet_body = write_handshake(&status, &capabilities, Some(&flow_params));
Expand Down Expand Up @@ -242,12 +180,12 @@ fn get_block_headers() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());
let my_status = write_handshake(&cur_status, &capabilities, Some(&flow_params));

provider.client.add_blocks(100, EachBlockWith::Nothing);
provider.add_blocks(100, EachBlockWith::Nothing);

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());

{
let packet_body = write_handshake(&cur_status, &capabilities, Some(&flow_params));
Expand All @@ -265,7 +203,7 @@ fn get_block_headers() {

let request_body = encode_request(&Request::Headers(request.clone()), req_id);
let response = {
let headers: Vec<_> = (0..10).map(|i| provider.client.block_header(BlockId::Number(i + 1)).unwrap()).collect();
let headers: Vec<_> = (0..10).map(|i| provider.block_header(BlockId::Number(i + 1)).unwrap()).collect();
assert_eq!(headers.len(), 10);

let new_buf = *flow_params.limit() - flow_params.compute_cost(request::Kind::Headers, 10);
Expand All @@ -291,12 +229,12 @@ fn get_block_bodies() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());
let my_status = write_handshake(&cur_status, &capabilities, Some(&flow_params));

provider.client.add_blocks(100, EachBlockWith::Nothing);
provider.add_blocks(100, EachBlockWith::Nothing);

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());

{
let packet_body = write_handshake(&cur_status, &capabilities, Some(&flow_params));
Expand All @@ -305,14 +243,14 @@ fn get_block_bodies() {
}

let request = request::Bodies {
block_hashes: (0..10).map(|i| provider.client.block_hash(BlockId::Number(i)).unwrap()).collect(),
block_hashes: (0..10).map(|i| provider.block_hash(BlockId::Number(i)).unwrap()).collect(),
};

let req_id = 111;

let request_body = encode_request(&Request::Bodies(request.clone()), req_id);
let response = {
let bodies: Vec<_> = (0..10).map(|i| provider.client.block_body(BlockId::Number(i + 1)).unwrap()).collect();
let bodies: Vec<_> = (0..10).map(|i| provider.block_body(BlockId::Number(i + 1)).unwrap()).collect();
assert_eq!(bodies.len(), 10);

let new_buf = *flow_params.limit() - flow_params.compute_cost(request::Kind::Bodies, 10);
Expand All @@ -338,12 +276,12 @@ fn get_block_receipts() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());
let my_status = write_handshake(&cur_status, &capabilities, Some(&flow_params));

provider.client.add_blocks(1000, EachBlockWith::Nothing);
provider.add_blocks(1000, EachBlockWith::Nothing);

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());

{
let packet_body = write_handshake(&cur_status, &capabilities, Some(&flow_params));
Expand All @@ -353,7 +291,7 @@ fn get_block_receipts() {

// find the first 10 block hashes starting with `f` because receipts are only provided
// by the test client in that case.
let block_hashes: Vec<_> = (0..1000).map(|i| provider.client.block_hash(BlockId::Number(i)).unwrap())
let block_hashes: Vec<_> = (0..1000).map(|i| provider.block_hash(BlockId::Number(i)).unwrap())
.filter(|hash| format!("{}", hash).starts_with("f")).take(10).collect();

let request = request::Receipts {
Expand All @@ -365,7 +303,7 @@ fn get_block_receipts() {
let request_body = encode_request(&Request::Receipts(request.clone()), req_id);
let response = {
let receipts: Vec<_> = block_hashes.iter()
.map(|hash| provider.client.block_receipts(hash).unwrap())
.map(|hash| provider.block_receipts(hash).unwrap())
.collect();

let new_buf = *flow_params.limit() - flow_params.compute_cost(request::Kind::Receipts, receipts.len());
Expand All @@ -391,7 +329,7 @@ fn get_state_proofs() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());

{
let packet_body = write_handshake(&cur_status, &capabilities, Some(&flow_params));
Expand Down Expand Up @@ -443,7 +381,7 @@ fn get_contract_code() {

let (provider, proto) = setup(flow_params.clone(), capabilities.clone());

let cur_status = status(provider.client.chain_info());
let cur_status = status(provider.chain_info());

{
let packet_body = write_handshake(&cur_status, &capabilities, Some(&flow_params));
Expand Down

0 comments on commit 542e95c

Please sign in to comment.