Unit-tests can use ordinary keypairs
This commit is contained in:
parent
778583ad08
commit
4602d3bf46
|
@ -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(
|
||||||
|
|
|
@ -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)),
|
||||||
|
|
14
src/tvu.rs
14
src/tvu.rs
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue