-
-
Notifications
You must be signed in to change notification settings - Fork 94
Tests fail because CLI options are parsed #465
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Unfortunately, our CLI parser does not seem to support fine-grained parsing skipping unknown arguments. clap-rs/clap#1404 |
Thanks for the quick response. Couldn't parsing arguments be disabled when the code is running in the tests? IMHO it doesn't make sense to parse the actual arguments of the test runner. After some more investigation I was able to solve the issue with the following patch. Might something along those lines be an option? diff --git a/src/bin/server.rs b/src/bin/server.rs
index 15e4e73..c3d6c0b 100644
--- a/src/bin/server.rs
+++ b/src/bin/server.rs
@@ -15,7 +15,7 @@ static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
use static_web_server::{Result, Settings};
fn main() -> Result {
- let opts = Settings::get(true)?;
+ let opts = Settings::get(true, true)?;
if opts.general.version {
return static_web_server::settings::cli_output::display_version();
diff --git a/src/settings/mod.rs b/src/settings/mod.rs
index 5f9f76d..bb4e171 100644
--- a/src/settings/mod.rs
+++ b/src/settings/mod.rs
@@ -99,8 +99,8 @@ impl Settings {
/// Reads CLI/Env and config file options returning the server settings.
/// It also takes care to initialize the logging system with its level
/// once the `general` settings are determined.
- pub fn get(log_init: bool) -> Result<Settings> {
- let opts = General::parse();
+ pub fn get(log_init: bool, parse_args: bool) -> Result<Settings> {
+ let opts = if parse_args { General::parse() } else { General::parse_from([""]) };
// Define the general CLI/file options
let version = opts.version;
diff --git a/src/testing.rs b/src/testing.rs
index 3c3459e..2d2c6f0 100644
--- a/src/testing.rs
+++ b/src/testing.rs
@@ -26,7 +26,7 @@ pub mod fixtures {
// Replace default config file and load the fixture TOML settings
let f = PathBuf::from("tests/fixtures").join(fixture_toml);
std::env::set_var("SERVER_CONFIG_FILE", f);
- Settings::get(false).unwrap()
+ Settings::get(false, false).unwrap()
}
/// Create a `RequestHandler` from a custom TOML config file (fixture).
diff --git a/src/winservice.rs b/src/winservice.rs
index 64dab9d..275ba6d 100644
--- a/src/winservice.rs
+++ b/src/winservice.rs
@@ -73,7 +73,7 @@ fn set_service_state(
fn run_service() -> Result {
// Log is already initialized so there is no need to do it again.
- let opts = Settings::get(false)?;
+ let opts = Settings::get(false, true)?;
tracing::info!("windows service: starting service setup");
|
Sorry, now I see what you mean. I was a bit blinded. diff --git a/src/settings/mod.rs b/src/settings/mod.rs
index 5f9f76d..c2b4141 100644
--- a/src/settings/mod.rs
+++ b/src/settings/mod.rs
@@ -100,7 +100,20 @@ impl Settings {
/// It also takes care to initialize the logging system with its level
/// once the `general` settings are determined.
pub fn get(log_init: bool) -> Result<Settings> {
- let opts = General::parse();
+ Self::read(log_init, true)
+ }
+
+ /// Reads CLI/Env and config file options returning the server settings without parsing arguments useful for testing.
+ pub fn get_unparsed(log_init: bool) -> Result<Settings> {
+ Self::read(log_init, false)
+ }
+
+ fn read(log_init: bool, parse_args: bool) -> Result<Settings> {
+ let opts = if parse_args {
+ General::parse()
+ } else {
+ General::parse_from([""])
+ };
// Define the general CLI/file options
let version = opts.version;
diff --git a/src/testing.rs b/src/testing.rs
index 3c3459e..b5e4276 100644
--- a/src/testing.rs
+++ b/src/testing.rs
@@ -26,7 +26,7 @@ pub mod fixtures {
// Replace default config file and load the fixture TOML settings
let f = PathBuf::from("tests/fixtures").join(fixture_toml);
std::env::set_var("SERVER_CONFIG_FILE", f);
- Settings::get(false).unwrap()
+ Settings::get_unparsed(false).unwrap()
}
/// Create a `RequestHandler` from a custom TOML config file (fixture). Feel free to submit a PR. |
Fixed by #466. |
Thanks! 👍 |
Released on v2.32.2. |
Search for duplicate issues
Issue scope
CLI
Describe the bug
Some tests load custom settings but also parse the CLI options. When tests are being run with parameters like
--test-threads 1
, some tests fail because static-web-server itself does not have such an option.How to reproduce it
cargo test -- --test-threads 1
Expected behavior
Tests succeed.
Complementary information
The option to specify the test threads is even mentioned in the Rust book: https://doc.rust-lang.org/book/ch11-02-running-tests.html#running-tests-in-parallel-or-consecutively
Failing log:
Build target
Built from source (specify below)
Environment and specs
Additional context
No response
The text was updated successfully, but these errors were encountered: