|
| 1 | +#![cfg(target_os="linux")] |
| 2 | +use fatfs::Write; |
| 3 | + |
| 4 | +const KB: u32 = 1024; |
| 5 | +const MB: u32 = KB * 1024; |
| 6 | + |
| 7 | +#[test] |
| 8 | +fn test_fsck_1mb() { |
| 9 | + let _ = env_logger::builder().is_test(true).try_init(); |
| 10 | + |
| 11 | + let mut image = std::fs::OpenOptions::new() |
| 12 | + .write(true) |
| 13 | + .read(true) |
| 14 | + .create(true) |
| 15 | + .open("/tmp/test.img") |
| 16 | + .expect("open temporary image file"); |
| 17 | + image.set_len(MB as u64).expect("set_len on temp file"); |
| 18 | + |
| 19 | + fatfs::format_volume( |
| 20 | + &mut fatfs::StdIoWrapper::from(image.try_clone().expect("clone tempfile")), |
| 21 | + fatfs::FormatVolumeOptions::new().total_sectors(MB / 512), |
| 22 | + ) |
| 23 | + .expect("format volume"); |
| 24 | + |
| 25 | + let fs = fatfs::FileSystem::new(image, fatfs::FsOptions::new()).expect("open fs"); |
| 26 | + fs.root_dir().create_dir("dir1").expect("create dir1"); |
| 27 | + fs.root_dir() |
| 28 | + .create_file("root file.bin") |
| 29 | + .expect("create root file") |
| 30 | + .write_all(&[0xab; (16 * KB) as usize]) |
| 31 | + .expect("root file write"); |
| 32 | + let dir2 = fs.root_dir().create_dir("dir2").expect("create dir2"); |
| 33 | + dir2.create_dir("subdir").expect("subdir"); |
| 34 | + dir2.create_file("file1") |
| 35 | + .expect("file1") |
| 36 | + .write_all(b"testing 1 2 1 2") |
| 37 | + .expect("file 1 write"); |
| 38 | + core::mem::drop(dir2); |
| 39 | + core::mem::drop(fs); |
| 40 | + |
| 41 | + let fsck_status = std::process::Command::new("fsck.vfat") |
| 42 | + .args(&["-n", "/tmp/test.img"]) |
| 43 | + .spawn() |
| 44 | + .expect("spawn fsck") |
| 45 | + .wait() |
| 46 | + .expect("wait on fsck"); |
| 47 | + assert!(fsck_status.success(), "fsck was not successful ({fsck_status:?})"); |
| 48 | +} |
0 commit comments