Add sigverify tests

This commit is contained in:
Greg Fitzgerald
2019-03-28 19:11:16 -06:00
parent 845ddc3496
commit 7a81f327ce
2 changed files with 49 additions and 37 deletions

View File

@ -333,14 +333,8 @@ pub fn make_packet_from_transaction(tx: Transaction) -> Packet {
mod tests { mod tests {
use crate::packet::{Packet, SharedPackets}; use crate::packet::{Packet, SharedPackets};
use crate::sigverify; use crate::sigverify;
use crate::test_tx::test_tx; use crate::test_tx::{test_multisig_tx, test_tx};
use bincode::{deserialize, serialize}; use bincode::{deserialize, serialize};
use solana_budget_api;
use solana_sdk::hash::Hash;
use solana_sdk::instruction::CompiledInstruction;
use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_instruction::SystemInstruction;
use solana_sdk::system_program;
use solana_sdk::transaction::Transaction; use solana_sdk::transaction::Transaction;
const SIG_OFFSET: usize = std::mem::size_of::<u64>() + 1; const SIG_OFFSET: usize = std::mem::size_of::<u64>() + 1;
@ -415,16 +409,27 @@ mod tests {
assert_ne!(message0a, message0b); assert_ne!(message0a, message0b);
} }
#[test] // Just like get_packet_offsets, but not returning redundant information.
fn test_get_packet_offsets() { fn get_packet_offsets_from_tx(tx: Transaction, current_offset: u32) -> (u32, u32, u32, u32) {
let tx = test_tx();
let packet = sigverify::make_packet_from_transaction(tx); let packet = sigverify::make_packet_from_transaction(tx);
let (sig_len, sig_start, msg_start_offset, pubkey_offset) = let (sig_len, sig_start, msg_start_offset, pubkey_offset) =
sigverify::get_packet_offsets(&packet, 0); sigverify::get_packet_offsets(&packet, current_offset);
assert_eq!(sig_len, 1); (
assert_eq!(sig_start, 9); sig_len,
assert_eq!(msg_start_offset, 73); sig_start - current_offset,
assert_eq!(pubkey_offset, 74); msg_start_offset - sig_start,
pubkey_offset - msg_start_offset,
)
}
#[test]
fn test_get_packet_offsets() {
assert_eq!(get_packet_offsets_from_tx(test_tx(), 0), (1, 9, 64, 1));
assert_eq!(get_packet_offsets_from_tx(test_tx(), 100), (1, 9, 64, 1));
assert_eq!(
get_packet_offsets_from_tx(test_multisig_tx(), 0),
(2, 9, 128, 1)
);
} }
fn generate_packet_vec( fn generate_packet_vec(
@ -488,30 +493,10 @@ mod tests {
} }
#[test] #[test]
fn test_verify_multi_sig() { fn test_verify_multisig() {
solana_logger::setup(); solana_logger::setup();
let keypair0 = Keypair::new();
let keypair1 = Keypair::new();
let keypairs = vec![&keypair0, &keypair1];
let lamports = 5;
let fee = 2;
let blockhash = Hash::default();
let system_instruction = SystemInstruction::Move { lamports };
let program_ids = vec![system_program::id(), solana_budget_api::id()];
let instructions = vec![CompiledInstruction::new(0, &system_instruction, vec![0, 1])];
let tx = Transaction::new_with_compiled_instructions(
&keypairs,
&[],
blockhash,
fee,
program_ids,
instructions,
);
let tx = test_multisig_tx();
let mut packet = sigverify::make_packet_from_transaction(tx); let mut packet = sigverify::make_packet_from_transaction(tx);
let n = 4; let n = 4;

View File

@ -1,5 +1,8 @@
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::instruction::CompiledInstruction;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_instruction::SystemInstruction;
use solana_sdk::system_program;
use solana_sdk::system_transaction::SystemTransaction; use solana_sdk::system_transaction::SystemTransaction;
use solana_sdk::transaction::Transaction; use solana_sdk::transaction::Transaction;
@ -9,3 +12,27 @@ pub fn test_tx() -> Transaction {
let zero = Hash::default(); let zero = Hash::default();
SystemTransaction::new_account(&keypair1, &pubkey1, 42, zero, 0) SystemTransaction::new_account(&keypair1, &pubkey1, 42, zero, 0)
} }
pub fn test_multisig_tx() -> Transaction {
let keypair0 = Keypair::new();
let keypair1 = Keypair::new();
let keypairs = vec![&keypair0, &keypair1];
let lamports = 5;
let fee = 2;
let blockhash = Hash::default();
let system_instruction = SystemInstruction::Move { lamports };
let program_ids = vec![system_program::id(), solana_budget_api::id()];
let instructions = vec![CompiledInstruction::new(0, &system_instruction, vec![0, 1])];
Transaction::new_with_compiled_instructions(
&keypairs,
&[],
blockhash,
fee,
program_ids,
instructions,
)
}