From 7466cd71828957e033ed4d02380817adb8760028 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 14 Aug 2020 10:54:31 +0100 Subject: [PATCH] [functional-tests (rust)] TestDir now creates dir in ./ O_DIRECT doesn't work with /tmp/ --- tests/common/test_dir.rs | 46 ++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/tests/common/test_dir.rs b/tests/common/test_dir.rs index 91a4b62..a56e2b7 100644 --- a/tests/common/test_dir.rs +++ b/tests/common/test_dir.rs @@ -1,27 +1,61 @@ -use anyhow::Result; -use std::path::{PathBuf}; -use tempfile::{tempdir, TempDir}; +use anyhow::{anyhow, Result}; +use rand::prelude::*; +use std::fs; +use std::path::PathBuf; //--------------------------------------- pub struct TestDir { - dir: TempDir, + dir: PathBuf, + files: Vec, + clean_up: bool, file_count: usize, } +fn mk_dir(prefix: &str) -> Result { + 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 { pub fn new() -> Result { - let dir = tempdir()?; - Ok(TestDir { dir, file_count: 0 }) + let dir = mk_dir("test_fixture")?; + Ok(TestDir { + dir, + files: Vec::new(), + clean_up: true, + 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.files.push(p.clone()); self.file_count += 1; 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"); + } + } +} + //---------------------------------------