diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 2d93ed03d6..07afc1fec6 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -2717,6 +2717,8 @@ name = "solana-bpf-rust-sanity" version = "1.8.0" dependencies = [ "solana-program 1.8.0", + "solana-program-test", + "solana-sdk", ] [[package]] diff --git a/programs/bpf/rust/sanity/Cargo.toml b/programs/bpf/rust/sanity/Cargo.toml index 55721e381f..39d34fcac3 100644 --- a/programs/bpf/rust/sanity/Cargo.toml +++ b/programs/bpf/rust/sanity/Cargo.toml @@ -9,11 +9,18 @@ homepage = "https://solana.com/" documentation = "https://docs.rs/solana-bpf-rust-sanity" edition = "2018" +[features] +test-bpf = [] + [dependencies] solana-program = { path = "../../../../sdk/program", version = "=1.8.0" } +[dev-dependencies] +solana-program-test = { path = "../../../../program-test", version = "=1.8.0" } +solana-sdk = { path = "../../../../sdk", version = "=1.8.0" } + [lib] -crate-type = ["cdylib"] +crate-type = ["cdylib", "lib"] [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/programs/bpf/rust/sanity/src/lib.rs b/programs/bpf/rust/sanity/src/lib.rs index e4de55f891..578be79e02 100644 --- a/programs/bpf/rust/sanity/src/lib.rs +++ b/programs/bpf/rust/sanity/src/lib.rs @@ -22,7 +22,7 @@ fn return_sstruct() -> SStruct { entrypoint!(process_instruction); #[allow(clippy::unnecessary_wraps)] -fn process_instruction( +pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], instruction_data: &[u8], diff --git a/programs/bpf/rust/sanity/tests/lib.rs b/programs/bpf/rust/sanity/tests/lib.rs new file mode 100644 index 0000000000..f41f5ab1ce --- /dev/null +++ b/programs/bpf/rust/sanity/tests/lib.rs @@ -0,0 +1,35 @@ +#![cfg(feature = "test-bpf")] + +use solana_bpf_rust_sanity::process_instruction; +use solana_program_test::*; +use solana_sdk::{ + instruction::{AccountMeta, Instruction}, + pubkey::Pubkey, + signature::{Keypair, Signer}, + transaction::Transaction, +}; + +#[tokio::test] +async fn test_sysvars() { + let program_id = Pubkey::new_unique(); + let program_test = ProgramTest::new( + "solana_bpf_rust_sanity", + program_id, + processor!(process_instruction), + ); + let (mut banks_client, payer_keypair, recent_blockhash) = program_test.start().await; + + let mut transaction = Transaction::new_with_payer( + &[Instruction::new_with_bincode( + program_id, + &(), + vec![ + AccountMeta::new(payer_keypair.pubkey(), true), + AccountMeta::new(Keypair::new().pubkey(), false), + ], + )], + Some(&payer_keypair.pubkey()), + ); + transaction.sign(&[&payer_keypair], recent_blockhash); + banks_client.process_transaction(transaction).await.unwrap(); +} diff --git a/programs/bpf/rust/sysvar/tests/lib.rs b/programs/bpf/rust/sysvar/tests/lib.rs index ac378f8bdf..879bd45539 100644 --- a/programs/bpf/rust/sysvar/tests/lib.rs +++ b/programs/bpf/rust/sysvar/tests/lib.rs @@ -1,11 +1,13 @@ use solana_bpf_rust_sysvar::process_instruction; use solana_program_test::*; -use solana_sdk::sysvar::recent_blockhashes; use solana_sdk::{ instruction::{AccountMeta, Instruction}, pubkey::Pubkey, signature::Signer, - sysvar::{clock, epoch_schedule, instructions, rent, slot_hashes, slot_history, stake_history}, + sysvar::{ + clock, epoch_schedule, instructions, recent_blockhashes, rent, slot_hashes, slot_history, + stake_history, + }, transaction::Transaction, }; diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index 42ef572e04..781bd1fe61 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -1335,7 +1335,7 @@ fn assert_instruction_count() { ("solana_bpf_rust_noop", 478), ("solana_bpf_rust_param_passing", 46), ("solana_bpf_rust_rand", 481), - ("solana_bpf_rust_sanity", 907), + ("solana_bpf_rust_sanity", 922), ("solana_bpf_rust_secp256k1_recover", 301), ("solana_bpf_rust_sha", 32337), ]);