test.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use litesvm::LiteSVM;
  2. use solana_keypair::{Keypair, Signer};
  3. use solana_native_token::LAMPORTS_PER_SOL;
  4. use solana_pubkey::Pubkey;
  5. use solana_system_interface::instruction::create_account;
  6. use solana_transaction::{AccountMeta, Instruction, Transaction};
  7. #[test]
  8. fn test_checking_accounts() {
  9. let mut svm = LiteSVM::new();
  10. let payer = Keypair::new();
  11. let account_to_change = Keypair::new();
  12. let account_to_create = Keypair::new();
  13. svm.airdrop(&payer.pubkey(), LAMPORTS_PER_SOL * 10).unwrap();
  14. let program_id = Pubkey::new_unique();
  15. let program_bytes =
  16. include_bytes!("../../../../../target/deploy/checking_accounts_native_program.so");
  17. svm.add_program(program_id, program_bytes).unwrap();
  18. let create_account_ix = create_account(
  19. &payer.pubkey(),
  20. &account_to_change.pubkey(),
  21. LAMPORTS_PER_SOL,
  22. 0,
  23. &program_id,
  24. );
  25. let tx = Transaction::new_signed_with_payer(
  26. &[create_account_ix],
  27. Some(&payer.pubkey()),
  28. &[&payer, &account_to_change],
  29. svm.latest_blockhash(),
  30. );
  31. // verify tx was sent successfully
  32. let _ = svm.send_transaction(tx).is_ok();
  33. let ix = Instruction {
  34. program_id,
  35. accounts: vec![
  36. AccountMeta::new(payer.pubkey(), true),
  37. AccountMeta::new(account_to_create.pubkey(), true),
  38. AccountMeta::new(account_to_change.pubkey(), true),
  39. AccountMeta::new(solana_system_interface::program::ID, false),
  40. ],
  41. data: vec![0],
  42. };
  43. let tx = Transaction::new_signed_with_payer(
  44. &[ix],
  45. Some(&payer.pubkey()),
  46. &[payer, account_to_change, account_to_create],
  47. svm.latest_blockhash(),
  48. );
  49. // verify tx was sent successfully
  50. let _ = svm.send_transaction(tx).is_ok();
  51. }