tests.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use account_data_native_program::state::AddressInfo;
  2. use borsh::BorshDeserialize;
  3. use litesvm::LiteSVM;
  4. use solana_keypair::Keypair;
  5. use solana_message::{AccountMeta, Instruction};
  6. use solana_native_token::LAMPORTS_PER_SOL;
  7. use solana_pubkey::Pubkey;
  8. use solana_signer::Signer;
  9. use solana_transaction::Transaction;
  10. #[test]
  11. fn test_account_data() {
  12. let mut svm = LiteSVM::new();
  13. let address_info_account = Keypair::new();
  14. let payer = Keypair::new();
  15. let program_id = Pubkey::new_unique();
  16. svm.airdrop(&payer.pubkey(), LAMPORTS_PER_SOL * 10).unwrap();
  17. let program_bytes = include_bytes!("../../tests/fixtures/account_data_native_program.so");
  18. svm.add_program(program_id, program_bytes).unwrap();
  19. let accounts = vec![
  20. AccountMeta::new(address_info_account.pubkey(), true),
  21. AccountMeta::new(payer.pubkey(), true),
  22. AccountMeta::new(solana_system_interface::program::ID, false),
  23. ];
  24. let data = AddressInfo::new(
  25. "Joe C".to_string(),
  26. 136,
  27. "Mile High Dr.".to_string(),
  28. "Solana Beach".to_string(),
  29. );
  30. let ix = Instruction {
  31. program_id,
  32. accounts,
  33. data: borsh::to_vec(&data).unwrap(),
  34. };
  35. let tx = Transaction::new_signed_with_payer(
  36. &[ix],
  37. Some(&payer.pubkey()),
  38. &[&payer, &address_info_account],
  39. svm.latest_blockhash(),
  40. );
  41. assert!(svm.send_transaction(tx).is_ok());
  42. let address_info_account_data = &svm
  43. .get_account(&address_info_account.pubkey())
  44. .unwrap()
  45. .data;
  46. let serialized_data = AddressInfo::try_from_slice(address_info_account_data).unwrap();
  47. assert_eq!(serialized_data.name, data.name);
  48. assert_eq!(serialized_data.house_number, data.house_number);
  49. assert_eq!(serialized_data.street, data.street);
  50. assert_eq!(serialized_data.city, data.city);
  51. }