87 lines
2.5 KiB
Rust
87 lines
2.5 KiB
Rust
|
use {
|
||
|
assert_matches::assert_matches,
|
||
|
rand::thread_rng,
|
||
|
solana_program_test::*,
|
||
|
solana_sdk::{
|
||
|
ed25519_instruction::new_ed25519_instruction,
|
||
|
feature_set,
|
||
|
signature::Signer,
|
||
|
transaction::{Transaction, TransactionError},
|
||
|
},
|
||
|
};
|
||
|
|
||
|
#[tokio::test]
|
||
|
async fn test_success() {
|
||
|
let mut context = ProgramTest::default().start_with_context().await;
|
||
|
|
||
|
let client = &mut context.banks_client;
|
||
|
let payer = &context.payer;
|
||
|
let recent_blockhash = context.last_blockhash;
|
||
|
|
||
|
let privkey = ed25519_dalek::Keypair::generate(&mut thread_rng());
|
||
|
let message_arr = b"hello";
|
||
|
let instruction = new_ed25519_instruction(&privkey, message_arr);
|
||
|
|
||
|
let transaction = Transaction::new_signed_with_payer(
|
||
|
&[instruction],
|
||
|
Some(&payer.pubkey()),
|
||
|
&[payer],
|
||
|
recent_blockhash,
|
||
|
);
|
||
|
|
||
|
assert_matches!(client.process_transaction(transaction).await, Ok(()));
|
||
|
}
|
||
|
|
||
|
#[tokio::test]
|
||
|
async fn test_failure() {
|
||
|
let mut context = ProgramTest::default().start_with_context().await;
|
||
|
|
||
|
let client = &mut context.banks_client;
|
||
|
let payer = &context.payer;
|
||
|
let recent_blockhash = context.last_blockhash;
|
||
|
|
||
|
let privkey = ed25519_dalek::Keypair::generate(&mut thread_rng());
|
||
|
let message_arr = b"hello";
|
||
|
let mut instruction = new_ed25519_instruction(&privkey, message_arr);
|
||
|
|
||
|
instruction.data[0] += 1;
|
||
|
|
||
|
let transaction = Transaction::new_signed_with_payer(
|
||
|
&[instruction],
|
||
|
Some(&payer.pubkey()),
|
||
|
&[payer],
|
||
|
recent_blockhash,
|
||
|
);
|
||
|
|
||
|
assert_matches!(
|
||
|
client.process_transaction(transaction).await,
|
||
|
Err(BanksClientError::TransactionError(
|
||
|
TransactionError::InvalidAccountIndex
|
||
|
))
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[tokio::test]
|
||
|
async fn test_success_call_builtin_program() {
|
||
|
let mut program_test = ProgramTest::default();
|
||
|
program_test.deactivate_feature(feature_set::prevent_calling_precompiles_as_programs::id());
|
||
|
let mut context = program_test.start_with_context().await;
|
||
|
|
||
|
let client = &mut context.banks_client;
|
||
|
let payer = &context.payer;
|
||
|
let recent_blockhash = context.last_blockhash;
|
||
|
|
||
|
let privkey = ed25519_dalek::Keypair::generate(&mut thread_rng());
|
||
|
let message_arr = b"hello";
|
||
|
let instruction = new_ed25519_instruction(&privkey, message_arr);
|
||
|
|
||
|
let transaction = Transaction::new_signed_with_payer(
|
||
|
&[instruction],
|
||
|
Some(&payer.pubkey()),
|
||
|
&[payer],
|
||
|
recent_blockhash,
|
||
|
);
|
||
|
|
||
|
assert_matches!(client.process_transaction(transaction).await, Ok(()));
|
||
|
}
|