#![allow(dead_code)]
use std::path::PathBuf;
use std::process::Command;
pub fn unavailable(what: &str, present: bool) -> bool {
if present {
return false;
}
assert!(
std::env::var("MECHA_TEST_REQUIRE_BACKENDS").is_err(),
"{what} is unavailable, and MECHA_TEST_REQUIRE_BACKENDS is set"
);
eprintln!("SKIPPED: {what} is unavailable");
true
}
pub fn docker_available() -> bool {
Command::new("docker")
.arg("info")
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.map(|s| s.success())
.unwrap_or(false)
}
pub fn docker_image_present(image: &str) -> bool {
Command::new("docker")
.args(["image", "inspect", image])
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.map(|s| s.success())
.unwrap_or(false)
}
pub fn bwrap_present() -> bool {
Command::new("bwrap")
.arg("--version")
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.map(|s| s.success())
.unwrap_or(false)
}
pub fn python3_available() -> bool {
Command::new("python3")
.arg("--version")
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.map(|s| s.success())
.unwrap_or(false)
}
pub fn fixture_server() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join("nosy_mcp_server.py")
}
pub fn tmpdir(tag: &str) -> PathBuf {
let dir = std::env::temp_dir().join(format!("mecha-{tag}-{}", uuid::Uuid::new_v4()));
std::fs::create_dir_all(&dir).unwrap();
dir.canonicalize().unwrap()
}