Merge pull request #477 from ethcore/temp-path

dev/test/build tools to separate crate
This commit is contained in:
Gav Wood 2016-02-20 21:59:59 +01:00
commit 26ad918e03
22 changed files with 178 additions and 94 deletions

10
Cargo.lock generated
View File

@ -8,6 +8,7 @@ dependencies = [
"docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ethcore 0.9.99", "ethcore 0.9.99",
"ethcore-devtools 0.9.99",
"ethcore-rpc 0.9.99", "ethcore-rpc 0.9.99",
"ethcore-util 0.9.99", "ethcore-util 0.9.99",
"ethsync 0.9.99", "ethsync 0.9.99",
@ -173,6 +174,7 @@ dependencies = [
"crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ethash 0.9.99", "ethash 0.9.99",
"ethcore-devtools 0.9.99",
"ethcore-util 0.9.99", "ethcore-util 0.9.99",
"heapsize 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
@ -184,6 +186,13 @@ dependencies = [
"time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "ethcore-devtools"
version = "0.9.99"
dependencies = [
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "ethcore-rpc" name = "ethcore-rpc"
version = "0.9.99" version = "0.9.99"
@ -212,6 +221,7 @@ dependencies = [
"elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "elastic-array 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"eth-secp256k1 0.5.4 (git+https://github.com/arkpar/rust-secp256k1.git)", "eth-secp256k1 0.5.4 (git+https://github.com/arkpar/rust-secp256k1.git)",
"ethcore-devtools 0.9.99",
"heapsize 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "heapsize 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"igd 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "igd 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",

View File

@ -19,6 +19,7 @@ ethcore-rpc = { path = "rpc", optional = true }
fdlimit = { path = "util/fdlimit" } fdlimit = { path = "util/fdlimit" }
target_info = "0.1" target_info = "0.1"
daemonize = "0.2" daemonize = "0.2"
ethcore-devtools = { path = "devtools" }
[features] [features]
default = ["rpc"] default = ["rpc"]

16
devtools/Cargo.toml Normal file
View File

@ -0,0 +1,16 @@
[package]
description = "Ethcore development/test/build tools"
homepage = "http://ethcore.io"
license = "GPL-3.0"
name = "ethcore-devtools"
version = "0.9.99"
authors = ["Ethcore <admin@ethcore.io>"]
[dependencies]
rand = "0.3"
[features]
[lib]
path = "src/lib.rs"
test = true

1
devtools/README.md Normal file
View File

@ -0,0 +1 @@
# ethcore dev tools

24
devtools/src/lib.rs Normal file
View File

@ -0,0 +1,24 @@
// Copyright 2015, 2016 Ethcore (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/>.
//! dev-tools
extern crate rand;
pub mod random_path;
pub use random_path::*;

View File

@ -0,0 +1,89 @@
// Copyright 2015, 2016 Ethcore (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/>.
//! Random path
use std::path::*;
use std::fs;
use std::env;
use rand::random;
pub struct RandomTempPath {
path: PathBuf
}
pub fn random_filename() -> String {
(0..8).map(|_| ((random::<f32>() * 26.0) as u8 + 97) as char).collect()
}
impl RandomTempPath {
pub fn new() -> RandomTempPath {
let mut dir = env::temp_dir();
dir.push(random_filename());
RandomTempPath {
path: dir.clone()
}
}
pub fn create_dir() -> RandomTempPath {
let mut dir = env::temp_dir();
dir.push(random_filename());
fs::create_dir_all(dir.as_path()).unwrap();
RandomTempPath {
path: dir.clone()
}
}
pub fn as_path(&self) -> &PathBuf {
&self.path
}
pub fn as_str(&self) -> &str {
self.path.to_str().unwrap()
}
}
impl Drop for RandomTempPath {
fn drop(&mut self) {
if let Err(e) = fs::remove_dir_all(self.as_path()) {
panic!("failed to remove temp directory, probably something failed to destroyed ({})", e);
}
}
}
#[test]
fn creates_dir() {
let temp = RandomTempPath::create_dir();
assert!(fs::metadata(temp.as_path()).unwrap().is_dir());
}
#[test]
fn destroys_dir() {
let path_buf = {
let temp = RandomTempPath::create_dir();
assert!(fs::metadata(temp.as_path()).unwrap().is_dir());
let path_buf = temp.as_path().to_path_buf();
path_buf
};
assert!(fs::metadata(&path_buf).is_err());
}
#[test]
fn provides_random() {
let temp = RandomTempPath::create_dir();
assert!(temp.as_path().to_str().is_some());
}

View File

@ -21,6 +21,7 @@ num_cpus = "0.2"
clippy = { version = "0.0.42", optional = true } clippy = { version = "0.0.42", optional = true }
crossbeam = "0.1.5" crossbeam = "0.1.5"
lazy_static = "0.1" lazy_static = "0.1"
ethcore-devtools = { path = "../devtools" }
[features] [features]
jit = ["evmjit"] jit = ["evmjit"]

View File

@ -664,6 +664,7 @@ mod tests {
use util::hash::*; use util::hash::*;
use blockchain::*; use blockchain::*;
use tests::helpers::*; use tests::helpers::*;
use devtools::*;
#[test] #[test]
fn valid_tests_extra32() { fn valid_tests_extra32() {

View File

@ -20,6 +20,7 @@ use pod_state::*;
use block::Block; use block::Block;
use ethereum; use ethereum;
use tests::helpers::*; use tests::helpers::*;
use devtools::*;
pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> { pub fn json_chain_test(json_data: &[u8], era: ChainEra) -> Vec<String> {
init_log(); init_log();

View File

@ -92,6 +92,7 @@ extern crate env_logger;
extern crate num_cpus; extern crate num_cpus;
extern crate crossbeam; extern crate crossbeam;
#[cfg(test)] extern crate ethcore_devtools as devtools;
#[cfg(feature = "jit" )] extern crate evmjit; #[cfg(feature = "jit" )] extern crate evmjit;
pub mod block; pub mod block;

View File

@ -129,6 +129,7 @@ mod tests {
use super::*; use super::*;
use tests::helpers::*; use tests::helpers::*;
use util::network::*; use util::network::*;
use devtools::*;
#[test] #[test]
fn it_can_be_started() { fn it_can_be_started() {

View File

@ -341,6 +341,7 @@ use util::rlp::*;
use util::uint::*; use util::uint::*;
use account::*; use account::*;
use tests::helpers::*; use tests::helpers::*;
use devtools::*;
#[test] #[test]
fn code_from_database() { fn code_from_database() {

View File

@ -17,6 +17,7 @@
use client::{BlockChainClient, Client, BlockId}; use client::{BlockChainClient, Client, BlockId};
use tests::helpers::*; use tests::helpers::*;
use common::*; use common::*;
use devtools::*;
#[test] #[test]
fn created() { fn created() {

View File

@ -15,17 +15,15 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
use client::{BlockChainClient, Client}; use client::{BlockChainClient, Client};
use std::env;
use common::*; use common::*;
use std::path::PathBuf;
use spec::*; use spec::*;
use std::fs::{remove_dir_all};
use blockchain::{BlockChain}; use blockchain::{BlockChain};
use state::*; use state::*;
use rocksdb::*; use rocksdb::*;
use evm::{Schedule, Factory}; use evm::{Schedule, Factory};
use engine::*; use engine::*;
use ethereum; use ethereum;
use devtools::*;
#[cfg(feature = "json-tests")] #[cfg(feature = "json-tests")]
pub enum ChainEra { pub enum ChainEra {
@ -33,36 +31,6 @@ pub enum ChainEra {
Homestead, Homestead,
} }
pub struct RandomTempPath {
path: PathBuf
}
impl RandomTempPath {
pub fn new() -> RandomTempPath {
let mut dir = env::temp_dir();
dir.push(H32::random().hex());
RandomTempPath {
path: dir.clone()
}
}
pub fn as_path(&self) -> &PathBuf {
&self.path
}
pub fn as_str(&self) -> &str {
self.path.to_str().unwrap()
}
}
impl Drop for RandomTempPath {
fn drop(&mut self) {
if let Err(e) = remove_dir_all(self.as_path()) {
panic!("failed to remove temp directory, probably something failed to destroyed ({})", e);
}
}
}
#[cfg(test)] #[cfg(test)]
pub struct GuardedTempResult<T> { pub struct GuardedTempResult<T> {
result: Option<T>, result: Option<T>,

View File

@ -30,6 +30,7 @@ clippy = { version = "0.0.42", optional = true }
json-tests = { path = "json-tests" } json-tests = { path = "json-tests" }
target_info = "0.1.0" target_info = "0.1.0"
igd = "0.4.2" igd = "0.4.2"
ethcore-devtools = { path = "../devtools" }
libc = "0.2.7" libc = "0.2.7"
[features] [features]

View File

@ -1030,7 +1030,7 @@ mod file_tests {
mod directory_tests { mod directory_tests {
use super::{KeyDirectory, new_uuid, uuid_to_string, KeyFileContent, KeyFileCrypto, MAX_CACHE_USAGE_TRACK}; use super::{KeyDirectory, new_uuid, uuid_to_string, KeyFileContent, KeyFileCrypto, MAX_CACHE_USAGE_TRACK};
use common::*; use common::*;
use tests::helpers::*; use devtools::*;
#[test] #[test]
fn key_directory_locates_keys() { fn key_directory_locates_keys() {
@ -1110,7 +1110,7 @@ mod directory_tests {
mod specs { mod specs {
use super::*; use super::*;
use common::*; use common::*;
use tests::helpers::*; use devtools::*;
#[test] #[test]
fn can_initiate_key_directory() { fn can_initiate_key_directory() {

View File

@ -70,7 +70,7 @@ impl SecretStore {
} }
#[cfg(test)] #[cfg(test)]
fn new_test(path: &::tests::helpers::RandomTempPath) -> SecretStore { fn new_test(path: &::devtools::RandomTempPath) -> SecretStore {
SecretStore { SecretStore {
directory: KeyDirectory::new(path.as_path()) directory: KeyDirectory::new(path.as_path())
} }
@ -203,7 +203,7 @@ mod vector_tests {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use tests::helpers::*; use devtools::*;
use common::*; use common::*;
#[test] #[test]

View File

@ -106,6 +106,7 @@ extern crate serde;
#[macro_use] #[macro_use]
extern crate log as rlog; extern crate log as rlog;
extern crate igd; extern crate igd;
extern crate ethcore_devtools as devtools;
extern crate libc; extern crate libc;
pub mod standard; pub mod standard;
@ -161,5 +162,3 @@ pub use network::*;
pub use io::*; pub use io::*;
pub use log::*; pub use log::*;
#[cfg(test)]
mod tests;

View File

@ -977,7 +977,7 @@ fn load_key(path: &Path) -> Option<Secret> {
#[test] #[test]
fn key_save_load() { fn key_save_load() {
use tests::helpers::RandomTempPath; use ::devtools::RandomTempPath;
let temp_path = RandomTempPath::create_dir(); let temp_path = RandomTempPath::create_dir();
let key = H256::random(); let key = H256::random();
save_key(temp_path.as_path(), &key); save_key(temp_path.as_path(), &key);

View File

@ -344,7 +344,7 @@ mod tests {
use std::str::FromStr; use std::str::FromStr;
use std::net::*; use std::net::*;
use hash::*; use hash::*;
use tests::helpers::*; use devtools::*;
#[test] #[test]
fn endpoint_parse() { fn endpoint_parse() {

View File

@ -1,31 +0,0 @@
use common::*;
use std::path::PathBuf;
use std::fs::{remove_dir_all};
use std::env;
pub struct RandomTempPath {
path: PathBuf
}
impl RandomTempPath {
pub fn create_dir() -> RandomTempPath {
let mut dir = env::temp_dir();
dir.push(H32::random().hex());
fs::create_dir_all(dir.as_path()).unwrap();
RandomTempPath {
path: dir.clone()
}
}
pub fn as_path(&self) -> &PathBuf {
&self.path
}
}
impl Drop for RandomTempPath {
fn drop(&mut self) {
if let Err(e) = remove_dir_all(self.as_path()) {
panic!("failed to remove temp directory, probably something failed to destroyed ({})", e);
}
}
}

View File

@ -1 +0,0 @@
pub mod helpers;