Fix - `test_add_builtin()` should use `LoadedProgram::new_builtin()` and `ProgramCache::extract()` (#772)

Refactors test_add_builtin() to use LoadedProgram::new_builtin() and ProgramCache::extract().
This commit is contained in:
Alexander Meißner 2024-04-12 14:58:23 +02:00 committed by GitHub
parent 499d36e354
commit 81519fab2a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 53 deletions

View File

@ -985,10 +985,9 @@ impl<FG: ForkGraph> TransactionBatchProcessor<FG> {
mod tests { mod tests {
use { use {
super::*, super::*,
solana_bpf_loader_program::syscalls::create_program_runtime_environment_v1,
solana_program_runtime::{ solana_program_runtime::{
loaded_programs::{BlockRelation, ProgramRuntimeEnvironments}, loaded_programs::{BlockRelation, ProgramRuntimeEnvironments},
solana_rbpf::{elf::Executable, program::BuiltinProgram}, solana_rbpf::program::BuiltinProgram,
}, },
solana_sdk::{ solana_sdk::{
account::{create_account_shared_data_for_test, WritableAccount}, account::{create_account_shared_data_for_test, WritableAccount},
@ -2373,27 +2372,16 @@ mod tests {
fn test_add_builtin() { fn test_add_builtin() {
let mock_bank = MockBankCallback::default(); let mock_bank = MockBankCallback::default();
let batch_processor = TransactionBatchProcessor::<TestForkGraph>::default(); let batch_processor = TransactionBatchProcessor::<TestForkGraph>::default();
batch_processor.program_cache.write().unwrap().fork_graph =
Some(Arc::new(RwLock::new(TestForkGraph {})));
let key = Pubkey::new_unique(); let key = Pubkey::new_unique();
let name = "a_builtin_name"; let name = "a_builtin_name";
let program = LoadedProgram { let program = LoadedProgram::new_builtin(
program: LoadedProgramType::LegacyV0( 0,
Executable::load( name.len(),
load_test_program().as_slice(), |_invoke_context, _param0, _param1, _param2, _param3, _param4| {},
Arc::new( );
create_program_runtime_environment_v1(
&FeatureSet::default(),
&ComputeBudget::default(),
false,
false,
)
.unwrap(),
),
)
.unwrap(),
),
..Default::default()
};
batch_processor.add_builtin(&mock_bank, key, name, program); batch_processor.add_builtin(&mock_bank, key, name, program);
@ -2402,41 +2390,24 @@ mod tests {
name.as_bytes() name.as_bytes()
); );
assert!(batch_processor let mut loaded_programs_for_tx_batch = LoadedProgramsForTxBatch::new_from_cache(
.builtin_program_ids 0,
.read() 0,
.unwrap() &batch_processor.program_cache.read().unwrap(),
.contains(&key)); );
let fetched_program = batch_processor batch_processor.program_cache.write().unwrap().extract(
.program_cache &mut vec![(key, (LoadedProgramMatchCriteria::NoCriteria, 1))],
.read() &mut loaded_programs_for_tx_batch,
.unwrap() true,
.get_flattened_entries(true, true); );
let entry = fetched_program let entry = loaded_programs_for_tx_batch.find(&key).unwrap();
.iter()
.find(|(entry_key, _)| *entry_key == key)
.map(|(_, value)| value.clone())
.unwrap();
// Repeating code because LoadedProgram does not implement clone. // Repeating code because LoadedProgram does not implement clone.
let program = LoadedProgram { let program = LoadedProgram::new_builtin(
program: LoadedProgramType::LegacyV0( 0,
Executable::load( name.len(),
load_test_program().as_slice(), |_invoke_context, _param0, _param1, _param2, _param3, _param4| {},
Arc::new( );
create_program_runtime_environment_v1(
&FeatureSet::default(),
&ComputeBudget::default(),
false,
false,
)
.unwrap(),
),
)
.unwrap(),
),
..Default::default()
};
assert_eq!(entry, Arc::new(program)); assert_eq!(entry, Arc::new(program));
} }
} }