core_bpf.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. use {
  2. solana_instruction::Instruction,
  3. solana_program_test::{ProgramTest, ProgramTestContext},
  4. solana_pubkey::Pubkey,
  5. solana_sdk_ids::bpf_loader_upgradeable,
  6. solana_signer::Signer,
  7. solana_transaction::Transaction,
  8. };
  9. async fn assert_bpf_program(context: &ProgramTestContext, program_id: &Pubkey) {
  10. let program_account = context
  11. .banks_client
  12. .get_account(*program_id)
  13. .await
  14. .unwrap()
  15. .unwrap();
  16. assert_eq!(program_account.owner, bpf_loader_upgradeable::id());
  17. assert!(program_account.executable);
  18. }
  19. #[tokio::test]
  20. async fn test_vended_core_bpf_programs() {
  21. let program_test = ProgramTest::default();
  22. let context = program_test.start_with_context().await;
  23. assert_bpf_program(&context, &solana_sdk_ids::address_lookup_table::id()).await;
  24. assert_bpf_program(&context, &solana_sdk_ids::config::id()).await;
  25. assert_bpf_program(&context, &solana_sdk_ids::feature::id()).await;
  26. }
  27. #[tokio::test]
  28. async fn test_add_core_bpf_program_manually() {
  29. // Core BPF program: Stake.
  30. let program_id = solana_sdk_ids::stake::id();
  31. let mut program_test = ProgramTest::default();
  32. program_test.add_upgradeable_program_to_genesis("noop_program", &program_id);
  33. let context = program_test.start_with_context().await;
  34. // Assert the program is a BPF Loader Upgradeable program.
  35. assert_bpf_program(&context, &program_id).await;
  36. // Invoke the program.
  37. let instruction = Instruction::new_with_bytes(program_id, &[], Vec::new());
  38. let transaction = Transaction::new_signed_with_payer(
  39. &[instruction],
  40. Some(&context.payer.pubkey()),
  41. &[&context.payer],
  42. context.last_blockhash,
  43. );
  44. context
  45. .banks_client
  46. .process_transaction(transaction)
  47. .await
  48. .unwrap();
  49. }