• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use nix::sys::statfs::*;
2 use nix::sys::statvfs::*;
3 use std::fs::File;
4 use std::path::Path;
5 
check_fstatfs(path: &str)6 fn check_fstatfs(path: &str) {
7     if !Path::new(path).exists() {
8         return;
9     }
10     let vfs = statvfs(path.as_bytes()).unwrap();
11     let file = File::open(path).unwrap();
12     let fs = fstatfs(&file).unwrap();
13     assert_fs_equals(fs, vfs);
14 }
15 
check_statfs(path: &str)16 fn check_statfs(path: &str) {
17     if !Path::new(path).exists() {
18         return;
19     }
20     let vfs = statvfs(path.as_bytes()).unwrap();
21     let fs = statfs(path.as_bytes()).unwrap();
22     assert_fs_equals(fs, vfs);
23 }
24 
check_fstatfs_strict(path: &str)25 fn check_fstatfs_strict(path: &str) {
26     if !Path::new(path).exists() {
27         return;
28     }
29     let vfs = statvfs(path.as_bytes());
30     let file = File::open(path).unwrap();
31     let fs = fstatfs(&file);
32     assert_fs_equals_strict(fs.unwrap(), vfs.unwrap())
33 }
34 
check_statfs_strict(path: &str)35 fn check_statfs_strict(path: &str) {
36     if !Path::new(path).exists() {
37         return;
38     }
39     let vfs = statvfs(path.as_bytes());
40     let fs = statfs(path.as_bytes());
41     assert_fs_equals_strict(fs.unwrap(), vfs.unwrap())
42 }
43 
44 // The cast is not unnecessary on all platforms.
45 #[allow(clippy::unnecessary_cast)]
assert_fs_equals(fs: Statfs, vfs: Statvfs)46 fn assert_fs_equals(fs: Statfs, vfs: Statvfs) {
47     assert_eq!(fs.blocks() as u64, vfs.blocks() as u64);
48     assert_eq!(fs.block_size() as u64, vfs.fragment_size() as u64);
49 }
50 
51 #[test]
statfs_call()52 fn statfs_call() {
53     check_statfs("/tmp");
54     check_statfs("/dev");
55     check_statfs("/run");
56     check_statfs("/");
57 }
58 
59 #[test]
fstatfs_call()60 fn fstatfs_call() {
61     check_fstatfs("/tmp");
62     check_fstatfs("/dev");
63     check_fstatfs("/run");
64     check_fstatfs("/");
65 }
66 
67 // This test is ignored because files_free/blocks_free can change after statvfs call and before
68 // statfs call.
69 #[test]
70 #[ignore]
statfs_call_strict()71 fn statfs_call_strict() {
72     check_statfs_strict("/tmp");
73     check_statfs_strict("/dev");
74     check_statfs_strict("/run");
75     check_statfs_strict("/");
76 }
77 
78 // This test is ignored because files_free/blocks_free can change after statvfs call and before
79 // fstatfs call.
80 #[test]
81 #[ignore]
fstatfs_call_strict()82 fn fstatfs_call_strict() {
83     check_fstatfs_strict("/tmp");
84     check_fstatfs_strict("/dev");
85     check_fstatfs_strict("/run");
86     check_fstatfs_strict("/");
87 }
88 
89 // The cast is not unnecessary on all platforms.
90 #[allow(clippy::unnecessary_cast)]
assert_fs_equals_strict(fs: Statfs, vfs: Statvfs)91 fn assert_fs_equals_strict(fs: Statfs, vfs: Statvfs) {
92     assert_eq!(fs.files_free() as u64, vfs.files_free() as u64);
93     assert_eq!(fs.blocks_free() as u64, vfs.blocks_free() as u64);
94     assert_eq!(fs.blocks_available() as u64, vfs.blocks_available() as u64);
95     assert_eq!(fs.files() as u64, vfs.files() as u64);
96     assert_eq!(fs.blocks() as u64, vfs.blocks() as u64);
97     assert_eq!(fs.block_size() as u64, vfs.fragment_size() as u64);
98 }
99