From 91de3013dd6093dfda78c2a36a6aeaab11e51b12 Mon Sep 17 00:00:00 2001 From: Thomas Sauvajon Date: Mon, 25 Oct 2021 17:59:42 +0200 Subject: [PATCH] Test some validator_info error paths (#20635) * Test some validator_info error paths * Fix a linting issue * Improve test robustness by removing magic numbers --- cli/src/validator_info.rs | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/cli/src/validator_info.rs b/cli/src/validator_info.rs index 227c149eb1..8927c9a461 100644 --- a/cli/src/validator_info.rs +++ b/cli/src/validator_info.rs @@ -412,6 +412,23 @@ mod tests { use bincode::{serialize, serialized_size}; use serde_json::json; + #[test] + fn test_check_details_length() { + let short_details = (0..MAX_LONG_FIELD_LENGTH).map(|_| "X").collect::(); + assert_eq!(check_details_length(short_details), Ok(())); + + let long_details = (0..MAX_LONG_FIELD_LENGTH + 1) + .map(|_| "X") + .collect::(); + assert_eq!( + check_details_length(long_details), + Err(format!( + "validator details longer than {:?}-byte limit", + MAX_LONG_FIELD_LENGTH + )) + ); + } + #[test] fn test_check_url() { let url = "http://test.com"; @@ -430,6 +447,17 @@ mod tests { assert!(is_short_field(long_name.to_string()).is_err()); } + #[test] + fn test_verify_keybase_username_not_string() { + let pubkey = solana_sdk::pubkey::new_rand(); + let value = Value::Bool(true); + + assert_eq!( + verify_keybase(&pubkey, &value).unwrap_err().to_string(), + "keybase_username could not be parsed as String: true".to_string() + ) + } + #[test] fn test_parse_args() { let matches = get_clap_app("test", "desc", "version").get_matches_from(vec![ @@ -507,6 +535,41 @@ mod tests { ); } + #[test] + fn test_parse_validator_info_not_validator_info_account() { + assert!(parse_validator_info( + &Pubkey::default(), + &Account { + owner: solana_sdk::pubkey::new_rand(), + ..Account::default() + } + ) + .unwrap_err() + .to_string() + .contains("is not a validator info account")); + } + + #[test] + fn test_parse_validator_info_empty_key_list() { + let config = ConfigKeys { keys: vec![] }; + let validator_info = ValidatorInfo { + info: String::new(), + }; + let data = serialize(&(config, validator_info)).unwrap(); + + assert!(parse_validator_info( + &Pubkey::default(), + &Account { + owner: solana_config_program::id(), + data, + ..Account::default() + }, + ) + .unwrap_err() + .to_string() + .contains("could not be parsed as a validator info account")); + } + #[test] fn test_validator_info_max_space() { // 70-character string