scriptherder-rs/tests/checks.rs
Johan Lundberg f825488351
init port
2026-06-25 16:59:46 +02:00

237 lines
5.4 KiB
Rust

use scriptherder::check::Check;
use scriptherder::job::Job;
// Helper mirroring test_checks.py::_run
fn run_check(cmd: &[&str], ok: &str, warn: &str, run: bool, runtime_mode_off: bool) -> Job {
let mut job = Job::new("unittest_job", cmd.iter().map(|s| s.to_string()).collect()).unwrap();
if run {
job.run();
}
let check = Check::new(ok, warn, "unit_testing", true).unwrap();
job.check(&check);
if runtime_mode_off {
let check = Check::new(ok, warn, "unit_testing", false).unwrap();
job.check(&check);
}
job
}
#[test]
fn exit_status_ok() {
let job = run_check(&["/bin/echo", "test"], "exit_status=0", "", true, false);
assert!(job.is_ok());
}
#[test]
fn exit_status_critical() {
let job = run_check(
&["/usr/bin/true", "test"],
"exit_status=1",
"exit_status=2",
true,
false,
);
assert!(!job.is_ok());
assert!(!job.is_warning());
assert_eq!(job.check_status(), Some("CRITICAL"));
}
#[test]
fn file_exists_fail_reason() {
let job = run_check(
&["/usr/bin/false"],
"exit_status=0,OR_file_exists=/this_file_should_not_exist",
"",
true,
true,
);
assert!(!job.is_ok());
assert_eq!(job.check_status(), Some("CRITICAL"));
assert_eq!(
job.check_reason(),
Some("file_does_not_exist=/this_file_should_not_exist, stored_status=OK==False")
);
}
#[test]
fn output_contains_reason() {
let job = run_check(
&["/bin/echo", "STATUS_TESTING_OK"],
"exit_status=0,output_contains=TESTING",
"",
true,
false,
);
assert!(job.is_ok());
assert_eq!(
job.check_reason(),
Some("exit=0, output_contains=TESTING==True")
);
}
#[test]
fn output_not_contains_obsolete_reason() {
let job = run_check(
&["/bin/echo", "STATUS_TESTING_OK"],
"exit_status=0,output_not_contains=ERROR",
"",
true,
false,
);
assert!(job.is_ok());
assert_eq!(
job.check_reason(),
Some("exit=0, !output_contains=ERROR==True")
);
}
#[test]
fn output_matches_reason() {
let job = run_check(
&["/bin/echo", "STATUS_TESTING_OK"],
"exit_status=0,output_matches=.*TESTING.*",
"",
true,
false,
);
assert!(job.is_ok());
assert_eq!(
job.check_reason(),
Some("exit=0, output_matches=.*TESTING.*==True")
);
}
#[test]
fn exit_status_warning() {
let job = run_check(
&["/bin/echo", "test"],
"exit_status=1",
"exit_status=0",
true,
false,
);
assert!(!job.is_ok());
assert!(job.is_warning());
}
#[test]
fn exit_status_negated1() {
let job = run_check(&["/usr/bin/false"], "!exit_status=0", "", true, false);
assert!(job.is_ok());
assert!(!job.is_warning());
}
#[test]
fn max_age() {
let job = run_check(
&["/bin/echo", "test"],
"exit_status=0, max_age=10s",
"exit_status=0, max_age=3h",
true,
true,
);
assert!(job.is_ok());
assert!(!job.is_warning());
}
#[test]
fn max_age_negated() {
let job = run_check(
&["/bin/echo", "test"],
"exit_status=0, !max_age=10s",
"exit_status=0, max_age=3h",
true,
true,
);
assert!(!job.is_ok());
assert!(job.is_warning());
}
#[test]
fn file_exists() {
// exit_status=1 so ok fails; warn has OR_file_exists=/etc/services which exists
let job = run_check(
&["/bin/echo", "test"],
"exit_status=1",
"exit_status=1,OR_file_exists=/etc/services",
true,
true,
);
assert!(!job.is_ok());
assert!(job.is_warning());
}
#[test]
fn file_exists_negated() {
// /usr/bin/false exits 1; ok = exit_status=0,!OR_file_exists=<nonexistent>
// negated file_exists on a missing file → criterion passes
let job = run_check(
&["/usr/bin/false"],
"exit_status=0,!OR_file_exists=/this_could_be_a_FAIL_file",
"",
true,
true,
);
assert!(job.is_ok());
}
#[test]
fn or_running() {
// /bin/echo exits 0; ok = exit_status=1,OR_running → OR_running is True while running
let job = run_check(
&["/bin/echo", "test"],
"exit_status=1,OR_running",
"exit_status=0",
true,
false,
);
assert!(job.is_ok());
assert!(!job.is_warning());
}
#[test]
fn or_running_negated() {
// run=false so job never ran; ok = exit_status=1,OR_running (OR_running False, exit_status=1 not run)
// warn = !OR_running → negated OR_running is True when not running
let job = run_check(
&["/bin/echo", "test"],
"exit_status=1,OR_running",
"!OR_running",
false,
false,
);
assert!(!job.is_ok());
assert!(job.is_warning());
}
#[test]
fn output_contains_negated() {
let job = run_check(
&["/bin/echo", "STATUS_TESTING_OK"],
"exit_status=0,!output_contains=ERROR",
"",
true,
false,
);
assert!(job.is_ok());
assert_eq!(
job.check_reason(),
Some("exit=0, !output_contains=ERROR==True")
);
}
#[test]
fn output_matches_negated() {
let job = run_check(
&["/bin/echo", "STATUS_TESTING_OK"],
"exit_status=0,!output_matches=.*ERROR.*",
"",
true,
false,
);
assert!(job.is_ok());
assert_eq!(
job.check_reason(),
Some("exit=0, !output_matches=.*ERROR.*==True")
);
}