This will allow BankClient to spin up a thread to use the Bank. It'll also ease the transaction from BankClient to ThinClient since it won't let you depend on Bank. Drawback, you the transition from Bank to BankClient will be harder because the Bank methods are inaccessible.
30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
use solana_runtime::bank::Bank;
|
|
use solana_runtime::bank_client::BankClient;
|
|
use solana_runtime::loader_utils::{create_invoke_instruction, load_program};
|
|
use solana_sdk::client::SyncClient;
|
|
use solana_sdk::genesis_block::GenesisBlock;
|
|
use solana_sdk::instruction::InstructionError;
|
|
use solana_sdk::native_loader;
|
|
use solana_sdk::signature::KeypairUtil;
|
|
use solana_sdk::transaction::TransactionError;
|
|
|
|
#[test]
|
|
fn test_program_native_failure() {
|
|
let (genesis_block, alice_keypair) = GenesisBlock::new(50);
|
|
let bank = Bank::new(&genesis_block);
|
|
let bank_client = BankClient::new(bank);
|
|
|
|
let program = "solana_failure_program".as_bytes().to_vec();
|
|
let program_id = load_program(&bank_client, &alice_keypair, &native_loader::id(), program);
|
|
|
|
// Call user program
|
|
let instruction = create_invoke_instruction(alice_keypair.pubkey(), program_id, &1u8);
|
|
assert_eq!(
|
|
bank_client
|
|
.send_instruction(&alice_keypair, instruction)
|
|
.unwrap_err()
|
|
.unwrap(),
|
|
TransactionError::InstructionError(0, InstructionError::GenericError)
|
|
);
|
|
}
|