fix cron parsing for windows (#3044)

This commit is contained in:
Max Novich
2025-06-23 16:12:05 -07:00
committed by GitHub
parent a4546d4108
commit 603d0da27c
5 changed files with 174 additions and 7 deletions
+60
View File
@@ -0,0 +1,60 @@
#[cfg(test)]
mod cron_parsing_tests {
use crate::scheduler::normalize_cron_expression;
use tokio_cron_scheduler::Job;
#[test]
fn test_normalize_cron_expression() {
// Test 5-field to 6-field conversion
assert_eq!(normalize_cron_expression("0 12 * * *"), "0 0 12 * * *");
assert_eq!(normalize_cron_expression("*/5 * * * *"), "0 */5 * * * *");
assert_eq!(normalize_cron_expression("0 0 * * 1"), "0 0 0 * * 1");
// Test 6-field expressions (should remain unchanged)
assert_eq!(normalize_cron_expression("0 0 12 * * *"), "0 0 12 * * *");
assert_eq!(
normalize_cron_expression("*/30 */5 * * * *"),
"*/30 */5 * * * *"
);
// Test invalid expressions (should remain unchanged but warn)
assert_eq!(normalize_cron_expression("* * *"), "* * *");
assert_eq!(normalize_cron_expression("* * * * * * *"), "* * * * * * *");
assert_eq!(normalize_cron_expression(""), "");
}
#[tokio::test]
async fn test_cron_expression_formats() {
// Test different cron formats to see which ones work
let test_expressions = vec![
("0 0 * * *", "5-field: every day at midnight"),
("0 0 0 * * *", "6-field: every day at midnight"),
("* * * * *", "5-field: every minute"),
("* * * * * *", "6-field: every second"),
("0 */5 * * *", "5-field: every 5 minutes"),
("0 0 */5 * * *", "6-field: every 5 minutes"),
("0 0 12 * * *", "6-field: every day at noon"),
("0 12 * * *", "5-field: every day at noon"),
];
for (expr, desc) in test_expressions {
println!("Testing cron expression: '{}' ({})", expr, desc);
let expr_owned = expr.to_string();
// Test with normalization
let normalized = normalize_cron_expression(expr);
println!(" Normalized to: '{}'", normalized);
match Job::new_async(&normalized, move |_uuid, _l| {
let expr_clone = expr_owned.clone();
Box::pin(async move {
println!("Job executed for: {}", expr_clone);
})
}) {
Ok(_) => println!(" ✅ Successfully parsed normalized: '{}'", normalized),
Err(e) => println!(" ❌ Failed to parse normalized '{}': {}", normalized, e),
}
println!();
}
}
}