Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
Improve missing default filepath signer error messaging
Browse files Browse the repository at this point in the history
  • Loading branch information
t-nelson committed May 28, 2021
1 parent 0916ba5 commit f7b300d
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 58 deletions.
48 changes: 46 additions & 2 deletions clap-utils/src/keypair.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ use {
},
},
std::{
cell::RefCell,
convert::TryFrom,
error,
io::{stdin, stdout, Write},
ops::Deref,
process::exit,
str::FromStr,
sync::Arc,
Expand Down Expand Up @@ -90,12 +92,48 @@ impl CliSignerInfo {
}
}

#[derive(Debug, Default)]
pub struct DefaultSigner {
pub arg_name: String,
pub path: String,
is_path_checked: RefCell<bool>,
}

impl DefaultSigner {
pub fn new<AN: AsRef<str>, P: AsRef<str>>(arg_name: AN, path: P) -> Self {
let arg_name = arg_name.as_ref().to_string();
let path = path.as_ref().to_string();
Self {
arg_name,
path,
..Self::default()
}
}

fn path(&self) -> Result<&str, Box<dyn std::error::Error>> {
if !self.is_path_checked.borrow().deref() {
parse_signer_source(&self.path)
.and_then(|s| {
if let SignerSourceKind::Filepath(path) = &s.kind {
std::fs::metadata(path).map(|_| ()).map_err(|e| e.into())
} else {
Ok(())
}
})
.map_err(|_| {
std::io::Error::new(
std::io::ErrorKind::Other,
format!(
"No default signer found, run \"solana-keygen new -o {}\" to create a new one",
self.path
),
)
})?;
*self.is_path_checked.borrow_mut() = true;
}
Ok(&self.path)
}

pub fn generate_unique_signers(
&self,
bulk_signers: Vec<Option<Box<dyn Signer>>>,
Expand Down Expand Up @@ -125,7 +163,7 @@ impl DefaultSigner {
matches: &ArgMatches,
wallet_manager: &mut Option<Arc<RemoteWalletManager>>,
) -> Result<Box<dyn Signer>, Box<dyn std::error::Error>> {
signer_from_path(matches, &self.path, &self.arg_name, wallet_manager)
signer_from_path(matches, self.path()?, &self.arg_name, wallet_manager)
}

pub fn signer_from_path_with_config(
Expand All @@ -134,7 +172,13 @@ impl DefaultSigner {
wallet_manager: &mut Option<Arc<RemoteWalletManager>>,
config: &SignerFromPathConfig,
) -> Result<Box<dyn Signer>, Box<dyn std::error::Error>> {
signer_from_path_with_config(matches, &self.path, &self.arg_name, wallet_manager, config)
signer_from_path_with_config(
matches,
self.path()?,
&self.arg_name,
wallet_manager,
config,
)
}
}

Expand Down
15 changes: 3 additions & 12 deletions cli/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2299,10 +2299,7 @@ mod tests {
let default_keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &default_keypair_file).unwrap();

let default_signer = DefaultSigner {
arg_name: "keypair".to_string(),
path: default_keypair_file,
};
let default_signer = DefaultSigner::new("keypair", &default_keypair_file);

let signer_info = default_signer
.generate_unique_signers(vec![], &matches, &mut None)
Expand Down Expand Up @@ -2380,10 +2377,7 @@ mod tests {
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let keypair = read_keypair_file(&keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);
// Test Airdrop Subcommand
let test_airdrop =
test_commands
Expand Down Expand Up @@ -2911,10 +2905,7 @@ mod tests {
let default_keypair = Keypair::new();
let default_keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &default_keypair_file).unwrap();
let default_signer = DefaultSigner {
path: default_keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &default_keypair_file);

//Test Transfer Subcommand, SOL
let from_keypair = keypair_from_seed(&[0u8; 32]).unwrap();
Expand Down
5 changes: 1 addition & 4 deletions cli/src/cluster_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2098,10 +2098,7 @@ mod tests {
let default_keypair = Keypair::new();
let (default_keypair_file, mut tmp_file) = make_tmp_file();
write_keypair(&default_keypair, tmp_file.as_file_mut()).unwrap();
let default_signer = DefaultSigner {
path: default_keypair_file,
arg_name: String::new(),
};
let default_signer = DefaultSigner::new("", &default_keypair_file);

let test_cluster_version = test_commands
.clone()
Expand Down
5 changes: 1 addition & 4 deletions cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,7 @@ pub fn parse_args<'a>(
&config.keypair_path,
);

let default_signer = DefaultSigner {
arg_name: default_signer_arg_name,
path: default_signer_path.clone(),
};
let default_signer = DefaultSigner::new(default_signer_arg_name, &default_signer_path);

let CliCommandInfo {
command,
Expand Down
5 changes: 1 addition & 4 deletions cli/src/nonce.rs
Original file line number Diff line number Diff line change
Expand Up @@ -596,10 +596,7 @@ mod tests {
let default_keypair = Keypair::new();
let (default_keypair_file, mut tmp_file) = make_tmp_file();
write_keypair(&default_keypair, tmp_file.as_file_mut()).unwrap();
let default_signer = DefaultSigner {
path: default_keypair_file.clone(),
arg_name: String::new(),
};
let default_signer = DefaultSigner::new("", &default_keypair_file);
let (keypair_file, mut tmp_file) = make_tmp_file();
let nonce_account_keypair = Keypair::new();
write_keypair(&nonce_account_keypair, tmp_file.as_file_mut()).unwrap();
Expand Down
30 changes: 6 additions & 24 deletions cli/src/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2131,10 +2131,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

let test_command = test_commands.clone().get_matches_from(vec![
"test",
Expand Down Expand Up @@ -2342,10 +2339,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

// defaults
let test_command = test_commands.clone().get_matches_from(vec![
Expand Down Expand Up @@ -2493,10 +2487,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

let program_pubkey = Pubkey::new_unique();
let new_authority_pubkey = Pubkey::new_unique();
Expand Down Expand Up @@ -2604,10 +2595,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

let buffer_pubkey = Pubkey::new_unique();
let new_authority_pubkey = Pubkey::new_unique();
Expand Down Expand Up @@ -2664,10 +2652,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file,
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

// defaults
let buffer_pubkey = Pubkey::new_unique();
Expand Down Expand Up @@ -2766,10 +2751,7 @@ mod tests {
let default_keypair = Keypair::new();
let keypair_file = make_tmp_path("keypair_file");
write_keypair_file(&default_keypair, &keypair_file).unwrap();
let default_signer = DefaultSigner {
path: keypair_file.clone(),
arg_name: "".to_string(),
};
let default_signer = DefaultSigner::new("", &keypair_file);

// defaults
let buffer_pubkey = Pubkey::new_unique();
Expand Down
5 changes: 1 addition & 4 deletions cli/src/stake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2117,10 +2117,7 @@ mod tests {
let default_keypair = Keypair::new();
let (default_keypair_file, mut tmp_file) = make_tmp_file();
write_keypair(&default_keypair, tmp_file.as_file_mut()).unwrap();
let default_signer = DefaultSigner {
path: default_keypair_file.clone(),
arg_name: String::new(),
};
let default_signer = DefaultSigner::new("", &default_keypair_file);
let (keypair_file, mut tmp_file) = make_tmp_file();
let stake_account_keypair = Keypair::new();
write_keypair(&stake_account_keypair, tmp_file.as_file_mut()).unwrap();
Expand Down
5 changes: 1 addition & 4 deletions cli/src/vote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -826,10 +826,7 @@ mod tests {
let default_keypair = Keypair::new();
let (default_keypair_file, mut tmp_file) = make_tmp_file();
write_keypair(&default_keypair, tmp_file.as_file_mut()).unwrap();
let default_signer = DefaultSigner {
path: default_keypair_file.clone(),
arg_name: String::new(),
};
let default_signer = DefaultSigner::new("", &default_keypair_file);

let test_authorize_voter = test_commands.clone().get_matches_from(vec![
"test",
Expand Down

0 comments on commit f7b300d

Please sign in to comment.