From a8d78e89d39a7af4349e5ffa8fff07437de22ca3 Mon Sep 17 00:00:00 2001 From: sakridge Date: Thu, 28 Oct 2021 18:27:07 -0700 Subject: [PATCH] Move test-validator to own module to reduce core dependencies (#20658) * Move test-validator to own module to reduce core dependencies * Fix a few TestValidator paths * Use solana_test_validator crate for solana_test_validator bin * Move client int tests to separate crate Co-authored-by: Tyera Eulberg --- Cargo.lock | 70 +++++++++++++++++-- Cargo.toml | 3 + cli/Cargo.toml | 2 +- cli/tests/nonce.rs | 2 +- cli/tests/program.rs | 2 +- cli/tests/request_airdrop.rs | 2 +- cli/tests/stake.rs | 2 +- cli/tests/transfer.rs | 2 +- cli/tests/vote.rs | 2 +- client-test/Cargo.toml | 35 ++++++++++ client-test/src/lib.rs | 1 + {core => client-test}/tests/client.rs | 2 +- core/Cargo.toml | 3 - core/src/lib.rs | 1 - core/src/validator.rs | 2 +- rpc-test/Cargo.toml | 38 ++++++++++ rpc-test/src/lib.rs | 1 + {core => rpc-test}/tests/rpc.rs | 2 +- test-validator/Cargo.toml | 29 ++++++++ .../src/lib.rs | 8 ++- tokens/Cargo.toml | 2 +- tokens/src/commands.rs | 2 +- tokens/tests/commands.rs | 2 +- validator/Cargo.toml | 1 + validator/src/bin/solana-test-validator.rs | 2 +- validator/src/lib.rs | 2 +- 26 files changed, 193 insertions(+), 27 deletions(-) create mode 100644 client-test/Cargo.toml create mode 100644 client-test/src/lib.rs rename {core => client-test}/tests/client.rs (98%) create mode 100644 rpc-test/Cargo.toml create mode 100644 rpc-test/src/lib.rs rename {core => rpc-test}/tests/rpc.rs (99%) create mode 100644 test-validator/Cargo.toml rename core/src/test_validator.rs => test-validator/src/lib.rs (99%) diff --git a/Cargo.lock b/Cargo.lock index 457b814d0c..2b5427174b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4566,12 +4566,12 @@ dependencies = [ "solana-cli-output", "solana-client", "solana-config-program", - "solana-core", "solana-faucet", "solana-logger 1.9.0", "solana-remote-wallet", "solana-sdk", "solana-streamer", + "solana-test-validator", "solana-transaction-status", "solana-version", "solana-vote-program", @@ -4651,6 +4651,26 @@ dependencies = [ "url 2.2.2", ] +[[package]] +name = "solana-client-test" +version = "1.9.0" +dependencies = [ + "solana-client", + "solana-logger 1.9.0", + "solana-measure", + "solana-merkle-tree", + "solana-metrics", + "solana-perf", + "solana-rayon-threadlimit", + "solana-rpc", + "solana-runtime", + "solana-sdk", + "solana-streamer", + "solana-test-validator", + "solana-version", + "systemstat", +] + [[package]] name = "solana-compute-budget-program" version = "1.9.0" @@ -4703,10 +4723,8 @@ dependencies = [ "serde_derive", "serde_json", "serial_test", - "solana-account-decoder", "solana-accountsdb-plugin-manager", "solana-client", - "solana-config-program", "solana-entry", "solana-frozen-abi 1.9.0", "solana-frozen-abi-macro 1.9.0", @@ -4719,7 +4737,6 @@ dependencies = [ "solana-perf", "solana-poh", "solana-program-runtime", - "solana-program-test", "solana-rayon-threadlimit", "solana-replica-lib", "solana-rpc", @@ -5545,6 +5562,29 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "solana-rpc-test" +version = "1.9.0" +dependencies = [ + "bincode", + "bs58 0.4.0", + "jsonrpc-core", + "jsonrpc-core-client", + "log 0.4.14", + "reqwest", + "serde", + "serde_json", + "solana-account-decoder", + "solana-client", + "solana-logger 1.9.0", + "solana-rpc", + "solana-sdk", + "solana-streamer", + "solana-test-validator", + "solana-transaction-status", + "tokio", +] + [[package]] name = "solana-runtime" version = "1.9.0" @@ -5795,6 +5835,25 @@ dependencies = [ "users", ] +[[package]] +name = "solana-test-validator" +version = "1.9.0" +dependencies = [ + "base64 0.12.3", + "log 0.4.14", + "solana-client", + "solana-core", + "solana-gossip", + "solana-ledger", + "solana-logger 1.9.0", + "solana-net-utils", + "solana-program-test", + "solana-rpc", + "solana-runtime", + "solana-sdk", + "solana-streamer", +] + [[package]] name = "solana-tokens" version = "1.9.0" @@ -5813,11 +5872,11 @@ dependencies = [ "solana-clap-utils", "solana-cli-config", "solana-client", - "solana-core", "solana-logger 1.9.0", "solana-remote-wallet", "solana-sdk", "solana-streamer", + "solana-test-validator", "solana-transaction-status", "solana-version", "spl-associated-token-account", @@ -5900,6 +5959,7 @@ dependencies = [ "solana-sdk", "solana-send-transaction-service", "solana-streamer", + "solana-test-validator", "solana-version", "solana-vote-program", "symlink", diff --git a/Cargo.toml b/Cargo.toml index b7f598b9ff..fcb07d9958 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,6 +73,9 @@ members = [ "watchtower", "replica-node", "replica-lib", + "test-validator", + "rpc-test", + "client-test", ] exclude = [ diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 8fd0e15546..568f23e3e0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -46,8 +46,8 @@ thiserror = "1.0.30" tiny-bip39 = "0.8.2" [dev-dependencies] -solana-core = { path = "../core", version = "=1.9.0" } solana-streamer = { path = "../streamer", version = "=1.9.0" } +solana-test-validator = { path = "../test-validator", version = "=1.9.0" } tempfile = "3.2.0" [[bin]] diff --git a/cli/tests/nonce.rs b/cli/tests/nonce.rs index e0342f0e4f..5aeccb97eb 100644 --- a/cli/tests/nonce.rs +++ b/cli/tests/nonce.rs @@ -9,7 +9,6 @@ use solana_client::{ nonce_utils, rpc_client::RpcClient, }; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ commitment_config::CommitmentConfig, @@ -19,6 +18,7 @@ use solana_sdk::{ system_program, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; #[test] fn test_nonce() { diff --git a/cli/tests/program.rs b/cli/tests/program.rs index 2a0d3dc916..b6efecc7dc 100644 --- a/cli/tests/program.rs +++ b/cli/tests/program.rs @@ -5,7 +5,6 @@ use solana_cli::{ }; use solana_cli_output::OutputFormat; use solana_client::rpc_client::RpcClient; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ account_utils::StateMut, @@ -16,6 +15,7 @@ use solana_sdk::{ signature::{Keypair, Signer}, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; use std::{env, fs::File, io::Read, path::PathBuf, str::FromStr}; #[test] diff --git a/cli/tests/request_airdrop.rs b/cli/tests/request_airdrop.rs index 56444472bf..a437bf3bc4 100644 --- a/cli/tests/request_airdrop.rs +++ b/cli/tests/request_airdrop.rs @@ -1,12 +1,12 @@ use solana_cli::cli::{process_command, CliCommand, CliConfig}; use solana_client::rpc_client::RpcClient; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ commitment_config::CommitmentConfig, signature::{Keypair, Signer}, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; #[test] fn test_cli_request_airdrop() { diff --git a/cli/tests/stake.rs b/cli/tests/stake.rs index c9410fed89..580205818a 100644 --- a/cli/tests/stake.rs +++ b/cli/tests/stake.rs @@ -11,7 +11,6 @@ use solana_client::{ nonce_utils, rpc_client::RpcClient, }; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ account_utils::StateMut, @@ -26,6 +25,7 @@ use solana_sdk::{ }, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; #[test] fn test_stake_delegation_force() { diff --git a/cli/tests/transfer.rs b/cli/tests/transfer.rs index d0f1f060ed..20bddbe1fa 100644 --- a/cli/tests/transfer.rs +++ b/cli/tests/transfer.rs @@ -10,7 +10,6 @@ use solana_client::{ nonce_utils, rpc_client::RpcClient, }; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ commitment_config::CommitmentConfig, @@ -20,6 +19,7 @@ use solana_sdk::{ stake, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; #[test] fn test_transfer() { diff --git a/cli/tests/vote.rs b/cli/tests/vote.rs index f8ddc39372..904c981a60 100644 --- a/cli/tests/vote.rs +++ b/cli/tests/vote.rs @@ -7,7 +7,6 @@ use solana_client::{ blockhash_query::{self, BlockhashQuery}, rpc_client::RpcClient, }; -use solana_core::test_validator::TestValidator; use solana_faucet::faucet::run_local_faucet; use solana_sdk::{ account_utils::StateMut, @@ -15,6 +14,7 @@ use solana_sdk::{ signature::{Keypair, Signer}, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; use solana_vote_program::vote_state::{VoteAuthorize, VoteState, VoteStateVersions}; #[test] diff --git a/client-test/Cargo.toml b/client-test/Cargo.toml new file mode 100644 index 0000000000..d4ff6ffffd --- /dev/null +++ b/client-test/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "solana-client-test" +version = "1.9.0" +description = "Solana RPC Test" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +documentation = "https://docs.rs/solana-client-test" +edition = "2018" + +[dependencies] +solana-client = { path = "../client", version = "=1.9.0" } +solana-measure = { path = "../measure", version = "=1.9.0" } +solana-merkle-tree = { path = "../merkle-tree", version = "=1.9.0" } +solana-metrics = { path = "../metrics", version = "=1.9.0" } +solana-perf = { path = "../perf", version = "=1.9.0" } +solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.9.0" } +solana-rpc = { path = "../rpc", version = "=1.9.0" } +solana-runtime = { path = "../runtime", version = "=1.9.0" } +solana-sdk = { path = "../sdk", version = "=1.9.0" } +solana-streamer = { path = "../streamer", version = "=1.9.0" } +solana-test-validator = { path = "../test-validator", version = "=1.9.0" } +solana-version = { path = "../version", version = "=1.9.0" } +systemstat = "0.1.10" + +[dev-dependencies] +solana-logger = { path = "../logger", version = "=1.9.0" } + +[lib] +crate-type = ["lib"] +name = "solana_entry" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/client-test/src/lib.rs b/client-test/src/lib.rs new file mode 100644 index 0000000000..9dcf6a6f06 --- /dev/null +++ b/client-test/src/lib.rs @@ -0,0 +1 @@ +// This is a test-only crate diff --git a/core/tests/client.rs b/client-test/tests/client.rs similarity index 98% rename from core/tests/client.rs rename to client-test/tests/client.rs index c7692b3cb3..a5979f52a0 100644 --- a/core/tests/client.rs +++ b/client-test/tests/client.rs @@ -1,5 +1,4 @@ use solana_client::{pubsub_client::PubsubClient, rpc_client::RpcClient, rpc_response::SlotInfo}; -use solana_core::test_validator::TestValidator; use solana_rpc::{ optimistically_confirmed_bank_tracker::OptimisticallyConfirmedBank, rpc_pubsub_service::{PubSubConfig, PubSubService}, @@ -19,6 +18,7 @@ use solana_sdk::{ system_transaction, }; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; use std::{ net::{IpAddr, SocketAddr}, sync::{ diff --git a/core/Cargo.toml b/core/Cargo.toml index 86d5822957..19560bb631 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -34,10 +34,8 @@ rayon = "1.5.1" retain_mut = "0.1.4" serde = "1.0.130" serde_derive = "1.0.103" -solana-account-decoder = { path = "../account-decoder", version = "=1.9.0" } solana-accountsdb-plugin-manager = { path = "../accountsdb-plugin-manager", version = "=1.9.0" } solana-client = { path = "../client", version = "=1.9.0" } -solana-config-program = { path = "../programs/config", version = "=1.9.0" } solana-entry = { path = "../entry", version = "=1.9.0" } solana-gossip = { path = "../gossip", version = "=1.9.0" } solana-ledger = { path = "../ledger", version = "=1.9.0" } @@ -47,7 +45,6 @@ solana-metrics = { path = "../metrics", version = "=1.9.0" } solana-net-utils = { path = "../net-utils", version = "=1.9.0" } solana-perf = { path = "../perf", version = "=1.9.0" } solana-poh = { path = "../poh", version = "=1.9.0" } -solana-program-test = { path = "../program-test", version = "=1.9.0" } solana-rpc = { path = "../rpc", version = "=1.9.0" } solana-replica-lib = { path = "../replica-lib", version = "=1.9.0" } solana-runtime = { path = "../runtime", version = "=1.9.0" } diff --git a/core/src/lib.rs b/core/src/lib.rs index 6a758974cf..5d991f6997 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -50,7 +50,6 @@ pub mod sigverify_shreds; pub mod sigverify_stage; pub mod snapshot_packager_service; pub mod system_monitor_service; -pub mod test_validator; pub mod tower_storage; pub mod tpu; pub mod tree_diff; diff --git a/core/src/validator.rs b/core/src/validator.rs index b0eda39176..7c91c43f2a 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -292,7 +292,7 @@ pub struct Validator { } // in the distant future, get rid of ::new()/exit() and use Result properly... -pub(crate) fn abort() -> ! { +pub fn abort() -> ! { #[cfg(not(test))] { // standard error is usually redirected to a log file, cry for help on standard output as diff --git a/rpc-test/Cargo.toml b/rpc-test/Cargo.toml new file mode 100644 index 0000000000..1e5d98c2a6 --- /dev/null +++ b/rpc-test/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "solana-rpc-test" +version = "1.9.0" +description = "Solana RPC Test" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +documentation = "https://docs.rs/solana-rpc-test" +edition = "2018" + +[dependencies] +bincode = "1.3.3" +bs58 = "0.4.0" +jsonrpc-core = "18.0.0" +jsonrpc-core-client = { version = "18.0.0", features = ["ipc", "ws"] } +log = "0.4.11" +reqwest = { version = "0.11.5", default-features = false, features = ["blocking", "rustls-tls", "json"] } +serde = "1.0.130" +serde_json = "1.0.68" +solana-account-decoder = { path = "../account-decoder", version = "=1.9.0" } +solana-client = { path = "../client", version = "=1.9.0" } +solana-rpc = { path = "../rpc", version = "=1.9.0" } +solana-sdk = { path = "../sdk", version = "=1.9.0" } +solana-streamer = { path = "../streamer", version = "=1.9.0" } +solana-test-validator = { path = "../test-validator", version = "=1.9.0" } +solana-transaction-status = { path = "../transaction-status", version = "=1.9.0" } +tokio = { version = "1", features = ["full"] } + +[dev-dependencies] +solana-logger = { path = "../logger", version = "=1.9.0" } + +[lib] +crate-type = ["lib"] +name = "solana_entry" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/rpc-test/src/lib.rs b/rpc-test/src/lib.rs new file mode 100644 index 0000000000..9dcf6a6f06 --- /dev/null +++ b/rpc-test/src/lib.rs @@ -0,0 +1 @@ +// This is a test-only crate diff --git a/core/tests/rpc.rs b/rpc-test/tests/rpc.rs similarity index 99% rename from core/tests/rpc.rs rename to rpc-test/tests/rpc.rs index 47e84565cd..c9749305a2 100644 --- a/core/tests/rpc.rs +++ b/rpc-test/tests/rpc.rs @@ -14,8 +14,8 @@ use solana_client::{ rpc_response::{Response as RpcResponse, RpcSignatureResult, SlotUpdate}, tpu_client::{TpuClient, TpuClientConfig}, }; -use solana_core::test_validator::TestValidator; use solana_rpc::rpc_pubsub::gen_client::Client as PubsubClient; +use solana_test_validator::TestValidator; use solana_sdk::{ commitment_config::CommitmentConfig, diff --git a/test-validator/Cargo.toml b/test-validator/Cargo.toml new file mode 100644 index 0000000000..401c7c760f --- /dev/null +++ b/test-validator/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "solana-test-validator" +description = "Blockchain, Rebuilt for Scale" +version = "1.9.0" +homepage = "https://solana.com/" +documentation = "https://docs.rs/solana-test-validator" +readme = "../README.md" +repository = "https://github.com/solana-labs/solana" +authors = ["Solana Maintainers "] +license = "Apache-2.0" +edition = "2018" + +[dependencies] +base64 = "0.12.3" +log = "0.4.14" +solana-client = { path = "../client", version = "=1.9.0" } +solana-core = { path = "../core", version = "=1.9.0" } +solana-gossip = { path = "../gossip", version = "=1.9.0" } +solana-ledger = { path = "../ledger", version = "=1.9.0" } +solana-logger = { path = "../logger", version = "=1.9.0" } +solana-net-utils = { path = "../net-utils", version = "=1.9.0" } +solana-program-test = { path = "../program-test", version = "=1.9.0" } +solana-rpc = { path = "../rpc", version = "=1.9.0" } +solana-runtime = { path = "../runtime", version = "=1.9.0" } +solana-sdk = { path = "../sdk", version = "=1.9.0" } +solana-streamer = { path = "../streamer", version = "=1.9.0" } + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/core/src/test_validator.rs b/test-validator/src/lib.rs similarity index 99% rename from core/src/test_validator.rs rename to test-validator/src/lib.rs index df299eb0ea..824d9d8277 100644 --- a/core/src/test_validator.rs +++ b/test-validator/src/lib.rs @@ -1,9 +1,11 @@ +#![allow(clippy::integer_arithmetic)] use { - crate::{ + log::*, + solana_client::rpc_client::RpcClient, + solana_core::{ tower_storage::TowerStorage, validator::{Validator, ValidatorConfig, ValidatorStartProgress}, }, - solana_client::rpc_client::RpcClient, solana_gossip::{ cluster_info::{ClusterInfo, Node}, gossip_service::discover_cluster, @@ -193,7 +195,7 @@ impl TestValidatorGenesis { info!("Fetching {} over RPC...", address); let account = rpc_client.get_account(&address).unwrap_or_else(|err| { error!("Failed to fetch {}: {}", address, err); - crate::validator::abort(); + solana_core::validator::abort(); }); self.add_account(address, AccountSharedData::from(account)); } diff --git a/tokens/Cargo.toml b/tokens/Cargo.toml index 33ffe2e0ac..fe822efcb3 100644 --- a/tokens/Cargo.toml +++ b/tokens/Cargo.toml @@ -34,6 +34,6 @@ thiserror = "1.0" [dev-dependencies] bincode = "1.3.3" -solana-core = { path = "../core", version = "=1.9.0" } solana-logger = { path = "../logger", version = "=1.9.0" } solana-streamer = { path = "../streamer", version = "=1.9.0" } +solana-test-validator = { path = "../test-validator", version = "=1.9.0" } diff --git a/tokens/src/commands.rs b/tokens/src/commands.rs index 718f8947fd..5b9293626c 100644 --- a/tokens/src/commands.rs +++ b/tokens/src/commands.rs @@ -1200,13 +1200,13 @@ pub fn test_process_distribute_stake_with_client(client: &RpcClient, sender_keyp #[cfg(test)] mod tests { use super::*; - use solana_core::test_validator::TestValidator; use solana_sdk::{ instruction::AccountMeta, signature::{read_keypair_file, write_keypair_file, Signer}, stake::instruction::StakeInstruction, }; use solana_streamer::socket::SocketAddrSpace; + use solana_test_validator::TestValidator; use solana_transaction_status::TransactionConfirmationStatus; fn one_signer_message() -> Message { diff --git a/tokens/tests/commands.rs b/tokens/tests/commands.rs index 7e65461681..8026a0f5ed 100644 --- a/tokens/tests/commands.rs +++ b/tokens/tests/commands.rs @@ -1,7 +1,7 @@ use solana_client::rpc_client::RpcClient; -use solana_core::test_validator::TestValidator; use solana_sdk::signature::{Keypair, Signer}; use solana_streamer::socket::SocketAddrSpace; +use solana_test_validator::TestValidator; use solana_tokens::commands::test_process_distribute_tokens_with_client; #[test] diff --git a/validator/Cargo.toml b/validator/Cargo.toml index 8aa4cc1494..09597edcf1 100644 --- a/validator/Cargo.toml +++ b/validator/Cargo.toml @@ -46,6 +46,7 @@ solana-runtime = { path = "../runtime", version = "=1.9.0" } solana-sdk = { path = "../sdk", version = "=1.9.0" } solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.9.0" } solana-streamer = { path = "../streamer", version = "=1.9.0" } +solana-test-validator = { path = "../test-validator", version = "=1.9.0" } solana-version = { path = "../version", version = "=1.9.0" } solana-vote-program = { path = "../programs/vote", version = "=1.9.0" } symlink = "0.1.0" diff --git a/validator/src/bin/solana-test-validator.rs b/validator/src/bin/solana-test-validator.rs index 0fb7e75641..faf564629b 100644 --- a/validator/src/bin/solana-test-validator.rs +++ b/validator/src/bin/solana-test-validator.rs @@ -26,7 +26,7 @@ use { solana_streamer::socket::SocketAddrSpace, solana_validator::{ admin_rpc_service, dashboard::Dashboard, ledger_lockfile, lock_ledger, println_name_value, - redirect_stderr_to_file, test_validator::*, + redirect_stderr_to_file, solana_test_validator::*, }, std::{ collections::HashSet, diff --git a/validator/src/lib.rs b/validator/src/lib.rs index 362d627839..c1cbed35c1 100644 --- a/validator/src/lib.rs +++ b/validator/src/lib.rs @@ -1,6 +1,6 @@ #![allow(clippy::integer_arithmetic)] -pub use solana_core::test_validator; pub use solana_gossip::cluster_info::MINIMUM_VALIDATOR_PORT_RANGE_WIDTH; +pub use solana_test_validator; use { console::style, fd_lock::{RwLock, RwLockWriteGuard},