Add program-test tests to bpf programs (#16407)
This commit is contained in:
@@ -3,62 +3,79 @@
|
||||
extern crate solana_program;
|
||||
use solana_program::{
|
||||
account_info::AccountInfo,
|
||||
clock::DEFAULT_SLOTS_PER_EPOCH,
|
||||
entrypoint,
|
||||
entrypoint::ProgramResult,
|
||||
fee_calculator::FeeCalculator,
|
||||
msg,
|
||||
program_error::ProgramError,
|
||||
pubkey::Pubkey,
|
||||
rent,
|
||||
sysvar::{
|
||||
self, clock::Clock, fees::Fees, instructions, rent::Rent, slot_hashes::SlotHashes,
|
||||
self, clock::Clock, epoch_schedule::EpochSchedule, fees::Fees, instructions,
|
||||
recent_blockhashes::RecentBlockhashes, rent::Rent, slot_hashes::SlotHashes,
|
||||
slot_history::SlotHistory, stake_history::StakeHistory, Sysvar,
|
||||
},
|
||||
};
|
||||
|
||||
entrypoint!(process_instruction);
|
||||
#[allow(clippy::unnecessary_wraps)]
|
||||
fn process_instruction(
|
||||
pub fn process_instruction(
|
||||
_program_id: &Pubkey,
|
||||
accounts: &[AccountInfo],
|
||||
_instruction_data: &[u8],
|
||||
) -> ProgramResult {
|
||||
// Clock
|
||||
msg!("Clock identifier:");
|
||||
sysvar::clock::id().log();
|
||||
let clock = Clock::from_account_info(&accounts[2]).unwrap();
|
||||
assert_eq!(clock.slot, DEFAULT_SLOTS_PER_EPOCH + 1);
|
||||
{
|
||||
msg!("Clock identifier:");
|
||||
sysvar::clock::id().log();
|
||||
let clock = Clock::from_account_info(&accounts[2]).unwrap();
|
||||
assert_ne!(clock, Clock::default());
|
||||
}
|
||||
|
||||
// Epoch Schedule
|
||||
{
|
||||
msg!("EpochSchedule identifier:");
|
||||
sysvar::epoch_schedule::id().log();
|
||||
let epoch_schedule = EpochSchedule::from_account_info(&accounts[3]).unwrap();
|
||||
assert_eq!(epoch_schedule, EpochSchedule::default());
|
||||
}
|
||||
|
||||
// Fees
|
||||
msg!("Fees identifier:");
|
||||
sysvar::fees::id().log();
|
||||
let fees = Fees::from_account_info(&accounts[3]).unwrap();
|
||||
let fee_calculator = fees.fee_calculator;
|
||||
assert_eq!(fee_calculator.lamports_per_signature, 0);
|
||||
{
|
||||
msg!("Fees identifier:");
|
||||
sysvar::fees::id().log();
|
||||
let fees = Fees::from_account_info(&accounts[4]).unwrap();
|
||||
let fee_calculator = fees.fee_calculator;
|
||||
assert_ne!(fee_calculator, FeeCalculator::default());
|
||||
}
|
||||
|
||||
// Instructions
|
||||
msg!("Instructions identifier:");
|
||||
sysvar::instructions::id().log();
|
||||
let index = instructions::load_current_index(&accounts[4].try_borrow_data()?);
|
||||
let index = instructions::load_current_index(&accounts[5].try_borrow_data()?);
|
||||
assert_eq!(0, index);
|
||||
msg!(
|
||||
"instruction {:?}",
|
||||
instructions::load_instruction_at(index as usize, &accounts[4].try_borrow_data()?)
|
||||
);
|
||||
|
||||
let due = Rent::from_account_info(&accounts[5]).unwrap().due(
|
||||
rent::DEFAULT_LAMPORTS_PER_BYTE_YEAR * rent::DEFAULT_EXEMPTION_THRESHOLD as u64,
|
||||
1,
|
||||
1.0,
|
||||
);
|
||||
assert_eq!(due, (0, true));
|
||||
// Recent Blockhashes
|
||||
{
|
||||
msg!("RecentBlockhashes identifier:");
|
||||
sysvar::recent_blockhashes::id().log();
|
||||
let recent_blockhashes = RecentBlockhashes::from_account_info(&accounts[6]).unwrap();
|
||||
assert_ne!(recent_blockhashes, RecentBlockhashes::default());
|
||||
}
|
||||
|
||||
// Rent
|
||||
{
|
||||
msg!("Rent identifier:");
|
||||
sysvar::rent::id().log();
|
||||
let rent = Rent::from_account_info(&accounts[7]).unwrap();
|
||||
assert_eq!(rent, Rent::default());
|
||||
}
|
||||
|
||||
// Slot Hashes
|
||||
msg!("SlotHashes identifier:");
|
||||
sysvar::slot_hashes::id().log();
|
||||
assert_eq!(
|
||||
Err(ProgramError::UnsupportedSysvar),
|
||||
SlotHashes::from_account_info(&accounts[6])
|
||||
SlotHashes::from_account_info(&accounts[8])
|
||||
);
|
||||
|
||||
// Slot History
|
||||
@@ -66,14 +83,13 @@ fn process_instruction(
|
||||
sysvar::slot_history::id().log();
|
||||
assert_eq!(
|
||||
Err(ProgramError::UnsupportedSysvar),
|
||||
SlotHistory::from_account_info(&accounts[7])
|
||||
SlotHistory::from_account_info(&accounts[9])
|
||||
);
|
||||
|
||||
// Stake History
|
||||
msg!("StakeHistory identifier:");
|
||||
sysvar::stake_history::id().log();
|
||||
let stake_history = StakeHistory::from_account_info(&accounts[8]).unwrap();
|
||||
assert!(stake_history.len() >= 1);
|
||||
let _ = StakeHistory::from_account_info(&accounts[10]).unwrap();
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
Reference in New Issue
Block a user