Add VoteInstruction::AuthorizeChecked test
This commit is contained in:
parent
39bac256ab
commit
b8ca2250fd
|
@ -390,6 +390,7 @@ pub fn process_instruction(
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use bincode::serialize;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
account::{self, Account, AccountSharedData},
|
account::{self, Account, AccountSharedData},
|
||||||
process_instruction::MockInvokeContext,
|
process_instruction::MockInvokeContext,
|
||||||
|
@ -398,6 +399,10 @@ mod tests {
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
fn create_default_account() -> RefCell<AccountSharedData> {
|
||||||
|
RefCell::new(AccountSharedData::default())
|
||||||
|
}
|
||||||
|
|
||||||
// these are for 100% coverage in this file
|
// these are for 100% coverage in this file
|
||||||
#[test]
|
#[test]
|
||||||
fn test_vote_process_instruction_decode_bail() {
|
fn test_vote_process_instruction_decode_bail() {
|
||||||
|
@ -538,6 +543,105 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_vote_authorize_checked() {
|
||||||
|
let vote_pubkey = Pubkey::new_unique();
|
||||||
|
let authorized_pubkey = Pubkey::new_unique();
|
||||||
|
let new_authorized_pubkey = Pubkey::new_unique();
|
||||||
|
|
||||||
|
// Test with vanilla authorize accounts
|
||||||
|
let mut instruction = authorize_checked(
|
||||||
|
&vote_pubkey,
|
||||||
|
&authorized_pubkey,
|
||||||
|
&new_authorized_pubkey,
|
||||||
|
VoteAuthorize::Voter,
|
||||||
|
);
|
||||||
|
instruction.accounts = instruction.accounts[0..2].to_vec();
|
||||||
|
assert_eq!(
|
||||||
|
process_instruction(&instruction),
|
||||||
|
Err(InstructionError::NotEnoughAccountKeys),
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut instruction = authorize_checked(
|
||||||
|
&vote_pubkey,
|
||||||
|
&authorized_pubkey,
|
||||||
|
&new_authorized_pubkey,
|
||||||
|
VoteAuthorize::Withdrawer,
|
||||||
|
);
|
||||||
|
instruction.accounts = instruction.accounts[0..2].to_vec();
|
||||||
|
assert_eq!(
|
||||||
|
process_instruction(&instruction),
|
||||||
|
Err(InstructionError::NotEnoughAccountKeys),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test with non-signing new_authorized_pubkey
|
||||||
|
let mut instruction = authorize_checked(
|
||||||
|
&vote_pubkey,
|
||||||
|
&authorized_pubkey,
|
||||||
|
&new_authorized_pubkey,
|
||||||
|
VoteAuthorize::Voter,
|
||||||
|
);
|
||||||
|
instruction.accounts[3] = AccountMeta::new_readonly(new_authorized_pubkey, false);
|
||||||
|
assert_eq!(
|
||||||
|
process_instruction(&instruction),
|
||||||
|
Err(InstructionError::MissingRequiredSignature),
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut instruction = authorize_checked(
|
||||||
|
&vote_pubkey,
|
||||||
|
&authorized_pubkey,
|
||||||
|
&new_authorized_pubkey,
|
||||||
|
VoteAuthorize::Withdrawer,
|
||||||
|
);
|
||||||
|
instruction.accounts[3] = AccountMeta::new_readonly(new_authorized_pubkey, false);
|
||||||
|
assert_eq!(
|
||||||
|
process_instruction(&instruction),
|
||||||
|
Err(InstructionError::MissingRequiredSignature),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test with new_authorized_pubkey signer
|
||||||
|
let vote_account = AccountSharedData::new_ref(100, VoteState::size_of(), &id());
|
||||||
|
let clock_address = sysvar::clock::id();
|
||||||
|
let clock_account = RefCell::new(account::create_account_shared_data_for_test(
|
||||||
|
&Clock::default(),
|
||||||
|
));
|
||||||
|
let default_authorized_pubkey = Pubkey::default();
|
||||||
|
let authorized_account = create_default_account();
|
||||||
|
let new_authorized_account = create_default_account();
|
||||||
|
let keyed_accounts = vec![
|
||||||
|
KeyedAccount::new(&vote_pubkey, false, &vote_account),
|
||||||
|
KeyedAccount::new(&clock_address, false, &clock_account),
|
||||||
|
KeyedAccount::new(&default_authorized_pubkey, true, &authorized_account),
|
||||||
|
KeyedAccount::new(&new_authorized_pubkey, true, &new_authorized_account),
|
||||||
|
];
|
||||||
|
assert_eq!(
|
||||||
|
super::process_instruction(
|
||||||
|
&Pubkey::default(),
|
||||||
|
&serialize(&VoteInstruction::AuthorizeChecked(VoteAuthorize::Voter)).unwrap(),
|
||||||
|
&mut MockInvokeContext::new(keyed_accounts)
|
||||||
|
),
|
||||||
|
Ok(())
|
||||||
|
);
|
||||||
|
|
||||||
|
let keyed_accounts = vec![
|
||||||
|
KeyedAccount::new(&vote_pubkey, false, &vote_account),
|
||||||
|
KeyedAccount::new(&clock_address, false, &clock_account),
|
||||||
|
KeyedAccount::new(&default_authorized_pubkey, true, &authorized_account),
|
||||||
|
KeyedAccount::new(&new_authorized_pubkey, true, &new_authorized_account),
|
||||||
|
];
|
||||||
|
assert_eq!(
|
||||||
|
super::process_instruction(
|
||||||
|
&Pubkey::default(),
|
||||||
|
&serialize(&VoteInstruction::AuthorizeChecked(
|
||||||
|
VoteAuthorize::Withdrawer
|
||||||
|
))
|
||||||
|
.unwrap(),
|
||||||
|
&mut MockInvokeContext::new(keyed_accounts)
|
||||||
|
),
|
||||||
|
Ok(())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_minimum_balance() {
|
fn test_minimum_balance() {
|
||||||
let rent = solana_sdk::rent::Rent::default();
|
let rent = solana_sdk::rent::Rent::default();
|
||||||
|
|
Loading…
Reference in New Issue