solana/program-test/tests/spl.rs

66 lines
2.2 KiB
Rust

use {
solana_program_test::{programs::spl_programs, ProgramTest},
solana_sdk::{
bpf_loader, bpf_loader_upgradeable,
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
signature::Signer,
signer::keypair::Keypair,
system_instruction,
sysvar::rent,
transaction::Transaction,
},
};
#[tokio::test]
async fn programs_present() {
let (mut banks_client, _, _) = ProgramTest::default().start().await;
let rent = banks_client.get_rent().await.unwrap();
let token_2022_id = Pubkey::try_from("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb").unwrap();
let (token_2022_programdata_id, _) =
Pubkey::find_program_address(&[token_2022_id.as_ref()], &bpf_loader_upgradeable::id());
for (program_id, _) in spl_programs(&rent) {
let program_account = banks_client.get_account(program_id).await.unwrap().unwrap();
if program_id == token_2022_id || program_id == token_2022_programdata_id {
assert_eq!(program_account.owner, bpf_loader_upgradeable::id());
} else {
assert_eq!(program_account.owner, bpf_loader::id());
}
}
}
#[tokio::test]
async fn token_2022() {
let (mut banks_client, payer, recent_blockhash) = ProgramTest::default().start().await;
let token_2022_id = Pubkey::try_from("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb").unwrap();
let mint = Keypair::new();
let rent = banks_client.get_rent().await.unwrap();
let space = 82;
let transaction = Transaction::new_signed_with_payer(
&[
system_instruction::create_account(
&payer.pubkey(),
&mint.pubkey(),
rent.minimum_balance(space),
space as u64,
&token_2022_id,
),
Instruction::new_with_bytes(
token_2022_id,
&[0; 35], // initialize mint
vec![
AccountMeta::new(mint.pubkey(), false),
AccountMeta::new_readonly(rent::id(), false),
],
),
],
Some(&payer.pubkey()),
&[&payer, &mint],
recent_blockhash,
);
banks_client.process_transaction(transaction).await.unwrap();
}