[functional-tests (rust)] factor out TestDir

This commit is contained in:
Joe Thornber
2020-07-31 14:26:22 +01:00
parent 084a26bf85
commit 78db9a24fa
4 changed files with 64 additions and 51 deletions

View File

@@ -12,13 +12,6 @@ use crate::common::xml_generator::{write_xml, FragmentedS, SingleThinS};
//------------------------------------------
pub fn mk_path(dir: &Path, file: &str) -> PathBuf {
let mut p = PathBuf::new();
p.push(dir);
p.push(PathBuf::from(file));
p
}
// FIXME: write a macro to generate these commands
#[macro_export]
macro_rules! thin_check {
@@ -53,6 +46,27 @@ macro_rules! thin_dump {
};
}
//------------------------------------------
pub struct TestDir {
dir: TempDir,
file_count: usize,
}
impl TestDir {
pub fn new() -> Result<TestDir> {
let dir = tempdir()?;
Ok(TestDir {dir, file_count: 0})
}
pub fn mk_path(&mut self, file: &str) -> PathBuf {
let mut p = PathBuf::new();
p.push(&self.dir);
p.push(PathBuf::from(format!("{:02}_{}", self.file_count, file)));
self.file_count += 1;
p
}
}
// Returns stderr, a non zero status must be returned
pub fn run_fail(command: Expression) -> Result<String> {
@@ -61,16 +75,16 @@ pub fn run_fail(command: Expression) -> Result<String> {
Ok(from_utf8(&output.stderr[0..]).unwrap().to_string())
}
pub fn mk_valid_xml(dir: &TempDir) -> Result<PathBuf> {
let xml = mk_path(dir.path(), "meta.xml");
pub fn mk_valid_xml(td: &mut TestDir) -> Result<PathBuf> {
let xml = td.mk_path("meta.xml");
let mut gen = SingleThinS::new(0, 1024, 2048, 2048);
write_xml(&xml, &mut gen)?;
Ok(xml)
}
pub fn mk_valid_md(dir: &TempDir) -> Result<PathBuf> {
let xml = mk_path(dir.path(), "meta.xml");
let md = mk_path(dir.path(), "meta.bin");
pub fn mk_valid_md(td: &mut TestDir) -> Result<PathBuf> {
let xml = td.mk_path("meta.xml");
let md = td.mk_path("meta.bin");
let mut gen = SingleThinS::new(0, 1024, 2048, 2048);
write_xml(&xml, &mut gen)?;
@@ -80,15 +94,15 @@ pub fn mk_valid_md(dir: &TempDir) -> Result<PathBuf> {
Ok(md)
}
pub fn mk_zeroed_md(dir: &TempDir) -> Result<PathBuf> {
let md = mk_path(dir.path(), "meta.bin");
pub fn mk_zeroed_md(td: &mut TestDir) -> Result<PathBuf> {
let md = td.mk_path("meta.bin");
let _file = file_utils::create_sized_file(&md, 4096 * 4096);
Ok(md)
}
pub fn accepts_flag(flag: &str) -> Result<()> {
let dir = tempdir()?;
let md = mk_valid_md(&dir)?;
let mut td = TestDir::new()?;
let md = mk_valid_md(&mut td)?;
thin_check!(flag, &md).run()?;
Ok(())
}