[functional-tests (rust)] TestDir now creates dir in ./

O_DIRECT doesn't work with /tmp/
This commit is contained in:
Joe Thornber 2020-08-14 10:54:31 +01:00
parent e1cfc3866b
commit 7466cd7182

View File

@ -1,27 +1,61 @@
use anyhow::Result; use anyhow::{anyhow, Result};
use std::path::{PathBuf}; use rand::prelude::*;
use tempfile::{tempdir, TempDir}; use std::fs;
use std::path::PathBuf;
//--------------------------------------- //---------------------------------------
pub struct TestDir { pub struct TestDir {
dir: TempDir, dir: PathBuf,
files: Vec<PathBuf>,
clean_up: bool,
file_count: usize, file_count: usize,
} }
fn mk_dir(prefix: &str) -> Result<PathBuf> {
for _n in 0..100 {
let mut p = PathBuf::new();
let nr = rand::thread_rng().gen_range(1000000, 9999999);
p.push(format!("./{}_{}", prefix, nr));
if let Ok(()) = fs::create_dir(&p) {
return Ok(p);
}
}
Err(anyhow!("Couldn't create test directory"))
}
impl TestDir { impl TestDir {
pub fn new() -> Result<TestDir> { pub fn new() -> Result<TestDir> {
let dir = tempdir()?; let dir = mk_dir("test_fixture")?;
Ok(TestDir { dir, file_count: 0 }) Ok(TestDir {
dir,
files: Vec::new(),
clean_up: true,
file_count: 0,
})
} }
pub fn mk_path(&mut self, file: &str) -> PathBuf { pub fn mk_path(&mut self, file: &str) -> PathBuf {
let mut p = PathBuf::new(); let mut p = PathBuf::new();
p.push(&self.dir); p.push(&self.dir);
p.push(PathBuf::from(format!("{:02}_{}", self.file_count, file))); p.push(PathBuf::from(format!("{:02}_{}", self.file_count, file)));
self.files.push(p.clone());
self.file_count += 1; self.file_count += 1;
p p
} }
} }
impl Drop for TestDir {
fn drop(&mut self) {
if self.clean_up {
while let Some(f) = self.files.pop() {
// It's not guaranteed that the path generated was actually created.
let _ignore = fs::remove_file(f);
}
fs::remove_dir(&self.dir).expect("couldn't remove test directory");
}
}
}
//--------------------------------------- //---------------------------------------