builtins.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. use {
  2. solana_keypair::Keypair,
  3. solana_loader_v3_interface::state::UpgradeableLoaderState,
  4. solana_message::{v0::Message, VersionedMessage},
  5. solana_program_test::ProgramTest,
  6. solana_pubkey::Pubkey,
  7. solana_sdk_ids::bpf_loader_upgradeable,
  8. solana_signer::Signer,
  9. solana_system_interface::instruction as system_instruction,
  10. solana_transaction::{versioned::VersionedTransaction, Transaction},
  11. };
  12. #[tokio::test]
  13. async fn test_bpf_loader_upgradeable_present() {
  14. // Arrange
  15. let (banks_client, payer, recent_blockhash) = ProgramTest::default().start().await;
  16. let buffer_keypair = Keypair::new();
  17. let upgrade_authority_keypair = Keypair::new();
  18. let rent = banks_client.get_rent().await.unwrap();
  19. let buffer_rent = rent.minimum_balance(UpgradeableLoaderState::size_of_programdata(1));
  20. let create_buffer_instructions = solana_loader_v3_interface::instruction::create_buffer(
  21. &payer.pubkey(),
  22. &buffer_keypair.pubkey(),
  23. &upgrade_authority_keypair.pubkey(),
  24. buffer_rent,
  25. 1,
  26. )
  27. .unwrap();
  28. let mut transaction =
  29. Transaction::new_with_payer(&create_buffer_instructions[..], Some(&payer.pubkey()));
  30. transaction.sign(&[&payer, &buffer_keypair], recent_blockhash);
  31. // Act
  32. banks_client.process_transaction(transaction).await.unwrap();
  33. // Assert
  34. let buffer_account = banks_client
  35. .get_account(buffer_keypair.pubkey())
  36. .await
  37. .unwrap()
  38. .unwrap();
  39. assert_eq!(buffer_account.owner, bpf_loader_upgradeable::id());
  40. }
  41. #[tokio::test]
  42. async fn versioned_transaction() {
  43. let program_test = ProgramTest::default();
  44. let context = program_test.start_with_context().await;
  45. let program_id = Pubkey::new_unique();
  46. let account = Keypair::new();
  47. let rent = context.banks_client.get_rent().await.unwrap();
  48. let space = 82;
  49. let transaction = VersionedTransaction::try_new(
  50. VersionedMessage::V0(
  51. Message::try_compile(
  52. &context.payer.pubkey(),
  53. &[system_instruction::create_account(
  54. &context.payer.pubkey(),
  55. &account.pubkey(),
  56. rent.minimum_balance(space),
  57. space as u64,
  58. &program_id,
  59. )],
  60. &[],
  61. context.last_blockhash,
  62. )
  63. .unwrap(),
  64. ),
  65. &[&context.payer, &account],
  66. )
  67. .unwrap();
  68. context
  69. .banks_client
  70. .process_transaction(transaction)
  71. .await
  72. .unwrap();
  73. }