diff --git a/tests/common/mod.rs b/tests/common/mod.rs index b9fe1f8..52ee3e1 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -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 { + 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 { @@ -61,16 +75,16 @@ pub fn run_fail(command: Expression) -> Result { Ok(from_utf8(&output.stderr[0..]).unwrap().to_string()) } -pub fn mk_valid_xml(dir: &TempDir) -> Result { - let xml = mk_path(dir.path(), "meta.xml"); +pub fn mk_valid_xml(td: &mut TestDir) -> Result { + 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 { - 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 { + 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 { Ok(md) } -pub fn mk_zeroed_md(dir: &TempDir) -> Result { - let md = mk_path(dir.path(), "meta.bin"); +pub fn mk_zeroed_md(td: &mut TestDir) -> Result { + 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(()) } diff --git a/tests/thin_check.rs b/tests/thin_check.rs index cf59d0f..42caba6 100644 --- a/tests/thin_check.rs +++ b/tests/thin_check.rs @@ -72,8 +72,8 @@ fn accepts_clear_needs_check_flag() -> Result<()> { #[test] fn accepts_quiet() -> Result<()> { - let dir = tempdir()?; - let md = mk_valid_md(&dir)?; + let mut td = TestDir::new()?; + let md = mk_valid_md(&mut td)?; let output = thin_check!("--quiet", &md).run()?; assert!(output.status.success()); @@ -84,8 +84,8 @@ fn accepts_quiet() -> Result<()> { #[test] fn detects_corrupt_superblock_with_superblock_only() -> Result<()> { - let dir = tempdir()?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let md = mk_zeroed_md(&mut td)?; let output = thin_check!("--super-block-only", &md).unchecked().run()?; assert!(!output.status.success()); Ok(()) @@ -93,8 +93,8 @@ fn detects_corrupt_superblock_with_superblock_only() -> Result<()> { #[test] fn prints_help_message_for_tiny_metadata() -> Result<()> { - let dir = tempdir()?; - let md = mk_path(dir.path(), "meta.bin"); + let mut td = TestDir::new()?; + let md = td.mk_path("meta.bin"); let _file = file_utils::create_sized_file(&md, 1024); let stderr = run_fail(thin_check!(&md))?; assert!(stderr.contains("Metadata device/file too small. Is this binary metadata?")); @@ -103,8 +103,8 @@ fn prints_help_message_for_tiny_metadata() -> Result<()> { #[test] fn spot_xml_data() -> Result<()> { - let dir = tempdir()?; - let xml = mk_path(dir.path(), "meta.xml"); + let mut td = TestDir::new()?; + let xml = td.mk_path("meta.xml"); let mut gen = FragmentedS::new(4, 10240); write_xml(&xml, &mut gen)?; @@ -119,8 +119,8 @@ fn spot_xml_data() -> Result<()> { #[test] fn prints_info_fields() -> Result<()> { - let dir = tempdir()?; - let md = mk_valid_md(&dir)?; + let mut td = TestDir::new()?; + let md = mk_valid_md(&mut td)?; let stdout = thin_check!(&md).read()?; assert!(stdout.contains("TRANSACTION_ID=")); assert!(stdout.contains("METADATA_FREE_BLOCKS=")); diff --git a/tests/thin_restore.rs b/tests/thin_restore.rs index 96396bc..e8861bc 100644 --- a/tests/thin_restore.rs +++ b/tests/thin_restore.rs @@ -45,8 +45,8 @@ fn accepts_help() -> Result<()> { #[test] fn no_input_file() -> Result<()> { - let dir = tempdir()?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let md = mk_zeroed_md(&mut td)?; let stderr = run_fail(thin_restore!("-o", &md))?; assert!(stderr.contains("No input file provided.")); Ok(()) @@ -54,8 +54,8 @@ fn no_input_file() -> Result<()> { #[test] fn missing_input_file() -> Result<()> { - let dir = tempdir()?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let md = mk_zeroed_md(&mut td)?; let stderr = run_fail(thin_restore!("-i", "no-such-file", "-o", &md))?; assert!(superblock_all_zeroes(&md)?); assert!(stderr.contains("Couldn't stat file")); @@ -64,9 +64,9 @@ fn missing_input_file() -> Result<()> { #[test] fn garbage_input_file() -> Result<()> { - let dir = tempdir()?; - let xml = mk_zeroed_md(&dir)?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let xml = mk_zeroed_md(&mut td)?; + let md = mk_zeroed_md(&mut td)?; let _stderr = run_fail(thin_restore!("-i", &xml, "-o", &md))?; assert!(superblock_all_zeroes(&md)?); Ok(()) @@ -74,8 +74,8 @@ fn garbage_input_file() -> Result<()> { #[test] fn no_output_file() -> Result<()> { - let dir = tempdir()?; - let xml = mk_valid_xml(&dir)?; + let mut td = TestDir::new()?; + let xml = mk_valid_xml(&mut td)?; let stderr = run_fail(thin_restore!("-i", &xml))?; assert!(stderr.contains("No output file provided.")); Ok(()) @@ -83,20 +83,19 @@ fn no_output_file() -> Result<()> { #[test] fn tiny_output_file() -> Result<()> { - let dir = tempdir()?; - let xml = mk_valid_xml(&dir)?; - let md = mk_path(dir.path(), "meta.bin"); + let mut td = TestDir::new()?; + let xml = mk_valid_xml(&mut td)?; + let md = td.mk_path("meta.bin"); let _file = file_utils::create_sized_file(&md, 4096); let stderr = run_fail(thin_restore!("-i", &xml, "-o", &md))?; - eprintln!("{}", stderr); assert!(stderr.contains("Output file too small")); Ok(()) } fn quiet_flag(flag: &str) -> Result<()> { - let dir = tempdir()?; - let xml = mk_valid_xml(&dir)?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let xml = mk_valid_xml(&mut td)?; + let md = mk_zeroed_md(&mut td)?; let output = thin_restore!("-i", &xml, "-o", &md, flag).run()?; @@ -117,9 +116,9 @@ fn accepts_quiet() -> Result<()> { } fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> { - let dir = tempdir()?; - let xml = mk_valid_xml(&dir)?; - let md = mk_zeroed_md(&dir)?; + let mut td = TestDir::new()?; + let xml = mk_valid_xml(&mut td)?; + let md = mk_zeroed_md(&mut td)?; thin_restore!("-i", &xml, "-o", &md, flag, value).run()?; diff --git a/tests/thin_shrink.rs b/tests/thin_shrink.rs index 5686525..8efae51 100644 --- a/tests/thin_shrink.rs +++ b/tests/thin_shrink.rs @@ -10,9 +10,9 @@ use thinp::file_utils; use thinp::thin::xml::{self, Visit}; mod common; -use common::mk_path; +use common::*; use common::xml_generator::{ - write_xml, EmptyPoolS, FragmentedS, SingleThinS, SnapS, XmlGen, + write_xml, EmptyPoolS, FragmentedS, SingleThinS, SnapS, XmlGen }; //------------------------------------ @@ -296,10 +296,10 @@ fn test_shrink(scenario: &mut S) -> Result<()> where S: Scenario + XmlGen, { - let dir = tempdir()?; - let xml_before = mk_path(dir.path(), "before.xml"); - let xml_after = mk_path(dir.path(), "after.xml"); - let data_path = mk_path(dir.path(), "metadata.bin"); + let mut td = TestDir::new()?; + let xml_before = td.mk_path("before.xml"); + let xml_after = td.mk_path("after.xml"); + let data_path = td.mk_path("metadata.bin"); write_xml(&xml_before, scenario)?; create_data_file(&data_path, &xml_before)?;