use { solana_account_info::AccountInfo, solana_instruction::{error::InstructionError, Instruction}, solana_program_error::ProgramResult, solana_program_test::{processor, ProgramTest}, solana_pubkey::Pubkey, solana_signer::Signer, solana_transaction::Transaction, solana_transaction_error::TransactionError, }; fn panic(_program_id: &Pubkey, _accounts: &[AccountInfo], _input: &[u8]) -> ProgramResult { panic!("I panicked"); } #[tokio::test] async fn panic_test() { let program_id = Pubkey::new_unique(); let program_test = ProgramTest::new("panic", program_id, processor!(panic)); let context = program_test.start_with_context().await; let instruction = Instruction::new_with_bytes(program_id, &[], vec![]); let transaction = Transaction::new_signed_with_payer( &[instruction], Some(&context.payer.pubkey()), &[&context.payer], context.last_blockhash, ); assert_eq!( context .banks_client .process_transaction(transaction) .await .unwrap_err() .unwrap(), TransactionError::InstructionError(0, InstructionError::ProgramFailedToComplete) ); }