Move top-level native program tests to their respective crates
This commit is contained in:
parent
037fcf6b3d
commit
b830449f23
|
@ -2091,6 +2091,7 @@ name = "solana-failure"
|
||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"solana-runtime 0.12.0",
|
||||||
"solana-sdk 0.12.0",
|
"solana-sdk 0.12.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -2211,6 +2212,7 @@ version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.0",
|
"solana-logger 0.12.0",
|
||||||
|
"solana-runtime 0.12.0",
|
||||||
"solana-sdk 0.12.0",
|
"solana-sdk 0.12.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -2220,11 +2222,8 @@ version = "0.12.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"solana 0.12.0",
|
"solana 0.12.0",
|
||||||
"solana-bpfloader 0.12.0",
|
"solana-bpfloader 0.12.0",
|
||||||
"solana-failure 0.12.0",
|
|
||||||
"solana-logger 0.12.0",
|
"solana-logger 0.12.0",
|
||||||
"solana-native-loader 0.12.0",
|
"solana-native-loader 0.12.0",
|
||||||
"solana-noop 0.12.0",
|
|
||||||
"solana-runtime 0.12.0",
|
|
||||||
"solana-sdk 0.12.0",
|
"solana-sdk 0.12.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,4 @@ solana = { path = "../core", version = "0.12.0" }
|
||||||
solana-bpfloader = { path = "bpf_loader", version = "0.12.0" }
|
solana-bpfloader = { path = "bpf_loader", version = "0.12.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.0" }
|
solana-logger = { path = "../logger", version = "0.12.0" }
|
||||||
solana-native-loader = { path = "native_loader", version = "0.12.0" }
|
solana-native-loader = { path = "native_loader", version = "0.12.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.12.0" }
|
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.0" }
|
solana-sdk = { path = "../sdk", version = "0.12.0" }
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
solana-noop = { path = "noop", version = "0.12.0" }
|
|
||||||
solana-failure = { path = "failure", version = "0.12.0" }
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ edition = "2018"
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.0" }
|
solana-sdk = { path = "../../sdk", version = "0.12.0" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
solana-runtime = { path = "../../runtime", version = "0.12.0" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "failure"
|
name = "failure"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
use solana_runtime::bank::Bank;
|
||||||
|
use solana_runtime::bank::BankError;
|
||||||
|
use solana_runtime::loader_utils::load_program;
|
||||||
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
|
use solana_sdk::native_loader;
|
||||||
|
use solana_sdk::native_program::ProgramError;
|
||||||
|
use solana_sdk::transaction::Transaction;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_program_native_failure() {
|
||||||
|
let (genesis_block, mint_keypair) = GenesisBlock::new(50);
|
||||||
|
let bank = Bank::new(&genesis_block);
|
||||||
|
|
||||||
|
let program = "failure".as_bytes().to_vec();
|
||||||
|
let program_id = load_program(&bank, &mint_keypair, native_loader::id(), program);
|
||||||
|
|
||||||
|
// Call user program
|
||||||
|
let tx = Transaction::new(
|
||||||
|
&mint_keypair,
|
||||||
|
&[],
|
||||||
|
program_id,
|
||||||
|
&1u8,
|
||||||
|
bank.last_blockhash(),
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
bank.process_transaction(&tx),
|
||||||
|
Err(BankError::ProgramError(0, ProgramError::GenericError))
|
||||||
|
);
|
||||||
|
}
|
|
@ -13,6 +13,9 @@ solana-sdk = { path = "../../sdk", version = "0.12.0" }
|
||||||
solana-logger = { path = "../../logger", version = "0.12.0" }
|
solana-logger = { path = "../../logger", version = "0.12.0" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
solana-runtime = { path = "../../runtime", version = "0.12.0" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "noop"
|
name = "noop"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
use solana_runtime::bank::Bank;
|
||||||
|
use solana_runtime::loader_utils::load_program;
|
||||||
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
|
use solana_sdk::native_loader;
|
||||||
|
use solana_sdk::transaction::Transaction;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_program_native_noop() {
|
||||||
|
solana_logger::setup();
|
||||||
|
|
||||||
|
let (genesis_block, mint_keypair) = GenesisBlock::new(50);
|
||||||
|
let bank = Bank::new(&genesis_block);
|
||||||
|
|
||||||
|
let program = "noop".as_bytes().to_vec();
|
||||||
|
let program_id = load_program(&bank, &mint_keypair, native_loader::id(), program);
|
||||||
|
|
||||||
|
// Call user program
|
||||||
|
let tx = Transaction::new(
|
||||||
|
&mint_keypair,
|
||||||
|
&[],
|
||||||
|
program_id,
|
||||||
|
&1u8,
|
||||||
|
bank.last_blockhash(),
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
bank.process_transaction(&tx).unwrap();
|
||||||
|
assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(())));
|
||||||
|
}
|
|
@ -1,99 +1,3 @@
|
||||||
use solana_runtime::bank::Bank;
|
|
||||||
use solana_runtime::bank::BankError;
|
|
||||||
use solana_sdk::genesis_block::GenesisBlock;
|
|
||||||
use solana_sdk::loader_transaction::LoaderTransaction;
|
|
||||||
use solana_sdk::native_loader;
|
|
||||||
use solana_sdk::native_program::ProgramError;
|
|
||||||
use solana_sdk::pubkey::Pubkey;
|
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
|
||||||
use solana_sdk::system_transaction::SystemTransaction;
|
|
||||||
use solana_sdk::transaction::Transaction;
|
|
||||||
|
|
||||||
fn load_program(bank: &Bank, from: &Keypair, loader_id: Pubkey, program: Vec<u8>) -> Pubkey {
|
|
||||||
let program_account = Keypair::new();
|
|
||||||
|
|
||||||
let tx = SystemTransaction::new_program_account(
|
|
||||||
from,
|
|
||||||
program_account.pubkey(),
|
|
||||||
bank.last_blockhash(),
|
|
||||||
1,
|
|
||||||
program.len() as u64,
|
|
||||||
loader_id,
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
bank.process_transaction(&tx).unwrap();
|
|
||||||
assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(())));
|
|
||||||
|
|
||||||
let chunk_size = 256; // Size of chunk just needs to fit into tx
|
|
||||||
let mut offset = 0;
|
|
||||||
for chunk in program.chunks(chunk_size) {
|
|
||||||
let tx = LoaderTransaction::new_write(
|
|
||||||
&program_account,
|
|
||||||
loader_id,
|
|
||||||
offset,
|
|
||||||
chunk.to_vec(),
|
|
||||||
bank.last_blockhash(),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
bank.process_transaction(&tx).unwrap();
|
|
||||||
offset += chunk_size as u32;
|
|
||||||
}
|
|
||||||
|
|
||||||
let tx = LoaderTransaction::new_finalize(&program_account, loader_id, bank.last_blockhash(), 0);
|
|
||||||
bank.process_transaction(&tx).unwrap();
|
|
||||||
assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(())));
|
|
||||||
|
|
||||||
program_account.pubkey()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_program_native_noop() {
|
|
||||||
solana_logger::setup();
|
|
||||||
|
|
||||||
let (genesis_block, mint_keypair) = GenesisBlock::new(50);
|
|
||||||
let bank = Bank::new(&genesis_block);
|
|
||||||
|
|
||||||
let program = "noop".as_bytes().to_vec();
|
|
||||||
let program_id = load_program(&bank, &mint_keypair, native_loader::id(), program);
|
|
||||||
|
|
||||||
// Call user program
|
|
||||||
let tx = Transaction::new(
|
|
||||||
&mint_keypair,
|
|
||||||
&[],
|
|
||||||
program_id,
|
|
||||||
&1u8,
|
|
||||||
bank.last_blockhash(),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
bank.process_transaction(&tx).unwrap();
|
|
||||||
assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(())));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_program_native_failure() {
|
|
||||||
solana_logger::setup();
|
|
||||||
|
|
||||||
let (genesis_block, mint_keypair) = GenesisBlock::new(50);
|
|
||||||
let bank = Bank::new(&genesis_block);
|
|
||||||
|
|
||||||
let program = "failure".as_bytes().to_vec();
|
|
||||||
let program_id = load_program(&bank, &mint_keypair, native_loader::id(), program);
|
|
||||||
|
|
||||||
// Call user program
|
|
||||||
let tx = Transaction::new(
|
|
||||||
&mint_keypair,
|
|
||||||
&[],
|
|
||||||
program_id,
|
|
||||||
&1u8,
|
|
||||||
bank.last_blockhash(),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
bank.process_transaction(&tx),
|
|
||||||
Err(BankError::ProgramError(0, ProgramError::GenericError))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bpf_c")]
|
#[cfg(feature = "bpf_c")]
|
||||||
use solana_sdk::bpf_loader;
|
use solana_sdk::bpf_loader;
|
||||||
#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))]
|
#[cfg(any(feature = "bpf_c", feature = "bpf_rust"))]
|
||||||
|
|
|
@ -3,6 +3,7 @@ pub mod appendvec;
|
||||||
pub mod bank;
|
pub mod bank;
|
||||||
pub mod bloom;
|
pub mod bloom;
|
||||||
mod hash_queue;
|
mod hash_queue;
|
||||||
|
pub mod loader_utils;
|
||||||
mod runtime;
|
mod runtime;
|
||||||
mod status_cache;
|
mod status_cache;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue