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

Commit

Permalink
Conditionally compile ethcore public test helpers (#8743)
Browse files Browse the repository at this point in the history
* Mark test helpers and test-only specs as cfg(test)

* Use test-probe to conditionally compile test helpers

* Remove test probe and directly use features tag
  • Loading branch information
sorpaas authored and 5chdn committed Jun 4, 2018
1 parent 8057e8d commit e2a90ce
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 8 deletions.
2 changes: 2 additions & 0 deletions ethcore/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,5 @@ json-tests = ["ethcore-transaction/json-tests"]
test-heavy = []
# Compile benches
benches = []
# Compile test helpers
test-helpers = []
3 changes: 3 additions & 0 deletions ethcore/private-tx/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,6 @@ serde_derive = "1.0"
serde_json = "1.0"
tiny-keccak = "1.4"
url = "1"

[dev-dependencies]
ethcore = { path = "..", features = ["test-helpers"] }
4 changes: 4 additions & 0 deletions ethcore/src/client/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,20 @@ mod ancient_import;
mod client;
mod config;
mod error;
#[cfg(any(test, feature="test-helpers"))]
mod evm_test_client;
mod io_message;
#[cfg(any(test, feature="test-helpers"))]
mod test_client;
mod trace;

pub use self::client::*;
pub use self::config::{Mode, ClientConfig, DatabaseCompactionProfile, BlockChainConfig, VMType};
pub use self::error::Error;
#[cfg(any(test, feature="test-helpers"))]
pub use self::evm_test_client::{EvmTestClient, EvmTestError, TransactResult};
pub use self::io_message::ClientIoMessage;
#[cfg(any(test, feature="test-helpers"))]
pub use self::test_client::{TestBlockChainClient, EachBlockWith};
pub use self::chain_notify::{ChainNotify, ChainRoute, ChainRouteType, ChainMessageType};
pub use self::traits::{
Expand Down
4 changes: 2 additions & 2 deletions ethcore/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,6 @@ pub mod snapshot;
pub mod spec;
pub mod state;
pub mod state_db;
// Test helpers made public for usage outside ethcore
pub mod test_helpers;
pub mod trace;
pub mod verification;

Expand All @@ -177,6 +175,8 @@ mod tests;
#[cfg(test)]
#[cfg(feature="json-tests")]
mod json_tests;
#[cfg(any(test, feature="test-helpers"))]
pub mod test_helpers;
#[cfg(test)]
mod test_helpers_internal;

Expand Down
25 changes: 19 additions & 6 deletions ethcore/src/spec/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,7 @@ macro_rules! load_bundled {
};
}

#[cfg(any(test, feature="test-helpers"))]
macro_rules! load_machine_bundled {
($e:expr) => {
Spec::load_machine(
Expand Down Expand Up @@ -838,59 +839,68 @@ impl Spec {
self.engine.genesis_epoch_data(&genesis, &call)
}

/// Create a new Spec with InstantSeal consensus which does internal sealing (not requiring
/// work).
pub fn new_instant() -> Spec {
load_bundled!("instant_seal")
}

/// Create a new Spec which conforms to the Frontier-era Morden chain except that it's a
/// NullEngine consensus.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test() -> Spec {
load_bundled!("null_morden")
}

/// Create the EthereumMachine corresponding to Spec::new_test.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_machine() -> EthereumMachine { load_machine_bundled!("null_morden") }

/// Create a new Spec which conforms to the Frontier-era Morden chain except that it's a NullEngine consensus with applying reward on block close.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_with_reward() -> Spec { load_bundled!("null_morden_with_reward") }

/// Create a new Spec which is a NullEngine consensus with a premine of address whose
/// secret is keccak('').
#[cfg(any(test, feature="test-helpers"))]
pub fn new_null() -> Spec {
load_bundled!("null")
}

/// Create a new Spec which constructs a contract at address 5 with storage at 0 equal to 1.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_constructor() -> Spec {
load_bundled!("constructor")
}

/// Create a new Spec with InstantSeal consensus which does internal sealing (not requiring
/// work).
pub fn new_instant() -> Spec {
load_bundled!("instant_seal")
}

/// Create a new Spec with AuthorityRound consensus which does internal sealing (not
/// requiring work).
/// Accounts with secrets keccak("0") and keccak("1") are the validators.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_round() -> Self {
load_bundled!("authority_round")
}

/// Create a new Spec with AuthorityRound consensus which does internal sealing (not
/// requiring work) with empty step messages enabled.
/// Accounts with secrets keccak("0") and keccak("1") are the validators.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_round_empty_steps() -> Self {
load_bundled!("authority_round_empty_steps")
}

/// Create a new Spec with AuthorityRound consensus (with empty steps) using a block reward
/// contract. The contract source code can be found at:
/// https://github.com/parity-contracts/block-reward/blob/daf7d44383b6cdb11cb6b953b018648e2b027cfb/contracts/ExampleBlockReward.sol
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_round_block_reward_contract() -> Self {
load_bundled!("authority_round_block_reward_contract")
}

/// Create a new Spec with Tendermint consensus which does internal sealing (not requiring
/// work).
/// Account keccak("0") and keccak("1") are a authorities.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_test_tendermint() -> Self {
load_bundled!("tendermint")
}
Expand All @@ -903,13 +913,15 @@ impl Spec {
/// "0xbfc708a000000000000000000000000082a978b3f5962a5b0957d9ee9eef472ee55b42f1" and added
/// back in using
/// "0x4d238c8e00000000000000000000000082a978b3f5962a5b0957d9ee9eef472ee55b42f1".
#[cfg(any(test, feature="test-helpers"))]
pub fn new_validator_safe_contract() -> Self {
load_bundled!("validator_safe_contract")
}

/// The same as the `safeContract`, but allows reporting and uses AuthorityRound.
/// Account is marked with `reportBenign` it can be checked as disliked with "0xd8f2e0bf".
/// Validator can be removed with `reportMalicious`.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_validator_contract() -> Self {
load_bundled!("validator_contract")
}
Expand All @@ -918,6 +930,7 @@ impl Spec {
/// height.
/// Account with secrets keccak("0") is the validator for block 1 and with keccak("1")
/// onwards.
#[cfg(any(test, feature="test-helpers"))]
pub fn new_validator_multi() -> Self {
load_bundled!("validator_multi")
}
Expand Down
1 change: 1 addition & 0 deletions ethcore/sync/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,4 @@ ethcore-io = { path = "../../util/io", features = ["mio"] }
ethkey = { path = "../../ethkey" }
kvdb-memorydb = { path = "../../util/kvdb-memorydb" }
ethcore-private-tx = { path = "../private-tx" }
ethcore = { path = "..", features = ["test-helpers"] }

0 comments on commit e2a90ce

Please sign in to comment.