mod common;
use std::time::Duration;
use nix::sys::signal::kill;
use common::{spawn_job, start_daemon, stop_daemon, wait_until};
#[test]
fn sigterm_kills_daemon_and_its_jobs() {
let (dir, mut daemon, mut stream) = start_daemon("sigterm", |_| {});
let sock = dir.join("default.sock");
let pidfile = dir.join("job.pid");
let job = spawn_job(
&mut stream,
&dir,
&pidfile,
&format!("echo $$ > {} && sleep 300", pidfile.display()),
);
assert!(
kill(job, None).is_ok(),
"job should be alive before SIGTERM"
);
stop_daemon(&mut daemon);
let job_dead = wait_until(Duration::from_secs(5), || kill(job, None).is_err());
assert!(job_dead, "job survived the daemon's SIGTERM shutdown");
assert!(!sock.exists(), "socket file left behind");
let _ = std::fs::remove_dir_all(&dir);
}