anchor/tests/zero-copy/programs/zero-copy/tests/compute_unit_test.rs

71 lines
1.9 KiB
Rust

#![cfg(feature = "test-bpf")]
use {
anchor_client::{
anchor_lang::Discriminator,
solana_sdk::{
account::Account,
commitment_config::CommitmentConfig,
pubkey::Pubkey,
signature::{Keypair, Signer},
transaction::Transaction,
},
Client, Cluster,
},
solana_program_test::{tokio, ProgramTest},
std::rc::Rc,
};
#[tokio::test]
async fn update_foo() {
let authority = Keypair::new();
let foo_pubkey = Pubkey::new_unique();
let foo_account = {
let mut foo_data = Vec::new();
foo_data.extend_from_slice(&zero_copy::Foo::discriminator());
foo_data.extend_from_slice(bytemuck::bytes_of(&zero_copy::Foo {
authority: authority.pubkey(),
..zero_copy::Foo::default()
}));
Account {
lamports: 1,
data: foo_data,
owner: zero_copy::id(),
..Account::default()
}
};
let mut pt = ProgramTest::new("zero_copy", zero_copy::id(), None);
pt.add_account(foo_pubkey, foo_account);
pt.set_compute_max_units(3157);
let (mut banks_client, payer, recent_blockhash) = pt.start().await;
let client = Client::new_with_options(
Cluster::Debug,
Rc::new(Keypair::new()),
CommitmentConfig::processed(),
);
let program = client.program(zero_copy::id());
let update_ix = program
.request()
.accounts(zero_copy::accounts::UpdateFoo {
foo: foo_pubkey,
authority: authority.pubkey(),
})
.args(zero_copy::instruction::UpdateFoo { data: 1u64 })
.instructions()
.unwrap()
.pop()
.unwrap();
let transaction = Transaction::new_signed_with_payer(
&[update_ix],
Some(&payer.pubkey()),
&[&payer, &authority],
recent_blockhash,
);
banks_client.process_transaction(transaction).await.unwrap();
}