agave_validator/commands/staked_nodes_overrides/
mod.rs1use {
2 crate::{
3 admin_rpc_service,
4 commands::{FromClapArgMatches, Result},
5 },
6 clap::{App, Arg, ArgMatches, SubCommand},
7 std::path::Path,
8};
9
10const COMMAND: &str = "staked-nodes-overrides";
11
12#[derive(Debug, PartialEq)]
13pub struct StakedNodesOverridesArgs {
14 pub path: String,
15}
16
17impl FromClapArgMatches for StakedNodesOverridesArgs {
18 fn from_clap_arg_match(matches: &ArgMatches) -> Result<Self> {
19 Ok(StakedNodesOverridesArgs {
20 path: matches
21 .value_of("path")
22 .expect("path is required")
23 .to_string(),
24 })
25 }
26}
27
28pub fn command<'a>() -> App<'a, 'a> {
29 SubCommand::with_name(COMMAND)
30 .about("Overrides stakes of specific node identities.")
31 .arg(
32 Arg::with_name("path")
33 .value_name("PATH")
34 .takes_value(true)
35 .required(true)
36 .help(
37 "Provide path to a file with custom overrides for stakes of specific validator identities.",
38 ),
39 )
40 .after_help(
41 "Note: the new staked nodes overrides only applies to the currently running validator instance",
42 )
43}
44
45pub fn execute(matches: &ArgMatches, ledger_path: &Path) -> Result<()> {
46 let staked_nodes_overrides_args = StakedNodesOverridesArgs::from_clap_arg_match(matches)?;
47
48 let admin_client = admin_rpc_service::connect(ledger_path);
49 admin_rpc_service::runtime().block_on(async move {
50 admin_client
51 .await?
52 .set_staked_nodes_overrides(staked_nodes_overrides_args.path)
53 .await
54 })?;
55
56 Ok(())
57}
58
59#[cfg(test)]
60mod tests {
61 use {
62 super::*,
63 crate::commands::tests::{
64 verify_args_struct_by_command, verify_args_struct_by_command_is_error,
65 },
66 };
67
68 #[test]
69 fn verify_args_struct_by_command_staked_nodes_overrides_default() {
70 verify_args_struct_by_command_is_error::<StakedNodesOverridesArgs>(
71 command(),
72 vec![COMMAND],
73 );
74 }
75
76 #[test]
77 fn verify_args_struct_by_command_staked_nodes_overrides_path() {
78 verify_args_struct_by_command(
79 command(),
80 vec![COMMAND, "test.json"],
81 StakedNodesOverridesArgs {
82 path: "test.json".to_string(),
83 },
84 );
85 }
86}