#![allow(
clippy::missing_docs_in_private_items,
reason = "test helpers and fixtures do not need doc comments"
)]
use super::*;
#[test]
fn tmux_kill_session_is_best_effort_on_missing_session() {
tmux_kill_session("moadim-nonexistent-watchdog-test-session");
}
#[test]
fn tmux_bin_falls_back_to_a_nonexistent_path_under_cfg_test() {
let previous = std::env::var_os("MOADIM_TMUX_BIN");
unsafe {
std::env::remove_var("MOADIM_TMUX_BIN");
}
let bin = super::session::tmux_bin();
assert_ne!(bin, "tmux", "test build must not spawn the real tmux");
assert!(
!std::path::Path::new(&bin).exists(),
"test fallback must point at a non-existent path: {bin}"
);
unsafe {
match previous {
Some(value) => std::env::set_var("MOADIM_TMUX_BIN", value),
None => std::env::remove_var("MOADIM_TMUX_BIN"),
}
}
}
#[test]
fn tmux_session_alive_reflects_the_bin_exit_status() {
let previous = std::env::var_os("MOADIM_TMUX_BIN");
let set = |bin: &str| {
unsafe { std::env::set_var("MOADIM_TMUX_BIN", bin) };
};
set("/usr/bin/true");
assert!(
super::session::tmux_session_alive("moadim-anything"),
"a 0-exit tmux stub reads as alive"
);
set("/usr/bin/false");
assert!(
!super::session::tmux_session_alive("moadim-anything"),
"a non-zero-exit tmux stub reads as not alive"
);
unsafe {
match previous {
Some(value) => std::env::set_var("MOADIM_TMUX_BIN", value),
None => std::env::remove_var("MOADIM_TMUX_BIN"),
}
}
}
#[test]
fn tmux_session_prefix_alive_matches_any_session_starting_with_prefix() {
#[cfg(unix)]
use std::os::unix::fs::PermissionsExt as _;
let dir = std::env::temp_dir().join(format!("moadim-tmux-prefix-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
let stub = dir.join("tmux");
std::fs::write(
&stub,
"#!/bin/sh\nprintf 'moadim-other-100_1\\nmoadim-foo-200_2\\nmoadim-baz-qux-300_3\\n'\nexit 0\n",
)
.unwrap();
#[cfg(unix)]
std::fs::set_permissions(&stub, std::fs::Permissions::from_mode(0o755)).unwrap();
let previous = std::env::var_os("MOADIM_TMUX_BIN");
unsafe { std::env::set_var("MOADIM_TMUX_BIN", &stub) };
assert!(
super::session::tmux_session_prefix_alive("moadim-foo-"),
"a listed session starting with the prefix must read as alive"
);
assert!(
!super::session::tmux_session_prefix_alive("moadim-bar-"),
"no listed session starts with this prefix"
);
assert!(
!super::session::tmux_session_prefix_alive("moadim-baz-"),
"a different routine's session name being a string-superset of the prefix (baz-qux vs. \
baz) must not read as baz's own fire still being alive"
);
unsafe {
match previous {
Some(value) => std::env::set_var("MOADIM_TMUX_BIN", value),
None => std::env::remove_var("MOADIM_TMUX_BIN"),
}
}
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn tmux_session_prefix_alive_false_when_tmux_bin_missing_or_fails() {
let previous = std::env::var_os("MOADIM_TMUX_BIN");
unsafe { std::env::set_var("MOADIM_TMUX_BIN", "/usr/bin/false") };
assert!(!super::session::tmux_session_prefix_alive("moadim-foo-"));
unsafe {
match previous {
Some(value) => std::env::set_var("MOADIM_TMUX_BIN", value),
None => std::env::remove_var("MOADIM_TMUX_BIN"),
}
}
}
include!("tmux_session_count_counts_every_session_starting_with_the_prefix_tests.rs");