From 86213d38fe66aa5aaa359d2daca53b5ed42274e9 Mon Sep 17 00:00:00 2001 From: carllin Date: Wed, 18 Sep 2019 13:10:50 -0700 Subject: [PATCH] Release builds for local cluster tests (#5891) * Release builds for test * Remove setting thread count in local cluster * Increase timeout * Move local cluster to separate job * Extract out local cluster test from bench-tps * Make local cluster inaccessible from outside crate * Update test-stable.sh to exclude local_cluster in stable, include it in local-cluster CI job * Move bench-exchange to local cluster * Remove local cluster from coverage --- Cargo.lock | 9 +- bench-exchange/Cargo.toml | 3 +- bench-exchange/src/bench.rs | 100 ------------------ bench-exchange/src/lib.rs | 3 + bench-exchange/src/main.rs | 4 - bench-tps/Cargo.toml | 3 +- bench-tps/src/bench.rs | 72 ------------- bench-tps/src/lib.rs | 2 + bench-tps/src/main.rs | 10 +- ci/buildkite.yml | 4 + ci/test-local-cluster.sh | 1 + ci/test-stable.sh | 9 +- local_cluster/Cargo.toml | 7 ++ local_cluster/src/lib.rs | 32 +++++- local_cluster/src/local_cluster.rs | 3 - local_cluster/src/tests.rs | 4 + local_cluster/src/tests/bench_exchange.rs | 100 ++++++++++++++++++ local_cluster/src/tests/bench_tps.rs | 76 +++++++++++++ .../{ => src}/tests/local_cluster.rs | 13 +-- local_cluster/{ => src}/tests/replicator.rs | 8 +- scripts/coverage.sh | 10 +- 21 files changed, 257 insertions(+), 216 deletions(-) create mode 100644 bench-exchange/src/lib.rs create mode 100644 bench-tps/src/lib.rs create mode 120000 ci/test-local-cluster.sh create mode 100644 local_cluster/src/tests.rs create mode 100644 local_cluster/src/tests/bench_exchange.rs create mode 100644 local_cluster/src/tests/bench_tps.rs rename local_cluster/{ => src}/tests/local_cluster.rs (99%) rename local_cluster/{ => src}/tests/replicator.rs (97%) diff --git a/Cargo.lock b/Cargo.lock index 95cc3ab5f4..0e5cc26036 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2837,7 +2837,6 @@ dependencies = [ "solana-exchange-api 0.19.0-pre0", "solana-exchange-program 0.19.0-pre0", "solana-genesis 0.19.0-pre0", - "solana-local-cluster 0.19.0-pre0", "solana-logger 0.19.0-pre0", "solana-metrics 0.19.0-pre0", "solana-netutil 0.19.0-pre0", @@ -2876,7 +2875,6 @@ dependencies = [ "solana-drone 0.19.0-pre0", "solana-genesis 0.19.0-pre0", "solana-librapay-api 0.19.0-pre0", - "solana-local-cluster 0.19.0-pre0", "solana-logger 0.19.0-pre0", "solana-measure 0.19.0-pre0", "solana-metrics 0.19.0-pre0", @@ -3388,9 +3386,16 @@ dependencies = [ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "serial_test_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "solana-bench-exchange 0.19.0-pre0", + "solana-bench-tps 0.19.0-pre0", "solana-client 0.19.0-pre0", "solana-core 0.19.0-pre0", + "solana-drone 0.19.0-pre0", + "solana-exchange-api 0.19.0-pre0", + "solana-exchange-program 0.19.0-pre0", "solana-logger 0.19.0-pre0", + "solana-move-loader-api 0.19.0-pre0", + "solana-move-loader-program 0.19.0-pre0", "solana-rayon-threadlimit 0.19.0-pre0", "solana-runtime 0.19.0-pre0", "solana-sdk 0.19.0-pre0", diff --git a/bench-exchange/Cargo.toml b/bench-exchange/Cargo.toml index 634eeafd1b..825b06f67e 100644 --- a/bench-exchange/Cargo.toml +++ b/bench-exchange/Cargo.toml @@ -25,8 +25,7 @@ serde_json = "1.0.40" serde_yaml = "0.8.9" # solana-runtime = { path = "../solana/runtime"} solana-core = { path = "../core", version = "0.19.0-pre0" } -solana-genesis = { path = "../genesis", version = "0.19.0-pre0" } -solana-local-cluster = { path = "../local_cluster", version = "0.19.0-pre0" } +solana-genesis = { path = "../genesis", version = "0.19.0-pre0" } solana-client = { path = "../client", version = "0.19.0-pre0" } solana-drone = { path = "../drone", version = "0.19.0-pre0" } solana-exchange-api = { path = "../programs/exchange_api", version = "0.19.0-pre0" } diff --git a/bench-exchange/src/bench.rs b/bench-exchange/src/bench.rs index 5804ffce2d..80949324b9 100644 --- a/bench-exchange/src/bench.rs +++ b/bench-exchange/src/bench.rs @@ -969,103 +969,3 @@ pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypa sleep(Duration::from_secs(2)); } } - -#[cfg(test)] -mod tests { - use super::*; - use solana_core::gossip_service::{discover_cluster, get_multi_client}; - use solana_core::validator::ValidatorConfig; - use solana_drone::drone::run_local_drone; - use solana_exchange_api::exchange_processor::process_instruction; - use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster}; - use solana_runtime::bank::Bank; - use solana_runtime::bank_client::BankClient; - use solana_sdk::genesis_block::create_genesis_block; - use std::sync::mpsc::channel; - - #[test] - fn test_exchange_local_cluster() { - solana_logger::setup(); - - const NUM_NODES: usize = 1; - - let mut config = Config::default(); - config.identity = Keypair::new(); - config.duration = Duration::from_secs(1); - config.fund_amount = 100_000; - config.threads = 1; - config.transfer_delay = 20; // 15 - config.batch_size = 100; // 1000; - config.chunk_size = 10; // 200; - config.account_groups = 1; // 10; - let Config { - fund_amount, - batch_size, - account_groups, - .. - } = config; - let accounts_in_groups = batch_size * account_groups; - - let cluster = LocalCluster::new(&ClusterConfig { - node_stakes: vec![100_000; NUM_NODES], - cluster_lamports: 100_000_000_000_000, - validator_configs: vec![ValidatorConfig::default(); NUM_NODES], - native_instruction_processors: [solana_exchange_program!()].to_vec(), - ..ClusterConfig::default() - }); - - let drone_keypair = Keypair::new(); - cluster.transfer( - &cluster.funding_keypair, - &drone_keypair.pubkey(), - 2_000_000_000_000, - ); - - let (addr_sender, addr_receiver) = channel(); - run_local_drone(drone_keypair, addr_sender, Some(1_000_000_000_000)); - let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap(); - - info!("Connecting to the cluster"); - let (nodes, _) = discover_cluster(&cluster.entry_point_info.gossip, NUM_NODES) - .unwrap_or_else(|err| { - error!("Failed to discover {} nodes: {:?}", NUM_NODES, err); - exit(1); - }); - - let (client, num_clients) = get_multi_client(&nodes); - - info!("clients: {}", num_clients); - assert!(num_clients >= NUM_NODES); - - const NUM_SIGNERS: u64 = 2; - airdrop_lamports( - &client, - &drone_addr, - &config.identity, - fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS, - ); - - do_bench_exchange(vec![client], config); - } - - #[test] - fn test_exchange_bank_client() { - solana_logger::setup(); - let (genesis_block, identity) = create_genesis_block(100_000_000_000_000); - let mut bank = Bank::new(&genesis_block); - bank.add_instruction_processor(id(), process_instruction); - let clients = vec![BankClient::new(bank)]; - - let mut config = Config::default(); - config.identity = identity; - config.duration = Duration::from_secs(1); - config.fund_amount = 100_000; - config.threads = 1; - config.transfer_delay = 20; // 0; - config.batch_size = 100; // 1500; - config.chunk_size = 10; // 1500; - config.account_groups = 1; // 50; - - do_bench_exchange(clients, config); - } -} diff --git a/bench-exchange/src/lib.rs b/bench-exchange/src/lib.rs new file mode 100644 index 0000000000..dbb7feff03 --- /dev/null +++ b/bench-exchange/src/lib.rs @@ -0,0 +1,3 @@ +pub mod bench; +pub mod cli; +mod order_book; diff --git a/bench-exchange/src/main.rs b/bench-exchange/src/main.rs index 531d03c606..34ae65dfe0 100644 --- a/bench-exchange/src/main.rs +++ b/bench-exchange/src/main.rs @@ -2,10 +2,6 @@ pub mod bench; mod cli; pub mod order_book; -#[cfg(test)] -#[macro_use] -extern crate solana_exchange_program; - use crate::bench::{airdrop_lamports, create_client_accounts_file, do_bench_exchange, Config}; use log::*; use solana_core::gossip_service::{discover_cluster, get_multi_client}; diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index 62f9d3afdd..5827b583bf 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -17,8 +17,7 @@ serde_derive = "1.0.100" serde_json = "1.0.40" serde_yaml = "0.8.9" solana-core = { path = "../core", version = "0.19.0-pre0" } -solana-genesis = { path = "../genesis", version = "0.19.0-pre0" } -solana-local-cluster = { path = "../local_cluster", version = "0.19.0-pre0" } +solana-genesis = { path = "../genesis", version = "0.19.0-pre0" } solana-client = { path = "../client", version = "0.19.0-pre0" } solana-drone = { path = "../drone", version = "0.19.0-pre0" } solana-librapay-api = { path = "../programs/librapay_api", version = "0.19.0-pre0" } diff --git a/bench-tps/src/bench.rs b/bench-tps/src/bench.rs index 0c0ec1b5e6..7954926eab 100644 --- a/bench-tps/src/bench.rs +++ b/bench-tps/src/bench.rs @@ -931,20 +931,12 @@ pub fn generate_and_fund_keypairs( #[cfg(test)] mod tests { - use super::*; - use serial_test_derive::serial; - use solana_client::thin_client::create_client; - use solana_core::cluster_info::FULLNODE_PORT_RANGE; - use solana_core::validator::ValidatorConfig; - use solana_drone::drone::run_local_drone; - use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster}; use solana_runtime::bank::Bank; use solana_runtime::bank_client::BankClient; use solana_sdk::client::SyncClient; use solana_sdk::fee_calculator::FeeCalculator; use solana_sdk::genesis_block::create_genesis_block; - use std::sync::mpsc::channel; #[test] fn test_switch_directions() { @@ -961,70 +953,6 @@ mod tests { assert_eq!(should_switch_directions(20, 101), false); } - fn test_bench_tps_local_cluster(config: Config) { - solana_logger::setup(); - const NUM_NODES: usize = 1; - let cluster = LocalCluster::new(&ClusterConfig { - node_stakes: vec![999_990; NUM_NODES], - cluster_lamports: 200_000_000, - validator_configs: vec![ValidatorConfig::default(); NUM_NODES], - native_instruction_processors: vec![solana_move_loader_program!()], - ..ClusterConfig::default() - }); - - let drone_keypair = Keypair::new(); - cluster.transfer( - &cluster.funding_keypair, - &drone_keypair.pubkey(), - 100_000_000, - ); - - let client = create_client( - (cluster.entry_point_info.rpc, cluster.entry_point_info.tpu), - FULLNODE_PORT_RANGE, - ); - - let (addr_sender, addr_receiver) = channel(); - run_local_drone(drone_keypair, addr_sender, None); - let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap(); - - let lamports_per_account = 100; - - let (keypairs, move_keypairs, _keypair_balance) = generate_and_fund_keypairs( - &client, - Some(drone_addr), - &config.id, - config.tx_count, - lamports_per_account, - config.use_move, - ) - .unwrap(); - - let total = do_bench_tps(vec![client], config, keypairs, 0, move_keypairs); - assert!(total > 100); - } - - #[test] - #[serial] - fn test_bench_tps_local_cluster_solana() { - let mut config = Config::default(); - config.tx_count = 100; - config.duration = Duration::from_secs(10); - - test_bench_tps_local_cluster(config); - } - - #[test] - #[serial] - fn test_bench_tps_local_cluster_move() { - let mut config = Config::default(); - config.tx_count = 100; - config.duration = Duration::from_secs(20); - config.use_move = true; - - test_bench_tps_local_cluster(config); - } - #[test] fn test_bench_tps_bank_client() { let (genesis_block, id) = create_genesis_block(10_000); diff --git a/bench-tps/src/lib.rs b/bench-tps/src/lib.rs new file mode 100644 index 0000000000..1fb5342317 --- /dev/null +++ b/bench-tps/src/lib.rs @@ -0,0 +1,2 @@ +pub mod bench; +pub mod cli; diff --git a/bench-tps/src/main.rs b/bench-tps/src/main.rs index 77d726b156..fa236e1270 100644 --- a/bench-tps/src/main.rs +++ b/bench-tps/src/main.rs @@ -1,11 +1,5 @@ -#[cfg(test)] -#[macro_use] -extern crate solana_move_loader_program; - -mod bench; -mod cli; - -use crate::bench::{do_bench_tps, generate_and_fund_keypairs, generate_keypairs}; +use solana_bench_tps::bench::{do_bench_tps, generate_and_fund_keypairs, generate_keypairs}; +use solana_bench_tps::cli; use solana_core::gossip_service::{discover_cluster, get_multi_client}; use solana_genesis::PrimordialAccountDetails; use solana_sdk::fee_calculator::FeeCalculator; diff --git a/ci/buildkite.yml b/ci/buildkite.yml index b2709af850..de887ab754 100644 --- a/ci/buildkite.yml +++ b/ci/buildkite.yml @@ -22,6 +22,10 @@ steps: name: "stable" timeout_in_minutes: 40 artifact_paths: "log-*.txt" + - command: ". ci/rust-version.sh; ci/docker-run.sh $$rust_stable_docker_image ci/test-local-cluster.sh" + name: "local-cluster" + timeout_in_minutes: 40 + artifact_paths: "log-*.txt" - command: ". ci/rust-version.sh; ci/docker-run.sh $$rust_nightly_docker_image ci/test-coverage.sh" name: "coverage" timeout_in_minutes: 40 diff --git a/ci/test-local-cluster.sh b/ci/test-local-cluster.sh new file mode 120000 index 0000000000..0c92a5c7bd --- /dev/null +++ b/ci/test-local-cluster.sh @@ -0,0 +1 @@ +test-stable.sh \ No newline at end of file diff --git a/ci/test-stable.sh b/ci/test-stable.sh index a82b3aa83f..e99309d493 100755 --- a/ci/test-stable.sh +++ b/ci/test-stable.sh @@ -33,7 +33,7 @@ test-stable) echo "Executing $testName" _ cargo +"$rust_stable" build --all --tests --bins ${V:+--verbose} - _ cargo +"$rust_stable" test --all ${V:+--verbose} -- --nocapture + _ cargo +"$rust_stable" test --all --exclude solana-local-cluster ${V:+--verbose} --features="$ROOT_FEATURES" -- --nocapture ;; test-stable-perf) echo "Executing $testName" @@ -44,6 +44,7 @@ test-stable-perf) Cargo.toml$ \ ^ci/test-stable-perf.sh \ ^ci/test-stable.sh \ + ^ci/test-local-cluster.sh \ ^core/build.rs \ ^fetch-perf-libs.sh \ ^programs/ \ @@ -79,6 +80,12 @@ test-stable-perf) _ cargo +"$rust_stable" build --all --tests --bins ${V:+--verbose} --features="$ROOT_FEATURES" _ cargo +"$rust_stable" test --manifest-path=core/Cargo.toml ${V:+--verbose} --features="$ROOT_FEATURES" -- --nocapture ;; +test-local-cluster) + echo "Executing $testName" + _ cargo +"$rust_stable" build --all --release --tests --bins ${V:+--verbose} + _ cargo +"$rust_stable" test --release --manifest-path=local_cluster/Cargo.toml ${V:+--verbose} -- --nocapture + exit 0 + ;; *) echo "Error: Unknown test: $testName" ;; diff --git a/local_cluster/Cargo.toml b/local_cluster/Cargo.toml index 7f529de633..844dd7e392 100644 --- a/local_cluster/Cargo.toml +++ b/local_cluster/Cargo.toml @@ -11,9 +11,16 @@ homepage = "https://solana.com/" [dependencies] log = "0.4.8" rand = "0.6.5" +solana-bench-exchange = { path = "../bench-exchange", version = "0.19.0-pre0" } +solana-bench-tps = { path = "../bench-tps", version = "0.19.0-pre0" } solana-core = { path = "../core", version = "0.19.0-pre0" } solana-client = { path = "../client", version = "0.19.0-pre0" } +solana-drone = { path = "../drone", version = "0.19.0-pre0" } +solana-exchange-api = { path = "../programs/exchange_api", version = "0.19.0-pre0" } +solana-exchange-program = { path = "../programs/exchange_program", version = "0.19.0-pre0" } solana-logger = { path = "../logger", version = "0.19.0-pre0" } +solana-move-loader-api = { path = "../programs/move_loader_api", version = "0.19.0-pre0" } +solana-move-loader-program = { path = "../programs/move_loader_program", version = "0.19.0-pre0" } solana-runtime = { path = "../runtime", version = "0.19.0-pre0" } solana-sdk = { path = "../sdk", version = "0.19.0-pre0" } solana-stake-api = { path = "../programs/stake_api", version = "0.19.0-pre0" } diff --git a/local_cluster/src/lib.rs b/local_cluster/src/lib.rs index 0480f76147..227d05f322 100644 --- a/local_cluster/src/lib.rs +++ b/local_cluster/src/lib.rs @@ -1,14 +1,40 @@ -pub mod cluster; -pub mod cluster_tests; -pub mod local_cluster; +#[cfg(test)] +mod cluster; +#[cfg(test)] +mod cluster_tests; +#[cfg(test)] +mod local_cluster; +#[cfg(test)] +mod tests; #[macro_use] +#[cfg(test)] extern crate log; +#[cfg(test)] +extern crate solana_bench_exchange; + +#[cfg(test)] +extern crate solana_bench_tps; + #[macro_use] +#[cfg(test)] extern crate solana_core; +#[cfg(test)] +extern crate solana_drone; + #[macro_use] +#[cfg(test)] +extern crate solana_exchange_program; + +#[macro_use] +#[cfg(test)] +extern crate solana_move_loader_program; + +#[macro_use] +#[cfg(test)] extern crate solana_storage_program; +#[cfg(test)] extern crate tempfile; diff --git a/local_cluster/src/local_cluster.rs b/local_cluster/src/local_cluster.rs index 649ad4b393..fdd8ddef84 100644 --- a/local_cluster/src/local_cluster.rs +++ b/local_cluster/src/local_cluster.rs @@ -10,7 +10,6 @@ use solana_core::{ service::Service, validator::{Validator, ValidatorConfig}, }; -use solana_rayon_threadlimit::set_thread_count; use solana_sdk::{ client::SyncClient, clock::DEFAULT_TICKS_PER_SLOT, @@ -117,8 +116,6 @@ impl LocalCluster { } pub fn new(config: &ClusterConfig) -> Self { - set_thread_count(1); - assert_eq!(config.validator_configs.len(), config.node_stakes.len()); let leader_keypair = Arc::new(Keypair::new()); let leader_pubkey = leader_keypair.pubkey(); diff --git a/local_cluster/src/tests.rs b/local_cluster/src/tests.rs new file mode 100644 index 0000000000..8c1fec0922 --- /dev/null +++ b/local_cluster/src/tests.rs @@ -0,0 +1,4 @@ +mod bench_exchange; +mod bench_tps; +mod local_cluster; +mod replicator; diff --git a/local_cluster/src/tests/bench_exchange.rs b/local_cluster/src/tests/bench_exchange.rs new file mode 100644 index 0000000000..0104769549 --- /dev/null +++ b/local_cluster/src/tests/bench_exchange.rs @@ -0,0 +1,100 @@ +use crate::local_cluster::{ClusterConfig, LocalCluster}; +use solana_bench_exchange::bench::{airdrop_lamports, do_bench_exchange, Config}; +use solana_core::gossip_service::{discover_cluster, get_multi_client}; +use solana_core::validator::ValidatorConfig; +use solana_drone::drone::run_local_drone; +use solana_exchange_api::exchange_processor::process_instruction; +use solana_exchange_api::id; +use solana_runtime::bank::Bank; +use solana_runtime::bank_client::BankClient; +use solana_sdk::genesis_block::create_genesis_block; +use solana_sdk::signature::{Keypair, KeypairUtil}; +use std::process::exit; +use std::sync::mpsc::channel; +use std::time::Duration; + +#[test] +fn test_exchange_local_cluster() { + solana_logger::setup(); + + const NUM_NODES: usize = 1; + + let mut config = Config::default(); + config.identity = Keypair::new(); + config.duration = Duration::from_secs(1); + config.fund_amount = 100_000; + config.threads = 1; + config.transfer_delay = 20; // 15 + config.batch_size = 100; // 1000; + config.chunk_size = 10; // 200; + config.account_groups = 1; // 10; + let Config { + fund_amount, + batch_size, + account_groups, + .. + } = config; + let accounts_in_groups = batch_size * account_groups; + + let cluster = LocalCluster::new(&ClusterConfig { + node_stakes: vec![100_000; NUM_NODES], + cluster_lamports: 100_000_000_000_000, + validator_configs: vec![ValidatorConfig::default(); NUM_NODES], + native_instruction_processors: [solana_exchange_program!()].to_vec(), + ..ClusterConfig::default() + }); + + let drone_keypair = Keypair::new(); + cluster.transfer( + &cluster.funding_keypair, + &drone_keypair.pubkey(), + 2_000_000_000_000, + ); + + let (addr_sender, addr_receiver) = channel(); + run_local_drone(drone_keypair, addr_sender, Some(1_000_000_000_000)); + let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap(); + + info!("Connecting to the cluster"); + let (nodes, _) = + discover_cluster(&cluster.entry_point_info.gossip, NUM_NODES).unwrap_or_else(|err| { + error!("Failed to discover {} nodes: {:?}", NUM_NODES, err); + exit(1); + }); + + let (client, num_clients) = get_multi_client(&nodes); + + info!("clients: {}", num_clients); + assert!(num_clients >= NUM_NODES); + + const NUM_SIGNERS: u64 = 2; + airdrop_lamports( + &client, + &drone_addr, + &config.identity, + fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS, + ); + + do_bench_exchange(vec![client], config); +} + +#[test] +fn test_exchange_bank_client() { + solana_logger::setup(); + let (genesis_block, identity) = create_genesis_block(100_000_000_000_000); + let mut bank = Bank::new(&genesis_block); + bank.add_instruction_processor(id(), process_instruction); + let clients = vec![BankClient::new(bank)]; + + let mut config = Config::default(); + config.identity = identity; + config.duration = Duration::from_secs(1); + config.fund_amount = 100_000; + config.threads = 1; + config.transfer_delay = 20; // 0; + config.batch_size = 100; // 1500; + config.chunk_size = 10; // 1500; + config.account_groups = 1; // 50; + + do_bench_exchange(clients, config); +} diff --git a/local_cluster/src/tests/bench_tps.rs b/local_cluster/src/tests/bench_tps.rs new file mode 100644 index 0000000000..579963551f --- /dev/null +++ b/local_cluster/src/tests/bench_tps.rs @@ -0,0 +1,76 @@ +use crate::local_cluster::{ClusterConfig, LocalCluster}; +use serial_test_derive::serial; +use solana_bench_tps::bench::{do_bench_tps, generate_and_fund_keypairs}; +use solana_bench_tps::cli::Config; +use solana_client::thin_client::create_client; +use solana_core::cluster_info::FULLNODE_PORT_RANGE; +use solana_core::validator::ValidatorConfig; +use solana_drone::drone::run_local_drone; +use solana_move_loader_program; +use solana_sdk::signature::{Keypair, KeypairUtil}; +use std::sync::mpsc::channel; +use std::time::Duration; + +fn test_bench_tps_local_cluster(config: Config) { + solana_logger::setup(); + const NUM_NODES: usize = 1; + let cluster = LocalCluster::new(&ClusterConfig { + node_stakes: vec![999_990; NUM_NODES], + cluster_lamports: 200_000_000, + validator_configs: vec![ValidatorConfig::default(); NUM_NODES], + native_instruction_processors: vec![solana_move_loader_program!()], + ..ClusterConfig::default() + }); + + let drone_keypair = Keypair::new(); + cluster.transfer( + &cluster.funding_keypair, + &drone_keypair.pubkey(), + 100_000_000, + ); + + let client = create_client( + (cluster.entry_point_info.rpc, cluster.entry_point_info.tpu), + FULLNODE_PORT_RANGE, + ); + + let (addr_sender, addr_receiver) = channel(); + run_local_drone(drone_keypair, addr_sender, None); + let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap(); + + let lamports_per_account = 100; + + let (keypairs, move_keypairs, _keypair_balance) = generate_and_fund_keypairs( + &client, + Some(drone_addr), + &config.id, + config.tx_count, + lamports_per_account, + config.use_move, + ) + .unwrap(); + + let total = do_bench_tps(vec![client], config, keypairs, 0, move_keypairs); + assert!(total > 100); +} + +#[test] +#[serial] +fn test_bench_tps_local_cluster_solana() { + let mut config = Config::default(); + config.tx_count = 100; + config.duration = Duration::from_secs(10); + + test_bench_tps_local_cluster(config); +} + +#[test] +#[serial] +fn test_bench_tps_local_cluster_move() { + let mut config = Config::default(); + config.tx_count = 100; + config.duration = Duration::from_secs(20); + config.use_move = true; + + test_bench_tps_local_cluster(config); +} diff --git a/local_cluster/tests/local_cluster.rs b/local_cluster/src/tests/local_cluster.rs similarity index 99% rename from local_cluster/tests/local_cluster.rs rename to local_cluster/src/tests/local_cluster.rs index 727790055a..42e21e736a 100644 --- a/local_cluster/tests/local_cluster.rs +++ b/local_cluster/src/tests/local_cluster.rs @@ -1,16 +1,14 @@ -extern crate solana_core; - +use crate::{ + cluster::Cluster, + cluster_tests, + local_cluster::{ClusterConfig, LocalCluster}, +}; use log::*; use serial_test_derive::serial; use solana_core::{ bank_forks::SnapshotConfig, blocktree::Blocktree, broadcast_stage::BroadcastStageType, gossip_service::discover_cluster, snapshot_utils, validator::ValidatorConfig, }; -use solana_local_cluster::cluster::Cluster; -use solana_local_cluster::{ - cluster_tests, - local_cluster::{ClusterConfig, LocalCluster}, -}; use solana_runtime::{ accounts_db::AccountsDB, epoch_schedule::{EpochSchedule, MINIMUM_SLOTS_PER_EPOCH}, @@ -584,7 +582,6 @@ fn test_faulty_node(faulty_node_type: BroadcastStageType) { } #[test] -#[ignore] fn test_repairman_catchup() { solana_logger::setup(); error!("test_repairman_catchup"); diff --git a/local_cluster/tests/replicator.rs b/local_cluster/src/tests/replicator.rs similarity index 97% rename from local_cluster/tests/replicator.rs rename to local_cluster/src/tests/replicator.rs index e1e5537e2f..d1a6a90d6b 100644 --- a/local_cluster/tests/replicator.rs +++ b/local_cluster/src/tests/replicator.rs @@ -1,9 +1,4 @@ -#[macro_use] -extern crate log; - -#[macro_use] -extern crate solana_core; - +use crate::local_cluster::{ClusterConfig, LocalCluster}; use serial_test_derive::serial; use solana_client::thin_client::create_client; use solana_core::blocktree::{create_new_tmp_ledger, get_tmp_ledger_path, Blocktree}; @@ -13,7 +8,6 @@ use solana_core::gossip_service::discover_cluster; use solana_core::replicator::Replicator; use solana_core::storage_stage::SLOTS_PER_TURN_TEST; use solana_core::validator::ValidatorConfig; -use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster}; use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::signature::{Keypair, KeypairUtil}; use std::fs::remove_dir_all; diff --git a/scripts/coverage.sh b/scripts/coverage.sh index dfcadae2e3..6c3d57e258 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -13,9 +13,9 @@ source ci/_ reportName="lcov-${CI_COMMIT:0:9}" if [[ -n $1 ]]; then - crate=--manifest-path=$1/Cargo.toml + crate="--manifest-path=$1/Cargo.toml" else - crate=--all + crate="--all --exclude solana-local-cluster" fi coverageFlags=(-Zprofile) # Enable coverage @@ -36,8 +36,10 @@ fi rm -rf target/cov/$reportName source ci/rust-version.sh nightly -_ cargo +$rust_nightly build --target-dir target/cov "$crate" -_ cargo +$rust_nightly test --target-dir target/cov --lib "$crate" +# shellcheck disable=SC2086 # +_ cargo +$rust_nightly build --target-dir target/cov $crate +# shellcheck disable=SC2086 # +_ cargo +$rust_nightly test --target-dir target/cov --lib $crate echo "--- grcov"