mod common;
use std::io::Cursor;
use std::sync::{Arc, Barrier};
use fast_ntfs::{KnownNtfsFileRecordNumber, Ntfs};
fn assert_send_sync<T: Send + Sync>() {}
#[test]
fn ntfs_is_send_and_sync_with_std() {
assert_send_sync::<Ntfs>();
}
#[test]
fn immutable_caches_can_be_initialized_concurrently() {
const THREADS: usize = 8;
let image = common::testfs1().into_inner();
let mut boot_reader = Cursor::new(image.clone());
let ntfs = Arc::new(Ntfs::new(&mut boot_reader).unwrap());
let barrier = Arc::new(Barrier::new(THREADS));
let handles: Vec<_> = (0..THREADS)
.map(|_| {
let image = image.clone();
let ntfs = Arc::clone(&ntfs);
let barrier = Arc::clone(&barrier);
std::thread::spawn(move || {
let mut reader = Cursor::new(image);
barrier.wait();
ntfs.read_mft_runs(&mut reader).unwrap();
ntfs.read_upcase_table(&mut reader).unwrap();
let root = ntfs.root_directory(&mut reader).unwrap();
assert_eq!(
root.file_record_number(),
KnownNtfsFileRecordNumber::RootDirectory as u64
);
})
})
.collect();
for handle in handles {
handle.join().unwrap();
}
}