
- Event-driven file stability tracking - FFmpeg video conversion with hardware acceleration - NFO file generation for Kodi compatibility - Environment-based configuration - Disk space monitoring and shutdown handling - Comprehensive logging with tracing
127 lines
4.3 KiB
Rust
127 lines
4.3 KiB
Rust
use std::env;
|
|
use video_processing::VideoProcessingConfig;
|
|
|
|
fn clear_all_env_vars() {
|
|
let env_vars = [
|
|
"FFMPEG_BINARY", "VIDEO_CODEC", "HW_ACCEL", "HW_DEVICE",
|
|
"FFMPEG_PRESET", "VIDEO_BITRATE", "MAX_BITRATE", "BUFFER_SIZE",
|
|
"AUDIO_CODEC", "AUDIO_BITRATE", "STABILITY_CHECK_INTERVAL",
|
|
"STABILITY_REQUIRED_CHECKS", "MAX_STABILITY_WAIT_HOURS",
|
|
"CREATE_YEAR_MONTH_DIRS", "PRESERVE_ORIGINAL_FILES",
|
|
"SHOW_TITLE", "CREATE_NFO_FILES"
|
|
];
|
|
|
|
for var in &env_vars {
|
|
env::remove_var(var);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_default_config_values() {
|
|
clear_all_env_vars();
|
|
|
|
let config = VideoProcessingConfig::from_env();
|
|
|
|
// Test default values
|
|
assert_eq!(config.ffmpeg_binary, "ffmpeg");
|
|
assert_eq!(config.video_codec, "av1_qsv");
|
|
assert_eq!(config.hw_accel, "qsv");
|
|
assert_eq!(config.hw_device, "qsv=hw");
|
|
assert_eq!(config.preset, "4");
|
|
assert_eq!(config.video_bitrate, "6M");
|
|
assert_eq!(config.max_bitrate, "12M");
|
|
assert_eq!(config.buffer_size, "24M");
|
|
assert_eq!(config.audio_codec, "copy");
|
|
assert_eq!(config.audio_bitrate, "192k");
|
|
assert_eq!(config.stability_check_interval_secs, 2);
|
|
assert_eq!(config.stability_required_checks, 15);
|
|
assert_eq!(config.max_stability_wait_hours, 4);
|
|
assert!(config.create_year_month_dirs);
|
|
assert!(config.preserve_original_files);
|
|
assert_eq!(config.show_title, "Videos");
|
|
assert!(config.create_nfo_files);
|
|
}
|
|
|
|
#[test]
|
|
fn test_custom_config_values() {
|
|
clear_all_env_vars();
|
|
|
|
// Set custom env vars
|
|
env::set_var("FFMPEG_BINARY", "custom_ffmpeg");
|
|
env::set_var("VIDEO_CODEC", "h264");
|
|
env::set_var("HW_ACCEL", "nvenc");
|
|
env::set_var("HW_DEVICE", "cuda");
|
|
env::set_var("FFMPEG_PRESET", "slow");
|
|
env::set_var("VIDEO_BITRATE", "10M");
|
|
env::set_var("MAX_BITRATE", "20M");
|
|
env::set_var("BUFFER_SIZE", "40M");
|
|
env::set_var("AUDIO_CODEC", "aac");
|
|
env::set_var("AUDIO_BITRATE", "256k");
|
|
env::set_var("STABILITY_CHECK_INTERVAL", "5");
|
|
env::set_var("STABILITY_REQUIRED_CHECKS", "10");
|
|
env::set_var("MAX_STABILITY_WAIT_HOURS", "2");
|
|
env::set_var("CREATE_YEAR_MONTH_DIRS", "false");
|
|
env::set_var("PRESERVE_ORIGINAL_FILES", "false");
|
|
env::set_var("SHOW_TITLE", "Custom Show");
|
|
env::set_var("CREATE_NFO_FILES", "false");
|
|
|
|
let config = VideoProcessingConfig::from_env();
|
|
|
|
// Test custom values
|
|
assert_eq!(config.ffmpeg_binary, "custom_ffmpeg");
|
|
assert_eq!(config.video_codec, "h264");
|
|
assert_eq!(config.hw_accel, "nvenc");
|
|
assert_eq!(config.hw_device, "cuda");
|
|
assert_eq!(config.preset, "slow");
|
|
assert_eq!(config.video_bitrate, "10M");
|
|
assert_eq!(config.max_bitrate, "20M");
|
|
assert_eq!(config.buffer_size, "40M");
|
|
assert_eq!(config.audio_codec, "aac");
|
|
assert_eq!(config.audio_bitrate, "256k");
|
|
assert_eq!(config.stability_check_interval_secs, 5);
|
|
assert_eq!(config.stability_required_checks, 10);
|
|
assert_eq!(config.max_stability_wait_hours, 2);
|
|
assert!(!config.create_year_month_dirs);
|
|
assert!(!config.preserve_original_files);
|
|
assert_eq!(config.show_title, "Custom Show");
|
|
assert!(!config.create_nfo_files);
|
|
|
|
// Clean up
|
|
clear_all_env_vars();
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_numeric_values_use_defaults() {
|
|
clear_all_env_vars();
|
|
env::set_var("STABILITY_CHECK_INTERVAL", "invalid");
|
|
env::set_var("STABILITY_REQUIRED_CHECKS", "not_a_number");
|
|
env::set_var("MAX_STABILITY_WAIT_HOURS", "bad_value");
|
|
|
|
let config = VideoProcessingConfig::from_env();
|
|
|
|
// Should fallback to defaults when parsing fails
|
|
assert_eq!(config.stability_check_interval_secs, 2);
|
|
assert_eq!(config.stability_required_checks, 15);
|
|
assert_eq!(config.max_stability_wait_hours, 4);
|
|
|
|
// Clean up
|
|
clear_all_env_vars();
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_boolean_values_use_defaults() {
|
|
clear_all_env_vars();
|
|
env::set_var("CREATE_YEAR_MONTH_DIRS", "maybe");
|
|
env::set_var("PRESERVE_ORIGINAL_FILES", "sometimes");
|
|
env::set_var("CREATE_NFO_FILES", "invalid");
|
|
|
|
let config = VideoProcessingConfig::from_env();
|
|
|
|
// Should fallback to defaults when parsing fails
|
|
assert!(config.create_year_month_dirs);
|
|
assert!(config.preserve_original_files);
|
|
assert!(config.create_nfo_files);
|
|
|
|
// Clean up
|
|
clear_all_env_vars();
|
|
} |