panic.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. use {
  2. solana_account_info::AccountInfo,
  3. solana_instruction::{error::InstructionError, Instruction},
  4. solana_program_error::ProgramResult,
  5. solana_program_test::{processor, ProgramTest},
  6. solana_pubkey::Pubkey,
  7. solana_signer::Signer,
  8. solana_transaction::Transaction,
  9. solana_transaction_error::TransactionError,
  10. };
  11. fn panic(_program_id: &Pubkey, _accounts: &[AccountInfo], _input: &[u8]) -> ProgramResult {
  12. panic!("I panicked");
  13. }
  14. #[tokio::test]
  15. async fn panic_test() {
  16. let program_id = Pubkey::new_unique();
  17. let program_test = ProgramTest::new("panic", program_id, processor!(panic));
  18. let context = program_test.start_with_context().await;
  19. let instruction = Instruction::new_with_bytes(program_id, &[], vec![]);
  20. let transaction = Transaction::new_signed_with_payer(
  21. &[instruction],
  22. Some(&context.payer.pubkey()),
  23. &[&context.payer],
  24. context.last_blockhash,
  25. );
  26. assert_eq!(
  27. context
  28. .banks_client
  29. .process_transaction(transaction)
  30. .await
  31. .unwrap_err()
  32. .unwrap(),
  33. TransactionError::InstructionError(0, InstructionError::ProgramFailedToComplete)
  34. );
  35. }