use std::path::Path; use std::process::Command; use anyhow::{bail, Error}; use proxmox_rrd::rrd::RRD; use proxmox_sys::fs::CreateOptions; fn compare_file(fn1: &str, fn2: &str) -> Result<(), Error> { let status = Command::new("/usr/bin/cmp") .arg(fn1) .arg(fn2) .status() .expect("failed to execute process"); if !status.success() { bail!("file compare failed"); } Ok(()) } const RRD_V1_FN: &str = "./tests/testdata/cpu.rrd_v1"; const RRD_V2_FN: &str = "./tests/testdata/cpu.rrd_v2"; // make sure we can load and convert RRD v1 #[test] fn upgrade_from_rrd_v1() -> Result<(), Error> { let rrd = RRD::load(Path::new(RRD_V1_FN), true)?; const RRD_V2_NEW_FN: &str = "./tests/testdata/cpu.rrd_v2.upgraded"; let new_path = Path::new(RRD_V2_NEW_FN); rrd.save(new_path, CreateOptions::new(), true)?; let result = compare_file(RRD_V2_FN, RRD_V2_NEW_FN); let _ = std::fs::remove_file(RRD_V2_NEW_FN); result?; Ok(()) } // make sure we can load and save RRD v2 #[test] fn load_and_save_rrd_v2() -> Result<(), Error> { let rrd = RRD::load(Path::new(RRD_V2_FN), true)?; const RRD_V2_NEW_FN: &str = "./tests/testdata/cpu.rrd_v2.saved"; let new_path = Path::new(RRD_V2_NEW_FN); rrd.save(new_path, CreateOptions::new(), true)?; let result = compare_file(RRD_V2_FN, RRD_V2_NEW_FN); let _ = std::fs::remove_file(RRD_V2_NEW_FN); result?; Ok(()) }