From cc10e84ab7b3a490304f595b921c6aeff30e5668 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Fri, 22 Feb 2019 22:55:46 -0700 Subject: [PATCH] sample_ledger -> sample_blocktree --- ledger-tool/tests/basic.rs | 16 ++- src/blocktree.rs | 26 ---- src/replay_stage.rs | 75 +++++------- src/storage_stage.rs | 32 ++--- src/thin_client.rs | 17 +-- tests/multinode.rs | 244 ++++++++++++++----------------------- tests/replicator.rs | 50 +++----- 7 files changed, 156 insertions(+), 304 deletions(-) diff --git a/ledger-tool/tests/basic.rs b/ledger-tool/tests/basic.rs index 1596741a7..388ef3e79 100644 --- a/ledger-tool/tests/basic.rs +++ b/ledger-tool/tests/basic.rs @@ -1,7 +1,7 @@ use assert_cmd::prelude::*; -use solana::blocktree::create_tmp_sample_ledger; +use solana::blocktree::create_tmp_sample_blocktree; +use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::signature::{Keypair, KeypairUtil}; -use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use std::process::Command; use std::process::Output; use std::sync::Arc; @@ -32,15 +32,13 @@ fn bad_arguments() { #[test] fn nominal() { let keypair = Arc::new(Keypair::new()); - let ticks_per_slot = DEFAULT_TICKS_PER_SLOT; - let (_mint_keypair, ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( + let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(100, keypair.pubkey(), 50); + let ticks_per_slot = genesis_block.ticks_per_slot; + let (ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree( "test_ledger_tool_nominal", - 100, + &genesis_block, ticks_per_slot - 2, - keypair.pubkey(), - 50, - ticks_per_slot, ); // Basic validation diff --git a/src/blocktree.rs b/src/blocktree.rs index 4ed623b45..a1bcbe77d 100644 --- a/src/blocktree.rs +++ b/src/blocktree.rs @@ -15,7 +15,6 @@ use serde::de::DeserializeOwned; use serde::Serialize; use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::hash::Hash; -use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use std::borrow::{Borrow, Cow}; @@ -1330,31 +1329,6 @@ pub fn create_tmp_sample_blocktree( ) } -// Deprecated! Please use create_tmp_sample_blocktree() instead. -pub fn create_tmp_sample_ledger( - name: &str, - num_tokens: u64, - num_extra_tokens: u64, - bootstrap_leader_id: Pubkey, - bootstrap_leader_tokens: u64, - ticks_per_slot: u64, -) -> (Keypair, String, u64, u64, Hash, Hash) { - let (mut genesis_block, mint_keypair) = - GenesisBlock::new_with_leader(num_tokens, bootstrap_leader_id, bootstrap_leader_tokens); - genesis_block.ticks_per_slot = ticks_per_slot; - - let (ledger_path, tick_height, entry_height, last_id, last_entry_id) = - create_tmp_sample_blocktree(name, &genesis_block, num_extra_tokens); - ( - mint_keypair, - ledger_path, - tick_height, - entry_height, - last_id, - last_entry_id, - ) -} - pub fn tmp_copy_ledger(from: &str, name: &str, ticks_per_slot: u64) -> String { let path = get_tmp_ledger_path(name); diff --git a/src/replay_stage.rs b/src/replay_stage.rs index 8e8815a27..5c79b29a9 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -383,7 +383,7 @@ impl Service for ReplayStage { #[cfg(test)] mod test { use super::*; - use crate::blocktree::{create_tmp_sample_ledger, Blocktree, DEFAULT_SLOT_HEIGHT}; + use crate::blocktree::{create_tmp_sample_blocktree, Blocktree, DEFAULT_SLOT_HEIGHT}; use crate::cluster_info::{ClusterInfo, Node}; use crate::entry::create_ticks; use crate::entry::{next_entry_mut, Entry}; @@ -421,22 +421,17 @@ mod test { let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))); + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, old_leader_id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Create a ledger - let ( - mint_keypair, - my_ledger_path, - mut tick_height, - entry_height, - mut last_id, - last_entry_id, - ) = create_tmp_sample_ledger( - "test_replay_stage_leader_rotation_exit", - 10_000, - 0, - old_leader_id, - 500, - ticks_per_slot, - ); + let (my_ledger_path, mut tick_height, entry_height, mut last_id, last_entry_id) = + create_tmp_sample_blocktree( + "test_replay_stage_leader_rotation_exit", + &genesis_block, + 0, + ); info!("my_id: {:?}", my_id); info!("old_leader_id: {:?}", old_leader_id); @@ -550,21 +545,14 @@ mod test { // Create keypair for the leader let leader_id = Keypair::new().pubkey(); - let ( - _mint_keypair, - my_ledger_path, - tick_height, - _last_entry_height, - _last_id, - _last_entry_id, - ) = create_tmp_sample_ledger( - "test_vote_error_replay_stage_correctness", - 10_000, - 1, - leader_id, - 500, - DEFAULT_TICKS_PER_SLOT, - ); + let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(10_000, leader_id, 500); + + let (my_ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree( + "test_vote_error_replay_stage_correctness", + &genesis_block, + 1, + ); // Set up the cluster info let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone()))); @@ -644,22 +632,17 @@ mod test { // Create keypair for the leader let leader_id = Keypair::new().pubkey(); + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, leader_id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Create the ledger - let ( - mint_keypair, - my_ledger_path, - tick_height, - genesis_entry_height, - last_id, - last_entry_id, - ) = create_tmp_sample_ledger( - "test_vote_error_replay_stage_leader_rotation", - 10_000, - 1, - leader_id, - 500, - ticks_per_slot, - ); + let (my_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) = + create_tmp_sample_blocktree( + "test_vote_error_replay_stage_leader_rotation", + &genesis_block, + 1, + ); let my_keypair = Arc::new(my_keypair); // Write two entries to the ledger so that the validator is in the active set: diff --git a/src/storage_stage.rs b/src/storage_stage.rs index 29cf786df..b008b06e8 100644 --- a/src/storage_stage.rs +++ b/src/storage_stage.rs @@ -444,7 +444,7 @@ impl Service for StorageStage { #[cfg(test)] mod tests { - use crate::blocktree::{create_tmp_sample_ledger, Blocktree, DEFAULT_SLOT_HEIGHT}; + use crate::blocktree::{create_tmp_sample_blocktree, Blocktree, DEFAULT_SLOT_HEIGHT}; use crate::cluster_info::{ClusterInfo, NodeInfo}; use crate::entry::{make_tiny_test_entries, Entry}; use crate::service::Service; @@ -454,11 +454,11 @@ mod tests { get_identity_index_from_signature, StorageStage, STORAGE_ROTATE_TEST_COUNT, }; use rayon::prelude::*; + use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::hash::Hash; use solana_sdk::hash::Hasher; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; - use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; use solana_sdk::vote_transaction::VoteTransaction; use std::cmp::{max, min}; use std::fs::remove_dir_all; @@ -503,16 +503,10 @@ mod tests { let keypair = Arc::new(Keypair::new()); let exit = Arc::new(AtomicBool::new(false)); - let ticks_per_slot = DEFAULT_TICKS_PER_SLOT; - let (_mint, ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "storage_stage_process_entries", - 1000, - 1, - Keypair::new().pubkey(), - 1, - ticks_per_slot, - ); + let (genesis_block, _mint_keypair) = GenesisBlock::new(1000); + let ticks_per_slot = genesis_block.ticks_per_slot; + let (ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("storage_stage_process_entries", &genesis_block, 1); let entries = make_tiny_test_entries(64); let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap(); @@ -579,16 +573,10 @@ mod tests { let keypair = Arc::new(Keypair::new()); let exit = Arc::new(AtomicBool::new(false)); - let ticks_per_slot = DEFAULT_TICKS_PER_SLOT; - let (_mint, ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "storage_stage_process_entries", - 1000, - 1, - Keypair::new().pubkey(), - 1, - ticks_per_slot, - ); + let (genesis_block, _mint_keypair) = GenesisBlock::new(1000); + let ticks_per_slot = genesis_block.ticks_per_slot;; + let (ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("storage_stage_process_entries", &genesis_block, 1); let entries = make_tiny_test_entries(128); let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap(); diff --git a/src/thin_client.rs b/src/thin_client.rs index e7d472f43..4e7c1a381 100644 --- a/src/thin_client.rs +++ b/src/thin_client.rs @@ -452,26 +452,21 @@ pub fn retry_get_balance( } pub fn new_fullnode(ledger_name: &'static str) -> (Fullnode, NodeInfo, Keypair, String) { - use crate::blocktree::create_tmp_sample_ledger; + use crate::blocktree::create_tmp_sample_blocktree; use crate::cluster_info::Node; use crate::fullnode::Fullnode; use crate::voting_keypair::VotingKeypair; + use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::signature::KeypairUtil; let node_keypair = Arc::new(Keypair::new()); let node = Node::new_localhost_with_pubkey(node_keypair.pubkey()); let node_info = node.info.clone(); - let fullnode_config = &FullnodeConfig::default(); - let (mint_keypair, ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - ledger_name, - 10_000, - 0, - node_info.id, - 42, - fullnode_config.ticks_per_slot(), - ); + let (genesis_block, mint_keypair) = GenesisBlock::new_with_leader(10_000, node_info.id, 42); + + let (ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree(ledger_name, &genesis_block, 0); let vote_account_keypair = Arc::new(Keypair::new()); let voting_keypair = VotingKeypair::new_local(&vote_account_keypair); diff --git a/tests/multinode.rs b/tests/multinode.rs index 88afe87e6..064758d8e 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -1,7 +1,7 @@ use log::*; use solana::blob_fetch_stage::BlobFetchStage; use solana::blocktree::{ - create_tmp_sample_ledger, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT, + create_tmp_sample_blocktree, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT, }; use solana::client::mk_client; use solana::cluster_info::{Node, NodeInfo}; @@ -13,6 +13,7 @@ use solana::result; use solana::service::Service; use solana::thin_client::{poll_gossip_for_leader, retry_get_balance}; use solana::voting_keypair::VotingKeypair; +use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; @@ -45,25 +46,12 @@ fn test_multi_node_ledger_window() -> result::Result<()> { let bob_pubkey = Keypair::new().pubkey(); let mut ledger_paths = Vec::new(); - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.leader_scheduler_config.ticks_per_slot; + let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500); + let ticks_per_slot = genesis_block.ticks_per_slot; info!("ticks_per_slot: {}", ticks_per_slot); - let ( - alice, - leader_ledger_path, - tick_height, - mut last_entry_height, - _last_id, - mut last_entry_id, - ) = create_tmp_sample_ledger( - "multi_node_ledger_window", - 10_000, - 0, - leader_data.id, - 500, - ticks_per_slot, - ); + let (leader_ledger_path, tick_height, mut last_entry_height, _last_id, mut last_entry_id) = + create_tmp_sample_blocktree("multi_node_ledger_window", &genesis_block, 0); ledger_paths.push(leader_ledger_path.clone()); // make a copy at zero @@ -81,7 +69,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> { let blocktree = Blocktree::open_config(&leader_ledger_path, ticks_per_slot).unwrap(); let entries = solana::entry::create_ticks( - fullnode_config.leader_scheduler_config.ticks_per_slot - last_entry_height - 1, + genesis_block.ticks_per_slot - last_entry_height - 1, last_entry_id, ); blocktree @@ -102,6 +90,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> { ); } + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&leader_keypair); let leader = Fullnode::new( leader, @@ -185,17 +174,11 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> { let bob_pubkey = Keypair::new().pubkey(); let mut ledger_paths = Vec::new(); - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "multi_node_validator_catchup_from_zero", - 10_000, - 0, - leader_data.id, - 500, - ticks_per_slot, - ); + let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("multi_node_validator_catchup_from_zero", &genesis_block, 0); ledger_paths.push(genesis_ledger_path.clone()); let zero_ledger_path = tmp_copy_ledger( @@ -211,6 +194,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> { ticks_per_slot, ); ledger_paths.push(leader_ledger_path.clone()); + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&leader_keypair); let server = Fullnode::new( leader, @@ -380,23 +364,18 @@ fn test_multi_node_basic() { let bob_pubkey = Keypair::new().pubkey(); let mut ledger_paths = Vec::new(); - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "multi_node_basic", - 10_000, - 0, - leader_data.id, - 500, - ticks_per_slot, - ); + let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("multi_node_basic", &genesis_block, 0); ledger_paths.push(genesis_ledger_path.clone()); let leader_ledger_path = tmp_copy_ledger(&genesis_ledger_path, "multi_node_basic", ticks_per_slot); ledger_paths.push(leader_ledger_path.clone()); + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&leader_keypair); let server = Fullnode::new( leader, @@ -490,17 +469,11 @@ fn test_boot_validator_from_file() -> result::Result<()> { let bob_pubkey = Keypair::new().pubkey(); let mut ledger_paths = Vec::new(); - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "boot_validator_from_file", - 100_000, - 0, - leader_pubkey, - 1000, - ticks_per_slot, - ); + let (genesis_block, alice) = GenesisBlock::new_with_leader(100_000, leader_pubkey, 1000); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("boot_validator_from_file", &genesis_block, 0); ledger_paths.push(genesis_ledger_path.clone()); let leader_ledger_path = tmp_copy_ledger( @@ -511,6 +484,7 @@ fn test_boot_validator_from_file() -> result::Result<()> { ledger_paths.push(leader_ledger_path.clone()); let leader_data = leader.info.clone(); + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&leader_keypair); let leader_fullnode = Fullnode::new( leader, @@ -592,19 +566,23 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> { // ledger (currently up to WINDOW_SIZE entries) solana_logger::setup(); - let ticks_per_slot = DEFAULT_TICKS_PER_SLOT; let leader_keypair = Arc::new(Keypair::new()); let initial_leader_balance = 500; - let fullnode_config = FullnodeConfig::default(); - let (alice, ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( + + let (genesis_block, alice) = GenesisBlock::new_with_leader( + 100_000 + 500 * solana::window_service::MAX_REPAIR_BACKOFF as u64, + leader_keypair.pubkey(), + initial_leader_balance, + ); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree( "leader_restart_validator_start_from_old_ledger", - 100_000 + 500 * solana::window_service::MAX_REPAIR_BACKOFF as u64, + &genesis_block, 0, - leader_keypair.pubkey(), - initial_leader_balance, - ticks_per_slot, ); + let bob_pubkey = Keypair::new().pubkey(); { @@ -656,6 +634,7 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> { let validator = Node::new_localhost_with_pubkey(keypair.pubkey()); let validator_data = validator.info.clone(); + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&keypair); let val_fullnode = Fullnode::new( validator, @@ -712,17 +691,12 @@ fn test_multi_node_dynamic_network() { let leader_pubkey = leader_keypair.pubkey().clone(); let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey()); let bob_pubkey = Keypair::new().pubkey(); - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = - create_tmp_sample_ledger( - "multi_node_dynamic_network", - 10_000_000, - 0, - leader_pubkey, - 500, - ticks_per_slot, - ); + + let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000_000, leader_pubkey, 500); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree("multi_node_dynamic_network", &genesis_block, 0); let mut ledger_paths = Vec::new(); ledger_paths.push(genesis_ledger_path.clone()); @@ -737,6 +711,7 @@ fn test_multi_node_dynamic_network() { let leader_data = leader.info.clone(); ledger_paths.push(leader_ledger_path.clone()); + let fullnode_config = FullnodeConfig::default(); let voting_keypair = VotingKeypair::new_local(&leader_keypair); let server = Fullnode::new( leader, @@ -943,23 +918,14 @@ fn test_leader_to_validator_transition() { 1, ); + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, leader_info.id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Initialize the leader ledger. Make a mint and a genesis entry // in the leader ledger - let ( - mint_keypair, - leader_ledger_path, - tick_height, - genesis_entry_height, - last_id, - last_entry_id, - ) = create_tmp_sample_ledger( - "test_leader_to_validator_transition", - 10_000, - 0, - leader_info.id, - 500, - ticks_per_slot, - ); + let (leader_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) = + create_tmp_sample_blocktree("test_leader_to_validator_transition", &genesis_block, 0); // Write the votes entries to the ledger that will cause leader rotation // to validator_keypair at slot 2 @@ -1057,22 +1023,13 @@ fn test_leader_validator_basic() { 1, ); + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, leader_info.id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Make a common mint and a genesis entry for both leader + validator ledgers - let ( - mint_keypair, - leader_ledger_path, - tick_height, - genesis_entry_height, - last_id, - last_entry_id, - ) = create_tmp_sample_ledger( - "test_leader_validator_basic", - 10_000, - 0, - leader_info.id, - 500, - ticks_per_slot, - ); + let (leader_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) = + create_tmp_sample_blocktree("test_leader_validator_basic", &genesis_block, 0); // Add validator vote on tick height 1 let (active_set_entries, _) = make_active_set_entries( @@ -1207,23 +1164,18 @@ fn test_dropped_handoff_recovery() { fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, slots_per_epoch); + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Make a common mint and a genesis entry for both leader + validator's ledgers let num_ending_ticks = 1; - let ( - mint_keypair, - genesis_ledger_path, - tick_height, - genesis_entry_height, - last_id, - last_entry_id, - ) = create_tmp_sample_ledger( - "test_dropped_handoff_recovery", - 10_000, - num_ending_ticks, - bootstrap_leader_info.id, - 500, - ticks_per_slot, - ); + let (genesis_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) = + create_tmp_sample_blocktree( + "test_dropped_handoff_recovery", + &genesis_block, + num_ending_ticks, + ); // Create the validator keypair that will be the next leader in line let next_leader_keypair = Arc::new(Keypair::new()); @@ -1390,23 +1342,18 @@ fn test_full_leader_validator_network() { node_keypairs.push_back(validator_keypair); } + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Make a common mint and a genesis entry for both leader + validator's ledgers let num_ending_ticks = 1; - let ( - mint_keypair, - bootstrap_leader_ledger_path, - tick_height, - mut entry_height, - last_id, - mut last_entry_id, - ) = create_tmp_sample_ledger( - "test_full_leader_validator_network", - 10_000, - num_ending_ticks, - bootstrap_leader_info.id, - 500, - ticks_per_slot, - ); + let (bootstrap_leader_ledger_path, tick_height, mut entry_height, last_id, mut last_entry_id) = + create_tmp_sample_blocktree( + "test_full_leader_validator_network", + &genesis_block, + num_ending_ticks, + ); // Create a common ledger with entries in the beginnging that will add all the validators // to the active set for leader election. @@ -1607,22 +1554,18 @@ fn test_broadcast_last_tick() { fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch); + let (mut genesis_block, _mint_keypair) = + GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500); + genesis_block.ticks_per_slot = ticks_per_slot; + // Create leader ledger let ( - _mint_keypair, bootstrap_leader_ledger_path, _tick_height, genesis_entry_height, _last_id, _last_entry_id, - ) = create_tmp_sample_ledger( - "test_broadcast_last_tick", - 10_000, - 0, - bootstrap_leader_info.id, - 500, - ticks_per_slot, - ); + ) = create_tmp_sample_blocktree("test_broadcast_last_tick", &genesis_block, 0); let genesis_ledger_len = genesis_entry_height; debug!("genesis_ledger_len: {}", genesis_ledger_len); @@ -1824,22 +1767,13 @@ fn test_fullnode_rotate( info!("validator id: {}", validator_keypair.pubkey()); } + let (mut genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(1_000_000_000_000_000_000, leader_keypair.pubkey(), 123); + genesis_block.ticks_per_slot = ticks_per_slot; + // Make a common mint and a genesis entry for both leader + validator ledgers - let ( - mint_keypair, - leader_ledger_path, - mut tick_height, - mut last_entry_height, - last_id, - mut last_entry_id, - ) = create_tmp_sample_ledger( - "test_fullnode_rotate", - 1_000_000_000_000_000_000, - 0, - leader_keypair.pubkey(), - 123, - ticks_per_slot, - ); + let (leader_ledger_path, mut tick_height, mut last_entry_height, last_id, mut last_entry_id) = + create_tmp_sample_blocktree("test_fullnode_rotate", &genesis_block, 0); assert_eq!(tick_height, 1); let mut ledger_paths = Vec::new(); diff --git a/tests/replicator.rs b/tests/replicator.rs index 84e4da18d..5d14de023 100644 --- a/tests/replicator.rs +++ b/tests/replicator.rs @@ -7,7 +7,8 @@ extern crate serde_json; use bincode::deserialize; use solana::blocktree::{ - create_tmp_sample_ledger, get_tmp_ledger_path, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT, + create_tmp_sample_blocktree, get_tmp_ledger_path, tmp_copy_ledger, Blocktree, + DEFAULT_SLOT_HEIGHT, }; use solana::client::mk_client; use solana::cluster_info::{ClusterInfo, Node, NodeInfo}; @@ -17,6 +18,7 @@ use solana::replicator::Replicator; use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT; use solana::streamer::blob_receiver; use solana::voting_keypair::VotingKeypair; +use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::hash::Hash; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; @@ -39,24 +41,13 @@ fn test_replicator_startup_basic() { let leader_info = leader_node.info.clone(); let leader_ledger_path = "replicator_test_leader_ledger"; - let mut fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let ( - mint_keypair, - leader_ledger_path, - _tick_height, - _last_entry_height, - _last_id, - _last_entry_id, - ) = create_tmp_sample_ledger( - leader_ledger_path, - 1_000_000_000, - 0, - leader_info.id, - 42, - ticks_per_slot, - ); + let (genesis_block, mint_keypair) = + GenesisBlock::new_with_leader(1_000_000_000, leader_info.id, 42); + let ticks_per_slot = genesis_block.ticks_per_slot; + + let (leader_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree(leader_ledger_path, &genesis_block, 0); let validator_ledger_path = tmp_copy_ledger( &leader_ledger_path, @@ -67,6 +58,7 @@ fn test_replicator_startup_basic() { { let voting_keypair = VotingKeypair::new_local(&leader_keypair); + let mut fullnode_config = FullnodeConfig::default(); fullnode_config.storage_rotate_count = STORAGE_ROTATE_TEST_COUNT; let leader = Fullnode::new( leader_node, @@ -294,23 +286,10 @@ fn test_replicator_startup_ledger_hang() { let leader_info = leader_node.info.clone(); let leader_ledger_path = "replicator_test_leader_ledger"; - let fullnode_config = FullnodeConfig::default(); - let ticks_per_slot = fullnode_config.ticks_per_slot(); - let ( - _mint_keypair, - leader_ledger_path, - _tick_height, - _last_entry_height, - _last_id, - _last_entry_id, - ) = create_tmp_sample_ledger( - leader_ledger_path, - 100, - 0, - leader_info.id, - 42, - ticks_per_slot, - ); + let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(100, leader_info.id, 42); + let ticks_per_slot = genesis_block.ticks_per_slot; + let (leader_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) = + create_tmp_sample_blocktree(leader_ledger_path, &genesis_block, 0); let validator_ledger_path = tmp_copy_ledger( &leader_ledger_path, @@ -321,6 +300,7 @@ fn test_replicator_startup_ledger_hang() { { let voting_keypair = VotingKeypair::new_local(&leader_keypair); + let fullnode_config = FullnodeConfig::default(); let _ = Fullnode::new( leader_node, &leader_keypair,