#![allow(clippy::unwrap_used, clippy::expect_used)]
use ntfs_core::BootSector;
const REAL_BOOT: &[u8] = include_bytes!("data/defcon2018_cdrive_boot.bin");
#[test]
fn parses_real_ntfs_boot_sector_matching_tsk() {
let boot = BootSector::parse(REAL_BOOT).expect("real NTFS boot sector must parse");
assert_eq!(boot.bytes_per_sector, 512, "sector size");
assert_eq!(boot.cluster_size(), 4096, "cluster size");
assert_eq!(boot.sectors_per_cluster, 8, "4096 / 512");
assert_eq!(boot.mft_record_size, 1024, "MFT entry size");
assert_eq!(boot.index_record_size, 4096, "index record size");
assert_eq!(boot.mft_lcn, 786_432, "first cluster of $MFT");
assert_eq!(boot.mftmirr_lcn, 2, "first cluster of $MFTMirr");
assert_eq!(boot.volume_serial, 0x326C_195B_6C19_1B65, "volume serial");
assert_eq!(boot.mft_byte_offset(), 786_432 * 4096);
}
#[test]
#[ignore = "requires NTFS_FORENSIC_TEST_IMAGE pointing at a raw NTFS partition"]
fn opens_raw_partition_image() {
use ntfs_core::NtfsFs;
use std::fs::File;
let path = match std::env::var("NTFS_FORENSIC_TEST_IMAGE") {
Ok(p) => p,
Err(_) => return,
};
let mut fs = NtfsFs::open(File::open(&path).expect("open image")).expect("parse NTFS volume");
let mft = fs.read_record(0).expect("read $MFT record");
let hdr = ntfs_core::MftRecordHeader::parse(&mft).expect("parse $MFT header");
assert!(hdr.is_in_use(), "$MFT must be in use");
assert!(hdr.is_base_record(), "$MFT must be a base record");
let root = fs.read_record(5).expect("read root record");
let entries = fs.directory_entries(&root).expect("list root directory");
assert!(!entries.is_empty(), "root directory should not be empty");
for n in 0..64 {
if let Ok(buf) = fs.read_record(n) {
let _ = ntfs_core::MftRecordHeader::parse(&buf);
}
}
}