use crate::error::LibcontainerError;
pub const CRIU_VERSION_MINIMUM: u32 = 31500;
fn compare_criu_version(version: u32, min_version: u32) -> Result<(), LibcontainerError> {
if version < min_version {
return Err(LibcontainerError::Other(format!(
"CRIU version {} is below minimum required version {}",
version, min_version,
)));
}
Ok(())
}
pub fn check_criu_version(min_version: u32) -> Result<(), LibcontainerError> {
let mut criu = rust_criu::Criu::new()
.map_err(|e| LibcontainerError::Other(format!("failed to create CRIU instance: {}", e)))?;
let version = criu
.get_criu_version()
.map_err(|e| LibcontainerError::Other(format!("CRIU version check failed: {}", e)))?;
compare_criu_version(version, min_version)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_compare_criu_version_ok() {
assert!(compare_criu_version(31500, 31500).is_ok());
assert!(compare_criu_version(31600, 31500).is_ok());
assert!(compare_criu_version(40000, 31500).is_ok());
}
#[test]
fn test_compare_criu_version_too_low() {
assert!(compare_criu_version(31499, 31500).is_err());
assert!(compare_criu_version(30000, 31500).is_err());
}
}