util fake-fetch (#8363)

* start

* hash-fetch

* rpc

* revert price-info

* remove used file

* adapt to changes in fetch

* make fake-fetch generic over

* fix tests to comply with the new `fake-fetch`
This commit is contained in:
Niklas Adolfsson
2018-04-11 11:59:04 +02:00
committed by Marek Kotewicz
parent 6cf441fc9e
commit 9fe991db1c
13 changed files with 82 additions and 128 deletions

View File

@@ -91,6 +91,9 @@ extern crate macros;
#[cfg(test)]
extern crate kvdb_memorydb;
#[cfg(test)]
extern crate fake_fetch;
extern crate tempdir;
pub extern crate jsonrpc_ws_server as ws;

View File

@@ -1,59 +0,0 @@
// Copyright 2015-2017 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::thread;
use std::boxed::Box;
use jsonrpc_core::futures::{self, Future};
use fetch::{self, Fetch, Url, Request};
use futures::future;
use hyper;
/// Test implementation of fetcher. Will always return the same file.
#[derive(Default, Clone)]
pub struct TestFetch;
impl Fetch for TestFetch {
type Result = Box<Future<Item = fetch::Response, Error = fetch::Error> + Send + 'static>;
fn fetch(&self, request: Request, abort: fetch::Abort) -> Self::Result {
let u = request.url().clone();
let (tx, rx) = futures::oneshot();
thread::spawn(move || {
let r = hyper::Response::new().with_body(&b"Some content"[..]);
tx.send(fetch::Response::new(u, r, abort)).unwrap();
});
Box::new(rx.map_err(|_| fetch::Error::Aborted))
}
fn get(&self, url: &str, abort: fetch::Abort) -> Self::Result {
let url: Url = match url.parse() {
Ok(u) => u,
Err(e) => return Box::new(future::err(e.into()))
};
self.fetch(Request::get(url), abort)
}
fn post(&self, url: &str, abort: fetch::Abort) -> Self::Result {
let url: Url = match url.parse() {
Ok(u) => u,
Err(e) => return Box::new(future::err(e.into()))
};
self.fetch(Request::post(url), abort)
}
}

View File

@@ -17,14 +17,12 @@
//! Test rpc services.
mod dapps;
mod fetch;
mod miner_service;
mod snapshot_service;
mod sync_provider;
mod update_service;
pub use self::dapps::TestDappsService;
pub use self::fetch::TestFetch;
pub use self::miner_service::TestMinerService;
pub use self::snapshot_service::TestSnapshotService;
pub use self::sync_provider::{Config, TestSyncProvider};

View File

@@ -26,9 +26,11 @@ use futures_cpupool::CpuPool;
use jsonrpc_core::IoHandler;
use v1::{ParitySet, ParitySetClient};
use v1::tests::helpers::{TestMinerService, TestFetch, TestUpdater, TestDappsService};
use v1::tests::helpers::{TestMinerService, TestUpdater, TestDappsService};
use super::manage_network::TestManageNetwork;
use fake_fetch::FakeFetch;
fn miner_service() -> Arc<TestMinerService> {
Arc::new(TestMinerService::default())
}
@@ -45,7 +47,7 @@ fn updater_service() -> Arc<TestUpdater> {
Arc::new(TestUpdater::default())
}
pub type TestParitySetClient = ParitySetClient<TestBlockChainClient, TestMinerService, TestUpdater, TestFetch>;
pub type TestParitySetClient = ParitySetClient<TestBlockChainClient, TestMinerService, TestUpdater, FakeFetch<usize>>;
fn parity_set_client(
client: &Arc<TestBlockChainClient>,
@@ -55,7 +57,7 @@ fn parity_set_client(
) -> TestParitySetClient {
let dapps_service = Arc::new(TestDappsService);
let pool = CpuPool::new(1);
ParitySetClient::new(client, miner, updater, &(net.clone() as Arc<ManageNetwork>), Some(dapps_service), TestFetch::default(), pool)
ParitySetClient::new(client, miner, updater, &(net.clone() as Arc<ManageNetwork>), Some(dapps_service), FakeFetch::new(Some(1)), pool)
}
#[test]