test.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. use solana_program::hash::Hash;
  2. use solana_program_test::{processor, BanksClient, ProgramTest};
  3. use solana_sdk::{
  4. native_token::LAMPORTS_PER_SOL, signature::Keypair, signer::Signer,
  5. system_instruction::create_account, transaction::Transaction,
  6. };
  7. use transfer_sol_api::prelude::*;
  8. async fn setup() -> (BanksClient, Keypair, Hash) {
  9. let mut program_test = ProgramTest::new(
  10. "transfer_sol_program",
  11. transfer_sol_api::ID,
  12. processor!(transfer_sol_program::process_instruction),
  13. );
  14. program_test.prefer_bpf(true);
  15. program_test.start().await
  16. }
  17. #[tokio::test]
  18. async fn run_test() {
  19. // Setup test
  20. let (mut banks, payer, blockhash) = setup().await;
  21. let transfer_amount = LAMPORTS_PER_SOL * 1;
  22. let receiver = Keypair::new();
  23. let receiver_1 = Keypair::new();
  24. let receiver_2 = Keypair::new();
  25. // Submit add transaction.
  26. let ix = transfer_sol_with_cpi(payer.pubkey(), receiver.pubkey(), transfer_amount);
  27. let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
  28. let res = banks.process_transaction(tx).await;
  29. assert!(res.is_ok());
  30. // create two account for following test
  31. let create_receiver_1_ix = create_account(
  32. &payer.pubkey(),
  33. &receiver_1.pubkey(),
  34. 2 * LAMPORTS_PER_SOL,
  35. 0,
  36. &transfer_sol_api::ID,
  37. );
  38. let create_receiver_2_ix = create_account(
  39. &payer.pubkey(),
  40. &receiver_2.pubkey(),
  41. 2 * LAMPORTS_PER_SOL,
  42. 0,
  43. &transfer_sol_api::ID,
  44. );
  45. let tx = Transaction::new_signed_with_payer(
  46. &[create_receiver_1_ix, create_receiver_2_ix],
  47. Some(&payer.pubkey()),
  48. &[&payer, &receiver_1, &receiver_2],
  49. blockhash,
  50. );
  51. let res = banks.process_transaction(tx).await;
  52. assert!(res.is_ok());
  53. // Submit add transaction
  54. let ix = transfer_sol_with_program(receiver_1.pubkey(), receiver_2.pubkey(), transfer_amount);
  55. let tx = Transaction::new_signed_with_payer(
  56. &[ix],
  57. Some(&payer.pubkey()),
  58. &[&payer, &receiver_1],
  59. blockhash,
  60. );
  61. let res = banks.process_transaction(tx).await;
  62. assert!(res.is_ok());
  63. }