#![cfg(target_os = "windows")]
use std::path::{Path, PathBuf};
#[test]
fn test_volume_path_for_c_drive() {
let p = blazehash::walk_windows_mft::volume_path_for(Path::new("C:\\Users\\test"));
assert_eq!(p, "\\\\.\\C:");
}
#[test]
fn test_volume_path_for_d_drive() {
let p = blazehash::walk_windows_mft::volume_path_for(Path::new("D:\\Evidence\\case1"));
assert_eq!(p, "\\\\.\\D:");
}
#[test]
fn test_volume_path_opt_unc_returns_none() {
let r = blazehash::walk_windows_mft::volume_path_opt(Path::new("\\\\server\\share\\foo"));
assert!(r.is_none());
}
#[test]
fn test_is_elevated_returns_bool_without_panic() {
let _elevated: bool = blazehash::walk_windows_mft::is_elevated();
}
#[test]
fn test_mft_entry_has_path_and_size() {
use blazehash::walk_windows_mft::MftEntry;
let e = MftEntry {
path: PathBuf::from("C:\\Windows\\notepad.exe"),
size: 204_800,
};
assert_eq!(e.size, 204_800);
assert_eq!(e.path.file_name().unwrap(), "notepad.exe");
}
#[test]
fn test_read_mft_results_parses_tsv() {
let dir = tempfile::tempdir().unwrap();
let tsv = dir.path().join("results.tsv");
std::fs::write(&tsv, "1234\tC:\\foo.txt\n5678\tC:\\bar.bin\n").unwrap();
let entries = blazehash::walk_windows_mft::read_mft_results(&tsv).unwrap();
assert_eq!(entries.len(), 2);
assert_eq!(entries[0].size, 1234);
assert_eq!(entries[0].path, PathBuf::from("C:\\foo.txt"));
assert_eq!(entries[1].size, 5678);
}
#[test]
fn test_read_mft_results_ignores_malformed_lines() {
let dir = tempfile::tempdir().unwrap();
let tsv = dir.path().join("r.tsv");
std::fs::write(&tsv, "good\t1234\tC:\\x.txt\nnotab\n\t\n").unwrap();
let entries = blazehash::walk_windows_mft::read_mft_results(&tsv).unwrap();
let _ = entries;
}
#[test]
#[ignore] fn test_enumerate_mft_c_root_nonempty() {
let entries = blazehash::walk_windows_mft::enumerate_mft_sizes(
Path::new("C:\\"),
false, )
.expect("enumerate_mft_sizes failed — are you running as Administrator?");
assert!(!entries.is_empty(), "C:\\ should have at least some files");
for e in &entries {
let _ = e.size; }
}
#[test]
#[ignore]
fn test_enumerate_mft_windows_dir_recursive() {
let entries = blazehash::walk_windows_mft::enumerate_mft_sizes(Path::new("C:\\Windows"), true)
.expect("must run as Administrator");
assert!(entries.len() > 100, "expected many files under C:\\Windows");
for e in &entries {
assert!(
e.path.starts_with("C:\\Windows"),
"unexpected path: {}",
e.path.display()
);
}
}
#[test]
#[ignore] fn test_spawn_elevated_worker_writes_results() {
let dir = tempfile::tempdir().unwrap();
let outfile = dir.path().join("mft_out.tsv");
blazehash::walk_windows_mft::spawn_elevated_mft_worker(
Path::new("C:\\Windows"),
false,
&outfile,
)
.expect("elevation failed or cancelled");
assert!(outfile.exists(), "worker should have written results");
let entries = blazehash::walk_windows_mft::read_mft_results(&outfile).unwrap();
assert!(!entries.is_empty());
}