[thin_dump/thin_repair/thin_restore (rust)] Fix errors in tests
- Move error messages to stderr - Fix the transaction_id and data_block_size in test fixture, and check the data_block_size in thin_restore. - Disable the missing_something tests for Rust. The transaction_id and nr_data_blocks now could be recovered automatically. - Limit the use of override options in test cases. Only broken superblocks could be overridden, and the provided values should be compatible to the original metadata. - Remove unused option
This commit is contained in:
parent
c133e62353
commit
d436f35ed3
@ -138,7 +138,7 @@ fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if let Err(reason) = dump(opts) {
|
if let Err(reason) = dump(opts) {
|
||||||
println!("{}", reason);
|
eprintln!("{}", reason);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,13 +43,6 @@ fn main() {
|
|||||||
.long("output")
|
.long("output")
|
||||||
.value_name("FILE")
|
.value_name("FILE")
|
||||||
.required(true),
|
.required(true),
|
||||||
)
|
|
||||||
.arg(
|
|
||||||
Arg::with_name("OVERRIDE_MAPPING_ROOT")
|
|
||||||
.help("Specify a mapping root to use")
|
|
||||||
.long("override-mapping-root")
|
|
||||||
.value_name("OVERRIDE_MAPPING_ROOT")
|
|
||||||
.takes_value(true),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let matches = parser.get_matches();
|
let matches = parser.get_matches();
|
||||||
|
@ -207,6 +207,10 @@ impl<'a> MetadataVisitor for Restorer<'a> {
|
|||||||
return Err(anyhow!("duplicated superblock"));
|
return Err(anyhow!("duplicated superblock"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !(128..=2097152).contains(&sb.data_block_size) || (sb.data_block_size & 0x7F != 0) {
|
||||||
|
return Err(anyhow!("invalid data block size"));
|
||||||
|
}
|
||||||
|
|
||||||
self.sb = Some(sb.clone());
|
self.sb = Some(sb.clone());
|
||||||
self.data_sm = Some(core_sm(sb.nr_data_blocks, u32::MAX));
|
self.data_sm = Some(core_sm(sb.nr_data_blocks, u32::MAX));
|
||||||
let b = self.w.alloc()?;
|
let b = self.w.alloc()?;
|
||||||
|
@ -29,10 +29,10 @@ fn common_sb(nr_blocks: u64) -> ir::Superblock {
|
|||||||
ir::Superblock {
|
ir::Superblock {
|
||||||
uuid: "".to_string(),
|
uuid: "".to_string(),
|
||||||
time: 0,
|
time: 0,
|
||||||
transaction: 0,
|
transaction: 1,
|
||||||
flags: None,
|
flags: None,
|
||||||
version: None,
|
version: None,
|
||||||
data_block_size: 32,
|
data_block_size: 128,
|
||||||
nr_data_blocks: nr_blocks,
|
nr_data_blocks: nr_blocks,
|
||||||
metadata_snap: None,
|
metadata_snap: None,
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::fs::OpenOptions;
|
use std::fs::OpenOptions;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::str::from_utf8;
|
|
||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
|
|
||||||
@ -129,6 +128,7 @@ fn no_stderr() -> Result<()> {
|
|||||||
// test superblock overriding & repair
|
// test superblock overriding & repair
|
||||||
// TODO: share with thin_repair
|
// TODO: share with thin_repair
|
||||||
|
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
@ -137,21 +137,24 @@ fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
|||||||
if !cfg!(feature = "rust_tests") {
|
if !cfg!(feature = "rust_tests") {
|
||||||
assert_eq!(output.stderr.len(), 0);
|
assert_eq!(output.stderr.len(), 0);
|
||||||
}
|
}
|
||||||
assert!(from_utf8(&output.stdout[0..])?.contains(pattern));
|
assert!(std::str::from_utf8(&output.stdout[0..])?.contains(pattern));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_transaction_id() -> Result<()> {
|
fn override_transaction_id() -> Result<()> {
|
||||||
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_data_block_size() -> Result<()> {
|
fn override_data_block_size() -> Result<()> {
|
||||||
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_nr_data_blocks() -> Result<()> {
|
fn override_nr_data_blocks() -> Result<()> {
|
||||||
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
||||||
}
|
}
|
||||||
@ -161,24 +164,16 @@ fn override_nr_data_blocks() -> Result<()> {
|
|||||||
fn repair_superblock() -> Result<()> {
|
fn repair_superblock() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
let before = run_ok_raw(
|
let before = run_ok_raw(THIN_DUMP, args![&md])?;
|
||||||
THIN_DUMP,
|
|
||||||
args![
|
|
||||||
"--transaction-id=5",
|
|
||||||
"--data-block-size=128",
|
|
||||||
"--nr-data-blocks=4096000",
|
|
||||||
&md
|
|
||||||
],
|
|
||||||
)?;
|
|
||||||
damage_superblock(&md)?;
|
damage_superblock(&md)?;
|
||||||
|
|
||||||
let after = run_ok_raw(
|
let after = run_ok_raw(
|
||||||
THIN_DUMP,
|
THIN_DUMP,
|
||||||
args![
|
args![
|
||||||
"--repair",
|
"--repair",
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
&md
|
&md
|
||||||
],
|
],
|
||||||
)?;
|
)?;
|
||||||
@ -195,6 +190,7 @@ fn repair_superblock() -> Result<()> {
|
|||||||
// TODO: share with thin_repair
|
// TODO: share with thin_repair
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn missing_transaction_id() -> Result<()> {
|
fn missing_transaction_id() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
@ -204,7 +200,7 @@ fn missing_transaction_id() -> Result<()> {
|
|||||||
args![
|
args![
|
||||||
"--repair",
|
"--repair",
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
&md
|
&md
|
||||||
],
|
],
|
||||||
)?;
|
)?;
|
||||||
@ -221,8 +217,8 @@ fn missing_data_block_size() -> Result<()> {
|
|||||||
THIN_DUMP,
|
THIN_DUMP,
|
||||||
args![
|
args![
|
||||||
"--repair",
|
"--repair",
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
&md
|
&md
|
||||||
],
|
],
|
||||||
)?;
|
)?;
|
||||||
@ -231,6 +227,7 @@ fn missing_data_block_size() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn missing_nr_data_blocks() -> Result<()> {
|
fn missing_nr_data_blocks() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md = mk_valid_md(&mut td)?;
|
let md = mk_valid_md(&mut td)?;
|
||||||
@ -239,7 +236,7 @@ fn missing_nr_data_blocks() -> Result<()> {
|
|||||||
THIN_DUMP,
|
THIN_DUMP,
|
||||||
args![
|
args![
|
||||||
"--repair",
|
"--repair",
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
&md
|
&md
|
||||||
],
|
],
|
||||||
|
@ -116,6 +116,7 @@ fn dont_repair_xml() -> Result<()> {
|
|||||||
|
|
||||||
// TODO: share with thin_dump
|
// TODO: share with thin_dump
|
||||||
|
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_thing(flag: &str, val: &str, pattern: &str) -> Result<()> {
|
fn override_thing(flag: &str, val: &str, pattern: &str) -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md1 = mk_valid_md(&mut td)?;
|
let md1 = mk_valid_md(&mut td)?;
|
||||||
@ -128,16 +129,19 @@ fn override_thing(flag: &str, val: &str, pattern: &str) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_transaction_id() -> Result<()> {
|
fn override_transaction_id() -> Result<()> {
|
||||||
override_thing("--transaction-id", "2345", "transaction=\"2345\"")
|
override_thing("--transaction-id", "2345", "transaction=\"2345\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_data_block_size() -> Result<()> {
|
fn override_data_block_size() -> Result<()> {
|
||||||
override_thing("--data-block-size", "8192", "data_block_size=\"8192\"")
|
override_thing("--data-block-size", "8192", "data_block_size=\"8192\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_nr_data_blocks() -> Result<()> {
|
fn override_nr_data_blocks() -> Result<()> {
|
||||||
override_thing("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
override_thing("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
||||||
}
|
}
|
||||||
@ -147,15 +151,7 @@ fn override_nr_data_blocks() -> Result<()> {
|
|||||||
fn superblock_succeeds() -> Result<()> {
|
fn superblock_succeeds() -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let md1 = mk_valid_md(&mut td)?;
|
let md1 = mk_valid_md(&mut td)?;
|
||||||
let original = run_ok_raw(
|
let original = run_ok_raw(THIN_DUMP, args![&md1])?;
|
||||||
THIN_DUMP,
|
|
||||||
args![
|
|
||||||
"--transaction-id=5",
|
|
||||||
"--data-block-size=128",
|
|
||||||
"--nr-data-blocks=4096000",
|
|
||||||
&md1
|
|
||||||
],
|
|
||||||
)?;
|
|
||||||
if !cfg!(feature = "rust_tests") {
|
if !cfg!(feature = "rust_tests") {
|
||||||
assert_eq!(original.stderr.len(), 0);
|
assert_eq!(original.stderr.len(), 0);
|
||||||
}
|
}
|
||||||
@ -164,9 +160,9 @@ fn superblock_succeeds() -> Result<()> {
|
|||||||
run_ok(
|
run_ok(
|
||||||
THIN_REPAIR,
|
THIN_REPAIR,
|
||||||
args![
|
args![
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
"-i",
|
"-i",
|
||||||
&md1,
|
&md1,
|
||||||
"-o",
|
"-o",
|
||||||
@ -196,10 +192,11 @@ fn missing_thing(flag1: &str, flag2: &str, pattern: &str) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn missing_transaction_id() -> Result<()> {
|
fn missing_transaction_id() -> Result<()> {
|
||||||
missing_thing(
|
missing_thing(
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
"transaction id",
|
"transaction id",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -207,16 +204,17 @@ fn missing_transaction_id() -> Result<()> {
|
|||||||
#[test]
|
#[test]
|
||||||
fn missing_data_block_size() -> Result<()> {
|
fn missing_data_block_size() -> Result<()> {
|
||||||
missing_thing(
|
missing_thing(
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--nr-data-blocks=4096000",
|
"--nr-data-blocks=20480",
|
||||||
"data block size",
|
"data block size",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn missing_nr_data_blocks() -> Result<()> {
|
fn missing_nr_data_blocks() -> Result<()> {
|
||||||
missing_thing(
|
missing_thing(
|
||||||
"--transaction-id=5",
|
"--transaction-id=1",
|
||||||
"--data-block-size=128",
|
"--data-block-size=128",
|
||||||
"nr data blocks",
|
"nr data blocks",
|
||||||
)
|
)
|
||||||
|
@ -124,7 +124,7 @@ fn accepts_quiet() -> Result<()> {
|
|||||||
//-----------------------------------------
|
//-----------------------------------------
|
||||||
|
|
||||||
// TODO: share with thin_dump
|
// TODO: share with thin_dump
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
||||||
let mut td = TestDir::new()?;
|
let mut td = TestDir::new()?;
|
||||||
let xml = mk_valid_xml(&mut td)?;
|
let xml = mk_valid_xml(&mut td)?;
|
||||||
@ -138,16 +138,19 @@ fn override_something(flag: &str, value: &str, pattern: &str) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_transaction_id() -> Result<()> {
|
fn override_transaction_id() -> Result<()> {
|
||||||
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
override_something("--transaction-id", "2345", "transaction=\"2345\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_data_block_size() -> Result<()> {
|
fn override_data_block_size() -> Result<()> {
|
||||||
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
override_something("--data-block-size", "8192", "data_block_size=\"8192\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[cfg(not(feature = "rust_tests"))]
|
||||||
fn override_nr_data_blocks() -> Result<()> {
|
fn override_nr_data_blocks() -> Result<()> {
|
||||||
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
override_something("--nr-data-blocks", "234500", "nr_data_blocks=\"234500\"")
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user