program-test consumes some units as native (#34714)

program-test consumes some units as native;
harden a unit test wrt if builtin consumes units;
This commit is contained in:
Tao Zhu 2024-01-10 09:05:30 -06:00 committed by GitHub
parent c5d51acda8
commit 88f8d11da2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 2 deletions

View File

@ -112,6 +112,9 @@ pub fn invoke_builtin_function(
let instruction_data = instruction_context.get_instruction_data();
let instruction_account_indices = 0..instruction_context.get_number_of_instruction_accounts();
// mock builtin program must consume units
invoke_context.consume_checked(1)?;
let log_collector = invoke_context.get_log_collector();
let program_id = instruction_context.get_last_program_key(transaction_context)?;
stable_log::program_invoke(

View File

@ -14015,7 +14015,16 @@ fn test_failed_simulation_compute_units() {
Bank::new_with_mockup_builtin_for_tests(&genesis_config, program_id, MockBuiltin::vm).0;
const TEST_UNITS: u64 = 10_000;
declare_process_instruction!(MockBuiltin, 1, |invoke_context| {
const MOCK_BUILTIN_UNITS: u64 = 1;
let expected_consumed_units = if bank
.feature_set
.is_active(&solana_sdk::feature_set::native_programs_consume_cu::id())
{
TEST_UNITS + MOCK_BUILTIN_UNITS
} else {
TEST_UNITS
};
declare_process_instruction!(MockBuiltin, MOCK_BUILTIN_UNITS, |invoke_context| {
invoke_context.consume_checked(TEST_UNITS).unwrap();
Err(InstructionError::InvalidInstructionData)
});
@ -14029,5 +14038,5 @@ fn test_failed_simulation_compute_units() {
bank.freeze();
let sanitized = SanitizedTransaction::from_transaction_for_tests(transaction);
let simulation = bank.simulate_transaction(&sanitized, false);
assert_eq!(TEST_UNITS, simulation.units_consumed);
assert_eq!(expected_consumed_units, simulation.units_consumed);
}