agave_validator/commands/staked_nodes_overrides/
mod.rs

1use {
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}