use std::sync::OnceLock;
#[allow(dead_code)]
static DOCKER_AVAILABLE: OnceLock<bool> = OnceLock::new();
#[allow(dead_code)]
pub fn is_docker_available() -> bool {
*DOCKER_AVAILABLE.get_or_init(|| {
std::process::Command::new("docker")
.args(["ps"])
.output()
.map(|output| output.status.success())
.unwrap_or(false)
})
}
#[allow(dead_code)]
pub fn print_docker_unavailable_warning(test_name: &str) {
eprintln!("\n⚠️ SKIPPED: {} - Docker is not available", test_name);
eprintln!(" To run this test, ensure Docker is installed and running.");
eprintln!(" Installation: https://docs.docker.com/get-docker/\n");
}
#[macro_export]
macro_rules! require_docker {
($test_name:expr) => {
if !$crate::docker_helpers::is_docker_available() {
$crate::docker_helpers::print_docker_unavailable_warning($test_name);
return;
}
};
}