Skip to content

Commit bd40fe2

Browse files
badicsalexrafalh
authored andcommitted
tests: add fsck test
1 parent 07ef957 commit bd40fe2

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/fsck.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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

Comments
 (0)