-
Notifications
You must be signed in to change notification settings - Fork 164
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement statfs with synthetic values #1118
base: main
Are you sure you want to change the base?
Changes from all commits
89df80a
1a5b59c
e0b9c73
83d94bb
99d7537
4e2e2b4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,82 @@ | ||||||||||||||||||||||||||
use crate::common::fuse::{self, TestSessionCreator}; | ||||||||||||||||||||||||||
use test_case::test_case; | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
/// Tests that non-zero empty space is reported | ||||||||||||||||||||||||||
fn statfs_test_available_nonzero(creator_fn: impl TestSessionCreator, prefix: &str) { | ||||||||||||||||||||||||||
let test_session = creator_fn(prefix, Default::default()); | ||||||||||||||||||||||||||
let mount_dir = test_session.mount_path(); | ||||||||||||||||||||||||||
let stats = nix::sys::statvfs::statvfs(mount_dir.into()).unwrap(); | ||||||||||||||||||||||||||
assert_ne!(stats.blocks_free(), 0); | ||||||||||||||||||||||||||
assert_ne!(stats.blocks_available(), 0); | ||||||||||||||||||||||||||
assert_ne!(stats.blocks(), 0); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
/// Tests that default values from FUSER are reported for mpst fields | ||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is |
||||||||||||||||||||||||||
fn statfs_test_fuser_defaults(creator_fn: impl TestSessionCreator, prefix: &str) { | ||||||||||||||||||||||||||
let test_session = creator_fn(prefix, Default::default()); | ||||||||||||||||||||||||||
let mount_dir = test_session.mount_path(); | ||||||||||||||||||||||||||
let stats = nix::sys::statvfs::statvfs(mount_dir.into()).unwrap(); | ||||||||||||||||||||||||||
//assert_eq!(stats.name_max(), 255); | ||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. drop commented out code |
||||||||||||||||||||||||||
// These five aren't default values but set by us, so maybe drop | ||||||||||||||||||||||||||
assert_eq!(stats.blocks(), u64::MAX / 1024); | ||||||||||||||||||||||||||
assert_eq!(stats.blocks_free(), u64::MAX / 1024); | ||||||||||||||||||||||||||
assert_eq!(stats.blocks_available(), u64::MAX / 1024); | ||||||||||||||||||||||||||
assert_eq!(stats.files(), u64::MAX / 1024); | ||||||||||||||||||||||||||
assert_eq!(stats.files_available(), u64::MAX / 1024); | ||||||||||||||||||||||||||
Comment on lines
+20
to
+25
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd drop these, but actually maybe we just combine with the test above. No need to separate them. |
||||||||||||||||||||||||||
// These are default values from the Default implementation | ||||||||||||||||||||||||||
assert_eq!(stats.block_size(), 512); | ||||||||||||||||||||||||||
assert_eq!(stats.name_max(), 255); | ||||||||||||||||||||||||||
println!("{}", stats.fragment_size().to_string()); | ||||||||||||||||||||||||||
// This may be a bit surprising, however as we set fsize to 0, | ||||||||||||||||||||||||||
// it will be automatically set to the block_size, if it is not available | ||||||||||||||||||||||||||
// c.f. https://stackoverflow.com/questions/54823541/what-do-f-bsize-and-f-frsize-in-struct-statvfs-stand-for | ||||||||||||||||||||||||||
assert_eq!(stats.fragment_size(), 512); | ||||||||||||||||||||||||||
dannycjones marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
/// Test that total blocks >= blocks_free, | ||||||||||||||||||||||||||
/// as some tools rely on calculations with these values to determine percentage of blocks available | ||||||||||||||||||||||||||
fn statfs_test_block_arithmetic(creator_fn: impl TestSessionCreator, prefix: &str) { | ||||||||||||||||||||||||||
let test_session = creator_fn(prefix, Default::default()); | ||||||||||||||||||||||||||
let mount_dir = test_session.mount_path(); | ||||||||||||||||||||||||||
let stats = nix::sys::statvfs::statvfs(mount_dir.into()).unwrap(); | ||||||||||||||||||||||||||
assert!(stats.blocks() >= stats.blocks_available()); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_report_nonzero_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_report_nonzero_test_mock(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_available_nonzero(fuse::mock_session::new, prefix); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[cfg(feature = "s3_tests")] | ||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_report_nonzero_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_report_nonzero_s3(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_available_nonzero(fuse::s3_session::new, prefix); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_report_fuser_defaults_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_report_fuser_defaults_mock(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_fuser_defaults(fuse::mock_session::new, prefix); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[cfg(feature = "s3_tests")] | ||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_report_nonzero_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_report_fuser_defaults_s3(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_available_nonzero(fuse::s3_session::new, prefix); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
Comment on lines
+64
to
+69
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. test case is wrong
Suggested change
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_block_arithmetic_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_block_arithmetic_mock(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_block_arithmetic(fuse::mock_session::new, prefix); | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
#[cfg(feature = "s3_tests")] | ||||||||||||||||||||||||||
#[test_case(""; "no prefix")] | ||||||||||||||||||||||||||
#[test_case("statfs_block_arithmetic_test"; "prefix")] | ||||||||||||||||||||||||||
fn statfs_block_arithmetic_s3(prefix: &str) { | ||||||||||||||||||||||||||
statfs_test_block_arithmetic(fuse::s3_session::new, prefix); | ||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: didn't catch this last time, but we always put Rustdoc comments above macros (so its clear what macros are applied to the struct)
non-blocking