Forwarder: Add common setup for tests (#31232)

This commit is contained in:
Andrew Fitzgerald 2023-04-19 09:08:13 -07:00 committed by GitHub
parent ca1bde3591
commit 748220c9d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 151 additions and 138 deletions

View File

@ -271,46 +271,43 @@ mod tests {
unprocessed_packet_batches::{DeserializedPacket, UnprocessedPacketBatches},
unprocessed_transaction_storage::ThreadType,
},
solana_ledger::{
blockstore::Blockstore, genesis_utils::GenesisConfigInfo,
get_tmp_ledger_path_auto_delete,
},
solana_gossip::cluster_info::Node,
solana_ledger::{blockstore::Blockstore, genesis_utils::GenesisConfigInfo},
solana_perf::packet::PacketFlags,
solana_poh::poh_recorder::create_test_recorder,
solana_poh::{poh_recorder::create_test_recorder, poh_service::PohService},
solana_runtime::bank::Bank,
solana_sdk::{
hash::Hash, poh_config::PohConfig, signature::Keypair, signer::Signer,
system_transaction, transaction::VersionedTransaction,
},
solana_streamer::recvmmsg::recv_mmsg,
std::sync::atomic::AtomicBool,
tempfile::TempDir,
};
#[test]
#[ignore]
fn test_forwarder_budget() {
solana_logger::setup();
// Create `PacketBatch` with 1 unprocessed packet
let tx = system_transaction::transfer(
&Keypair::new(),
&solana_sdk::pubkey::new_rand(),
1,
Hash::new_unique(),
);
let packet = Packet::from_data(None, tx).unwrap();
let deserialized_packet = DeserializedPacket::new(packet).unwrap();
struct TestSetup {
_ledger_dir: TempDir,
bank_forks: Arc<RwLock<BankForks>>,
poh_recorder: Arc<RwLock<PohRecorder>>,
exit: Arc<AtomicBool>,
poh_service: PohService,
cluster_info: Arc<ClusterInfo>,
local_node: Node,
}
fn setup() -> TestSetup {
let validator_keypair = Arc::new(Keypair::new());
let genesis_config_info =
create_slow_genesis_config_with_leader(10_000, &validator_keypair.pubkey());
let GenesisConfigInfo { genesis_config, .. } = &genesis_config_info;
let bank = Bank::new_no_wallclock_throttle_for_tests(genesis_config);
let bank: Bank = Bank::new_no_wallclock_throttle_for_tests(genesis_config);
let bank_forks = Arc::new(RwLock::new(BankForks::new(bank)));
let bank = Arc::new(bank_forks.read().unwrap().get(0).unwrap());
let ledger_path = get_tmp_ledger_path_auto_delete!();
{
let bank = bank_forks.read().unwrap().working_bank();
let ledger_path = TempDir::new().unwrap();
let blockstore = Arc::new(
Blockstore::open(ledger_path.path())
Blockstore::open(ledger_path.as_ref())
.expect("Expected to be able to open database ledger"),
);
let poh_config = PohConfig {
@ -325,7 +322,41 @@ mod tests {
let (local_node, cluster_info) = new_test_cluster_info(Some(validator_keypair));
let cluster_info = Arc::new(cluster_info);
let recv_socket = &local_node.sockets.tpu_forwards[0];
TestSetup {
_ledger_dir: ledger_path,
bank_forks,
poh_recorder,
exit,
poh_service,
cluster_info,
local_node,
}
}
#[test]
#[ignore]
fn test_forwarder_budget() {
solana_logger::setup();
let TestSetup {
bank_forks,
poh_recorder,
exit,
poh_service,
cluster_info,
local_node,
..
} = setup();
// Create `PacketBatch` with 1 unprocessed packet
let tx = system_transaction::transfer(
&Keypair::new(),
&solana_sdk::pubkey::new_rand(),
1,
Hash::new_unique(),
);
let packet = Packet::from_data(None, tx).unwrap();
let deserialized_packet = DeserializedPacket::new(packet).unwrap();
let test_cases = vec![
("budget-restricted", DataBudget::restricted(), 0),
@ -356,6 +387,7 @@ mod tests {
&mut TracerPacketStats::new(0),
);
let recv_socket = &local_node.sockets.tpu_forwards[0];
recv_socket
.set_nonblocking(expected_num_forwarded == 0)
.unwrap();
@ -368,13 +400,21 @@ mod tests {
exit.store(true, Ordering::Relaxed);
poh_service.join().unwrap();
}
Blockstore::destroy(ledger_path.path()).unwrap();
}
#[test]
#[ignore]
fn test_handle_forwarding() {
solana_logger::setup();
let TestSetup {
bank_forks,
poh_recorder,
exit,
poh_service,
cluster_info,
local_node,
..
} = setup();
// packets are deserialized upon receiving, failed packets will not be
// forwarded; Therefore need to create real packets here.
let keypair = Keypair::new();
@ -402,32 +442,6 @@ mod tests {
),
ThreadType::Transactions,
);
let validator_keypair = Arc::new(Keypair::new());
let genesis_config_info =
create_slow_genesis_config_with_leader(10_000, &validator_keypair.pubkey());
let GenesisConfigInfo { genesis_config, .. } = &genesis_config_info;
let bank = Bank::new_no_wallclock_throttle_for_tests(genesis_config);
let bank_forks = Arc::new(RwLock::new(BankForks::new(bank)));
let bank = Arc::new(bank_forks.read().unwrap().get(0).unwrap());
let ledger_path = get_tmp_ledger_path_auto_delete!();
{
let blockstore = Arc::new(
Blockstore::open(ledger_path.path())
.expect("Expected to be able to open database ledger"),
);
let poh_config = PohConfig {
// limit tick count to avoid clearing working_bank at
// PohRecord then PohRecorderError(MaxHeightReached) at BankingStage
target_tick_count: Some(bank.max_tick_height() - 1),
..PohConfig::default()
};
let (exit, poh_recorder, poh_service, _entry_receiver) =
create_test_recorder(&bank, &blockstore, Some(poh_config), None);
let (local_node, cluster_info) = new_test_cluster_info(Some(validator_keypair));
let recv_socket = &local_node.sockets.tpu_forwards[0];
let connection_cache = ConnectionCache::default();
let test_cases = vec![
@ -439,7 +453,7 @@ mod tests {
let forwarder = Forwarder::new(
poh_recorder,
bank_forks,
Arc::new(cluster_info),
cluster_info,
Arc::new(connection_cache),
Arc::new(DataBudget::default()),
);
@ -453,6 +467,7 @@ mod tests {
&mut TracerPacketStats::new(0),
);
let recv_socket = &local_node.sockets.tpu_forwards[0];
recv_socket
.set_nonblocking(expected_ids.is_empty())
.unwrap();
@ -478,6 +493,4 @@ mod tests {
exit.store(true, Ordering::Relaxed);
poh_service.join().unwrap();
}
Blockstore::destroy(ledger_path.path()).unwrap();
}
}