use super::*;
use test_log::test;
#[test]
fn vlog_recovery_missing_blob_file_returns_unrecoverable() {
let dir = tempfile::tempdir().unwrap();
let result = recover_blob_files(
dir.path(),
&[(0, Checksum::from_raw(0))],
0,
None,
&(Arc::new(crate::fs::StdFs) as Arc<dyn crate::fs::Fs>),
);
assert!(matches!(result, Err(crate::Error::Unrecoverable)));
}
#[test]
fn vlog_recovery_nonexistent_folder_no_ids_returns_empty() {
let dir = tempfile::tempdir().unwrap();
let missing = dir.path().join("no_such_dir");
let (blob_files, orphans) = recover_blob_files(
&missing,
&[],
0,
None,
&(Arc::new(crate::fs::StdFs) as Arc<dyn crate::fs::Fs>),
)
.unwrap();
assert!(blob_files.is_empty());
assert!(orphans.is_empty());
}
#[test]
fn vlog_recovery_nonexistent_folder_with_ids_returns_unrecoverable() {
let dir = tempfile::tempdir().unwrap();
let missing = dir.path().join("no_such_dir");
let result = recover_blob_files(
&missing,
&[(0, Checksum::from_raw(0))],
0,
None,
&(Arc::new(crate::fs::StdFs) as Arc<dyn crate::fs::Fs>),
);
assert!(matches!(result, Err(crate::Error::Unrecoverable)));
}
#[test]
fn recover_blob_file_on_non_blob_file_errors() {
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("000042");
std::fs::write(&path, b"this is not a blob file").unwrap();
let fs: Arc<dyn crate::fs::Fs> = Arc::new(crate::fs::StdFs);
let result = recover_blob_file(path.as_path(), 42, Checksum::from_raw(0), 0, &fs);
assert!(result.is_err(), "recovering a non-blob file must fail");
}