From cedf0b61ca27e43a13a39ed1a395893c0035f907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Tue, 5 Jul 2022 11:24:07 +0200 Subject: [PATCH] Exit with error message on unrecognized config keys --- TODO.md | 2 +- aquatic_common/src/privileges.rs | 2 +- aquatic_http/src/config.rs | 8 ++++---- aquatic_http_load_test/src/config.rs | 4 ++-- aquatic_http_private/src/config.rs | 8 ++++---- aquatic_udp/src/config.rs | 10 +++++----- aquatic_udp_bench/src/config.rs | 1 + aquatic_udp_load_test/src/config.rs | 6 +++--- aquatic_ws/src/config.rs | 8 ++++---- aquatic_ws_load_test/src/config.rs | 4 ++-- 10 files changed, 27 insertions(+), 26 deletions(-) diff --git a/TODO.md b/TODO.md index 9c296d7..a447dd7 100644 --- a/TODO.md +++ b/TODO.md @@ -14,7 +14,7 @@ * Save JoinHandles * When preparing to quit because of PanicSentinel sending SIGTERM, loop through them, extract error and log it -* config: fail on unrecognized keys? + * Run cargo-deny in CI * aquatic_ws diff --git a/aquatic_common/src/privileges.rs b/aquatic_common/src/privileges.rs index 1e18b9f..9cb7db5 100644 --- a/aquatic_common/src/privileges.rs +++ b/aquatic_common/src/privileges.rs @@ -10,7 +10,7 @@ use serde::Deserialize; use aquatic_toml_config::TomlConfig; #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct PrivilegeConfig { /// Chroot and switch group and user after binding to sockets pub drop_privileges: bool, diff --git a/aquatic_http/src/config.rs b/aquatic_http/src/config.rs index 033ab35..e4a6a35 100644 --- a/aquatic_http/src/config.rs +++ b/aquatic_http/src/config.rs @@ -11,7 +11,7 @@ use aquatic_common::cli::LogLevel; /// aquatic_http configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { /// Socket workers receive requests from the socket, parse them and send /// them on to the swarm workers. They then receive responses from the @@ -52,7 +52,7 @@ impl aquatic_common::cli::Config for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct NetworkConfig { /// Bind to this address pub address: SocketAddr, @@ -82,7 +82,7 @@ impl Default for NetworkConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct ProtocolConfig { /// Maximum number of torrents to accept in scrape request pub max_scrape_torrents: usize, @@ -103,7 +103,7 @@ impl Default for ProtocolConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct CleaningConfig { /// Clean peers this often (seconds) pub torrent_cleaning_interval: u64, diff --git a/aquatic_http_load_test/src/config.rs b/aquatic_http_load_test/src/config.rs index 5179f75..5c1a35d 100644 --- a/aquatic_http_load_test/src/config.rs +++ b/aquatic_http_load_test/src/config.rs @@ -7,7 +7,7 @@ use serde::Deserialize; /// aquatic_http_load_test configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { pub server_address: SocketAddr, pub log_level: LogLevel, @@ -34,7 +34,7 @@ impl aquatic_common::cli::Config for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct TorrentConfig { pub number_of_torrents: usize, /// Pareto shape diff --git a/aquatic_http_private/src/config.rs b/aquatic_http_private/src/config.rs index 43e8e2c..d8bd496 100644 --- a/aquatic_http_private/src/config.rs +++ b/aquatic_http_private/src/config.rs @@ -8,7 +8,7 @@ use aquatic_common::cli::LogLevel; /// aquatic_http_private configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { /// Socket workers receive requests from the socket, parse them and send /// them on to the swarm workers. They then receive responses from the @@ -50,7 +50,7 @@ impl aquatic_common::cli::Config for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct NetworkConfig { /// Bind to this address pub address: SocketAddr, @@ -73,7 +73,7 @@ impl Default for NetworkConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct ProtocolConfig { /// Maximum number of torrents to accept in scrape request pub max_scrape_torrents: usize, @@ -94,7 +94,7 @@ impl Default for ProtocolConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct CleaningConfig { /// Clean peers this often (seconds) pub torrent_cleaning_interval: u64, diff --git a/aquatic_udp/src/config.rs b/aquatic_udp/src/config.rs index 10cddd1..9a7c33d 100644 --- a/aquatic_udp/src/config.rs +++ b/aquatic_udp/src/config.rs @@ -8,7 +8,7 @@ use aquatic_toml_config::TomlConfig; /// aquatic_udp configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { /// Socket workers receive requests from the socket, parse them and send /// them on to the swarm workers. They then receive responses from the @@ -65,7 +65,7 @@ impl aquatic_common::cli::Config for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct NetworkConfig { /// Bind to this address pub address: SocketAddr, @@ -117,7 +117,7 @@ impl Default for NetworkConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct ProtocolConfig { /// Maximum number of torrents to accept in scrape request pub max_scrape_torrents: u8, @@ -138,7 +138,7 @@ impl Default for ProtocolConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct StatisticsConfig { /// Collect and print/write statistics this often (seconds) pub interval: u64, @@ -168,7 +168,7 @@ impl Default for StatisticsConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct CleaningConfig { /// Clean torrents this often (seconds) pub torrent_cleaning_interval: u64, diff --git a/aquatic_udp_bench/src/config.rs b/aquatic_udp_bench/src/config.rs index a1425d8..20d8ac0 100644 --- a/aquatic_udp_bench/src/config.rs +++ b/aquatic_udp_bench/src/config.rs @@ -2,6 +2,7 @@ use aquatic_toml_config::TomlConfig; use serde::Deserialize; #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] +#[serde(deny_unknown_fields)] pub struct BenchConfig { pub num_rounds: usize, pub num_threads: usize, diff --git a/aquatic_udp_load_test/src/config.rs b/aquatic_udp_load_test/src/config.rs index a189307..b2566df 100644 --- a/aquatic_udp_load_test/src/config.rs +++ b/aquatic_udp_load_test/src/config.rs @@ -9,7 +9,7 @@ use aquatic_toml_config::TomlConfig; /// aquatic_udp_load_test configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { /// Server address /// @@ -43,7 +43,7 @@ impl Default for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct NetworkConfig { /// True means bind to one localhost IP per socket. /// @@ -86,7 +86,7 @@ impl Default for NetworkConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct RequestConfig { /// Number of torrents to simulate pub number_of_torrents: usize, diff --git a/aquatic_ws/src/config.rs b/aquatic_ws/src/config.rs index 136ab9f..7f051a1 100644 --- a/aquatic_ws/src/config.rs +++ b/aquatic_ws/src/config.rs @@ -10,7 +10,7 @@ use aquatic_toml_config::TomlConfig; /// aquatic_ws configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { /// Socket workers receive requests from the socket, parse them and send /// them on to the swarm workers. They then receive responses from the @@ -51,7 +51,7 @@ impl aquatic_common::cli::Config for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct NetworkConfig { /// Bind to this address pub address: SocketAddr, @@ -86,7 +86,7 @@ impl Default for NetworkConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct ProtocolConfig { /// Maximum number of torrents to accept in scrape request pub max_scrape_torrents: usize, @@ -107,7 +107,7 @@ impl Default for ProtocolConfig { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct CleaningConfig { /// Clean peers this often (seconds) pub torrent_cleaning_interval: u64, diff --git a/aquatic_ws_load_test/src/config.rs b/aquatic_ws_load_test/src/config.rs index 9af7baf..370769d 100644 --- a/aquatic_ws_load_test/src/config.rs +++ b/aquatic_ws_load_test/src/config.rs @@ -7,7 +7,7 @@ use serde::Deserialize; /// aquatic_ws_load_test configuration #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct Config { pub server_address: SocketAddr, pub log_level: LogLevel, @@ -41,7 +41,7 @@ impl Default for Config { } #[derive(Clone, Debug, PartialEq, TomlConfig, Deserialize)] -#[serde(default)] +#[serde(default, deny_unknown_fields)] pub struct TorrentConfig { pub offers_per_request: usize, pub number_of_torrents: usize,