Add some unit-tests
This commit is contained in:
		| @@ -192,6 +192,7 @@ pub fn execute_transaction( | |||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| mod tests { | mod tests { | ||||||
|     use super::*; |     use super::*; | ||||||
|  |     use solana_sdk::signature::{Keypair, KeypairUtil}; | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_has_duplicates() { |     fn test_has_duplicates() { | ||||||
| @@ -221,4 +222,50 @@ mod tests { | |||||||
|         // This panics, because it assumes bounds validation is done elsewhere. |         // This panics, because it assumes bounds validation is done elsewhere. | ||||||
|         get_subset_unchecked_mut(&mut [7, 8], &[2]); |         get_subset_unchecked_mut(&mut [7, 8], &[2]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_verify_instruction_change_program_id() { | ||||||
|  |         fn change_program_id(ix: Pubkey, pre: Pubkey, post: Pubkey) -> Result<(), ProgramError> { | ||||||
|  |             verify_instruction(&ix, &pre, 0, &[], &Account::new(0, 0, post)) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         let system_program_id = system_program::id(); | ||||||
|  |         let alice_program_id = Keypair::new().pubkey(); | ||||||
|  |         let mallory_program_id = Keypair::new().pubkey(); | ||||||
|  |  | ||||||
|  |         assert_eq!( | ||||||
|  |             change_program_id(system_program_id, system_program_id, alice_program_id), | ||||||
|  |             Ok(()), | ||||||
|  |             "system program should be able to change the account owner" | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             change_program_id(mallory_program_id, system_program_id, alice_program_id), | ||||||
|  |             Err(ProgramError::ModifiedProgramId), | ||||||
|  |             "malicious Mallory should not be able to change the account owner" | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_verify_instruction_change_userdata() { | ||||||
|  |         fn change_userdata(program_id: Pubkey) -> Result<(), ProgramError> { | ||||||
|  |             let alice_program_id = Keypair::new().pubkey(); | ||||||
|  |             let account = Account::new(0, 0, alice_program_id); | ||||||
|  |             verify_instruction(&program_id, &alice_program_id, 0, &[42], &account) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         let system_program_id = system_program::id(); | ||||||
|  |         let mallory_program_id = Keypair::new().pubkey(); | ||||||
|  |  | ||||||
|  |         assert_eq!( | ||||||
|  |             change_userdata(system_program_id), | ||||||
|  |             Ok(()), | ||||||
|  |             "system program should be able to change the userdata" | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             change_userdata(mallory_program_id), | ||||||
|  |             Err(ProgramError::ExternalAccountUserdataModified), | ||||||
|  |             "malicious Mallory should not be able to change the account userdata" | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user