video-processing-support/tests/config_tests.rs
Benjamin Slingo a38143c28b Initial commit: Shared video processing crate
- 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
2025-09-06 18:26:58 -04:00

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();
}