Unit-tests can use ordinary keypairs

This commit is contained in:
Greg Fitzgerald 2019-02-21 22:43:35 -07:00 committed by Grimes
parent 778583ad08
commit 4602d3bf46
3 changed files with 34 additions and 33 deletions

View File

@ -14,7 +14,6 @@ use crate::service::Service;
use crate::storage_stage::StorageState; use crate::storage_stage::StorageState;
use crate::tpu::Tpu; use crate::tpu::Tpu;
use crate::tvu::{Sockets, Tvu, TvuRotationInfo, TvuRotationReceiver}; use crate::tvu::{Sockets, Tvu, TvuRotationInfo, TvuRotationReceiver};
use crate::voting_keypair::VotingKeypair;
use log::Level; use log::Level;
use solana_metrics::counter::Counter; use solana_metrics::counter::Counter;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_block::GenesisBlock;
@ -106,14 +105,17 @@ pub struct Fullnode {
} }
impl Fullnode { impl Fullnode {
pub fn new( pub fn new<T>(
mut node: Node, mut node: Node,
keypair: &Arc<Keypair>, keypair: &Arc<Keypair>,
ledger_path: &str, ledger_path: &str,
voting_keypair: VotingKeypair, voting_keypair: T,
entrypoint_info_option: Option<&NodeInfo>, entrypoint_info_option: Option<&NodeInfo>,
config: &FullnodeConfig, config: &FullnodeConfig,
) -> Self { ) -> Self
where
T: 'static + KeypairUtil + Sync + Send,
{
info!("creating bank..."); info!("creating bank...");
let id = keypair.pubkey(); let id = keypair.pubkey();
@ -438,7 +440,7 @@ mod tests {
validator_node, validator_node,
&Arc::new(validator_keypair), &Arc::new(validator_keypair),
&validator_ledger_path, &validator_ledger_path,
VotingKeypair::new(), Keypair::new(),
Some(&leader_node.info), Some(&leader_node.info),
&FullnodeConfig::default(), &FullnodeConfig::default(),
); );
@ -476,7 +478,7 @@ mod tests {
validator_node, validator_node,
&Arc::new(validator_keypair), &Arc::new(validator_keypair),
&validator_ledger_path, &validator_ledger_path,
VotingKeypair::new(), Keypair::new(),
Some(&leader_node.info), Some(&leader_node.info),
&FullnodeConfig::default(), &FullnodeConfig::default(),
) )
@ -513,8 +515,7 @@ mod tests {
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots); LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair); let voting_keypair = Keypair::new();
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);
let mut fullnode_config = FullnodeConfig::default(); let mut fullnode_config = FullnodeConfig::default();
fullnode_config.leader_scheduler_config = leader_scheduler_config; fullnode_config.leader_scheduler_config = leader_scheduler_config;
@ -537,7 +538,7 @@ mod tests {
// Start the bootstrap leader // Start the bootstrap leader
let bootstrap_leader = Fullnode::new( let bootstrap_leader = Fullnode::new(
bootstrap_leader_node, bootstrap_leader_node,
&bootstrap_leader_keypair, &Arc::new(bootstrap_leader_keypair),
&bootstrap_leader_ledger_path, &bootstrap_leader_ledger_path,
voting_keypair, voting_keypair,
None, None,
@ -604,7 +605,7 @@ mod tests {
bootstrap_leader_node, bootstrap_leader_node,
&bootstrap_leader_keypair, &bootstrap_leader_keypair,
&bootstrap_leader_ledger_path, &bootstrap_leader_ledger_path,
VotingKeypair::new(), Keypair::new(),
Some(&bootstrap_leader_info), Some(&bootstrap_leader_info),
&fullnode_config, &fullnode_config,
); );
@ -620,7 +621,7 @@ mod tests {
validator_node, validator_node,
&validator_keypair, &validator_keypair,
&validator_ledger_path, &validator_ledger_path,
VotingKeypair::new(), Keypair::new(),
Some(&bootstrap_leader_info), Some(&bootstrap_leader_info),
&fullnode_config, &fullnode_config,
); );
@ -671,7 +672,7 @@ mod tests {
info!("leader: {:?}", leader_id); info!("leader: {:?}", leader_id);
info!("validator: {:?}", validator_info.id); info!("validator: {:?}", validator_info.id);
let voting_keypair = VotingKeypair::new_local(&validator_keypair); let voting_keypair = Keypair::new();
// Start the validator // Start the validator
let validator = Fullnode::new( let validator = Fullnode::new(

View File

@ -11,13 +11,13 @@ use crate::result::{Error, Result};
use crate::rpc_subscriptions::RpcSubscriptions; use crate::rpc_subscriptions::RpcSubscriptions;
use crate::service::Service; use crate::service::Service;
use crate::tvu::{TvuRotationInfo, TvuRotationSender}; use crate::tvu::{TvuRotationInfo, TvuRotationSender};
use crate::voting_keypair::VotingKeypair;
use log::Level; use log::Level;
use solana_metrics::counter::Counter; use solana_metrics::counter::Counter;
use solana_metrics::{influxdb, submit}; use solana_metrics::{influxdb, submit};
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::KeypairUtil;
use solana_sdk::timing::duration_as_ms; use solana_sdk::timing::duration_as_ms;
use solana_sdk::vote_transaction::VoteTransaction; use solana_sdk::vote_transaction::VoteTransaction;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
@ -56,11 +56,11 @@ pub struct ReplayStage {
impl ReplayStage { impl ReplayStage {
/// Process entry blobs, already in order /// Process entry blobs, already in order
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
fn process_entries( fn process_entries<T: KeypairUtil>(
mut entries: Vec<Entry>, mut entries: Vec<Entry>,
bank: &Arc<Bank>, bank: &Arc<Bank>,
cluster_info: &Arc<RwLock<ClusterInfo>>, cluster_info: &Arc<RwLock<ClusterInfo>>,
voting_keypair: Option<&Arc<VotingKeypair>>, voting_keypair: &Option<Arc<T>>,
ledger_entry_sender: &EntrySender, ledger_entry_sender: &EntrySender,
current_blob_index: &mut u64, current_blob_index: &mut u64,
last_entry_id: &Arc<RwLock<Hash>>, last_entry_id: &Arc<RwLock<Hash>>,
@ -169,9 +169,9 @@ impl ReplayStage {
} }
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)] #[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
pub fn new( pub fn new<T>(
my_id: Pubkey, my_id: Pubkey,
voting_keypair: Option<Arc<VotingKeypair>>, voting_keypair: Option<Arc<T>>,
blocktree: Arc<Blocktree>, blocktree: Arc<Blocktree>,
bank_forks: &Arc<RwLock<BankForks>>, bank_forks: &Arc<RwLock<BankForks>>,
bank_forks_info: &[BankForksInfo], bank_forks_info: &[BankForksInfo],
@ -181,7 +181,10 @@ impl ReplayStage {
ledger_signal_receiver: Receiver<bool>, ledger_signal_receiver: Receiver<bool>,
leader_scheduler: &Arc<RwLock<LeaderScheduler>>, leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
subscriptions: &Arc<RpcSubscriptions>, subscriptions: &Arc<RpcSubscriptions>,
) -> (Self, EntryReceiver) { ) -> (Self, EntryReceiver)
where
T: 'static + KeypairUtil + Send + Sync,
{
let (ledger_entry_sender, ledger_entry_receiver) = channel(); let (ledger_entry_sender, ledger_entry_receiver) = channel();
let exit_ = exit.clone(); let exit_ = exit.clone();
let leader_scheduler_ = leader_scheduler.clone(); let leader_scheduler_ = leader_scheduler.clone();
@ -299,7 +302,7 @@ impl ReplayStage {
entries, entries,
&bank, &bank,
&cluster_info, &cluster_info,
voting_keypair.as_ref(), &voting_keypair,
&ledger_entry_sender, &ledger_entry_sender,
&mut current_blob_index, &mut current_blob_index,
&last_entry_id, &last_entry_id,
@ -389,7 +392,6 @@ mod test {
make_active_set_entries, LeaderScheduler, LeaderSchedulerConfig, make_active_set_entries, LeaderScheduler, LeaderSchedulerConfig,
}; };
use crate::replay_stage::ReplayStage; use crate::replay_stage::ReplayStage;
use crate::voting_keypair::VotingKeypair;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
@ -569,8 +571,7 @@ mod test {
// Set up the replay stage // Set up the replay stage
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let my_keypair = Arc::new(my_keypair); let voting_keypair = Arc::new(Keypair::new());
let voting_keypair = Arc::new(VotingKeypair::new_local(&my_keypair));
let (to_leader_sender, _to_leader_receiver) = channel(); let (to_leader_sender, _to_leader_receiver) = channel();
{ {
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::default())); let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::default()));
@ -792,17 +793,16 @@ mod test {
} }
let genesis_block = GenesisBlock::new(10_000).0; let genesis_block = GenesisBlock::new(10_000).0;
let my_keypair = Arc::new(my_keypair);
let voting_keypair = Arc::new(VotingKeypair::new_local(&my_keypair));
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_block));
let leader_scheduler_config = LeaderSchedulerConfig::default(); let leader_scheduler_config = LeaderSchedulerConfig::default();
let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank); let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler)); let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
let voting_keypair = Some(Arc::new(Keypair::new()));
let res = ReplayStage::process_entries( let res = ReplayStage::process_entries(
entries.clone(), entries.clone(),
&bank, &bank,
&cluster_info_me, &cluster_info_me,
Some(&voting_keypair), &voting_keypair,
&ledger_entry_sender, &ledger_entry_sender,
&mut current_blob_index, &mut current_blob_index,
&Arc::new(RwLock::new(last_entry_id)), &Arc::new(RwLock::new(last_entry_id)),
@ -828,7 +828,7 @@ mod test {
entries.clone(), entries.clone(),
&bank, &bank,
&cluster_info_me, &cluster_info_me,
Some(&voting_keypair), &voting_keypair,
&ledger_entry_sender, &ledger_entry_sender,
&mut current_blob_index, &mut current_blob_index,
&Arc::new(RwLock::new(last_entry_id)), &Arc::new(RwLock::new(last_entry_id)),

View File

@ -24,7 +24,6 @@ use crate::retransmit_stage::RetransmitStage;
use crate::rpc_subscriptions::RpcSubscriptions; use crate::rpc_subscriptions::RpcSubscriptions;
use crate::service::Service; use crate::service::Service;
use crate::storage_stage::{StorageStage, StorageState}; use crate::storage_stage::{StorageStage, StorageState};
use crate::voting_keypair::VotingKeypair;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
@ -67,8 +66,8 @@ impl Tvu {
/// * `sockets` - fetch, repair, and retransmit sockets /// * `sockets` - fetch, repair, and retransmit sockets
/// * `blocktree` - the ledger itself /// * `blocktree` - the ledger itself
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)] #[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
pub fn new( pub fn new<T>(
voting_keypair: Option<Arc<VotingKeypair>>, voting_keypair: Option<Arc<T>>,
bank_forks: &Arc<RwLock<BankForks>>, bank_forks: &Arc<RwLock<BankForks>>,
bank_forks_info: &[BankForksInfo], bank_forks_info: &[BankForksInfo],
cluster_info: &Arc<RwLock<ClusterInfo>>, cluster_info: &Arc<RwLock<ClusterInfo>>,
@ -81,7 +80,10 @@ impl Tvu {
ledger_signal_receiver: Receiver<bool>, ledger_signal_receiver: Receiver<bool>,
leader_scheduler: Arc<RwLock<LeaderScheduler>>, leader_scheduler: Arc<RwLock<LeaderScheduler>>,
subscriptions: &Arc<RpcSubscriptions>, subscriptions: &Arc<RpcSubscriptions>,
) -> Self { ) -> Self
where
T: 'static + KeypairUtil + Sync + Send,
{
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let keypair: Arc<Keypair> = cluster_info let keypair: Arc<Keypair> = cluster_info
.read() .read()
@ -240,11 +242,9 @@ pub mod tests {
let blocktree_path = get_tmp_ledger_path("test_tvu_exit"); let blocktree_path = get_tmp_ledger_path("test_tvu_exit");
let (blocktree, l_receiver) = Blocktree::open_with_signal(&blocktree_path) let (blocktree, l_receiver) = Blocktree::open_with_signal(&blocktree_path)
.expect("Expected to successfully open ledger"); .expect("Expected to successfully open ledger");
let vote_account_keypair = Arc::new(Keypair::new());
let voting_keypair = VotingKeypair::new_local(&vote_account_keypair);
let (sender, _receiver) = channel(); let (sender, _receiver) = channel();
let tvu = Tvu::new( let tvu = Tvu::new(
Some(Arc::new(voting_keypair)), Some(Arc::new(Keypair::new())),
&Arc::new(RwLock::new(bank_forks)), &Arc::new(RwLock::new(bank_forks)),
&bank_forks_info, &bank_forks_info,
&cref1, &cref1,