1
0

initialize_multisig2.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. mod setup;
  2. use setup::TOKEN_PROGRAM_ID;
  3. use solana_program_test::{tokio, ProgramTest};
  4. use solana_sdk::{
  5. program_pack::Pack,
  6. pubkey::Pubkey,
  7. signature::{Keypair, Signer},
  8. system_instruction,
  9. transaction::Transaction,
  10. };
  11. use spl_token::state::Multisig;
  12. #[test_case::test_case(TOKEN_PROGRAM_ID ; "p-token")]
  13. #[tokio::test]
  14. async fn initialize_multisig2(token_program: Pubkey) {
  15. let context = ProgramTest::new("pinocchio_token_program", TOKEN_PROGRAM_ID, None)
  16. .start_with_context()
  17. .await;
  18. // Given an account
  19. let multisig = Keypair::new();
  20. let signer1 = Pubkey::new_unique();
  21. let signer2 = Pubkey::new_unique();
  22. let signer3 = Pubkey::new_unique();
  23. let signers = vec![&signer1, &signer2, &signer3];
  24. let rent = context.banks_client.get_rent().await.unwrap();
  25. let mut initialize_ix = spl_token::instruction::initialize_multisig2(
  26. &spl_token::ID,
  27. &multisig.pubkey(),
  28. &signers,
  29. 2,
  30. )
  31. .unwrap();
  32. // Switches the program id to the token program.
  33. initialize_ix.program_id = token_program;
  34. // When a new multisig account is created and initialized.
  35. let instructions = vec![
  36. system_instruction::create_account(
  37. &context.payer.pubkey(),
  38. &multisig.pubkey(),
  39. rent.minimum_balance(Multisig::LEN),
  40. Multisig::LEN as u64,
  41. &token_program,
  42. ),
  43. initialize_ix,
  44. ];
  45. let tx = Transaction::new_signed_with_payer(
  46. &instructions,
  47. Some(&context.payer.pubkey()),
  48. &[&context.payer, &multisig],
  49. context.last_blockhash,
  50. );
  51. context.banks_client.process_transaction(tx).await.unwrap();
  52. // Then the multisig has the correct data.
  53. let account = context
  54. .banks_client
  55. .get_account(multisig.pubkey())
  56. .await
  57. .unwrap();
  58. assert!(account.is_some());
  59. let account = account.unwrap();
  60. let multisig = spl_token::state::Multisig::unpack(&account.data).unwrap();
  61. assert!(multisig.is_initialized);
  62. assert_eq!(multisig.n, 3);
  63. assert_eq!(multisig.m, 2);
  64. }