From 4cfb3dcc7be580a3f31c9d33de352c62ef77bd06 Mon Sep 17 00:00:00 2001 From: "Sebastian.Bor" Date: Tue, 4 May 2021 12:26:13 +0100 Subject: [PATCH] fix: add bpf_loader_upgradeable to ProgramTest default builtins (cherry picked from commit 4ede5117f963bcd4c7ca5ef06a7230e37a09e834) --- program-test/src/lib.rs | 1 + program-test/tests/builtins.rs | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 program-test/tests/builtins.rs diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index c221a02db9..526452d9e3 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -689,6 +689,7 @@ impl ProgramTest { for loader in &[ solana_bpf_loader_deprecated_program!(), solana_bpf_loader_program!(), + solana_bpf_loader_upgradeable_program!(), ] { bank.add_builtin(&loader.0, loader.1, loader.2); } diff --git a/program-test/tests/builtins.rs b/program-test/tests/builtins.rs new file mode 100644 index 0000000000..4e44d5e769 --- /dev/null +++ b/program-test/tests/builtins.rs @@ -0,0 +1,46 @@ +use solana_sdk::{ + bpf_loader_upgradeable::{self, UpgradeableLoaderState}, + signature::Keypair, +}; + +use { + solana_program_test::ProgramTest, + solana_sdk::{signature::Signer, transaction::Transaction}, +}; + +#[tokio::test] +async fn test_bpf_loader_upgradable_present() { + // Arrange + let (mut banks_client, payer, recent_blockhash) = ProgramTest::default().start().await; + + let buffer_keypair = Keypair::new(); + let upgrade_authority_keypair = Keypair::new(); + + let rent = banks_client.get_rent().await.unwrap(); + let buffer_rent = rent.minimum_balance(UpgradeableLoaderState::programdata_len(1).unwrap()); + + let create_buffer_instructions = bpf_loader_upgradeable::create_buffer( + &payer.pubkey(), + &buffer_keypair.pubkey(), + &upgrade_authority_keypair.pubkey(), + buffer_rent, + 1, + ) + .unwrap(); + + let mut transaction = + Transaction::new_with_payer(&create_buffer_instructions[..], Some(&payer.pubkey())); + transaction.sign(&[&payer, &buffer_keypair], recent_blockhash); + + // Act + banks_client.process_transaction(transaction).await.unwrap(); + + // Assert + let buffer_account = banks_client + .get_account(buffer_keypair.pubkey()) + .await + .unwrap() + .unwrap(); + + assert_eq!(buffer_account.owner, bpf_loader_upgradeable::id()); +}