fix: never panic when the log directory is unwritable; disable file logging instead [#67]
Check / stable / fmt (push) Failing after 26s
Check / beta / clippy (push) Failing after 1m10s
Check / stable / clippy (push) Failing after 1m10s
Check / nightly / doc (push) Successful in 1m0s
Check / 1.95.0 / check (push) Successful in 1m7s
Check / dockerfile / msrv (push) Successful in 5s
Test Suite / ubuntu / beta (push) Successful in 2m15s
Test Suite / ubuntu / stable (push) Successful in 2m14s
Test Suite / ubuntu / stable / coverage (push) Failing after 1m57s
Test Suite / macos-latest / stable (push) Canceled after 0s
Test Suite / windows-latest / stable (push) Canceled after 0s
Check / stable / fmt (push) Failing after 26s
Check / beta / clippy (push) Failing after 1m10s
Check / stable / clippy (push) Failing after 1m10s
Check / nightly / doc (push) Successful in 1m0s
Check / 1.95.0 / check (push) Successful in 1m7s
Check / dockerfile / msrv (push) Successful in 5s
Test Suite / ubuntu / beta (push) Successful in 2m15s
Test Suite / ubuntu / stable (push) Successful in 2m14s
Test Suite / ubuntu / stable / coverage (push) Failing after 1m57s
Test Suite / macos-latest / stable (push) Canceled after 0s
Test Suite / windows-latest / stable (push) Canceled after 0s
This commit is contained in:
4 files changed
+341
-28
No files matched your search
+77
-1
@@ -15,7 +15,8 @@ mod tests {
|
||||
app::{App, AppConfig, ServarrConfig},
|
||||
network::NetworkError,
|
||||
utils::{
|
||||
convert_runtime, format_cli_error, format_size, select_cli_configuration, was_log_rotated,
|
||||
build_logging_config, convert_runtime, format_cli_error, format_size, resolve_log_dir,
|
||||
select_cli_configuration, was_log_rotated,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -236,4 +237,79 @@ mod tests {
|
||||
|
||||
fs::remove_file(&path).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_resolve_log_dir_returns_preferred_dir_when_creatable() {
|
||||
let preferred = std::env::temp_dir().join(format!(
|
||||
"managarr_test_preferred_log_dir_{}",
|
||||
std::process::id()
|
||||
));
|
||||
let _ = fs::remove_dir_all(&preferred);
|
||||
|
||||
let resolved = resolve_log_dir(preferred.clone());
|
||||
|
||||
assert_eq!(resolved, preferred);
|
||||
assert!(preferred.is_dir());
|
||||
|
||||
fs::remove_dir_all(&preferred).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_resolve_log_dir_keeps_preferred_dir_and_disables_file_logging_when_uncreatable() {
|
||||
let blocker = std::env::temp_dir().join(format!(
|
||||
"managarr_test_log_dir_blocker_{}",
|
||||
std::process::id()
|
||||
));
|
||||
let _ = fs::remove_file(&blocker);
|
||||
fs::write(&blocker, "not a directory").unwrap();
|
||||
let preferred = blocker.join("logs");
|
||||
|
||||
let resolved = resolve_log_dir(preferred.clone());
|
||||
|
||||
assert_eq!(resolved, preferred);
|
||||
assert!(!resolved.exists());
|
||||
|
||||
let config = build_logging_config(resolved.join("managarr.log"));
|
||||
|
||||
assert!(config.appenders().is_empty());
|
||||
assert!(config.root().appenders().is_empty());
|
||||
|
||||
fs::remove_file(&blocker).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_build_logging_config_uses_logfile_appender_when_log_path_is_writable() {
|
||||
let log_dir = std::env::temp_dir().join(format!(
|
||||
"managarr_test_logging_config_{}",
|
||||
std::process::id()
|
||||
));
|
||||
let _ = fs::remove_dir_all(&log_dir);
|
||||
fs::create_dir_all(&log_dir).unwrap();
|
||||
|
||||
let config = build_logging_config(log_dir.join("managarr.log"));
|
||||
|
||||
assert_eq!(config.appenders().len(), 1);
|
||||
assert_str_eq!(config.appenders()[0].name(), "logfile");
|
||||
assert_eq!(config.root().appenders(), ["logfile"]);
|
||||
|
||||
drop(config);
|
||||
fs::remove_dir_all(&log_dir).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_build_logging_config_disables_logging_when_appender_is_unbuildable() {
|
||||
let blocker = std::env::temp_dir().join(format!(
|
||||
"managarr_test_appender_blocker_{}",
|
||||
std::process::id()
|
||||
));
|
||||
let _ = fs::remove_file(&blocker);
|
||||
fs::write(&blocker, "not a directory").unwrap();
|
||||
|
||||
let config = build_logging_config(blocker.join("logs").join("managarr.log"));
|
||||
|
||||
assert!(config.appenders().is_empty());
|
||||
assert!(config.root().appenders().is_empty());
|
||||
|
||||
fs::remove_file(&blocker).unwrap();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user