Update SBF programs tests to use bank from the correct slot (#31491)

This commit is contained in:
Pankaj Garg 2023-05-04 13:25:02 -07:00 committed by GitHub
parent 67939c061e
commit 555520b640
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 179 additions and 64 deletions

View File

@ -252,6 +252,21 @@ fn execute_transactions(
.collect() .collect()
} }
fn load_program_and_advance_slot(
bank_client: &mut BankClient,
loader_id: &Pubkey,
payer_keypair: &Keypair,
name: &str,
) -> (Arc<Bank>, Pubkey) {
let pubkey = load_program(bank_client, loader_id, payer_keypair, name);
(
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot"),
pubkey,
)
}
#[test] #[test]
#[cfg(any(feature = "sbf_c", feature = "sbf_rust"))] #[cfg(any(feature = "sbf_c", feature = "sbf_rust"))]
fn test_program_sbf_sanity() { fn test_program_sbf_sanity() {
@ -311,10 +326,15 @@ fn test_program_sbf_sanity() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
// Call user program // Call user program
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.0); let (_, program_id) = load_program_and_advance_slot(
&mut bank_client,
&bpf_loader::id(),
&mint_keypair,
program.0,
);
let account_metas = vec![ let account_metas = vec![
AccountMeta::new(mint_keypair.pubkey(), true), AccountMeta::new(mint_keypair.pubkey(), true),
AccountMeta::new(Keypair::new().pubkey(), false), AccountMeta::new(Keypair::new().pubkey(), false),
@ -430,6 +450,8 @@ fn test_sol_alloc_free_no_longer_deployable() {
// Try and finalize the program now that sol_alloc_free is re-enabled // Try and finalize the program now that sol_alloc_free is re-enabled
assert!(bank.process_transaction(&finalize_tx).is_ok()); assert!(bank.process_transaction(&finalize_tx).is_ok());
let new_slot = bank.slot() + 1;
let mut bank = Bank::new_from_parent(&Arc::new(bank), &Pubkey::default(), new_slot);
// invoke the program // invoke the program
assert!(bank.process_transaction(&invoke_tx).is_ok()); assert!(bank.process_transaction(&invoke_tx).is_ok());
@ -473,8 +495,13 @@ fn test_program_sbf_duplicate_accounts() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let (bank, program_id) = load_program_and_advance_slot(
&mut bank_client,
&bpf_loader::id(),
&mint_keypair,
program,
);
let payee_account = AccountSharedData::new(10, 1, &program_id); let payee_account = AccountSharedData::new(10, 1, &program_id);
let payee_pubkey = Pubkey::new_unique(); let payee_pubkey = Pubkey::new_unique();
bank.store_account(&payee_pubkey, &payee_account); bank.store_account(&payee_pubkey, &payee_account);
@ -571,8 +598,13 @@ fn test_program_sbf_error_handling() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let (_, program_id) = load_program_and_advance_slot(
&mut bank_client,
&bpf_loader::id(),
&mint_keypair,
program,
);
let account_metas = vec![AccountMeta::new(mint_keypair.pubkey(), true)]; let account_metas = vec![AccountMeta::new(mint_keypair.pubkey(), true)];
let instruction = Instruction::new_with_bytes(program_id, &[1], account_metas.clone()); let instruction = Instruction::new_with_bytes(program_id, &[1], account_metas.clone());
@ -672,9 +704,14 @@ fn test_return_data_and_log_data_syscall() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program); let (bank, program_id) = load_program_and_advance_slot(
&mut bank_client,
&bpf_loader::id(),
&mint_keypair,
program,
);
bank.freeze(); bank.freeze();
@ -735,14 +772,18 @@ fn test_program_sbf_invoke_sanity() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let invoke_program_id = let invoke_program_id =
load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.1); load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.1);
let invoked_program_id = let invoked_program_id =
load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.2); load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.2);
let noop_program_id = let (bank, noop_program_id) = load_program_and_advance_slot(
load_program(&bank_client, &bpf_loader::id(), &mint_keypair, program.3); &mut bank_client,
&bpf_loader::id(),
&mint_keypair,
program.3,
);
let argument_keypair = Keypair::new(); let argument_keypair = Keypair::new();
let account = AccountSharedData::new(42, 100, &invoke_program_id); let account = AccountSharedData::new(42, 100, &invoke_program_id);
@ -1128,7 +1169,7 @@ fn test_program_sbf_program_id_spoofing() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let malicious_swap_pubkey = load_program( let malicious_swap_pubkey = load_program(
&bank_client, &bank_client,
@ -1136,8 +1177,8 @@ fn test_program_sbf_program_id_spoofing() {
&mint_keypair, &mint_keypair,
"solana_sbf_rust_spoof1", "solana_sbf_rust_spoof1",
); );
let malicious_system_pubkey = load_program( let (bank, malicious_system_pubkey) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_spoof1_system", "solana_sbf_rust_spoof1_system",
@ -1179,7 +1220,7 @@ fn test_program_sbf_caller_has_access_to_cpi_program() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let caller_pubkey = load_program( let caller_pubkey = load_program(
&bank_client, &bank_client,
@ -1187,8 +1228,8 @@ fn test_program_sbf_caller_has_access_to_cpi_program() {
&mint_keypair, &mint_keypair,
"solana_sbf_rust_caller_access", "solana_sbf_rust_caller_access",
); );
let caller2_pubkey = load_program( let (_, caller2_pubkey) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_caller_access", "solana_sbf_rust_caller_access",
@ -1217,10 +1258,10 @@ fn test_program_sbf_ro_modify() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_pubkey = load_program( let (bank, program_pubkey) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_ro_modify", "solana_sbf_rust_ro_modify",
@ -1271,9 +1312,9 @@ fn test_program_sbf_call_depth() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program( let (_, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_call_depth", "solana_sbf_rust_call_depth",
@ -1304,9 +1345,9 @@ fn test_program_sbf_compute_budget() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program( let (_, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
@ -1432,10 +1473,10 @@ fn test_program_sbf_instruction_introspection() {
} = create_genesis_config(50_000); } = create_genesis_config(50_000);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program( let (bank, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_instruction_introspection", "solana_sbf_rust_instruction_introspection",
@ -1489,7 +1530,7 @@ fn test_program_sbf_test_use_latest_executor() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let panic_id = load_program( let panic_id = load_program(
&bank_client, &bank_client,
&bpf_loader::id(), &bpf_loader::id(),
@ -1514,6 +1555,10 @@ fn test_program_sbf_test_use_latest_executor() {
], ],
Some(&mint_keypair.pubkey()), Some(&mint_keypair.pubkey()),
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
assert!(bank_client assert!(bank_client
.send_and_confirm_message(&[&mint_keypair, &program_keypair], message) .send_and_confirm_message(&[&mint_keypair, &program_keypair], message)
.is_err()); .is_err());
@ -1526,6 +1571,9 @@ fn test_program_sbf_test_use_latest_executor() {
&mint_keypair, &mint_keypair,
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
let message = Message::new(&[instruction], Some(&mint_keypair.pubkey())); let message = Message::new(&[instruction], Some(&mint_keypair.pubkey()));
bank_client bank_client
.send_and_confirm_message(&[&mint_keypair, &program_keypair], message) .send_and_confirm_message(&[&mint_keypair, &program_keypair], message)
@ -1556,7 +1604,7 @@ fn test_program_sbf_upgrade() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
// Deploy upgrade program // Deploy upgrade program
let buffer_keypair = Keypair::new(); let buffer_keypair = Keypair::new();
@ -1571,6 +1619,9 @@ fn test_program_sbf_upgrade() {
&authority_keypair, &authority_keypair,
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
let mut instruction = let mut instruction =
Instruction::new_with_bytes(program_id, &[0], vec![AccountMeta::new(clock::id(), false)]); Instruction::new_with_bytes(program_id, &[0], vec![AccountMeta::new(clock::id(), false)]);
@ -1596,6 +1647,9 @@ fn test_program_sbf_upgrade() {
slot: 2, slot: 2,
..clock::Clock::default() ..clock::Clock::default()
}); });
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
// Call upgraded program // Call upgraded program
instruction.data[0] += 1; instruction.data[0] += 1;
@ -1626,6 +1680,10 @@ fn test_program_sbf_upgrade() {
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
// Call original program // Call original program
instruction.data[0] += 1; instruction.data[0] += 1;
let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction); let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction);
@ -1860,7 +1918,7 @@ fn test_program_sbf_invoke_in_same_tx_as_deployment() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
// Deploy upgradeable program // Deploy upgradeable program
let buffer_keypair = Keypair::new(); let buffer_keypair = Keypair::new();
@ -1914,6 +1972,10 @@ fn test_program_sbf_invoke_in_same_tx_as_deployment() {
) )
.unwrap(); .unwrap();
let bank = bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
// Deployment is invisible to both top-level-instructions and CPI instructions // Deployment is invisible to both top-level-instructions and CPI instructions
for (index, invoke_instruction) in [invoke_instruction, indirect_invoke_instruction] for (index, invoke_instruction) in [invoke_instruction, indirect_invoke_instruction]
.into_iter() .into_iter()
@ -1954,7 +2016,7 @@ fn test_program_sbf_invoke_in_same_tx_as_redeployment() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
// Deploy upgradeable program // Deploy upgradeable program
let buffer_keypair = Keypair::new(); let buffer_keypair = Keypair::new();
@ -2003,6 +2065,10 @@ fn test_program_sbf_invoke_in_same_tx_as_redeployment() {
], ],
); );
let bank = bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
// Prepare redeployment // Prepare redeployment
let buffer_keypair = Keypair::new(); let buffer_keypair = Keypair::new();
load_upgradeable_buffer( load_upgradeable_buffer(
@ -2056,7 +2122,7 @@ fn test_program_sbf_invoke_in_same_tx_as_undeployment() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
// Deploy upgradeable program // Deploy upgradeable program
let buffer_keypair = Keypair::new(); let buffer_keypair = Keypair::new();
@ -2094,6 +2160,10 @@ fn test_program_sbf_invoke_in_same_tx_as_undeployment() {
], ],
); );
let bank = bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
// Prepare undeployment // Prepare undeployment
let (programdata_address, _) = Pubkey::find_program_address( let (programdata_address, _) = Pubkey::find_program_address(
&[program_keypair.pubkey().as_ref()], &[program_keypair.pubkey().as_ref()],
@ -2142,7 +2212,7 @@ fn test_program_sbf_invoke_upgradeable_via_cpi() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let invoke_and_return = load_program( let invoke_and_return = load_program(
&bank_client, &bank_client,
&bpf_loader::id(), &bpf_loader::id(),
@ -2164,6 +2234,10 @@ fn test_program_sbf_invoke_upgradeable_via_cpi() {
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
let mut instruction = Instruction::new_with_bytes( let mut instruction = Instruction::new_with_bytes(
invoke_and_return, invoke_and_return,
&[0], &[0],
@ -2195,6 +2269,9 @@ fn test_program_sbf_invoke_upgradeable_via_cpi() {
slot: 2, slot: 2,
..clock::Clock::default() ..clock::Clock::default()
}); });
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
// Call the upgraded program // Call the upgraded program
instruction.data[0] += 1; instruction.data[0] += 1;
@ -2225,6 +2302,10 @@ fn test_program_sbf_invoke_upgradeable_via_cpi() {
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance slot");
// Call original program // Call original program
instruction.data[0] += 1; instruction.data[0] += 1;
let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction.clone()); let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction.clone());
@ -2289,10 +2370,10 @@ fn test_program_reads_from_program_account() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program( let (_, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"read_program", "read_program",
@ -2320,9 +2401,10 @@ fn test_program_sbf_c_dup() {
let account = AccountSharedData::new_data(42, &[1_u8, 2, 3], &system_program::id()).unwrap(); let account = AccountSharedData::new_data(42, &[1_u8, 2, 3], &system_program::id()).unwrap();
bank.store_account(&account_address, &account); bank.store_account(&account_address, &account);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program(&bank_client, &bpf_loader::id(), &mint_keypair, "ser"); let (_, program_id) =
load_program_and_advance_slot(&mut bank_client, &bpf_loader::id(), &mint_keypair, "ser");
let account_metas = vec![ let account_metas = vec![
AccountMeta::new_readonly(account_address, false), AccountMeta::new_readonly(account_address, false),
AccountMeta::new_readonly(account_address, false), AccountMeta::new_readonly(account_address, false),
@ -2344,7 +2426,7 @@ fn test_program_sbf_upgrade_via_cpi() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let invoke_and_return = load_program( let invoke_and_return = load_program(
&bank_client, &bank_client,
&bpf_loader::id(), &bpf_loader::id(),
@ -2365,6 +2447,9 @@ fn test_program_sbf_upgrade_via_cpi() {
&authority_keypair, &authority_keypair,
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
let program_account = bank_client.get_account(&program_id).unwrap().unwrap(); let program_account = bank_client.get_account(&program_id).unwrap().unwrap();
let programdata_address = match program_account.state() { let programdata_address = match program_account.state() {
Ok(bpf_loader_upgradeable::UpgradeableLoaderState::Program { Ok(bpf_loader_upgradeable::UpgradeableLoaderState::Program {
@ -2420,6 +2505,10 @@ fn test_program_sbf_upgrade_via_cpi() {
.send_and_confirm_message(&[&mint_keypair, &authority_keypair], message) .send_and_confirm_message(&[&mint_keypair, &authority_keypair], message)
.unwrap(); .unwrap();
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
// Call the upgraded program // Call the upgraded program
instruction.data[0] += 1; instruction.data[0] += 1;
let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction.clone()); let result = bank_client.send_and_confirm_instruction(&mint_keypair, instruction.clone());
@ -2447,7 +2536,7 @@ fn test_program_sbf_set_upgrade_authority_via_cpi() {
.. ..
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
// Deploy CPI invoker program // Deploy CPI invoker program
let invoke_and_return = load_program( let invoke_and_return = load_program(
@ -2471,6 +2560,10 @@ fn test_program_sbf_set_upgrade_authority_via_cpi() {
"solana_sbf_rust_upgradeable", "solana_sbf_rust_upgradeable",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
// Set program upgrade authority instruction to invoke via CPI // Set program upgrade authority instruction to invoke via CPI
let new_upgrade_authority_key = Keypair::new().pubkey(); let new_upgrade_authority_key = Keypair::new().pubkey();
let mut set_upgrade_authority_instruction = bpf_loader_upgradeable::set_upgrade_authority( let mut set_upgrade_authority_instruction = bpf_loader_upgradeable::set_upgrade_authority(
@ -2537,7 +2630,7 @@ fn test_program_upgradeable_locks() {
} = create_genesis_config(2_000_000_000); } = create_genesis_config(2_000_000_000);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
load_upgradeable_program( load_upgradeable_program(
&bank_client, &bank_client,
@ -2557,6 +2650,10 @@ fn test_program_upgradeable_locks() {
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
); );
let bank = bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
bank_client bank_client
.send_and_confirm_instruction( .send_and_confirm_instruction(
&mint_keypair, &mint_keypair,
@ -2656,10 +2753,10 @@ fn test_program_sbf_finalize() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_pubkey = load_program( let (_, program_pubkey) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_finalize", "solana_sbf_rust_finalize",
@ -2674,6 +2771,10 @@ fn test_program_sbf_finalize() {
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
); );
bank_client
.advance_slot(1, &Pubkey::default())
.expect("Failed to advance the slot");
let account_metas = vec![ let account_metas = vec![
AccountMeta::new(program_keypair.pubkey(), true), AccountMeta::new(program_keypair.pubkey(), true),
AccountMeta::new_readonly(bpf_loader::id(), false), AccountMeta::new_readonly(bpf_loader::id(), false),
@ -2700,10 +2801,10 @@ fn test_program_sbf_ro_account_modify() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program( let (bank, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_ro_account_modify", "solana_sbf_rust_ro_account_modify",
@ -2771,10 +2872,10 @@ fn test_program_sbf_realloc() {
feature_set.deactivate(&feature_set::bpf_account_data_direct_mapping::id()); feature_set.deactivate(&feature_set::bpf_account_data_direct_mapping::id());
} }
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program( let (bank, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_realloc", "solana_sbf_rust_realloc",
@ -3099,7 +3200,7 @@ fn test_program_sbf_realloc_invoke() {
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let realloc_program_id = load_program( let realloc_program_id = load_program(
&bank_client, &bank_client,
@ -3108,8 +3209,8 @@ fn test_program_sbf_realloc_invoke() {
"solana_sbf_rust_realloc", "solana_sbf_rust_realloc",
); );
let realloc_invoke_program_id = load_program( let (bank, realloc_invoke_program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_realloc_invoke", "solana_sbf_rust_realloc_invoke",
@ -3615,7 +3716,7 @@ fn test_program_sbf_processed_inner_instruction() {
} = create_genesis_config(50); } = create_genesis_config(50);
let bank = Bank::new_for_tests(&genesis_config); let bank = Bank::new_for_tests(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let sibling_program_id = load_program( let sibling_program_id = load_program(
&bank_client, &bank_client,
@ -3635,8 +3736,8 @@ fn test_program_sbf_processed_inner_instruction() {
&mint_keypair, &mint_keypair,
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
); );
let invoke_and_return_program_id = load_program( let (_, invoke_and_return_program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_invoke_and_return", "solana_sbf_rust_invoke_and_return",
@ -3695,10 +3796,10 @@ fn test_program_fees() {
FeeStructure::new(0.000005, 0.0, vec![(200, 0.0000005), (1400000, 0.000005)]); FeeStructure::new(0.000005, 0.0, vec![(200, 0.0000005), (1400000, 0.000005)]);
bank.fee_structure = fee_structure.clone(); bank.fee_structure = fee_structure.clone();
bank.feature_set = Arc::new(FeatureSet::all_enabled()); bank.feature_set = Arc::new(FeatureSet::all_enabled());
let bank_client = BankClient::new(bank); let mut bank_client = BankClient::new(bank);
let program_id = load_program( let (_, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_noop", "solana_sbf_rust_noop",
@ -3768,10 +3869,10 @@ fn test_get_minimum_delegation() {
let mut bank = Bank::new_for_tests(&genesis_config); let mut bank = Bank::new_for_tests(&genesis_config);
bank.feature_set = Arc::new(FeatureSet::all_enabled()); bank.feature_set = Arc::new(FeatureSet::all_enabled());
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let mut bank_client = BankClient::new_shared(&bank);
let program_id = load_program( let (_, program_id) = load_program_and_advance_slot(
&bank_client, &mut bank_client,
&bpf_loader::id(), &bpf_loader::id(),
&mint_keypair, &mint_keypair,
"solana_sbf_rust_get_minimum_delegation", "solana_sbf_rust_get_minimum_delegation",

View File

@ -4,6 +4,7 @@ use {
solana_sdk::{ solana_sdk::{
account::Account, account::Account,
client::{AsyncClient, Client, SyncClient}, client::{AsyncClient, Client, SyncClient},
clock,
commitment_config::CommitmentConfig, commitment_config::CommitmentConfig,
epoch_info::EpochInfo, epoch_info::EpochInfo,
fee_calculator::{FeeCalculator, FeeRateGovernor}, fee_calculator::{FeeCalculator, FeeRateGovernor},
@ -329,6 +330,19 @@ impl BankClient {
pub fn set_sysvar_for_tests<T: Sysvar + SysvarId>(&self, sysvar: &T) { pub fn set_sysvar_for_tests<T: Sysvar + SysvarId>(&self, sysvar: &T) {
self.bank.set_sysvar_for_tests(sysvar); self.bank.set_sysvar_for_tests(sysvar);
} }
pub fn advance_slot(&mut self, by: u64, collector_id: &Pubkey) -> Option<Arc<Bank>> {
self.bank = Arc::new(Bank::new_from_parent(
&self.bank,
collector_id,
self.bank.slot().checked_add(by)?,
));
self.set_sysvar_for_tests(&clock::Clock {
slot: self.bank.slot(),
..clock::Clock::default()
});
Some(self.bank.clone())
}
} }
#[cfg(test)] #[cfg(test)]