test.rs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. use litesvm::LiteSVM;
  2. use pda_rent_payer_program::instructions::InitRentVaultArgs;
  3. use pda_rent_payer_program::processor::MyInstruction;
  4. use solana_instruction::{AccountMeta, Instruction};
  5. use solana_keypair::{Keypair, Signer};
  6. use solana_native_token::LAMPORTS_PER_SOL;
  7. use solana_pubkey::Pubkey;
  8. use solana_transaction::Transaction;
  9. #[test]
  10. fn test_pda_rent_payer() {
  11. let program_id = Pubkey::new_unique();
  12. let program_bytes = include_bytes!("../../tests/fixtures/pda_rent_payer_program.so");
  13. let mut svm = LiteSVM::new();
  14. svm.add_program(program_id, program_bytes).unwrap();
  15. let payer = Keypair::new();
  16. svm.airdrop(&payer.pubkey(), LAMPORTS_PER_SOL * 10).unwrap();
  17. let rent_value_pda = Pubkey::find_program_address(&[b"rent_vault"], &program_id).0;
  18. let args = InitRentVaultArgs {
  19. fund_lamports: 1000000000,
  20. };
  21. let data = borsh::to_vec(&MyInstruction::InitRentVault(args)).unwrap();
  22. let ix = Instruction {
  23. program_id,
  24. accounts: vec![
  25. AccountMeta::new(rent_value_pda, false),
  26. AccountMeta::new(payer.pubkey(), true),
  27. AccountMeta::new(solana_system_interface::program::ID, false),
  28. ],
  29. data,
  30. };
  31. let tx = Transaction::new_signed_with_payer(
  32. &[ix],
  33. Some(&payer.pubkey()),
  34. &[&payer],
  35. svm.latest_blockhash(),
  36. );
  37. let _ = svm.send_transaction(tx).is_ok();
  38. let new_account = Keypair::new();
  39. let data = borsh::to_vec(&MyInstruction::CreateNewAccount).unwrap();
  40. let ix = Instruction {
  41. program_id,
  42. accounts: vec![
  43. AccountMeta::new(new_account.pubkey(), true),
  44. AccountMeta::new(rent_value_pda, false),
  45. AccountMeta::new(solana_system_interface::program::ID, false),
  46. ],
  47. data,
  48. };
  49. let tx = Transaction::new_signed_with_payer(
  50. &[ix],
  51. Some(&payer.pubkey()),
  52. &[&payer, &new_account],
  53. svm.latest_blockhash(),
  54. );
  55. let _ = svm.send_transaction(tx).is_ok();
  56. }