mod common;
use fast_ntfs::{Ntfs, NtfsError};
fn root_directory_record_position() -> usize {
let mut fs = common::testfs1();
let ntfs = Ntfs::new(&mut fs).unwrap();
ntfs.root_directory(&mut fs)
.unwrap()
.position()
.value()
.unwrap()
.get() as usize
}
#[test]
fn rejects_update_sequence_count_that_does_not_cover_the_record() {
let record_position = root_directory_record_position();
let mut fs = common::testfs1();
fs.get_mut()[record_position + 6..record_position + 8].copy_from_slice(&1u16.to_le_bytes());
let ntfs = Ntfs::new(&mut fs).unwrap();
let error = ntfs.root_directory(&mut fs).unwrap_err();
assert!(matches!(
error,
NtfsError::InvalidUpdateSequenceCount {
update_sequence_count: 1,
..
}
));
}
#[test]
fn rejects_unaligned_update_sequence_array_offset() {
let record_position = root_directory_record_position();
let mut fs = common::testfs1();
fs.get_mut()[record_position + 4..record_position + 6].copy_from_slice(&49u16.to_le_bytes());
let ntfs = Ntfs::new(&mut fs).unwrap();
let error = ntfs.root_directory(&mut fs).unwrap_err();
assert!(matches!(
error,
NtfsError::InvalidUpdateSequenceArrayOffset { offset: 49, .. }
));
}
#[test]
fn rejects_mismatched_update_sequence_number() {
let record_position = root_directory_record_position();
let mut fs = common::testfs1();
let trailer_position = record_position + 512 - 2;
fs.get_mut()[trailer_position..trailer_position + 2].copy_from_slice(&[0, 0]);
let ntfs = Ntfs::new(&mut fs).unwrap();
let error = ntfs.root_directory(&mut fs).unwrap_err();
assert!(matches!(
error,
NtfsError::UpdateSequenceNumberMismatch { .. }
));
}